ISA et configuration
Hazard3 est fortement paramétrable. Il est important de distinguer trois choses :
ce que le RTL Hazard3 est capable d’implémenter ;
les valeurs par défaut de la configuration générique ; et
ce que le wrapper ULX3S Hazard3-Doom sélectionne réellement.
La liste de paramètres épinglée faisant autorité est hazard3_config.vh. Les valeurs ULX3S sélectionnées se trouvent dans fpga_ulx3s.v.
Profil ISA du projet
Le profil effectif du projet est une base RV32I avec certaines extensions standard :
Fonction ISA |
Paramètre Hazard3 |
Projet |
Rôle |
|---|---|---|---|
RV32I |
|
Activé |
ISA entière de base 32 bits avec 32 registres. |
M |
|
Activé |
Multiplication/division/reste entiers. |
A |
|
Désactivé |
Les opérations mémoire atomiques sont volontairement absentes de ce build. |
C |
|
Activé |
Encodages d’instructions compressées 16 bits. |
Zba |
|
Activé |
Opérations de génération d’adresses telles que les formes scaled-add. |
Zbb |
|
Activé |
Opérations de manipulation de bits de base. |
Zbs |
|
Activé |
Opérations set/clear/invert/extract sur bit individuel. |
Zifencei |
|
Activé |
Synchronisation du fetch d’instructions |
Zbc |
|
Désactivé |
Multiplication sans retenue non synthétisée. |
Zbkb |
|
Désactivé |
Opérations de bits de base orientées crypto scalaire non synthétisées. |
Zbkx |
|
Désactivé par défaut |
Sous-ensemble de permutation crossbar non sélectionné par le wrapper. |
Zcb / Zclsd / Zcmp |
paramètres correspondants |
Désactivés par défaut |
Sous-ensembles supplémentaires d’instructions compressées non sélectionnés. |
Zilsd |
|
Désactivé par défaut |
Extension de paires load/store non sélectionnée. |
Le comportement Zicsr est présent car les blocs CSR machine requis par ce
SoC sont activés. CSR_COUNTER=1 active les compteurs de performance et
l’implémentation des CSR Zicntr dans cet instantané Hazard3. Le mode utilisateur
lui-même reste désactivé dans ce projet.
Configuration des privilèges et de la protection
Le SoC d’exemple ULX3S impose les réglages nécessaires à un système utile en mode machine :
Réglage |
Valeur effective |
Signification |
|---|---|---|
|
1 |
Support CSR d’identification/état requis au niveau machine. |
|
1 |
Support CSR des traps/interruptions machine. |
|
0 (par défaut) |
Pas d’exécution en mode utilisateur dans ce build. |
|
0 (par défaut) |
Aucune région Physical Memory Protection dans ce build. |
|
1 |
Mode debug et intégration au Debug Module externe activés. |
|
0 (par défaut) |
Aucun slot optionnel de trigger d’adresse d’instruction sélectionné. |
|
1 |
Une entrée d’interruption externe ; le SoC d’exemple y connecte l’IRQ UART. |
Ne confondez pas « Hazard3 prend en charge le mode utilisateur/PMP/triggers » avec « ce bitstream les contient ». Le premier est une capacité du CPU amont ; le second dépend des paramètres de synthèse.
Réglages orientés performances
Le projet redéfinit également des choix d’implémentation qui ne sont pas des extensions ISA :
Paramètre |
Valeur projet |
Effet |
|---|---|---|
|
0 |
Conserver le réseau normal de forwarding, plus complet. |
|
1 |
Activer l’implémentation de multiplication rapide. |
|
1 |
Activer le chemin de multiplication supplémentaire à plus faible latence fourni par cet instantané. |
|
1 |
Accélérer les opérations de multiplication de moitié haute. |
|
4 |
Effectuer davantage de travail itératif multiplication/division par cycle que la configuration minimale. |
|
1 |
Synthétiser le chemin de comparaison rapide de branche. |
|
1 |
Activer la petite structure de prédiction des branches arrière. |
|
0 |
Ne pas dépenser de logique de reset pour effacer les registres généraux. |
Pourquoi RESET_REGFILE vaut zéro sur FPGA
Ici, 0 signifie que le reset du fichier de registres généraux est
désactivé ; cela ne signifie pas que les registres x1 à x31 sont
remis à zéro. Le registre x0 reste architecturalement câblé à zéro.
Le guide de conception Hazard3 amont recommande RESET_REGFILE=0 pour la
synthèse FPGA, car les block RAM et LUT RAM des FPGA ne peuvent souvent pas
implémenter efficacement le reset demandé du fichier de registres. Une valeur
de 1 peut forcer l’utilisation de bascules de la logique générale, avec
un coût important en surface et en timing. Voir le Guide de conception et
manuel de référence Hazard3 amont, section
FPGA Synthesis.
Conséquence logicielle
Le logiciel doit être compilé pour l’ISA réellement présente dans le FPGA, pas pour le sur-ensemble que Hazard3 peut théoriquement synthétiser. Une sélection d’architecture représentative pour du code destiné uniquement à cette configuration est conceptuellement :
rv32imc + zba + zbb + zbs + zicsr + zifencei
L’orthographe exacte de -march pour GCC/LLVM doit suivre la syntaxe
d’extensions acceptée par la chaîne d’outils installée et les scripts de build
du projet. En particulier, n’activez pas A simplement parce que Hazard3
amont prend en charge les atomics.
Amont contre instantané épinglé
Hazard3 amont actuel continue d’ajouter des fonctionnalités et des améliorations d’implémentation. Ces changements sont une documentation de référence utile, mais le commit ULX3S épinglé reste la source correcte pour répondre aux questions de cycle ou de configuration concernant cette image FPGA précise.
Pour l’étude architecturale, utilisez les deux :
Configuration projet épinglée - options exactes et valeurs par défaut disponibles dans cet instantané.
Configuration stable amont actuelle - direction actuellement maintenue en amont.
Comment la configuration atteint le cœur
Hazard3 conserve ses paramètres de configuration dans un fichier include partagé et les propage dans la hiérarchie avec
hazard3_config_inst.vh. C’est un modèle pédagogique propre pour un RTL configurable : l’intégrateur de haut niveau peut modifier une fonctionnalité sans éditer chaque module du pipeline.Vue simplifiée :
fpga_ulx3s.v sets feature/performance parameters | v example_soc.v | v hazard3_cpu_1port.v | v hazard3_core.v + decoder/CSR/ALU/front endLe décodeur utilise ensuite ces paramètres pour rendre illégaux les encodages d’instructions non pris en charge. Voir hazard3_decode.v pour le décodage conditionné par les extensions. Par exemple, les opcodes de l’extension M ne sont routés vers le chemin multiplication/division que lorsque
EXTENSION_Mest activé, et les encodages atomiques exigentEXTENSION_A.