XiangShan – un processeur RISC-V hautes performances open source
(github.com/OpenXiangShan)- XiangShan (香山) est un projet open source visant à créer un processeur RISC-V hautes performances ; la version actuelle, Kunminghu (昆明湖), est en cours de développement sur la branche master
- La documentation est publiée sur docs.xiangshan.cc, et les documents de conception de Kunminghu V2R2 ainsi que le guide utilisateur sont fournis séparément
- Les microarchitectures stables sont Yanqihu (雁栖湖) et Nanhu (南湖) ; Yanqihu est la première microarchitecture stable, développée depuis juin 2020
- Le flux de développement se compose du code de conception Scala, de la conversion FIRRTL, du sous-système de cache, du framework de cosimulation difftest et d’images de simulation précompilées
- Le projet fournit des chemins pour générer du Verilog, exécuter un simulateur basé sur Verilator et lancer xspdb, afin de réaliser la génération de conception et la simulation de programmes au sein du projet
Présentation du projet
- XiangShan (香山) est un projet open source de processeur RISC-V hautes performances
- Une description en chinois est fournie dans un README séparé
- La documentation du projet est disponible sur docs.xiangshan.cc
- Le document de conception de XiangShan pour Kunminghu V2R2 est publié séparément sur docs.xiangshan.cc/projects/design
- Le guide utilisateur de XiangShan est disponible sur docs.xiangshan.cc/projects/user-guide et dans XiangShan-User-Guide/releases
- La traduction de la documentation utilise Weblate et accepte les contributions de traduction en anglais et dans d’autres langues
- Toute la documentation de XiangShan est sous licence CC-BY-4.0
Article publié et méthodologie de développement
- L’article MICRO 2022 « Towards Developing High Performance RISC-V Processors Using Agile Methodology » traite de XiangShan et de l’application de méthodes de développement agiles au développement de processeurs RISC-V hautes performances
- L’article couvre les outils développés et utilisés pour accélérer le processus de conception de puces
- Conception
- Vérification fonctionnelle
- Débogage
- Vérification des performances
- Cet article a reçu les trois badges Available, Functional et Reproduced lors de l’évaluation des artefacts
- Liens vers les ressources :
Versions de microarchitecture
- La première microarchitecture stable est Yanqihu (雁栖湖), disponible sur la branche yanqihu
- Développée depuis juin 2020
- La deuxième microarchitecture stable est Nanhu (南湖), disponible sur la branche nanhu
- La version actuelle est également appelée Kunminghu (昆明湖) et reste en cours de développement sur la branche master
- Le README inclut un schéma de présentation de la microarchitecture Kunminghu
Structure du dépôt
- Les principaux répertoires sont répartis entre code de conception, scripts de développement, sous-modules, cache, cosimulation et images exécutables
src/main/scala: emplacement des fichiers de conceptiondevice: périphériques virtuels pour la simulationsystem: wrapper SoCtop: module de plus haut niveauutils: code utilitairexiangshan: code de conception principalxiangshan/transforms: transformations FIRRTL utiles
scripts: scripts pour le développement agileyunsuan: sous-module yunsuan de XiangShanXSCache: sous-système de cache de XiangShandifftest: framework de cosimulation difftestready-to-run: images de simulation précompilées
IDE et génération de Verilog
- La configuration BSP s’effectue avec
make bsp - La configuration IDEA s’effectue avec
make idea - Le code Verilog se génère avec
make verilog- Plusieurs fichiers
.svsont générés dans le dossierbuild/rtl/ - Un fichier d’exemple est
build/rtl/XSTop.sv - Pour plus d’informations, consulter le
Makefile
- Plusieurs fichiers
Exécution de la simulation
- Pour exécuter un programme en simulation, des variables d’environnement et des outils dépendants sont nécessaires
- Étapes de préparation :
- Définir
NEMU_HOMEsur le chemin absolu du projet NEMU - Définir
NOOP_HOMEsur le chemin absolu du projet XiangShan - Définir
AM_HOMEsur le chemin absolu du projet AM - Installer
mill - Après avoir cloné le projet, initialiser les sous-modules avec
make init
- Définir
- Simulateur basé sur Verilator :
- Nécessite l’installation de Verilator
make emucompile le simulateur C++ basé sur Verilator./build/emu- Les arguments d’exécution sont disponibles avec
./build/emu --help - Pour plus d’informations, consulter le
Makefileetverilator.mk
- Exemples d’exécution :
make emu CONFIG=MinimalConfig EMU_THREADS=2 -j10./build/emu -b 0 -e 0 -i ./ready-to-run/coremark-2-iteration.bin --diff ./ready-to-run/riscv64-nemu-interpreter-so
Modes d’exécution de xspdb
- xspdb peut être utilisé de deux manières
- Démarrage rapide avec un binaire précompilé :
- Aucune compilation n’est nécessaire, et un environnement Python standard suffit pour l’exécuter
- Fournit une expérience XiangShan complète avec une faible consommation mémoire
- La dernière version de XSPdb est disponible dans le résumé d’exécution du workflow Actions du dépôt
- Compilation depuis le code source :
- Nécessite l’installation de l’outil de vérification picker, qui prend en charge les langages de haut niveau
make pdbcompile le binaire Python de XiangShanmake pdb-runexécute le binaire XiangShan
- Les exemples d’interaction avec xspdb incluent le chargement d’un binaire, la définition d’un watchpoint sur le PC de commit, l’exécution pas à pas instruction par instruction, l’affichage des informations de PC et l’exécution jusqu’au point de sortie du binaire
Dépannage, communauté et licence
- La documentation de dépannage est disponible dans le Troubleshooting Guide
- Canaux de contact :
- WeChat : 香山开源处理器
- Zhihu : 香山开源处理器
- Weibo : 香山开源处理器
- Liste de diffusion : xiangshan-all@ict.ac.cn
- Archives de la liste de diffusion : mail-archive.com
- L’implémentation s’inspire de plusieurs articles majeurs ; la liste des articles concernés se trouve dans les Acknowledgements de la documentation XiangShan
- Les mentions de copyright incluent les institutions suivantes
- 2020-2025 Institute of Computing Technology, Chinese Academy of Sciences
- 2021-2025 Beijing Institute of Open Source Chip
- 2020-2022 Peng Cheng Laboratory
- XiangShan est sous licence Mulan PSL v2
1 commentaires
Avis sur Hacker News
Si vous voulez essayer une simulation, vous pouvez créer un environnement basé sur Ubuntu 24.04 avec le Dockerfile que j’utilise.
Il clone
OpenXiangShan/xs-env, installe les outils, installe Verilator, initialise XiangShan, compile DRAMsim3, compile l’émulateurDefaultConfig, puis compile l’exemplenexus-am/apps/hello.Il faut 64 Go de RAM ; dans mon cas, ça a fonctionné avec 16 Go de RAM et 48 Go de swap ajoutés. Il peut y avoir des étapes redondantes, mais c’est la méthode qui a marché lors de mon dernier essai.
Ce projet est le premier depuis longtemps à vraiment me stimuler intellectuellement, parce qu’il recoupe étrangement plusieurs de mes centres d’intérêt récents.
Mais même après un survol très rapide, j’ai eu beaucoup d’empathie pour les utilisateurs non anglophones. Le README est assez accueillant pour un anglophone, mais en le lisant j’avais l’impression de devoir constamment remplacer mentalement les noms de tokens pour suivre, et deux choses m’ont sauté aux yeux.
Premièrement, cela m’a rappelé pourquoi je n’arrive pas à aller au bout des classiques russes : des noms qui ne font pas partie de l’ensemble de noms qui m’est familier arrivent en rafale dès le début, et je me perds comme lors d’un cache miss.
Deuxièmement, les anglophones n’ont pas vraiment eu besoin de développer ce muscle culturel. La Terre utilise l’anglais plus ou moins comme langue commune depuis assez longtemps, et cela m’a aussi rappelé la blague : « Comment appelle-t-on quelqu’un qui ne parle qu’une seule langue ? Monolingue… non, je plaisante : Américain. »
On pourrait imaginer qu’un registre public prétraitant les tokens dans la documentation et le code soit maintenu par des « Américains comme moi ». Un registre de définitions façon
DefinitelyTypedserait très niche, mais sans doute assez utile.https://structuredprocrastination.com/light/biling.php
https://github.com/OpenXiangShan/XiangShan-doc/blob/main/doc...
La liste des instructions fusionnées est assez particulière. À part celles correspondant à
SH{1,2,3,4}ADD, je ne m’attendais pas vraiment au reste.Je lis avec Google Translate, mais je n’y vois pas non plus l’exécution conditionnelle de sauts courts à la manière de SiFive.
Le wiki technique qu’ils utilisent est assez difficile à parcourir et à rechercher, et les dépôts GitHub non officiels ne sont pas vraiment meilleurs, au point qu’il est difficile de savoir si cela existe même.
J’avais déjà publié un lien vers ce projet il y a quelques semaines, et c’est vraiment intéressant de voir ce genre de projet académique.
Pour ceux que ça intéresse, le blog bimensuel est lié ici, et certains billets sont aussi disponibles en anglais : https://docs.xiangshan.cc/zh-cn/latest/blog/
J’aime le fait que les noms de microarchitectures suivent un thème de lacs, comme Yanqihu (雁栖湖), Nanhu (南湖) et Kunminghu (昆明湖).
Coffee Lake ? Skylake ? Non, Kunming Lake.
https://en.m.wikipedia.org/wiki/List_of_Intel_codenames
Il faut bien noter que la Chine progresse fortement en IA, robotique et processeurs, et il est aussi impressionnant qu’une grande partie de ces travaux soit publiée en open source.
Excellent travail, et très inspirant.
La culture chinoise est structurée autour de la reproduction constante et de l’amélioration incrémentale, et cela remonte au moins à l’époque de Confucius. Certains y voient du copiage sans discernement, mais en réalité c’est plutôt une manière d’apprendre en profondeur et de se hisser sur les épaules des autres.
Cette attitude de « forker » s’accorde assez bien avec l’open source, même si elle peut évidemment être agaçante du point de vue des licences de propriété intellectuelle ou des brevets.
Cela ne veut toutefois pas dire que cette ouverture s’étend facilement hors de Chine, en particulier au-delà de la culture et de la sphère linguistique chinoises.
Il existe un produit commercial utilisant l’ancienne architecture Nanhu de XiangShan. Il ne semble pas encore être sorti, mais c’est tout de même intéressant.
https://milkv.io/ja/ruyibook
Quelle est la stratégie derrière le fait de publier ça en open source ?
L’un des points mentionnés était qu’ils souhaitent que RISC-V en général, et leurs cœurs en particulier, deviennent une plateforme de recherche académique. Ainsi, les idées de pointe sont partagées publiquement et l’industrie en bénéficie à l’échelle mondiale.
Vu avec optimisme, c’est le souhait d’un meilleur avenir pour tous ; vu avec cynisme, l’open source est beaucoup plus difficile à sanctionner ou à contrôler à l’export. La vérité se situe probablement quelque part entre les deux.
De toute façon, il est difficile d’en tirer de l’argent, les universités l’autorisent généralement, et c’est très bon pour le CV.
Il y a aussi beaucoup d’open source en Europe et, franchement, les gouvernements ne complotent pas pour détruire les États-Unis. Je ne vois pas Linux comme un plan du gouvernement suédois pour détruire l’Amérique.
D’après mon expérience, la plupart des Chinois ne se préoccupent pas beaucoup des pays hors de Chine, sauf s’ils travaillent dans le commerce international. La Chine est tellement grande, même comparée à des pays comme les États-Unis, qu’on a l’impression d’y vivre dans sa propre bulle ; je ne pense pas qu’ils réfléchissent à ce genre de questions tous les jours, ni même tous les mois.
C’est une façon de distribuer gratuitement quelque chose d’« assez bon » qui attaque le fossé concurrentiel de l’adversaire. Si l’écart n’est pas énorme, cela peut même abîmer son activité.
On peut voir de la même manière le financement d’OpenStreetMap par Apple et les grandes entreprises tech face à Google Maps. Réduire les revenus d’un concurrent a déjà une valeur stratégique.
C’est aussi dans le même esprit que Satya Nadella disant en interview que si ChatGPT ne faisait qu’augmenter les coûts de Google Search, ce serait déjà une grande victoire pour Microsoft.
Content de voir un autre projet qui utilise Chisel. Je me demande dans quelle direction va l’industrie.
Verilog et VHDL semblent mûrs pour être remplacés. Je me souviens avoir utilisé l’un des deux à l’université, et c’était vraiment désagréable.
Mon directeur de mémoire de licence dirige une entreprise qui essaie de remplacer Verilog et VHDL, et cela fait largement plus de dix ans qu’il s’y consacre. Je n’ai pas l’impression que cela ait encore laissé une grande trace, même si je n’ai pas continué à suivre ce domaine : https://github.com/clash-lang/clash-compiler
Il existe aussi une implémentation RISC-V écrite avec cet outil.
Les outils dans ce domaine sont trop coûteux à créer et à valider, et le marché est trop petit ; il semble presque impossible que quelque chose émerge dans un délai raisonnable pour menacer l’écosystème existant.