basic_RV32s: guía abierta de diseño de CPU RISC-V RV32I
(github.com/RISC-KC)Presentamos basic_RV32s, con el que puedes aprender los fundamentos del diseño de CPUs RISC-V mediante práctica con 4 CPUs y 2 diseños de SoC.
Resumen de basic_RV32s
- Softcore RISC-V RV32I implementable en FPGA creado durante 6 meses mientras cumplían el servicio militar
- Alcanzó un rendimiento de Dhrystone de 1.11 DMIPS/MHz y de Coremark de 1.10 Coremark/MHz
Entre los artículos sobre CPUs basadas en RV32I diseñadas en Corea, está en el grupo de mejor rendimiento.
(Referencia a 11 de 126 artículos en RISS que incluyen benchmark de RV32I, al momento de escribir esto)
(funcionando a @50MHz) - Proceso gradual de diseño de CPU y diseño de SoC
- 3 núcleos de ciclo único (37F, 43F, 46F)
- 1 núcleo pipeline de 5 etapas (46F5SP)
- 2 diseños de SoC con el núcleo pipeline integrado
(46F5SP_SoC - Debug, Benchmark)
- Abstracción de módulos de alto nivel intuitiva y fácil de entender, junto con el diseño
- Se ofrecen varios documentos para aprender diseño de CPUs RISC-V
- Excel de RV32I Cheatsheet
- Diario de desarrollo y registros de depuración
- Lineamientos de diseño de arquitectura
- Documentos que explican toda la arquitectura y la lógica por módulo
- Lineamientos para porting bare-metal
- Guía de compilación de RISC-V GNU GCC Toolchain RV32I
- Guía para ejecutar bare-metal de benchmark Dhrystone en RV32I, entre otros
- Se ofrece código en estructura de doble formato: clean code sin comentarios y código con comentarios
- Incluye diagramas de bloques de arquitectura a nivel de señal
- Dos estudiantes universitarios de segundo año enviaron por sí solos un artículo y presentarán en ISOCC 2025
- Incluido en el repositorio oficial de aprendizaje de RISC-V, riscv/learn
- Learning Resources - Intermediate-Level Resource
Antecedentes del desarrollo
El 15 de diciembre de 2024, mientras cumplíamos el servicio militar, empezamos un proyecto para construir directamente una CPU junto con un compañero. ¡Hace poco fue el primer aniversario!
Construir una CPU RISC-V basada en fundamentos de arquitectura de computadores era algo relativamente accesible de aprender, porque hay mucha teoría y también muchos libros. Pero al sentarnos frente al teclado, la situación se sintió muy distinta.
Aunque era la primera vez que iniciábamos un proyecto serio con VerilogHDL, que solo habíamos aprendido superficialmente en la universidad, descubrimos que casi no existían ejemplos reales de RISC-V open source que incluyeran documentación, manuales y lineamientos para crear una CPU RISC-V, más allá del código en sí. (Tomando como referencia riscv/learn - open implementations.)
Por supuesto, desarmar y analizar núcleos ya implementados como NEORV32 o DarkRISCV es una buena forma de aprender, pero en cuestiones de diseño era bastante difícil entender con precisión y encontrar las razones o fundamentos detrás de esas decisiones, así como la filosofía de diseño o el registro de desarrollo.
Por eso decidí ampliar este proyecto para que no fuera solo una implementación open source de una CPU RISC-V, sino una guía open source completa para crear una CPU RISC-V RV32I. Pensé que registrar el crecimiento de un principiante podría dejar un buen camino para otros principiantes que vengan después.
basic_RV32s
Como se indica en el resumen anterior, incluye logs de desarrollo, documentación sobre el diseño de los núcleos y una especie de cuaderno de errores sobre la fabricación de una CPU RISC-V. Está orientado a principiantes en diseño de hardware RISC-V como yo, tomando como base arquitectónica la metodología de Patterson-Hennessy.
El diseño central comienza con la arquitectura 37F, que soporta 37 instrucciones en RV32I, y se ofrece en una forma gradual que se expande de la siguiente manera.
- 37F: arquitectura base, ciclo único
- 43F: soporte para 6 instrucciones de extensión Zicsr
- 46F: soporte para las instrucciones EBREAK, ECALL y mret
- 46F5SP: extensión pipeline de 5 etapas con data forwarding y predictor dinámico de saltos FSM de 2 bits
Para implementar el núcleo en FPGA se diseñó 46F5SP_SoC, y se hicieron dos versiones.
- Versión de depuración
Permite depurar instrucciones y ver por UART, paso a paso y presionando un botón, el proceso de ejecución. - Versión de benchmarking
Permite ejecutar Dhrystone o Coremark y obtener directamente los resultados por UART.
La versión recientemente actualizada 46F5SP_MMIO_SoC implementa MMIO con soporte de salida UART, por lo que admite la función printf. Si este SoC se compila adecuadamente con archivos BSP como linker, boot script y syscall, se pueden obtener directamente los resultados de varios programas en C como Dhrystone 2.1 o Coremark.
Cierre
Esperamos que nuestra pasión por RISC-V ayude a los principiantes a dar sus primeros pasos. Y la parte más importante es que todo este proyecto es open source.
Eso significa que, aprovechando este proyecto, cualquiera puede crear mejores tutoriales de aprendizaje, documentación y diseños de procesadores para la comunidad RISC-V, y contribuir libremente.
Siento que todavía hace falta mucho más para cumplir el objetivo de este proyecto. Mientras lo desarrollábamos, aprendí que la verificación nunca termina, y como no soy un experto, puede haber muchos errores que no conozco, incluidos varios hazards. Por eso el repositorio no está frozen y sigue abierto. Nos ayudaría muchísimo que personas con experiencia revisen nuestro trabajo y nos den feedback. No solo por nosotros, sino también por todos los que aprendan viendo este proyecto.
Después
Ahora, tras completar la extensión de RV32I hacia RV64I, seguimos avanzando con el objetivo de expandirnos a RV64IM y, más adelante, cumplir el sueño original de crear una CPU de propósito general de Corea del Sur (RVA23). Actualmente estamos dedicados al desarrollo hasta la extensión RV64IMA en un repositorio llamado ima_make_rv64. Agradeceríamos muchísimo que nos sigan de cerca.
Aún no hay comentarios.