[ICEsugar][Develop] Soporte de la placa Icesugar en apio / Icestudio

386 views
Skip to first unread message

Obijuan

unread,
Nov 10, 2020, 1:32:32 PM11/10/20
to FPGAwars: explorando el lado libre

Hola,

A comienzos de octubre el usuario aalku pidió más información[1] sobre cómo integrar un programador en apio para que funcione la placa icesugar


También integró la placa en apio[2], a falta de meter la toolchain de programación. He abierto este issue para ir documentando las pruebas,


y aprovechar para recopilar todo lo necesario y dejarlo documentado en la wiki

Si alguien tiene esta placa, sería genial si puede ayudar en las pruebas

El primer paso es integrar un ejemplo "hola mundo" en el repo apio-examples:


para que se pueda cargar fácilmente con apio examples

En cuanto lo tenga lo pondré aquí para que lo probéis los que podáis

Muchas gracias

Saludos, Obijuan

charli va

unread,
Nov 10, 2020, 1:37:40 PM11/10/20
to fpga-wars-explora...@googlegroups.com
Gracias por el update Obijuan! Aalku ha hecho un gran trabajo enhorabuena!

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/f3a9408e-836c-4b28-9dab-634ef119008dn%40googlegroups.com.

Obijuan

unread,
Nov 11, 2020, 1:59:34 AM11/11/20
to FPGAwars: explorando el lado libre
Ya está subido el ejemplo "hola mundo": el parpadeo de un led (Blinky) en el paquete apio-examples

Para probarlo hay que hacer lo siguiente (supongo que ya se tiene instalada la versión de desarrollo de apio: 0.5.5)

* Instalar la nueva versión del paquete apio-examples:

$ apio install examples

* Con este comando puedes comprobar todos los paquetes de apio instalados. El último de los ejemplos es el 0.0.19. Este es el que contiene el blinky para la icesugar

$ apio install -l

Installed packages:

----------------------------------------------------------------------------------------------------------------------------------------------------------------
Name        Description                    Version
----------------------------------------------------------------------------------------------------------------------------------------------------------------
ecp5        Lattice ECP5 toolchain         2019.12.11
examples    Verilog examples               0.0.19  
fujprog     Programmer for ULX2/3S boards  2020.10.6
ice40       Lattice ICE40 toolchain        2019.12.11
iverilog    Icarus Verilog toolchain       1.1.1   
scons       Scons tool                     3.0.1   
system      System tools                   1.1.1   
verilator   Verilator toolchain            1.0.0   
yosys       Yosys toolchain                2019.12.11

Not installed packages:

----------------------------------------------------------------------------------------------------------------------------------------------------------------
Name        Description                   
----------------------------------------------------------------------------------------------------------------------------------------------------------------
icesprog    apio package for iCESugar board programme

* Para listar todos los ejemplos ejecutar este comando:

$ apio examples -l

Aparecerán muchos ejemplos, entre ellos:

iCESugar_1_5/Blinky
----------------------------------------------------------------------------------------------------------------------------------------------------------------
 Blink the on board Red, Green and Blue LEDs

* Obtener una copia del Blinky para icesugar

$ apio examples -d iCESugar_1_5/Blinky

* Acceder al directorio del ejemplo

$ cd iCESugar_1_5/Blinky

* En ese directorio estarán estos ficheros:
$ ls
apio.ini  blink.v  icesugar.pcf  info

* Realizar la Síntesis, para generar el bitstream:

$ apio build

* Ahora se deben tener estos ficheros:
$ ls
apio.ini  blink.v  hardware.asc  hardware.bin  hardware.json  icesugar.pcf  info

El fichero hardware.bin es el que contiene el bitstream listo para cargar en la icesugar

Si alguien lo puede probar sería genial. Falta por añadir la parte de la carga del bistream directametne a la icesugar. Esto será lo próximo que añadiré

Saludos, Obijuan

Alberto

unread,
Nov 12, 2020, 12:52:18 PM11/12/20
to FPGAwars: explorando el lado libre
¡Gracias! Estamos en ello :)

El martes, 10 de noviembre de 2020 a las 19:37:40 UTC+1, charliva escribió:

charli va

unread,
Nov 12, 2020, 1:20:39 PM11/12/20
to fpga-wars-explora...@googlegroups.com
Muchas gracias Alberto por el currazo!

Alberto

unread,
Nov 12, 2020, 1:22:57 PM11/12/20
to FPGAwars: explorando el lado libre
Ya está. Funciona como no podía ser de otra manera :)

Aquí podemos ver el resultado (grabado en vertical, lo siento) 

Y aquí grabando los leds con cuidado para que se vea el contador de 3 bits.

Los comandos, aunque excepto la programación seguro que ya lo habías ejecutado tú:
C:\Users\UserName\Documents\GitHub\apio-upstream>apio install examples
Installing examples package:
Download apio-examples-0.0.19.zip
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Package 'examples' has been successfully installed!


C:\Users\UserName\Documents\GitHub\apio-upstream\x>apio examples -d iCESugar_1_5/Blinky
Creating iCESugar_1_5/Blinky directory ...
Example 'iCESugar_1_5/Blinky' has been successfully created!

C:\Users\UserName\Documents\GitHub\apio-upstream\x>cd iCESugar_1_5/Blinky

