Hazard3 RISC-V procesor

Hazard3 je procesor u središtu Hazard3-Dooma. To je kompaktan, in-order, trostupanjski 32-bitni RISC-V CPU namijenjen FPGA i ASIC primjenama. Projekt Hazard3 također pruža okolni debug hardver i primjer SoC integracije koji se koriste za pretvaranje CPU jezgre u upotrebljiv sustav.

Ovaj odjeljak objašnjava procesor iz obrazovne perspektive i, jednako važno, odvaja standardni Hazard3 dizajn od ULX3S/Hazard3-Doom integracije izgrađene oko njega.

Veza s Raspberry Pi RP2350

Hazard3 je također jedna od procesorskih arhitektura ugrađenih u Raspberry Pi RP2350 mikrokontroler. RP2350 sadrži dvije open-hardware Hazard3 RISC-V jezgre uz dvije Arm Cortex-M33 jezgre; softver ili OTP konfiguracija odabire koji se par procesora koristi. RP2350 je mikrokontroler koji se koristi na Raspberry Pi Pico 2 i Pico 2 W pločicama.

Zbog toga je procesor u Hazard3-Doomu posebno zanimljiv za učenje: FPGA projekt koristi isti open-source Hazard3 procesorski dizajn koji se koristi i u serijski proizvedenom Raspberry Pi mikrokontroleru. To ipak ne znači da su dva sintetizirana CPU-a konfigurirana identično. Hazard3 je parametriziran, a RP2350 uključuje drukčiji skup ISA ekstenzija, prilagođenih ekstenzija, debug značajki i SoC integracije od Hazard3-Doom FPGA konfiguracije opisane u nastavku.

Korisne primarne reference:

Upstream Hazard3 dokumentacija

Luke Wren održava potpuni Hazard3 vodič za dizajn i referentni priručnik uz izvorni kod procesora. Hazard3-Doom stranice ostaju usredotočene na konfiguraciju i integraciju koju koristi ovaj projekt, dok upstream priručnik ostaje mjerodavna referenca za generički procesor.

Napomena

Renderirani upstream priručnik prati razvoj Hazard3 projekta i može opisivati značajke novije od CPU snimka fiksiranog u Hazard3-Doomu. Za točno ponašanje na razini ciklusa, zadane konfiguracijske vrijednosti ili RTL detalje ovog projekta koristite poveznice na fiksirani izvor na ovim stranicama.

Snimak izvornog koda koji ovaj projekt koristi

Tehnički opisi na ovim stranicama vezani su uz Hazard3 snimak izvornog koda korišten za ovaj pregled dokumentacije:

Važno

Fiksirani SHA mjerodavan je za ovdje opisanu FPGA izgradnju. Upstream Hazard3 nastavlja se razvijati. Značajka prisutna u trenutačnom upstreamu stable ili develop nije automatski prisutna u ovom projektu dok se podmodul Hazard3 namjerno ne ažurira.

Što je upstream Hazard3?

Procesorski RTL u hdl/ dio je upstream Hazard3 arhitekture: trostupanjska jezgra, instruction frontend, dekoder, aritmetičke jedinice, CSR-ovi, logika prekida, debug-mode hookovi, registarska datoteka, PMP podrška, triggeri te jednoportni/dvoportni CPU wrapperi. Iste obitelji arhitekturnih modula prisutne su i u trenutačnom upstream Hazard3 projektu.

Upstream također pruža minimalni primjer SoC-a i RISC-V debug implementaciju. Uobičajeni upstream primjer namjerno je malen: procesor, debug, RAM, UART i platformski timer dovoljni su za demonstraciju i debugiranje CPU-a.

Što je prilagođeno za Hazard3-Doom?

ULX3S fork proširuje example-SoC i sloj integracije pločice umjesto da Hazard3 pretvara u CPU specifičan za Doom. Projektne dopune uključuju podršku za vanjski SDRAM, video pristup, SD-card SPI, SAO/ESP32 integraciju, logiku pinova i vlasništva pločice te unaprijed učitanu sliku rezidentnog monitora.

Ta granica korisna je pri učenju dizajna:

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

Stvarna ULX3S konfiguracija procesora

Fiksirani ULX3S FPGA wrapper odabire konfiguraciju RV32I usmjerenu na performanse. Važne efektivne postavke su:

Značajka

Postavka projekta

Obrazovno značenje

Osnovni ISA

RV32I

32-bitni cjelobrojni ISA s 32 cjelobrojna registra.

M

Omogućeno

Hardverske instrukcije množenja, dijeljenja i ostatka.

C

Omogućeno

16-bitne komprimirane instrukcije mogu se miješati s 32-bitnim instrukcijama.

Zba / Zbb / Zbs

Omogućeno

Generiranje adresa, osnovna manipulacija bitovima i operacije nad pojedinačnim bitovima.

Zifencei

Omogućeno

Sinkronizacija dohvata instrukcija pomoću fence.i.

A

Onemogućeno

Atomske memorijske instrukcije nisu dio ovog sintetiziranog CPU-a.

Machine brojači

Omogućeno

Implementirani su CSR-ovi brojača ciklusa/umirovljenih instrukcija.

Debug podrška

Omogućeno

CPU se povezuje s Hazard3 RISC-V Debug Moduleom.

User mode / PMP

Nije omogućeno

Ovaj projekt je ugrađeni machine-mode sustav, a ne cilj za zaštićeni OS.

CPU takt

Nominalno 50 MHz

Wrapper prosljeđuje CLK_MHZ=50 example SoC-u.

Prediktor grananja

Omogućeno

Sintetizira se Hazard3 mali prediktor grananja unatrag.

Točan wrapper je fpga_ulx3s.v. Definicije generičkih parametara nalaze se u hazard3_config.vh.

Put učenja