basic_RV32s : guide open source de conception d’un CPU RISC-V RV32I
(github.com/RISC-KC)Voici basic_RV32s, un projet pratique qui permet d’acquérir les bases de la conception d’un CPU RISC-V à travers l’étude de 4 CPU et de 2 conceptions de SoC.
Résumé de basic_RV32s
- softcore CPU RISC-V RV32I exécutable sur FPGA, développé sur 6 mois pendant le service militaire
- performances atteintes : Dhrystone 1.11 DMIPS/MHz, Coremark 1.10 Coremark/MHz
Des performances parmi les meilleures dans les articles coréens sur des CPU basés sur RV32I.
(référence à 11 articles incluant un benchmark RV32I parmi 126 articles du RISS, à la date de rédaction)
(exécution à @50MHz) - processus de conception progressif du CPU et conception du SoC
- 3 cœurs single-cycle, (37F, 43F, 46F)
- 1 cœur pipeline à 5 étapes, (46F5SP)
- 2 conceptions de SoC intégrant le cœur pipeline
(46F5SP_SoC - Debug, Benchmark)
- abstraction des modules de haut niveau intuitive et facile à comprendre, ainsi qu’une conception lisible
- fourniture de nombreux documents pour apprendre la conception de CPU RISC-V
- feuille Excel RV32I Cheatsheet
- journal de développement, traces de débogage
- directives de conception d’architecture
- documents expliquant toute l’architecture et la logique de chaque module
- directives de portage bare metal
- directives de build du RISC-V GNU GCC Toolchain RV32I
- directives d’exécution bare metal du benchmark Dhrystone sur RV32I, etc.
- code en structure à double format, avec version clean code sans commentaires et version commentée
- schémas blocs d’architecture au niveau signal fournis
- deux étudiants de 2e année de licence ont soumis seuls un article et l’ont présenté à ISOCC 2025
- référencé dans le dépôt officiel d’apprentissage RISC-V
riscv/learn- Learning Resources - Intermediate-Level Resource
Contexte de développement
Le 15 décembre 2024, pendant mon service militaire, j’ai lancé avec un camarade de promotion un projet visant à fabriquer directement un CPU. C’était justement son premier anniversaire il y a peu !
Construire un CPU RISC-V fondé sur les bases de l’architecture des ordinateurs était relativement accessible à apprendre, tant la théorie est abondante et les manuels nombreux. Mais une fois devant le clavier, c’était une toute autre histoire.
C’était mon premier vrai projet en VerilogHDL, que je n’avais appris qu’assez superficiellement à l’université, et j’ai découvert qu’il n’existait presque pas d’exemples open source concrets de RISC-V accompagnés de documentation, de manuels et de directives pour fabriquer un CPU RISC-V, au-delà de la simple capacité à coder. (sur la base de riscv/learn - open implementations)
Bien sûr, démonter et analyser des cœurs déjà implémentés comme NEORV32 ou DarkRISCV est une bonne manière d’apprendre, mais pour les questions de conception, comme la philosophie de design ou l’historique de développement, il était assez difficile de comprendre précisément les fondements et les raisons de ces choix.
J’ai donc décidé d’étendre ce projet pour qu’il ne soit pas seulement une implémentation open source d’un CPU RISC-V, mais aussi un guide open source complet pour construire un CPU RISC-V RV32I. Je me suis dit que la trace de progression d’un débutant pourrait devenir un bon point d’appui pour les débutants suivants.
basic_RV32s en bref
Comme indiqué dans le résumé ci-dessus, le projet inclut des journaux de développement, de la documentation sur la conception du cœur, ainsi que des notes de correction sur la fabrication d’un CPU RISC-V, et vise les débutants en conception matérielle RISC-V comme moi, avec une architecture fondée sur la méthodologie Patterson-Hennessy.
La conception centrale commence avec l’architecture 37F, qui prend en charge 37 instructions en RV32I, puis s’étend progressivement comme suit :
- 37F : architecture de base, single-cycle
- 43F : prise en charge de 6 instructions d’extension Zicsr
- 46F : prise en charge des instructions EBREAK, ECALL et
mret - 46F5SP : extension pipeline à 5 étapes avec data forwarding et prédicteur de branchement dynamique FSM 2 bits
Pour implémenter le cœur sur FPGA, nous avons conçu 46F5SP_SoC en deux versions :
- version débogage
Elle permet de déboguer les instructions et d’observer via UART, en appuyant sur des boutons, le déroulement de l’exécution étape par étape. - version benchmark
Elle permet d’exécuter Dhrystone, Coremark, etc., et d’obtenir directement les résultats via UART.
Le 46F5SP_MMIO_SoC, mis à jour récemment, implémente un MMIO avec sortie UART et prend donc en charge la fonctionnalité printf. Une fois compilé avec les fichiers BSP appropriés, notamment le linker, le script de boot et les syscall, ce SoC permet d’obtenir directement les résultats de plusieurs programmes en C comme Dhrystone 2.1 ou Coremark.
Conclusion
Nous espérons que notre passion pour RISC-V aidera les débutants à se lancer. Et le point le plus important, c’est que l’ensemble de ce projet est open source !
Cela signifie qu’en s’appuyant sur ce projet, il est possible de créer de meilleurs tutoriels d’apprentissage, de la documentation et des designs de processeurs pour la communauté RISC-V, et que tout le monde peut contribuer librement.
Je pense qu’il faut encore davantage pour atteindre cet objectif. En menant ce projet, j’ai compris que la validation n’a pas de fin, et comme je ne suis pas expert, il peut y avoir de nombreuses erreurs qui m’échappent, y compris divers hazards. C’est pourquoi le dépôt n’est pas figé et reste ouvert ! J’espère vraiment que des personnes expérimentées prendront le temps d’examiner notre travail et de nous faire des retours : ce serait d’une grande aide, non seulement pour nous, mais aussi pour toutes les personnes qui apprennent à partir de ce projet.
Ensuite
Nous avons désormais terminé l’extension au-delà de RV32I vers RV64I et poursuivons notre progression vers RV64IM, puis au-delà vers le rêve initial : créer un CPU généraliste coréen (RVA23). Nous nous consacrons actuellement au développement jusqu’à l’extension RV64IMA dans un dépôt nommé ima_make_rv64. Merci infiniment de nous suivre.
Aucun commentaire pour le moment.