C:\Users\UserName\Documents\GitHub\apio-upstream\x\iCESugar_1_5\Blinky>apio build
[Thu Nov 12 19:06:45 2020] Processing iCESugar_1_5
-------------------------------------------------------------------------------------------------------------------------------------
yosys -p "synth_ice40 -json hardware.json" -q blink.v
nextpnr-ice40 --up5k --package sg48 --json hardware.json --asc hardware.asc --pcf icesugar.pcf -q
Warning: unmatched constraint 'SW[0]' (on line 7)
Warning: unmatched constraint 'SW[1]' (on line 8)
Warning: unmatched constraint 'SW[2]' (on line 9)
Warning: unmatched constraint 'SW[3]' (on line 10)
Warning: unmatched constraint 'RX' (on line 14)
Warning: unmatched constraint 'TX' (on line 15)
Warning: unmatched constraint 'USB_DP' (on line 17)
Warning: unmatched constraint 'USB_DN' (on line 18)
Warning: unmatched constraint 'USB_PULLUP' (on line 19)
Warning: unmatched constraint 'P1_1' (on line 22)
Warning: unmatched constraint 'P1_2' (on line 23)
Warning: unmatched constraint 'P1_3' (on line 24)
Warning: unmatched constraint 'P1_4' (on line 25)
Warning: unmatched constraint 'P1_9' (on line 26)
Warning: unmatched constraint 'P1_10' (on line 27)
Warning: unmatched constraint 'P1_11' (on line 28)
Warning: unmatched constraint 'P1_12' (on line 29)
Warning: unmatched constraint 'P2_1' (on line 32)
Warning: unmatched constraint 'P2_2' (on line 33)
Warning: unmatched constraint 'P2_3' (on line 34)
Warning: unmatched constraint 'P2_4' (on line 35)
Warning: unmatched constraint 'P2_9' (on line 36)
Warning: unmatched constraint 'P2_10' (on line 37)
Warning: unmatched constraint 'P2_11' (on line 38)
Warning: unmatched constraint 'P2_12' (on line 39)
Warning: unmatched constraint 'P3_1' (on line 42)
Warning: unmatched constraint 'P3_2' (on line 43)
Warning: unmatched constraint 'P3_3' (on line 44)
Warning: unmatched constraint 'P3_4' (on line 45)
Warning: unmatched constraint 'P3_9' (on line 46)
Warning: unmatched constraint 'P3_10' (on line 47)
Warning: unmatched constraint 'P3_11' (on line 48)
Warning: unmatched constraint 'P3_12' (on line 49)
Warning: unmatched constraint 'P4_1' (on line 52)
Warning: unmatched constraint 'P4_2' (on line 53)
Warning: unmatched constraint 'P4_3' (on line 54)
Warning: unmatched constraint 'P4_4' (on line 55)
Warning: unmatched constraint 'SPI_SS' (on line 58)
Warning: unmatched constraint 'SPI_SCK' (on line 59)
Warning: unmatched constraint 'SPI_MOSI' (on line 60)
Warning: unmatched constraint 'SPI_MISO' (on line 61)
41 warnings, 0 errors
icepack hardware.asc hardware.bin
C:\Users\UserName\.apio\packages\tool-scons\script\..\engine\SCons\Defaults.py:213: SyntaxWarning: "is not" with a literal. Did you mean "!="?
if len(operation_list) is not 2:
==================================================== [SUCCESS] Took 3.62 seconds ====================================================

C:\Users\UserName\Documents\GitHub\apio-upstream\x\iCESugar_1_5\Blinky>


C:\Users\UserName\Documents\GitHub\apio-upstream\x\iCESugar_1_5\Blinky>c:\Users\UserName\.icestudio\apio\packages\toolchain-icesprog\bin\icesprog.exe hardware.bin
flash offset: 0x00000000
write flash (104090 (0x1969a) Bytes)
write 0x00000000
write 0x00010000
done

C:\Users\UserName\Documents\GitHub\apio-upstream\x\iCESugar_1_5\Blinky>

Obijuan

unread,
Nov 13, 2020, 8:04:59 AM11/13/20
to FPGAwars: explorando el lado libre
Estupendo! Muchísimas gracias por las pruebas Alberto! Se agradece mucho la información tan detallada que has enviado

Aquí va la siguiente prueba. Los binarios del paquete del icesprog ya están generados para Linux y Windows. Hay que comprobar que icesprog se instala correctamente como paquete de apio y que se ejecuta al hacer el apio upload

Aquí detallo las pruebas

==================== Pruebas para winwows ===============================

* Instalar el paquete icesprog. Se debe bajar automáticamente del repo e instalar.

apio install icesprog

Si todo ha ido bien, debería salir un mensaje como este:

Installing icesprog package:
Download toolchain-icesprog-windows_amd64-1.0.0.tar.gz

