Teach ikasgaia
Nios V DE1-SoC plakan (3/5): S/I RISC-V mihiztadura-lengoaian
Aldatu sarrera/irteerak RISC-V mihiztadura-lengoaian, aztertu kargatze- eta biltegiratze-instrukzioak eta probatu urruneko NSW etengailuen egoera nola islatzen den DE1-SoC plakaren LEDetan.
Hasi saioa irakasle-kontu batekin klase-saioa prestatzeko. Ikasleak klase-kode batekin sartzen dira.
Lehen aldia duzu LabsLand-en? Sortu irakasle-kontua
Ikaskuntza-emaitzak
RISC-V mihiztadura-programa Nios V-rako konpilatu, haren ELF fitxategia sortu eta DE1-SoC plakan exekutatzea.
Kargatze-, biltegiratze-, desplazamendu-, maskaratze- eta jauzi-instrukzioak C-ko portaerarekin lotzea.
Aldi baterako erregistroen eginkizuna galdeketa-begizta batean azaltzea.
Mihiztadura-programaren portaera benetako DE1-SoC plakan egiaztatzea.
Ikaslearen jardueraren aurrebista
Jardueraren edukia
Aurrebista soilik. Klase-saio batean, ikasleek erantzunak bete eta lana irakasleari bidal diezaiokete.
Hardware bera, maila baxuagoko kodea
6 min
Aurreko ikasgaian, C kodeak JP1eko datuak irakurtzen zituen, urruneko interfazeko NSW0..NSW9 etengailuen balioa desplazatu eta maskaratzen zuen, eta emaitza LEDR erregistroan idazten zuen. Ikasgai honetan begizta bera zuzenean RISC-V mihiztadura-lengoaian aztertu eta aldatuko duzu.
Sistema honetan, NSW0..NSW9 kontrolek JP1eko datu-erregistroaren 5.–14. bitak erabiltzen dituzte. Horregatik, srli t3, t3, 5 instrukzioak 0.–9. posizioetara desplazatzen ditu, 0x3FF maskara aplikatu aurretik.
Ez duzu RISC-V instrukzio-multzoaren arkitektura (ISA) osoa ezagutu behar tailer honetarako. Erabili gida labur hau hasierako programa irakurtzean:
t0..t6: helbideak, sarrerako balioak, maskarak eta irteerako balioak gordetzeko aldi baterako erregistroak.zero: irakurtzean beti0ematen duen erregistroa.li rd, value: balio konstantearderregistroan jartzen duen pseudoinstrukzioa. Hemen0xFF200000bezalako hardware-helbideak eta0x3FFbezalako maskarak kargatzen ditu; mihiztatzaileak oinarrizko ISAren hainbat instrukziotara zabal dezake.lw rd, offset(rs1): memoriatik 32 biteko hitzarderregistrora kargatzen du. Helbidears1erregistroko balioarioffsetbyte gehituz kalkulatzen da. Hemen hardwareko erregistro bat irakurtzen du.sw rs2, offset(rs1):rs2erregistroko 32 biteko hitza memorian biltegiratzen du, helbidea modu berean kalkulatuta. Hemen hardwareko erregistro batean idazten du.srli rd, rs1, amount:rs1erregistroko bitak eskuinera desplazatzen ditu adierazitako posizio kopurua, ezkerretik zeroak sartuz, eta emaitzarderregistroan gordetzen du.and rd, rs1, rs2: bi jatorrizko erregistroetan1balioa duten bitak soilik uzten ditu bateko gisa emaitzan.j label:labeletiketara baldintzarik gabe jauzi egiten duen pseudoinstrukzioa. Hemen,j loopaginduak galdeketa-begiztaren (polling) hasierara itzultzen du exekuzioa. Mihiztatzaileakjal zero, labelbihurtzen du. Galdeketan, programak sarrera behin eta berriz irakurtzen du aldaketei erantzuteko.
Instrukzio-multzoaren erreferentzia osoa RISC-V ISAren zati pribilegiorik gabekoaren zehaztapen ofiziala da. Nios V sistemarako eta memorian mapatutako periferikoetarako, kontsultatu FPGAcademy DE1-SoC Computer with Nios V eskuliburua. Jarduera honetarako nahikoa dira goiko gida laburra, 2. ikasgaiko helbideen azalpena eta ondorengo kodeko iruzkinak.
Hasierako mihiztadura-programak galdeketa-begizta errepikatzen du: JP1etik NSW etengailuen balioa kargatu, bost posizio eskuinera desplazatu, sarrerako hamar bitak maskararekin hautatu, emaitza LEDR erregistroan biltegiratu eta j loop exekutatu, JP1 berriz irakurtzeko.
Gida laburra erabiliz, azaldu zergatik behar dituen begiztak kargatzea, biltegiratzea, desplazamendua, maskara eta jauzia. Oraingoz ez kezkatu sintaxi zehatzaz.
Exekutatu hasierako mihiztadura-programa
12 min
IDEko lan-eremua kontu bakoitzean gordetzen da. Egiaztatu main.s fitxategia NSW0..NSW9 eta LEDR0..LEDR9 lotzen dituen hasierako programa dela, 0x3FF maskararekin. Aurreko aldaketak baditu, berrezarri hasierako programa edo eskatu irakasleari emateko, konpilatu aurretik. Build ELF botoiak ELF programa sortzen du; Enviar a la FPGA botoiak plakan kargatzen du, eta Upload to FPGA ere ager daiteke ingelesezko interfazean.
Ireki
Nios V Assembly IDE for DE1-SoC.Aztertu
main.s.Sakatu
Build ELF.Sakatu
Enviar a la FPGAELF fitxategia plakan kargatzeko.Aktibatu eta desaktibatu
NSW0,NSW5etaNSW9kontrolak.Egiaztatu plakaren zuzeneko kameran dagozkien LED gorriak aldatzen diren.
Klase-saio batean erabilgarri
Jaso hasierako programaren hiru proba taulan. Bete errenkada bat NSW kontrolen konfigurazio bakoitzeko, eta idatzi plakak benetan erakutsi duena.
Jaso NSW kontrolen eta LEDen arteko erlazioari buruzko hiru proba, hasierako mihiztadura-programarekin. Erabili emandako konfigurazioak edo benetan egin dituzun proba baliokideak.
| Probatutako sarrera | Plakan behatutako LEDR egoera | Oharrak |
|---|---|---|
Jarraitu begiztari
13 min
Hasierako programaren zati nagusiak egitura hau du. Mantendu zure fitxategiko hasierako deklarazioak eta sarrera-etiketa, hala nola .text, .global _start eta _start:; hemen instrukzio-bidea soilik erakusten da:
li t0, 0xFF200000 # LEDR
li t1, 0xFF200060 # JP1eko GPIO datuak
li t2, 0xFF200064 # JP1eko GPIO noranzkoaren konfigurazioa
sw zero, 0(t2) # JP1eko GPIO lineak sarrera gisa konfiguratu
loop:
lw t3, 0(t1)
srli t3, t3, 5
li t4, 0x3FF
and t3, t3, t4
sw t3, 0(t0)
j loop
Erabili gida laburra eta kodeko iruzkinak erregistroen taula osatzeko. Errenkada bakoitzean, azaldu erregistroak zer duen begiztan. t3 erregistroak eraldatzen ari den datua gordetzen du: hasieran JP1etik irakurritako sarrerako balioa; ondoren, LEDetan idazten den balio desplazatu eta maskaratua.
Aldi baterako erregistro bakoitzerako, adierazi zer duen programa honetan eta sailkatu: helbidea, sarrerako balioa, maskara, irteerako balioa edo sarrera/irteerako balio eraldatua.
| Erregistroa | Eginkizuna programan | Balio mota |
|---|---|---|
Zein instrukziok irakurtzen du JP1etik NSW kontrolen balioa, eta zeinek idazten du LEDetan?
Zergatik da garrantzitsua amaierako j loop instrukzioa NSW kontrolen aldaketei erantzuteko?
Lotu C eta mihiztadura-lengoaia
12 min
Lotu C-ko adierazpen hau mihiztadura-instrukzioekin: (*JP1 >> 5) & 0x3FF. Zein lerrok irakurtzen du erregistroko balioa? Zeinek egiten du desplazamendua? Zeinek sortzen du maskara? Zeinek aplikatzen du?
Aipatu C-ko begiztak banakako instrukzio gisa erakusten ez dituen baina mihiztadura-kodean esplizituki agertzen diren maila baxuko bi eragiketa. Ondoren, azaldu mihiztadura-kodea irakurtzea edo mantentzea zailtzen duen alderdi bat.
Aldaketa txiki bat mihiztadura-kodean
12 min
Itzuli Nios V Assembly IDE for DE1-SoC fitxara, eta aldatu programa LEDek NSW0..NSW3 soilik erakusteko. Ordeztu hamar biteko maskara lau biteko batekin, eta sakatu Build ELF. Plakarekiko saioak irekita jarraitzen badu, berrerabili; iraungi bada, Enviar a la FPGA botoiak beste bat abiaraziko du. Sakatu botoia eta egin bi egiaztapen plakaren zuzeneko kamerarekin: lehenik, utzi NSW0..NSW3 desaktibatuta eta aktibatu NSW4..NSW9 tarteko kontrol bakar bat; ondoren, desaktibatu gainerako guztiak eta aktibatu NSW0..NSW3 tarteko bat. Zenbaki handiko kontrolak ez du LEDik piztu behar; zenbaki txikikoak, berriz, dagokion LEDa piztu behar du.
Entregatu aldatutako mihiztadura-lerroak eta azaldu zer balio aldatu duzun.
Adierazi maskara aldatu ondoren zenbaki handiko zein kontrol (NSW4..NSW9) eta zenbaki txikiko zein kontrol (NSW0..NSW3) probatu dituzun. Jaso plakaren zuzeneko kamerak zer erakutsi duen kasu bakoitzean. Egiaztatu zenbaki handikoak LEDik piztu ez duen eta zenbaki txikikoak dagokion LEDa piztu duen.
Bihurtu aurrebista hau klase-saio batean
Jarraitu LabsLand Teach-era ikasgai hau ikasleekin erabiltzeko eta kontuaren sarbidea berrikusteko.
Lehen aldia duzu LabsLand-en? Sortu irakasle-kontua