-
Notifications
You must be signed in to change notification settings - Fork 14
LOG
Para obtener la salida en ensamblador de un programa c ejecutamos lo siguiente:
/opt/riscv32i/bin/riscv32-unknown-elf-gcc -march=rv32im -S firmware.c
Ya tengo hola mundo en s
Los binarios que genera el rars se pueden grabar directamente en la flash y funcionan :-)
La síntesis del riscv tarda 3:37 (213.83 seconds)
Voy a empezar a separarlo en bloques de icestudio para eliminar las dependencias externas de ficheros verilog
- RISCV-01.ice: Los nombres de los puertos del bloque icestudio son iguales que los de la entidad demo. Ha tardado 5:10 en Sintetizar
- RISCV-02.ice: Fichero demo.v eliminado. En vez de instanciar la entidad demo, se ha incluido su código verilog en un bloque: OK!
- RISCV-03.ice: Division de demo.v en dos bloques verilog. En uno de ellos se instancia el fichero picosoc.v
Siguiente hito: incluir el fichero picosoc.v en el bloque verilog OK listo. Pero había módulos dentro, que me los he llevado al fichero regs.v. El picosoc.v ya no es necesario
- RISCV-04.ice: Fichero picosoc.v incluido en bloque verilog de icestudio. Ya no se necesita el fichero picosoc.v. OK!
- RISCV-05.ice: Entidad picosoc_mem en un nuevo bloque verilog de icestudio. El tiempo de síntesis ha aumentado: 9minutos. OK!
- RISCV-06.ice: La entidad picosoc_mem no se instancia, sino que se incluye directamente en el bloque icestudio. Se ha quitado el verilog del fichero temporal regs.v. OK!
- RISCV-07.ice: Entidad simpleuart en un bloque verilog separado (instanciada). OK!
- RISCV-08.ice: simpleuart integrada en un bloque verilog. No se necesita el fichero simpleuart.v más. OK! En esta versión también se ha eliminado la dependencia del fichero spiflash.v, que no se usaba. Solo quedan dependencia con 3 ficheros: regs.v, spimemio.v y picorv32.v. OK!
- RISCV-09.ice: spimemio instanciado en un nuevo bloque código de icestudio. OK!
- RISCV-10.ice: spimemio integrado en su bloque verilog. Ya no se necesita el fichero spimemio.v, pero se ha tenido que llevar la entidad spimemio_xfer al fichero spimemio_xfer.v, por lo que la dependencia de ficheros sigue siendo 3: OK!!
- RISCV-11.ice: spimemio_xfer instanciado en un nuevo bloque código de icestudio. OK!
- RISCV-12.ice: entidad spimemio_xfer incorporada dentro del bloque. Se elimina la dependencia del fichero spimemio_xfer.v. OK!!!
- RISCV-13.ice: Entidad picorv32 instanciado en un nuevo bloque de icestudio. OK!
- RISCV-14.ice: Entidad picorv32 dentro de un bloque verilog. Eliminada la dependecia con el fichero picorv32. Los módulos que quedan de dependencias están en el fichero regs.v. Es el único fichero de dependencias que queda
- RISCV-15.ice: Entidad picosoc-regs instanciada en un nuevo bloque verilog. ok!
- RISCV-16.ice: Entidad picosoc-regs dentro de bloque verilog. Modulo eliminado de regs.v. ¡Sólo quedan 3 módulos! EN PRUEBAS...
- RISCV-17.ice: Entidades de div y mul instanciadas en dos bloques verilog. OK!
- RISCV-18.ice: Resultado final!!! Sin dependencias de ficheros verilog!!!! :-)
Primera agrupación en bloques. Se ha creado un primer bloque RV32imc con el risc-v-32 bits aritmética entera, unidades de multiplicación y división y soporte de instrucciones comprimidas. ¡¡FUNCIONA!! :-)
- Tiempo de síntesis: 14 minutos
- Recursos:
- FF: 1488 / 7680
- LUTs: 5620 / 7680
- PLBs: 879/960
- PIOs: 18/107
- BRAMs: 6/32
He copiado el RV a otro bloque para probar a cambiar los parámetros. Se ha deshabilitado el juego de instrucciones comprimidas, a ver qué pasa
- Tiempo síntesis: 8min y 32 seg
- FF: 1466/7680
- LUTs: 5297/7680
- PLBs: 847/960
- PIOs: 18/107
- BRAMs: 6/32
Le he quitado la unidad de multiplicación y división, a ver si funciona bien...OK! Funciona!!
- Tiempo de síntesis: 4min y 35 segundos
- Recursos:
- FF: 969/7680
- LUTs: 3943/7680
- PIOs: 18/107
- PLBs: 672/960
- BRAM: 6/32
Las señales de acceso a la memoria flash se llevan por los bloques in/out, en vez de usando código verilog. Se reduce el tamaño del bloque con demo.v y la cantidad de etiquetas totales
Ya tengo la memoria flash spi en un bloque separado!! :-)
El fichero demo.ice se había corrompido, pero charli ya ha encontrado el bug. He vuelto a una versión anterior estable... ¡Seguimos adelante! El tiempo de síntesis es de unos 6 minutos. Las pruebas las voy a hacer en el fichero soc-test-01.ice. Y antes de sobre-escribir demo.ice me tengo que asegurar que funciona y que no hay nada corrupto
Mierda... los problemas vuelven! Me ha vuelto a petar!!!!!! He partido de demo.ice, que en principio no está corrupto. Lo he guardado como soc-test-01.ice y he hecho unos ligeros cambios. Pero ahora al guardar como peta...
Al enviarle los ficheros a Charli he visto que demo.ice ocupa 480Kb, mientras que soc-test-01.ice ocupa 1.7MB!!!
Charli a preparado una nueva actualización. ¡¡¡Siiiii!!! Ahora ya he podido "guardar como" el fichero soc-test-01 y el tamaño vuelve a ser de 480KB!
- soc-test-01.ice: Eliminados los cables de IRQ. OK!
- soc-test-02.ice: Eliminada señal iomem_wdata (mem_wdata) y la escritura enn los leds es de solo 8 bits: OK!
- soc-test-03.ice: Eliminadas señales iomem_wrstr, iomem_addr: OK!
Ya voy por el soc-test-17.ice: Toda la parte del multiplexor de acceso al bus de entrada del RISC-V ya está implementado como bloques
Vamos por el soc-test-41.ice. He conseguido quitar el divisor de la uart, para fijarlo a 115200 baudios. Toavía con la uart de clifford. Más adelante mapearé la de la colección Jedi
soc-test-43.ice: Bus de datos de entrada simplificado: Ahora se usa un multiplexor 4-1 y un codificador de 4-2 soc-test-47.ice: Bloque Bus-hub añadido