Downloading  [####################################]  100%             
Unpacking  [####################################]  100%
Package 'icesprog' has been successfully installed!

* Comprobar que el ejecutable está instalado en el sistema de apio, y que se puede ejecutar. Primero lo ejecutamos "a pelo"

apio raw "icesprog"

Debería salir lo mismo que si lo ejecutas normalmente:

usage: icesprog [OPTION] [FILE]
             -w | --write                   write spi-flash                              
             -r | --read                    read  spi-flash                              
             -e | --erase                   erase spi-flash                              
             -p | --probe                   probe spi-flash                              
             -o | --offset                  spi-flash offset                       
             -l | --len                     len of write/read                            
             -h | --help                    display help info                            

             -- https://github.com/wuxx/icesugar --

*  Ahora la prueba de fuego: Sintetizar y cargar el fichero Blinky. La parte de obtener el blinky ya la probaste, pero te pongo aquí todos los comandos por comodidad:

apio examples -d iCESugar_1_5/Blinky
cd iCESugar_1_5/Blinky/
apio upload

================== Pruebas en Linux ================================================

Necesito que repitas esta prueba pero en Linux... Yo lo he probado y funciona bien, pero no puedo comprobar si al hacer apio upload se carga el diseño. No tengo claro el tema de los permisos, así que necesito que lo pruebes

Cuando llegues a apio raw "icesprog"  continua con estos comandos:

* Asegúrate que la icesugar está conectada y ejecuta:

lsusb

y mándame la salida. Es para ver el identificador USB de la placa icesugar, por si fallan los permisos en las siguientes pruebas

* Ejecuta es programa para instalar los drivers para las placas FTDI (no tengo claro si valdrá para esta)

apio drivers --ftdi-enable

* Desconecta la placa y vuelve a conectarla

* Ahora probamos la síntesis y carga:

apio examples -d iCESugar_1_5/Blinky
cd iCESugar_1_5/Blinky/
apio upload

¿Qué sucede? 

Muchas gracias por las pruebas... ya estamos muy cerca!

Saludos, Obijuan

Alberto

unread,
Nov 13, 2020, 11:14:58 AM11/13/20
to FPGAwars: explorando el lado libre
Claro!

En windows todo perfecto:

C:\Users\Alberto\Documents\GitHub\apio-upstream>apio install -l

Installed packages:

------------------------------------------------------------------------------------------------------------------------
Name        Description                    Version
------------------------------------------------------------------------------------------------------------------------
drivers     Drivers tools                  1.1.0
examples    Verilog examples               0.0.19
ice40       Lattice ICE40 toolchain        2019.12.11
scons       Scons tool                     3.0.1
yosys       Yosys toolchain                2019.12.11

Not installed packages:

------------------------------------------------------------------------------------------------------------------------
Name        Description
------------------------------------------------------------------------------------------------------------------------
ecp5        Lattice ECP5 toolchain
fujprog     Programmer for ULX2/3S boards
gtkwave     GTKWave tool
icesprog    apio package for iCESugar board programmer
iverilog    Icarus Verilog toolchain
system      System tools
verilator   Verilator toolchain

C:\Users\Alberto\Documents\GitHub\apio-upstream>apio install icesprog
Installing icesprog package:
Download toolchain-icesprog-windows_amd64-1.0.0.tar.gz
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Package 'icesprog' has been successfully installed!

C:\Users\Alberto\Documents\GitHub\apio-upstream>apio raw "icesprog"
usage: icesprog [OPTION] [FILE]
-w | --write                   write spi-flash
-r | --read                    read  spi-flash
-e | --erase                   erase spi-flash
-p | --probe                   probe spi-flash
-o | --offset                  spi-flash offset
-l | --len                     len of write/read
-h | --help                    display help info


C:\Users\Alberto\Documents\GitHub\apio-upstream>apio examples -d iCESugar_1_5/Blinky
Creating iCESugar_1_5/Blinky directory ...
Example 'iCESugar_1_5/Blinky' has been successfully created!

C:\Users\Alberto\Documents\GitHub\apio-upstream>cd iCESugar_1_5\Blinky

C:\Users\Alberto\Documents\GitHub\apio-upstream\iCESugar_1_5\Blinky>apio upload
[Fri Nov 13 16:36:50 2020] Processing iCESugar_1_5
icesprog hardware.bin
flash offset: 0x00000000

write flash (104090 (0x1969a) Bytes)

write 0x00000000

write 0x00010000

done
============================================= [SUCCESS] Took 11.05 seconds =============================================

C:\Users\Alberto\Documents\GitHub\apio-upstream\iCESugar_1_5\Blinky>

En Linux, en cambio, falla, como usuario no privilegiado:

ubuntu@ubuntu:~/apio_test$ ~/.local/bin/apio raw icesprog
usage: icesprog [OPTION] [FILE]
-w | --write                   write spi-flash                              
-r | --read                    read  spi-flash                              
-e | --erase                   erase spi-flash                              
-p | --probe                   probe spi-flash                              
-o | --offset                  spi-flash offset                   
-l | --len                     len of write/read                            
-h | --help                    display help info                            


ubuntu@ubuntu:~/apio_test$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 004: ID 1d50:602b OpenMoko, Inc. FPGALink
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

ubuntu@ubuntu:~/apio_test/iCESugar_1_5/Blinky$ ~/.local/bin/apio upload
[Fri Nov 13 07:56:41 2020] Processing iCESugar_1_5
icesprog hardware.bin
iCELink open fail!
/home/ubuntu/.apio/packages/tool-scons/script/../engine/SCons/Defaults.py:213: SyntaxWarning: "is not" with a literal. Did you mean "!="?
if len(operation_list) is not 2:
scons: *** [upload] Error 255
========================= [ ERROR ] Took 1.13 seconds =========================

El comando icesprog es como si no viese la placa si no ejecuto como root. 
Como root funciona: 

ubuntu@ubuntu:~/apio_test/iCESugar_1_5/Blinky$ 

root@ubuntu:/home/ubuntu/apio_test/iCESugar_1_5/Blinky# apio install icesprog
Installing icesprog package:
Download toolchain-icesprog-linux_x86_64-1.0.0.tar.gz
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Package 'icesprog' has been successfully installed!
root@ubuntu:/home/ubuntu/apio_test/iCESugar_1_5/Blinky# apio upload
[Fri Nov 13 08:01:21 2020] Processing iCESugar_1_5
--------------------------------------------------------------------------------
icesprog hardware.bin
flash offset: 0x00000000
write flash (104090 (0x1969a) Bytes)
write 0x00000000
write 0x00010000
done
========================= [SUCCESS] Took 9.66 seconds =========================

Voy a ver si investigo, a ver si es algo evitable. Voy a empezar por ver las diferencias con strace.

Alberto

unread,
Nov 13, 2020, 11:54:18 AM11/13/20
to FPGAwars: explorando el lado libre
¡Hola otra vez! Como te he dicho en github, al parecer hay que ser root salvo que se añada la configuración correspondiente en /etc/udev/rules.d/, que he visto que es algo que tenéis controlado en el drivers.py de apio.

La línea sería, entiendo:
ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="602b", MODE="0660", GROUP="plugdev", TAG+="uaccess"  

Un saludo!

Obijuan

unread,
Nov 14, 2020, 4:07:54 AM11/14/20
to FPGAwars: explorando el lado libre
Estupendo!!! Muchísimas gracias por las pruebas!  😀

En windows queda validado! 

En linux efectivamente hay que añadir esa línea en el rules.d, que eso lo gestiona el comando apio drivers. Ahora lo añado a apio

Ya sólo queda la compilación del icesprog para Mac. Aquí las pruebas se van a complicar porque hay poca gente con mac, y no sé si alguno tendrá una icesugar. En cualquier caso hay que dejar el ejecutable listo y comprobar que se instala y que se invoca correctamente

Una vez terminado el soporte en apio, ya es casi inmediato que funcione en icestudio

Muchísimas gracias por las pruebas! Seguiré comentando el estado de la icesugar en este hilo, y proponiendo nuevas pruebas

Saludos, Obijuan

Obijuan

unread,
Nov 14, 2020, 4:40:40 AM11/14/20
to FPGAwars: explorando el lado libre
Ya he subido el parche con la actualización del fichero udev. Necesito que hagas estas pruebas para comprobar que está todo ok

1. Instala la última versión de development de apio:


2. Desinstala los drivers (esto elimina el fichero con las reglas del udev que tenías antes. Así que queda en blanco y comprobamos si se instala ok)

apio drivers --ftdi-disable

3. Entra en la carpeta donde está el Blinky de la icesugar y cárgalo. Debería fallar porque los drivers no están:

apio upload

4. Ahora instala los drivers:

apio drivers --ftdi-enable

5. Desconecta y vuelve a conectar la placa. Prueba a volver a cargar el blinky ahora:

apio upload


Ahora ya sí que debería cargar sin ser usuario.  Si esto funciona pasamos a la siguiente fase (y el soporte de la icesugar en apio ya estarái completo en Linux y Windows)

Gracias :-)

Saludos, Obijuan


Alberto

unread,
Nov 14, 2020, 12:59:52 PM11/14/20
to FPGAwars: explorando el lado libre
¡Hecho!

ubuntu@ubuntu:~/apio-test/iCESugar_1_5/Blinky$ apio drivers --ftdi-disable
Revert FTDI drivers configuration
FTDI drivers disabled
Unplug and reconnect your board
ubuntu@ubuntu:~/apio-test/iCESugar_1_5/Blinky$ apio upload
[Sat Nov 14 09:57:54 2020] Processing iCESugar_1_5
--------------------------------------------------------------------------------
icesprog hardware.bin
iCELink open fail!
scons: *** [upload] Error 255
========================= [ ERROR ] Took 0.20 seconds =========================
ubuntu@ubuntu:~/apio-test/iCESugar_1_5/Blinky$ apio drivers --ftdi-enable
Configure FTDI drivers for FPGA
FTDI drivers enabled
Unplug and reconnect your board
ubuntu@ubuntu:~/apio-test/iCESugar_1_5/Blinky$ apio upload
[Sat Nov 14 09:58:05 2020] Processing iCESugar_1_5
--------------------------------------------------------------------------------
icesprog hardware.bin
flash offset: 0x00000000
write flash (104090 (0x1969a) Bytes)
write 0x00000000
write 0x00010000
done
========================= [SUCCESS] Took 9.50 seconds =========================


Obijuan

unread,
Nov 14, 2020, 2:17:54 PM11/14/20
to FPGAwars: explorando el lado libre
Estupendo!! Ya funciona en Windows y Linux!!!! Muchas gracias por las pruebas! 🙂 

En apio ya sólo falta el Mac, que tardará un poco más... pero mientras tanto ya se puede incluir en icestudio para Linux y Windows, y seguir probando. Aprovecharé para irlo documenatndo según lo vaya haciendo, para que resulte más fácil la integración de otras placas

Saludos, Obijuan

Alberto

unread,
Nov 14, 2020, 2:47:27 PM11/14/20
to FPGAwars: explorando el lado libre
¡Gracias a ti!

Yo lo tengo funcionando en icestudio pero realmente son pocos cambios y seguro que los tienes perfectamente controlados y es fácil que yo haya olvidado algo o lo haya hecho mal. En cualquier caso, por si te sirve de algo, aquí puedes ver lo que yo toqué.

Me pasa una cosa con el pinout y es que los números serigrafiados no tienen mucho que ver con los nombres que wuxx le dio a los pines en su io.pcf.

En el pcf numera cada pin de cada PMOD en función del número de puerto y del número de pin dentro de dicho puerto, pero en la serigrafía lo que pone es Px donde x es el número de pin físico de la FPGA.
Así si lo que quieres es usar un pin suelto es una locura saber cuál es cuál. ¿Crees que puede tener sentido ponerle dos nombres a cada pin? El serigrafiado como P10 sería PMOD1_1 y PIN10, por ejemplo. Bueno, en realidad justo ese pin también se llama USB_DP. Es uno de los conectados al microUSB directamente, es un pin compartido que se puede utilizar para una cosa u otra.

El caso es que llamar P1_1 al pin en el fichero y P10 en la serigrafía es muy incómodo si no tienes interiorizado el orden de los pines en el PMOD. A ver si te parece que se puede hacer algo al respecto.

Un saludo

IMG_20201114_203006__01.jpgIMG_20201114_203031__01.jpg

Juan Gonzalez Gomez

unread,
Nov 14, 2020, 3:25:47 PM11/14/20
to FPGA-WARS: explorando el lado libre
Hola!

El sáb., 14 nov. 2020 a las 20:47, Alberto (<aal...@gmail.com>) escribió:

Yo lo tengo funcionando en icestudio pero realmente son pocos cambios y seguro que los tienes perfectamente controlados y es fácil que yo haya olvidado algo o lo haya hecho mal. En cualquier caso, por si te sirve de algo, aquí puedes ver lo que yo toqué.

Si ya lo tienes funcionando manda un pull request a icestudio, así es más rápido 🙂, y luego sobre esas modificaciones cambio o añado cosas....
 

Me pasa una cosa con el pinout y es que los números serigrafiados no tienen mucho que ver con los nombres que wuxx le dio a los pines en su io.pcf.

En el pcf numera cada pin de cada PMOD en función del número de puerto y del número de pin dentro de dicho puerto, pero en la serigrafía lo que pone es Px donde x es el número de pin físico de la FPGA.
Así si lo que quieres es usar un pin suelto es una locura saber cuál es cuál. ¿Crees que puede tener sentido ponerle dos nombres a cada pin? El serigrafiado como P10 sería PMOD1_1 y PIN10, por ejemplo.

En principio puedes poner la cadena que quieras para el nombre del pin, lo único es que hay poco espacio y no se si se va a ver el nombre completo. Como de momento eres tú el que tiene la icesugar y le estás dando soporte, haz pruebas y elige los nombres  que te resulten más cómodos
 
Bueno, en realidad justo ese pin también se llama USB_DP. Es uno de los conectados al microUSB directamente, es un pin compartido que se puede utilizar para una cosa u otra.

El caso es que llamar P1_1 al pin en el fichero y P10 en la serigrafía es muy incómodo si no tienes interiorizado el orden de los pines en el PMOD. A ver si te parece que se puede hacer algo al respecto.

Cuando se trabaja con icestudio, como no hay que usar el fichero .pcf, en realidad se puede poner el nomblre más cómodo. Si en la serigrafía lo llaman P10, yo pondría P10 en icestudio. Pero decide tú lo que creas más cómodo. Lo que decidas estará bien y es lo que dejaremos

Saludos, Juan
 
--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Alberto

unread,
Nov 14, 2020, 4:27:16 PM11/14/20
to FPGAwars: explorando el lado libre
Hola!

Lo tenía funcionando contra mi fork de apio. He hecho, creo, merge de los cambios posteriores en el origin (no me llevo muy bien con git todavía) y a ver si logro probarlo. Se me está quejando de que no hay release del apio 5.5 publicada.
La puedo publicar yo clonada desde el develop de FPGAwars...
No sé, lo intento a ver, a no ser que hagas esa release.

Voy a hacer lo primero lo de los pines, le voy a poner los dos nombres.

Saludos!

Alberto

unread,
Nov 14, 2020, 6:41:23 PM11/14/20
to FPGAwars: explorando el lado libre
Ya he hecho el pull request :)

