ISA i konfiguracija
Hazard3 je snažno parametriziran. Važno je razlikovati tri stvari:
što Hazard3 RTL može implementirati;
koje su zadane vrijednosti generičke konfiguracije; i
što ULX3S Hazard3-Doom wrapper zapravo odabire.
Mjerodavan fiksirani popis parametara je hazard3_config.vh. Odabrane ULX3S vrijednosti nalaze se u fpga_ulx3s.v.
Projektni ISA profil
Efektivni projektni profil je RV32I baza s odabranim standardnim ekstenzijama:
ISA značajka |
Hazard3 parametar |
Projekt |
Namjena |
|---|---|---|---|
RV32I |
|
Omogućeno |
Puni 32-registarski 32-bitni cjelobrojni osnovni ISA. |
M |
|
Omogućeno |
Cjelobrojno množenje/dijeljenje/ostatak. |
A |
|
Onemogućeno |
Atomske memorijske operacije namjerno nisu prisutne u ovoj izgradnji. |
C |
|
Omogućeno |
16-bitna kodiranja komprimiranih instrukcija. |
Zba |
|
Omogućeno |
Operacije generiranja adresa poput skaliranih add oblika. |
Zbb |
|
Omogućeno |
Osnovne operacije manipulacije bitovima. |
Zbs |
|
Omogućeno |
Operacije postavljanja/brisanja/invertiranja/izdvajanja pojedinačnog bita. |
Zifencei |
|
Omogućeno |
|
Zbc |
|
Onemogućeno |
Carry-less množenje nije sintetizirano. |
Zbkb |
|
Onemogućeno |
Osnovne bitovne operacije usmjerene na scalar crypto nisu sintetizirane. |
Zbkx |
|
Zadano onemogućeno |
Crossbar permutation podskup nije odabran wrapperom. |
Zcb / Zclsd / Zcmp |
odgovarajući parametri |
Zadano onemogućeno |
Dodatni podskupovi komprimiranih instrukcija nisu odabrani. |
Zilsd |
|
Zadano onemogućeno |
Load/store pair ekstenzija nije odabrana. |
Ponašanje Zicsr prisutno je jer su omogućeni machine CSR blokovi potrebni
ovom SoC-u. CSR_COUNTER=1 omogućuje brojače performansi i implementaciju
Zicntr CSR-ova u ovom Hazard3 snimku. Sam user mode ostaje onemogućen u projektu.
Kako konfiguracija dolazi do jezgre
Hazard3 drži svoje konfiguracijske parametre u jednoj zajedničkoj include
datoteci i prosljeđuje ih niz hijerarhiju pomoću hazard3_config_inst.vh.
To je čist obrazovni obrazac za podesivi RTL: top-level integrator može
promijeniti značajku bez uređivanja pojedinačnih pipeline modula.
Pojednostavljeni prikaz je:
fpga_ulx3s.v
sets feature/performance parameters
|
v
example_soc.v
|
v
hazard3_cpu_1port.v
|
v
hazard3_core.v + decoder/CSR/ALU/front end
Dekoder zatim koristi te parametre kako bi nepodržana kodiranja instrukcija
učinio nedopuštenima. Pogledajte
hazard3_decode.v za decode kontroliran ekstenzijama.
Primjerice, opcodeovi M ekstenzije usmjeravaju se na multiply/divide put samo
kada je EXTENSION_M omogućen, a atomska kodiranja zahtijevaju EXTENSION_A.
Konfiguracija privilegija i zaštite
ULX3S example SoC prisiljava postavke potrebne za koristan machine-mode sustav:
Postavka |
Efektivna vrijednost |
Značenje |
|---|---|---|
|
1 |
Potrebna machine-level podrška za identifikacijske/statusne CSR-ove. |
|
1 |
Podrška za machine trap/interrupt CSR-ove. |
|
0 (zadano) |
Nema user-mode izvršavanja u ovoj projektnoj izgradnji. |
|
0 (zadano) |
Nema Physical Memory Protection regija u ovoj projektnoj izgradnji. |
|
1 |
Omogućen debug mode i integracija vanjskog Debug Modulea. |
|
0 (zadano) |
Nisu odabrani opcionalni slotovi triggera na adresu instrukcije. |
|
1 |
Jedan ulaz vanjskog prekida; example SoC ovdje spaja UART IRQ. |
Nemojte miješati tvrdnju „Hazard3 podržava user mode/PMP/triggere” s tvrdnjom „ovaj bitstream ih sadrži”. Prvo je sposobnost upstream CPU-a; drugo ovisi o parametrima sinteze.
Postavke usmjerene na performanse
Projekt također mijenja implementacijske izbore koji nisu ISA ekstenzije:
Parametar |
Vrijednost projekta |
Učinak |
|---|---|---|
|
0 |
Zadržava uobičajenu, potpuniju forwarding mrežu. |
|
1 |
Omogućuje brzu implementaciju množenja. |
|
1 |
Omogućuje dodatni put množenja manje latencije koji ovaj snimak pruža. |
|
1 |
Ubrzava operacije množenja gornje polovice. |
|
4 |
Obavlja više iterativnog multiply/divide rada po ciklusu od minimalne konfiguracije. |
|
1 |
Sintetizira brzi komparator grananja. |
|
1 |
Omogućuje malu strukturu predviđanja grananja unatrag. |
|
0 |
Ne troši reset logiku na brisanje registara opće namjene. |
Zašto je RESET_REGFILE nula na FPGA-u
Ovdje 0 znači da je reset registarske datoteke opće namjene
onemogućen; ne znači da se registri x1 do x31 brišu na nulu.
Registar x0 arhitekturno ostaje trajno spojen na nulu.
Upstream Hazard3 vodič preporučuje RESET_REGFILE=0 za FPGA sintezu jer
FPGA block RAM i LUT RAM često ne mogu učinkovito implementirati traženi
reset registarske datoteke. Vrijednost 1 može prisiliti implementaciju
registarske datoteke u flip-flopovima logičkog fabric-a, uz značajan trošak
površine i timinga. Pogledajte upstream Hazard3 vodič za dizajn i referentni
priručnik, odjeljak FPGA Synthesis.
Posljedica za softver
Softver treba prevoditi za ISA koji je stvarno prisutan u FPGA-u, a ne za nadskup koji Hazard3 teoretski može sintetizirati. Reprezentativan odabir arhitekture za kod namijenjen samo ovoj konfiguraciji konceptualno je:
rv32imc + zba + zbb + zbs + zicsr + zifencei
Točan GCC/LLVM zapis za -march treba pratiti sintaksu ekstenzija koju
prihvaća instalirani alatni lanac i projektne build skripte. Posebno, nemojte
omogućiti A samo zato što upstream Hazard3 podržava atomike.
Upstream u odnosu na fiksirani snimak
Trenutačni upstream Hazard3 nastavlja dodavati značajke i implementacijska poboljšanja. Te su promjene vrijedan referentni materijal, ali fiksirani ULX3S commit ostaje ispravan izvor za pitanja na razini ciklusa ili konfiguracije ove konkretne FPGA slike.
Za arhitekturno proučavanje koristite oba:
Fiksirana projektna konfiguracija - točne opcije i zadane vrijednosti dostupne ovom snimku.
Trenutačna upstream stable konfiguracija - trenutačni održavani smjer upstreama.