Memorija i sabirničko sučelje
Hazard3 odvaja procesorski cjevovod od sistemske memorijske mape. To je odvajanje posebno važno u projektu Hazard3-Doom jer je većina velikog memorijskog i grafičkog sklopa dodatak SoC-a specifičan za projekt, a ne dio CPU jezgre.
Transakcijska sučelja na strani jezgre
hazard3_core.v ima logički odvojene kanale za:
dohvat instrukcija; i
pristupe podacima za učitavanje/spremanje.
To omogućuje da se ista jezgra ugradi u različite sistemske arhitekture. Standardni Hazard3 omotači prikazuju dva uobičajena izbora:
hazard3_cpu_2portZadržava AHB5 promet instrukcija i podataka na odvojenim glavnim portovima.
hazard3_cpu_1portArbitrira zahtjeve instrukcija i podataka na jedan AHB5 glavni port.
Hazard3-Doom instancira hazard3_cpu_1port.v. Ovo je prvo mjesto na kojem student treba razlikovati paralelizam cjevovoda od paralelizma memorijske sabirnice: i F i M mogu istodobno imati razlog za pristup memoriji, ali jednoulazni omotač mora serijalizirati pristup zajedničkom vanjskom glavnom sučelju.
AHB5 pojmovi vidljivi u omotaču
Omotač izlaže poznate AHB signale adresne/upravljačke i podatkovne faze,
uključujući adresu, vrstu prijenosa, veličinu, smjer pisanja, odgovor, ready te
podatke za čitanje/pisanje. Sadrži i signale za ekskluzivni pristup koji se
koriste kada se sintetizira opcionalno Hazard3 proširenje A.
Projekt onemogućuje EXTENSION_A, pa softver u ovom bitstreamu ne može
izvršavati RISC-V atomske memorijske instrukcije, iako standardni omotač ima
potrebnu sabirničku infrastrukturu za konfiguracije koje ih omogućuju.
Hijerarhija sabirnice SoC-a
Na visokoj razini, memorijski put projekta izgleda ovako:
+-------------------+
instruction ----->| |
| hazard3_cpu_1port |---- AHB5 ----+
load/store ------>| | |
+-------------------+ v
+---------------+
| example SoC |
| decode/fabric |
+---------------+
| | |
SRAM APB SDRAM
CPU ne mora znati završava li neka adresa u ECP5 blokovskom RAM-u, APB UART-u, vanjskom SDRAM-u ili projektnom video prozoru. Izdaje uobičajeno arhitekturno učitavanje/spremanje, a dekodiranje adrese u SoC-u određuje odredište.
Reset vektor i rezidentni SRAM
Prikvačeni primjer SoC-a instancira procesor s:
RESET_VECTOR = 0x00000040
ULX3S omotač konfigurira 128 KiB interne SRAM memorije i koristi
hazard3_boot.hex kao sliku za predpunjenje. To je prilagodba ovog projekta:
omogućuje da rezidentni monitor bude prisutan odmah nakon konfiguriranja FPGA-a,
tako da hladno pokretanje ne ovisi o prethodnom preuzimanju koda kroz debugger.
Relevantne lokacije izvornog koda su:
example_soc.v - CPU reset vektor i integracija memorije/periferije SoC-a.
fpga_ulx3s.v - dubina SRAM-a od 128 KiB, naziv datoteke za predpunjenje, opcije pločice i odabrani CPU parametri.
hazard3_boot.hex - generirana inicijalizacijska slika rezidentnog monitora u ovoj snimci forka.
Pogledajte Memorijska mapa za memorijsku mapu projekta Hazard3-Doom vidljivu softveru.
Vanjski DRAM nije značajka Hazard3 CPU-a
Velika Doom slika, heap, IWAD podaci i video međuspremnici u projektu nalaze se u vanjskoj memoriji. Podrška za tu memoriju nalazi se u integraciji primjer-SoC-a u forku. ULX3S i ULX4M-LS koriste izvorni SDR SDRAM put, dok ULX4M-LD koristi LiteDRAM DDR3 put.
Ovo je ključna arhitekturna granica:
Odgovornost upstream CPU-a: izvršavati učitavanja/spremanja i poštovati ready/error odgovore sabirnice.
Odgovornost projektnog SoC-a: dekodirati adresne prozore vanjske memorije, implementirati predmemoriranje/aliase gdje je konfigurirano, arbitrirati korisnike memorije i upravljati memorijskim sučeljem pločice.
CPU učitavanje s adrese 0x20xxxxxx nije posebna „SDRAM instrukcija”. To je
uobičajeno RISC-V učitavanje čija se fizička adresa usmjerava prema podsustavu
vanjske memorije.
Implementacije memorijskih kontrolera
Hazard3-Doom koristi tri različita memorijska mehanizma. Interni ECP5 EBR je sinkroni blokovski SRAM unutar FPGA-a i ne treba DRAM kontroler. SDR SDRAM i DDR3 komponente na pločicama zasebne su vanjske memorije i zahtijevaju kontrolere koji upravljaju refreshom i DRAM timingom.
Cilj/memorija |
Fizičko sučelje |
Put kontrolera |
Važno ponašanje |
|---|---|---|---|
Interni ECP5 EBR |
Ugrađeni sinkroni SRAM |
|
Nema activate/precharge operacija, refresha ni DRAM treninga. To je memorija s najmanjom i najpredvidljivijom latencijom, ali EBR kapacitet je ograničen. |
ULX3S 12F/85F |
Vanjski 16-bitni SDR SDRAM |
|
Izvorni projektni SDR kontroler. Prihvaća jedan zahtjev kontrolera odjednom, drži retke otvorenima kada je moguće, koristi CAS latenciju 2 i periodično radi precharge radi refresha. CPU i video zahtjevi arbitriraju se u AHB/SDRAM adapteru. |
ULX4M-LS 85F |
Vanjski 16-bitni SDR SDRAM, komponenta od 32 MiB na pločici |
|
Koristi isti izvorni SDR memorijski podsustav kao ULX3S put pri sistemskom taktu od 50 MHz. Omotač pločice prosljeđuje SDRAM takt pomaknut za pola ciklusa i drži video na zasebnom PLL-u. |
ULX4M-LD 85F |
Vanjski DDR3 |
|
LiteDRAM koristi 60 MHz korisnički port sa 128-bitnim Wishbone sučeljem, dok Hazard3/AHB radi na 40 MHz. Adapter prelazi između taktnih domena po jedan zahtjev odjednom. Firmware za pokretanje izvodi DDR3 inicijalizaciju, read leveling i memorijski test prije omogućavanja normalnih pristupa. |
Ta dva puta vanjske memorije zato imaju različite performansne kompromise. Izvorni SDR kontroler jednostavniji je i ima manje sučeljske logike, ali vanjski SDR SDRAM i dalje ima activate/CAS/refresh latenciju. DDR3 nudi znatno veću burst propusnost, dok trenutačni ULX4M-LD adapter dodaje prijelaz između taktnih domena i pretvorbu zahtjeva. Konkretno, trenutačni adapter mapira svaki DDR3 BL8 prijenos na jednu 128-bitnu Wishbone riječ; zapisi koriste atomski 128-bitni read/modify/write prije zapisivanja cijelog bursta. Za in-order Hazard3 jezgru latencija prvog pristupa i ponašanje predmemorije mogu biti važniji od vršne DDR propusnosti.
Nemojte brkati vanjski SDRAM na ULX3S-u s ECP5 EBR-om. EBR je SRAM fizički unutar FPGA-a; SDR SDRAM čip zasebna je komponenta na pločici. LiteDRAM se ne koristi u izvornom SDR putu ULX3S-a.
ULX4M-LD DDR3 konfiguracija i kvalifikacija
Proizvodne ULX4M-LD pločice ne moraju sve sadržavati isti DDR3 uređaj. Projekt je namijenjen podršci najmanje sljedećih x16 dijelova kroz zasebne generirane LiteDRAM profile:
Uređaj |
Gustoća |
Približan kapacitet |
Projektna napomena |
|---|---|---|---|
Micron |
8 Gbit, x16 |
1 GiB |
Trenutačno hardverski kvalificirana pločica koristi ovu obitelj. LiteDRAM geometrija ima 16 bitova retka, 10 bitova stupca i 3 bita banke. |
Alliance |
4 Gbit, x16 |
512 MiB |
Podržan kao alternativna populacija pločice kroz drugi generirani LiteDRAM modul/profil. |
Fizički kapacitet čipa veći je od trenutačne Hazard3-Doom softverske mape.
Hazard3-Doom namjerno izlaže profil vanjske memorije od 64 MiB na
0x20000000-0x23ffffff uz dijagnostički alias; neiskorišten fizički kapacitet
nije potreban trenutačnom softveru.
Odabir čipa pripada generiranoj LiteDRAM konfiguraciji, a ne datoteci
ahb_litedram.v. Sučelje AHB-LiteDRAM mosta ostaje isto dok se generirana jezgra
mijenja prema memorijskom uređaju, inicijalizacijskom CPU-u, frekvenciji i drugim
postavkama profila izgradnje. Time razlike u populaciji pločice ostaju izvan
Hazard3 sučelja sistemske sabirnice.
Trenutačno hardverski kvalificirane LiteDRAM postavke su:
memtype: DDR3
phy: ECP5DDRPHY
input/reference clock: 25 MHz
LiteDRAM user clock: 60 MHz
LiteDRAM init clock: 25 MHz
Hazard3/AHB system clock: 40 MHz
user port: 128-bit Wishbone
cmd_buffer_depth: 2
cmd_buffer_buffered: true
with_auto_precharge: true
initialization CPU: SERV for the qualified checkpoint
cmd_buffer_depth=0 odbačen je tijekom timing eksperimenata jer je stvarao
kombinacijske petlje/probleme s timingom. Kvalificirani profil zadržava dubinu 2.
with_auto_precharge ostaje true u kvalificiranoj konfiguraciji.
Inicijalizacijski CPU (primjerice SERV ili VexRiscv) dio je generirane LiteDRAM
jezgre i ne mijenja sučelje sabirnice ahb_litedram.v. Držite odvojene
generirane profile kako bi se vrsta CPU-a, DDR uređaj i frekvencija korisničkog
takta mogli programski sweepati bez ručnog uređivanja generiranog Veriloga.
Verzionirani YAML profili izvor su koji se uređuje za te generirane jezgre. Odaberite fizički broj RAM dijela; jedna naredba regenerira obje CPU varijante:
cd third_party/Hazard3/example_soc/third_party/LiteDRAM
./regenerate-ulx4m.sh MT41K512M16HA
./regenerate-ulx4m.sh AS4C256M16D3
Svako pokretanje zamjenjuje generated-serv/ i generated-vexrisc/ odabranim
RAM profilom. Prije izgradnje za pločicu potvrdite ram_part zapisan u
LITEDRAM_VERSIONS.txt svakog generiranog direktorija.
Hardverska kvalifikacija više je od nextpnr timing PASS-a. Na kvalificiranoj Micron pločici monitor je uspješno izvršio sve sljedeće testove na LiteDRAM routingu od 60 MHz:
destruktivni sekvencijalni test od 1 MiB s pristupima bajt/poluriječ/riječ i uzorcima nula, jedinica, adrese i invertirane adrese;
rijetko testiranje aliasiranja/adresa kroz cijeli softverski vidljiv prozor od 64 MiB;
pseudoslučajne testove od 1 MiB u četiri odvojene regije razmaknute 16 MiB;
cijeli
qkvalifikacijski skup, ponovljeno;test alokacije/opterećenja hrpe od 40 MiB;
brzi test Doom platformske memorije/timera; i
izvršavanje kopiranog RV32 koda iz DDR-a, uključujući faze s normalnim i stranim GP-om, prekide timera i zaštitne provjere.
Naredba stanja mjerodavna je nakon pokretanja. Tijekom jednog pokretanja rezidentni
monitor ispisao je 5-sekundni TIMEOUT vanjske memorije dok se LiteDRAM još
kalibrirao, ali kasniji s pokazao je external_memory_ready=YES,
init_done=YES, init_error=NO, pll_locked=YES,
user_clock_ready=YES i ready=YES. Svi naknadni kvalifikacijski testovi
prošli su. Zato početnu poruku o isteku vremena ne treba smatrati konačnim DDR
kvarom bez provjere trenutačnog stanja.
Redoslijed memorijskih operacija i fence.i
Projekt omogućuje Zifencei. fence.i služi za sinkronizaciju dohvata
instrukcija s prethodnim zapisima koji su možda promijenili memoriju instrukcija.
Hazard3 izlaže namjeru memorijskog redoslijeda/ispiranja dohvata kako bi okolni
sistem mogao sudjelovati kada je potrebno. To postaje važnije kako SoC dobiva
predmemorije ili drugo stanje između jezgre i memorije.
Za samomodificirajući kod ili loader koji zapisuje izvršnu memoriju i zatim skače u nju, korisno je razumjeti ovaj slijed:
write new instruction bytes
|
v
complete required data ordering
|
v
fence.i
|
v
fetch newly written instructions
Točan put učitavanja softvera u Hazard3-Doomu obrađuju rezidentni monitor i projektni memorijski sistem, ali mehanizam sinkronizacije dohvata instrukcija standardno je RISC-V/Hazard3 ponašanje.
Nema MMU-a u ovom projektu
Ova konfiguracija je bare-metal ugrađeni sistem. Ne omogućuje MMU za virtualnu memoriju niti izolaciju korisničkog načina/PMP-a. Adrese u Memorijska mapa zato je najbolje razumjeti kao fizičke adresne prozore SoC-a koje izravno koriste firmware u strojnom načinu i Doom aplikacija.