Obijuan

unread,
Nov 15, 2020, 3:01:03 AM11/15/20
to FPGAwars: explorando el lado libre
Hola Alberto,

En icestudio dev, el que arrancas desde la rama develop del repo, sólo tienes que pinchar en Herramientas/Toolchain/Actualizar. Esto te instala el último Apio (0.5.5) de la rama de develop de apio.  Así ya puedes comprobar si funciona todo ok con la icesugar

Voy a revisar tu pull-request y a mergearlo. ¡Muchas gracias!

Saludos, Obijuan

Obijuan

unread,
Nov 15, 2020, 4:09:51 AM11/15/20
to FPGAwars: explorando el lado libre

Hola!

Ya está integrado el pull-request. He añadido algunos arreglos.  Lo he probado en Linux y funciona muy bien! 🙂, aunque como no tengo la icesugar sólo puedo sintetizar:


Te adjunto este circuito de ejemplo para que lo sintetices y cargues en tu icesugar, a ver si todo está ok

Me voy a comprar una icesugar, así puedo hacer pruebas más rápido

Saludos, Obijuan
icesugar-test-1.ice

Juan Gonzalez Gomez

unread,
Nov 15, 2020, 5:23:01 AM11/15/20
to FPGA-WARS: explorando el lado libre
Se me olvidó adjuntar un pantallazo

