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:
commit ULX3S Hazard3 forka:
3c0aca063517bb7fdbe869019c984954c7dd5c97upstream Hazard3 stable commit pregledan ovdje:
8af992930f71a69b0e06c38734c1094f41a05ca0
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. |
|
Omogućeno |
Hardverske instrukcije množenja, dijeljenja i ostatka. |
|
Omogućeno |
16-bitne komprimirane instrukcije mogu se miješati s 32-bitnim instrukcijama. |
|
Omogućeno |
Generiranje adresa, osnovna manipulacija bitovima i operacije nad pojedinačnim bitovima. |
|
Omogućeno |
Sinkronizacija dohvata instrukcija pomoću |
|
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 |
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.