Processeur RISC-V Hazard3

Hazard3 est le processeur au centre de Hazard3-Doom. Il s’agit d’un CPU RISC-V 32 bits compact, in-order et à trois étages, conçu pour une utilisation sur FPGA et ASIC. Le projet Hazard3 fournit également le matériel de débogage environnant et l’intégration SoC d’exemple qui permettent de transformer le cœur CPU en système utilisable.

Cette section explique le processeur d’un point de vue pédagogique et, tout aussi important, sépare le design Hazard3 standard de l”intégration ULX3S/Hazard3-Doom construite autour de lui.

Le lien avec le Raspberry Pi RP2350

Hazard3 est également l’une des architectures de processeur intégrées au microcontrôleur RP2350 de Raspberry Pi. Le RP2350 contient deux cœurs RISC-V Hazard3 open hardware ainsi que deux cœurs Arm Cortex-M33 ; le logiciel ou la configuration OTP sélectionne la paire de processeurs utilisée. Le RP2350 est le microcontrôleur utilisé par les Raspberry Pi Pico 2 et Pico 2 W.

Cela rend le processeur de Hazard3-Doom particulièrement intéressant pour l’apprentissage : le projet FPGA utilise le même design de processeur Hazard3 open source qu’un microcontrôleur Raspberry Pi produit en série. Cela ne signifie cependant pas que les deux CPU synthétisés ont une configuration identique. Hazard3 est paramétrable, et le RP2350 active un ensemble différent d’extensions ISA, d’extensions personnalisées, de fonctions de débogage et d’intégration SoC par rapport à la configuration FPGA Hazard3-Doom décrite ci-dessous.

Références primaires utiles :

Documentation Hazard3 amont

Luke Wren maintient le guide de conception et le manuel de référence Hazard3 complets avec le code source du processeur. Les pages Hazard3-Doom restent centrées sur la configuration et l’intégration utilisées par ce projet, tandis que le manuel amont reste la référence faisant autorité pour le processeur générique.

Note

Le manuel amont rendu suit le développement de Hazard3 et peut décrire des fonctionnalités plus récentes que l’instantané CPU épinglé par Hazard3-Doom. Pour le comportement exact au niveau des cycles, les valeurs de configuration ou les détails RTL de ce projet, utilisez les liens vers la source épinglée dans ces pages.

Instantané source utilisé par ce projet

Les descriptions techniques de ces pages sont rattachées à l’instantané du code source Hazard3 utilisé pour cette revue de documentation :

Important

Le SHA épinglé fait autorité pour le build FPGA décrit ici. Hazard3 amont continue d’évoluer. Une fonctionnalité présente dans les branches amont stable ou develop actuelles n’est pas automatiquement présente dans ce projet tant que le sous-module Hazard3 n’a pas été mis à jour délibérément.

Qu’est-ce que Hazard3 amont ?

Le RTL du processeur sous hdl/ correspond à l’architecture Hazard3 amont : le cœur à trois étages, le front-end d’instructions, le décodeur, les unités arithmétiques, les CSR, la logique d’interruption, les hooks du mode debug, le fichier de registres, le support PMP, les triggers et les wrappers CPU à un ou deux ports. Les mêmes familles de modules architecturaux sont présentes dans Hazard3 amont actuel.

L’amont fournit également un SoC d’exemple minimal et une implémentation du débogage RISC-V. L’exemple amont normal est volontairement petit : processeur, débogage, RAM, UART et timer de plateforme suffisent pour démontrer et déboguer le CPU.

Qu’est-ce qui est personnalisé pour Hazard3-Doom ?

Le fork ULX3S étend la couche du SoC d’exemple et d’intégration de carte plutôt que de transformer Hazard3 en CPU spécifique à Doom. Les ajouts du projet comprennent la SDRAM externe, l’accès vidéo, le SPI de carte SD, l’intégration SAO/ESP32, la logique de broches et de propriété de la carte ainsi qu’une image de moniteur résident préchargée.

Cette frontière est utile pour apprendre le design :

RISC-V software
      |
      v
+-------------------------------+
| Standard Hazard3 CPU          |
| F -> X -> M pipeline          |
| ISA, CSR, traps, debug hooks  |
+-------------------------------+
      |
      | AHB5 master interface
      v
+-------------------------------+
| Example SoC / project fabric  |
| RAM, APB, timer, UART         |  <- upstream foundation
| SDRAM, video, SD, SAO, ESP32  |  <- ULX3S project additions
+-------------------------------+
      |
      v
ECP5 FPGA and board peripherals

Configuration réelle du processeur ULX3S

Le wrapper FPGA ULX3S épinglé sélectionne une configuration RV32I orientée performances. Les principaux réglages effectifs sont :

Fonctionnalité

Réglage du projet

Signification pédagogique

ISA de base

RV32I

ISA entière 32 bits avec 32 registres entiers.

M

Activé

Instructions matérielles de multiplication, division et reste.

C

Activé

Les instructions compressées 16 bits peuvent être mélangées aux instructions 32 bits.

Zba / Zbb / Zbs

Activé

Génération d’adresses, manipulation de bits de base et opérations sur bits individuels.

Zifencei

Activé

Synchronisation du fetch d’instructions avec fence.i.

A

Désactivé

Les instructions mémoire atomiques ne font pas partie de ce CPU synthétisé.

Compteurs machine

Activés

Les CSR de compteurs de cycles/retrait d’instructions sont implémentés.

Support de débogage

Activé

Le CPU se connecte au RISC-V Debug Module de Hazard3.

Mode utilisateur / PMP

Non activés

Ce projet est un système embarqué en mode machine, pas une cible d’OS protégé.

Horloge CPU

50 MHz nominal

Le wrapper transmet CLK_MHZ=50 au SoC d’exemple.

Prédicteur de branche

Activé

Le petit prédicteur de branche arrière de Hazard3 est synthétisé.

Le wrapper exact est fpga_ulx3s.v. Les définitions génériques des paramètres se trouvent dans hazard3_config.vh.

Parcours d’apprentissage