icesugar-screenshot3.png

Juan Gonzalez Gomez

unread,
Nov 15, 2020, 6:28:33 AM11/15/20
to FPGA-WARS: explorando el lado libre
He metido el dibujo del pinout. Es accesible desde View/pinout

He reorganizado los pines de la icesugar para que sean iguales que el dibujo del pinout. Creo que es menos confuso si en vez de duplicar los pines, se ponen tal cual están en el dibujo del pinout. La indicación de a qué PMOD correspone se puede poner bien en la descripción del bloque pin (en icestudio) o bien en comentarios.  Adjunto imagen:

icesugar-icestudio-2.png

Si los dejamos por duplicados creo que es mucho más lioso para usuarios no expertos (que es el objetivo principal de icestudio: hacerlo fácil a la gente que está empezando)

Pruébalo y me cuentas.  En cualquier caso,yo ya he pedido mi icesugar en Aliexpress, para tener una y poder hacer pruebas

Saludos, Obijuan

Alberto

unread,
Nov 15, 2020, 10:38:05 AM11/15/20
to FPGAwars: explorando el lado libre
Hola!

Me parece perfecto todo. :)

Una cosa. El icesugar-test-1 funciona perfecto pero no es trivial su funcionamiento por unos detalles de la placa. El led RGB (el único LED controlable por pines de la FPGA) es de ánodo común y tiene pull-up en los cátodos por lo que si dejas un pin sin configurar ese led no se enciende, y si le envías un 1 tampoco, se enciende con un 0. Lo mismo sucede con el switch, tiene pull-up en esos pines y mover el switch a ON es derivarlos a masa. Por tanto tu circuito funciona por la doble negación. SW[0] ON enciende el led verde y apaga el azul y viceversa, pero con 0, no con 1. No es una placa diseñada para formación, desde luego, jeje.

Un detalle, el icesugar-test-1 entiendo que lo hiciste antes del último cambio en el pinout y el switch no se llamaba como se llama ahora, pero le reasigno el pin y listo.

Una cosa que me gusta de la placa es que tanto los LED como los pines que van a la UART y los de los switches se pueden liberar quitando jumpers. Quitar el jumper que corresponda desconecta el circuito de utilidad on-board del pin, dejando el pin del PMOD correspondiente libre para hacer lo que quieras con él sin interferencia. Ah, hasta el CLK funciona así, hay un jumper que si lo quitas le quitas el CLK, dejas la placa sin él. Y por otra parte podrías conectar cables a dichos jumper y reconectar ese elemento de la placa en otro pin. Por ejemplo podrías poner el CLK por otro pin, si surge esa necesidad, aunque no se me ocurre un motivo.

No sé mucho de verilog todavía pero entiendo que se podría hacer una colección de bloques para iCESugar con los switches y el led RGB (con el número de pin a fuego) de forma que ese bloque se comporte de forma lógica. Que SW=ON saque un 1 por el pin correspondiente del bloque, en vez del 0 que llega físicamente por el pin de la FPGA y lo mismo con los LED RGB, que con la entrada del bloque desconectada o a 0 no se encienda, y se encienda con el 1 lógico.

Esto último, el tratar el ¿tri-estado? es lo que yo no sabría hacer ahora mismo.

¡Gracias por todo! A ti, a @cavearr y a @Jesus89. Quise añadir soporte de la placa y al final os he dado mucho trabajo a vosotros también.

Si puedo ayudar de algún modo con lo de soportar Mac sin tener Mac decídmelo. ¿Eso te lo instalas en una máquina virtual y ya? Yo no tengo problema en intentarlo.

Me parece que es una placa modesta que vende directamente su autor y está muy bien de precio. Como reflexión, a veces despreciamos las cosas con un "es una placa china" pero detrás hay personas desarrollándola y contribuyendo al ecosistema open source igual que si fuera de cualquier otra región, en mi opinión. Habrá placas mejores pero soportar una muy barata tiene también su utilidad y valor.

Un saludo

charli va

unread,
Nov 15, 2020, 11:11:02 AM11/15/20
to fpga-wars-explora...@googlegroups.com
Alberto muchas gracias por todo!!! Ha sido un gran aporte!!

La verdad que si te curraras una colección de ejemplos para la icesugar sería estupendo!!

Yo me voy a comprar una también!


Alberto

unread,
Nov 15, 2020, 12:20:01 PM11/15/20
to FPGAwars: explorando el lado libre
Gracias a ti. Claro. Puedo hacer ejemplos. Los haré.

Pero además de ejemplos me gustaría hacer componentes también, que simplificaran la lógica, y creo que no sé hacerlo o no sé si se puede, si dentro de lo que icestudio permite el hacer componentes puede ayudar o sólo lo va a liar todo más y es mejor ceñirse a hacer ejemplos de cómo se utiliza la placa.

Aquí ilustro un poco qué pasa, por qué puede ser confuso.


Intento hacer ese componente iCESugar RGB pero sólo consigo meter los NOT. ¿Se puede meter la asignación de pines en un componente? Me da la impresión de que no. Entiendo que en verilog tampoco se puede referenciar a un pin concreto, sino que se le da un nombre y el el PCF va su relación con el pin. Pero el PCF que emite icestudio hacia apio entiendo que es uno que crea al vuelo con los pines que uses, no el completo con todos los pines. Entiendo que por eso no se puede poner un pin en el verilog directamente sino que hay que llevarlo a un output. Que yo sepa, insisto, que me pierdo bastante.

Tampoco entiendo muy bien el comportamiento del led azul en este ejemplo, el comportamiento de un salida cuyo valor depende de cosas que están sin conectar, como "blue" en este caso. Blue no está conectado, y parece que "NOT blue" vale 0, porque el led se enciende. Estaría bien poder controlar esto y que si no se usa un led en un determinado circuito no se encienda por sí mismo.

Si no se puede simplificar más el uso con hacer ejemplos debería ser suficiente.

¡Gracias de nuevo!

charli va

unread,
Nov 15, 2020, 12:56:08 PM11/15/20
to fpga-wars-explora...@googlegroups.com
Hola Alberto con ejemplos me refería a. Componentes que se pudieran reutilizar! 

Es el camino a seguir, estos días no tengo buena conexión y no puedo ver las cosas Bien en cuanto pueda me miro tu mail con calma a ver las cosas que planteas.

Obijuan

unread,
Nov 15, 2020, 2:08:12 PM11/15/20
to FPGAwars: explorando el lado libre
El domingo, 15 de noviembre de 2020 a las 16:38:05 UTC+1, aal...@gmail.com escribió:

Una cosa. El icesugar-test-1 funciona perfecto

OK, el objetivo de este ejemplo era simplemente comprobar si se sintizaba correctamente y se cargaba en la icesugar, para validar los últimos cambios de icestudio. Así que: Otra tarea del TODO completada! :-) ¡Gracias!


pero no es trivial su funcionamiento por unos detalles de la placa. El led RGB (el único LED controlable por pines de la FPGA) es de ánodo común y tiene pull-up en los cátodos por lo que si dejas un pin sin configurar ese led no se enciende, y si le envías un 1 tampoco, se enciende con un 0. Lo mismo sucede con el switch, tiene pull-up en esos pines y mover el switch a ON es derivarlos a masa. Por tanto tu circuito funciona por la doble negación. SW[0] ON enciende el led verde y apaga el azul y viceversa, pero con 0, no con 1. No es una placa diseñada para formación, desde luego, jeje.

Si, lo acabo de ver. Como no tengo placa, pensaba que se trataban de tres LEDs independinetes. Algunas placas sí los llevan: uno rojo, otro verde y otro azul. Pero esta lleva un RGB, por lo que el cicuito anterior tendrá un comportamiento errático


Un detalle, el icesugar-test-1 entiendo que lo hiciste antes del último cambio en el pinout y el switch no se llamaba como se llama ahora, pero le reasigno el pin y listo.

Si, si... Hice el circuito de ejemplo y luego cambié los pines a las etiquetas del dibujo del pinout
 

Una cosa que me gusta de la placa es que tanto los LED como los pines que van a la UART y los de los switches se pueden liberar quitando jumpers.

Aja!! claro! Ahora lo entiendo.... el no tener la placa delante me hacía no comprender algunas cosas
 
Quitar el jumper que corresponda desconecta el circuito de utilidad on-board del pin, dejando el pin del PMOD correspondiente libre para hacer lo que quieras con él sin interferencia. Ah, hasta el CLK funciona así, hay un jumper que si lo quitas le quitas el CLK, dejas la placa sin él. Y por otra parte podrías conectar cables a dichos jumper y reconectar ese elemento de la placa en otro pin. Por ejemplo podrías poner el CLK por otro pin, si surge esa necesidad, aunque no se me ocurre un motivo.

Entendido! Gracias!
 

No sé mucho de verilog todavía pero entiendo que se podría hacer una colección de bloques para iCESugar con los switches y el led RGB (con el número de pin a fuego) de forma que ese bloque se comporte de forma lógica. Que SW=ON saque un 1 por el pin correspondiente del bloque, en vez del 0 que llega físicamente por el pin de la FPGA y lo mismo con los LED RGB, que con la entrada del bloque desconectada o a 0 no se encienda, y se encienda con el 1 lógico.

Si. Esa es la idea. Ir haciendo que sea muy fácil usar las placas, añadiendo bloques específicos y ejemplos
 

¡Gracias por todo! A ti, a @cavearr y a @Jesus89. Quise añadir soporte de la placa y al final os he dado mucho trabajo a vosotros también.

Gracias a tí. El soporte lo has implementado tú. A mí me está sirviendo como guía para documentar apio y icestudio, para que esté la información para que cualquier pueda añadir la placa que quiera, sin depender de nosotros. Al final tenemos mil frentes abiertos y estamos desbordados, por lo que casi no avanzamos en esto

Si puedo ayudar de algún modo con lo de soportar Mac sin tener Mac decídmelo. ¿Eso te lo instalas en una máquina virtual y ya? Yo no tengo problema en intentarlo.

Yo tampoco lo he hecho nunca, y lo quiero aprender. Hay que acceder a un servidor que tenga máquina virtual de mac o tener un mac físico. Jesús arroyo tenía acceso a un mac para hacer las pruebas en real. Los servidores con mac no son públicos,  el acceso es pagando, pero charli por su trabajo tiene acceso a uno para hacer pruebas.


Me parece que es una placa modesta que vende directamente su autor y está muy bien de precio. Como reflexión, a veces despreciamos las cosas con un "es una placa china" pero detrás hay personas desarrollándola y contribuyendo al ecosistema open source igual que si fuera de cualquier otra región, en mi opinión. Habrá placas mejores pero soportar una muy barata tiene también su utilidad y valor.

A mí la placa me ha gustado mucho, y el autor es un crack. Sabe un montón. Le he comprado la placa y algunos periféricos

Saludos, Obijuan

Alberto

unread,
Nov 19, 2020, 4:01:21 PM11/19/20
to FPGAwars: explorando el lado libre
Hola.

He creado un par de ejemplos. 


Creo que los ejemplos son suficientes para enseñar la pequeña complicación que suponen los leds y switches de lógica inversa y cómo solventarla. Es simplemente que si no lo tienes en cuenta te puedes liar, en tus primeros pasos.

Un saludo

Obijuan

unread,
Nov 22, 2020, 5:57:01 AM11/22/20
to FPGAwars: explorando el lado libre
Estupendo! muchas gracias :-)

En cuanto reciba mi icesugar los pruebo

También quiero empezar una colección con ejemplos "hola mundo" para las diferentes placas. Las colecciones tiene soporte multiidioma, por lo que podemos tener los ejemplos comentados en todos los idiomas. Se hacen en inglés y se añaden las traducciones al resto de idiomas (ficheros .po)

En cuanto pueda creo una inicial y vamos añadiendo ejemplos para todas las placas soportadas

Saludos, Obijuan

Obijuan

unread,
Nov 22, 2020, 5:59:57 AM11/22/20
to FPGAwars: explorando el lado libre
Ya está la toolchain de icesprog compilada para mac!!  Ya está subida al repo toolchain-icesprog. He probado que se instala correctamente en el mac (virtual) y que se invoca bien. Pero como no tengo la icesugar no puedo hacer pruebas

De momento lo doy por terminado hasta que alguién con mac y la icesugar pueda comprobar si va bien
 
Gracias Alberto! Ya está completo el soporte de la icesugar!!! 😀️

Saludos, Obijuan


Alberto

unread,
Nov 22, 2020, 12:12:26 PM11/22/20
to FPGAwars: explorando el lado libre
¡Genial! Seguro que funciona.
El autor ha aceptado unos pool request con cambios de terceros. Uno es el O_BINARY o sea que sobraría el parche, pero otro no sé si puede romper el toolchain, que es cambiar libusb por hidraw. En Linux bien pero en Windows no creo que funcione y en Mac ni idea.

Lo que pasa es que yo enlacé un commit específico y no el main, por lo que sólo nos afecta si decidimos actualizar.

Si en algún momento actualizamos habrá que adaptar el script pero por ahora no veo necesidad.

También es una buena noticia que acepte un pull-request, demuestra que abandonado del todo no está. :)

Juan Gonzalez Gomez

unread,
Nov 22, 2020, 2:04:02 PM11/22/20
to FPGA-WARS: explorando el lado libre
Estupendo! ¡Gracias Alberto!

La idea de hacer paquetes de apio es justo esa: tener congeladas versiones que sabemos que funcionan, y que han sido probadas

En cuanto lo tengamos todo probado y estable, podemos hacer una actualización y sacar una release nueva de la toolchain, claro que si. Ahora será todo más rápido

Saludos, Obijuan

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Christian Stone

unread,
Nov 22, 2020, 6:12:35 PM11/22/20
to fpga-wars-explora...@googlegroups.com
Hola Alberto,

Creo que deberías revisar los cambios con mayor atención:

- Hay más de dos cambios que afectan a icesprog: https://github.com/wuxx/icesugar/compare/6424e0d...master
- El cambio de libusb a hidraw lo hizo el autor, no un tercero. En cualquier caso, no te debería afectar porque no usas make, sino que lo haces a mano con tus propios scripts.
- Sería interesante confirmar si el parche sobra o no, ya que no hace lo mismo.
- Un commit evita crasheos. Es recomendable aplicar este tipo de arreglos.

También es una buena noticia que acepte un pull-request, demuestra que abandonado del todo no está. :)

¿Tienes alguna referencia que hiciera pensar que estaba abandonado? https://github.com/wuxx/icesugar/graphs/contributors

Un saludo

Alberto

unread,
Nov 23, 2020, 12:53:30 PM11/23/20
to FPGAwars: explorando el lado libre
Hola, Christian.

Eso me dice mi mujer, que no presto atención a las cosas. Mi psicólogo en cambio me dice que no le haga ni caso a mi mujer, en ese sentido. Le preguntaré a ver qué hago con tus opiniones, sin falta en cuanto le vea.

"El cambio de libusb a hidraw lo hizo el autor": genial.
"Sería interesante confirmar si el parche sobra o no, ya que no hace lo mismo": tengo el tema estudiadísimo. Yo mismo abrí una issue con formas de gestionarlo y la ha cerrado al aceptar el cambio. Si quieres pruébalo tú, pero en principio es lo mismo.
"Un commit evita crasheos. Es recomendable aplicar este tipo de arreglos.": Evita crasheos que se producen cuando se invoca con parámetros no soportados. No parece lo más crítico del mundo.

Si quieres probar tú la nueva versión y su integración con apio adelante. Si esperas que alguien se ponga a trabajar porque lo digas tú te sugiero que mejores la forma de comunicarte, no creo que ahora mismo estés siendo muy convincente. Esta vez te he contestado pero si ves que dejo de hacerlo que no te extrañe.

Un saludo

Christian Stone

unread,
Nov 23, 2020, 9:44:01 PM11/23/20
to fpga-wars-explora...@googlegroups.com
Alberto, ¡olé el antifascismo bueno ahí! "Si no tenéis cuidado con los medios de comunicación,..." Puede que quieras comentarlo con tu mujer, o con tu psicólogo, o que lo comenten por su cuenta y te digan qué hacer ;).

 tengo el tema estudiadísimo. Yo mismo abrí una issue con formas de gestionarlo y la ha cerrado al aceptar el cambio.

No discuto que lo tengas muy estudiado. Lo que sugerí es que compruebes que lo has entendido y que funciona. Si la issue a la que te refieres es https://github.com/wuxx/icesugar/issues/14, no se indica ninguna forma de gestionarlo. Se describe el problema. Esto no es acritud. Es empatía. Todos somos nuevos/jóvenes en muchas experiencias vitales.
 
Si quieres pruébalo tú, pero en principio es lo mismo.
 
Descuida, hago mis deberes. Insisto, no es lo mismo. Aparentemente, podría serlo. Pero, en principio, no lo es.

Evita crasheos que se producen cuando se invoca con parámetros no soportados. No parece lo más crítico del mundo.

Estoy de acuerdo.

Si quieres probar tú la nueva versión y su integración con apio adelante.
 
Te agradezco la invitación pero, como comprenderás, es redundante.

Si esperas que alguien se ponga a trabajar porque lo digas tú
 
No espero nada de nadie, ni he pedido que nadie haga nada. Creo que te estás confundiendo de interlocutor. Simplemente hice una aclaración y varias apreciaciones sobre unos comentarios que me parecieron naíf. Quien quiera probarlo, sea ahora o dentro de un par de años (https://github.com/FPGAwars/toolchain-iverilog, https://github.com/FPGAwars/toolchain-verilator), podrá apreciarlas. Especialmente, no necesito que me digas si apio funciona con el parche. Si lo compruebas, puedes guardar el resultado a buen recaudo.

te sugiero que mejores la forma de comunicarte, no creo que ahora mismo estés siendo muy convincente.
 
Puede que debamos mejorar la comunicación, sí, porque no estoy intentando convencer a nadie. Una vez más, puede que te estés confundiendo de interlocutor:

Dispongo de unos conocimientos e información; y los comparto en un foro común que trasciende con creces las identidades de los interlocutores. Te replico a ti por cortesía, ya que escribiste el contenido sobre el que hago apreciaciones. Pero tú eres sólo una pieza útil más en el propósito general de este colectivo particular. Esto no es un desprecio; yo también soy otra pieza útil. Lo relevante de la comunicación es que la información sea veraz y que el desarrollo argumentativo sea consistente. A partir de ahí, quien quiera y pueda, ahora o dentro de quién sabe cuántos años, podrá encontrar el contenido y seguir construyendo. Salvo, claro, que a algún gestor le den berrinches y borre mensajes compulsivamente. Pero eso es difícil de gestionarlo colectivamente.

Esta vez te he contestado pero si ves que dejo de hacerlo que no te extrañe.
 
Tal como lo has expresado, lo cierto es que sí me extrañaría, ya que sería un ad hominem de enciclopedia. Al mismo tiempo, el que calla otorga. Si lees algo que sabes falso/incorrecto/tendencioso/deshonesto, y está en tu mano evitar que haya personas engañadas o que desperdicien su tiempo con ello, considero que deberías hacerlo. Naturalmente, cada cual tiene su umbral ético y sus capacidades. Pero no discutir un contenido técnico que te interesa por cómo te cae el interlocutor, es poco constructivo.

Dicho esto, me parece natural que tú o cualquier otra persona no responda a un mensaje o abandone un hilo (temporal o definitivamente). Hay muchas cosas interesantes que hacer y las prioridades pueden cambiar mucho. Mis contribuciones suelen cumplir su función independientemente de la réplica. Por supuesto, si la hay, ese contenido adicional que se añade al grupo. Entiendo que estés confuso, porque hay patrones diametralmente opuestos en este colectivo. Te sugiero recapacitar sobre cuál es tu motivación para participar en este grupo, y actuar en consecuencia. Hay muchos usuarios que sólo quieren entretenerse y/o hacer amigos y/o ser makers. Todas son respetables.

¡Hasta la próxima!

Obijuan

unread,
Dec 15, 2020, 11:58:54 AM12/15/20
to FPGAwars: explorando el lado libre
Hola!

Acabo de recibir mi icesugar!!! uuueeeeeeeeeeee



Saludos, Obijuan


IMG_20201215_174341.jpg

Kendall Barboza

unread,
Sep 4, 2021, 5:19:16 AM9/4/21
to FPGAwars: explorando el lado libre
Hola chicos, saludos desde Costa Rica.

Tengo esa placa desde hace unos meses pero icestudio no me la reconoció.
Seguí los pasos en este hilo hasta este punto:


Y puedo cargarlo con los warnings de los "unmatched constraint 'xxx'.

He modificado el ejemplo blink.v y puedo apagar o encender los leds a voluntad. La cosa es que, no logro que icestudio la reconozca. Me podrían indicar por favor en que hilo puedo encontrar la solución?
Reply all
Reply to author
Forward
0 new messages