Teach Urruneko laborategidun ikasgaiak

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.

  • DE1-SoC · Nios V
  • 55 min
  • Informatika, Elektronika edo Konputagailuen Ingeniaritzako unibertsitateko lehen mailak
  • eu
  • Digital systems & FPGA · Embedded systems

Hasi saioa irakasle-kontu batekin klase-saioa prestatzeko. Ikasleak klase-kode batekin sartzen dira.

RISC-V mihiztadurako galdeketa-begizta: lw aginduak JP1 irakurtzen du 0xFF200060 helbidean; srli aginduak balioa bost posizio eskuinera desplazatzen du; li aginduak t4 = 0x3FF kargatzen du, eta and aginduak maskara aplikatzen du; sw aginduak LEDRn idazten du 0xFF200000 helbidean; j loop aginduak exekuzioa JP1 berriz irakurtzera itzultzen du.
DE1-SoC · Nios V · Laborategiaren xehetasunak

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.

1

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 beti 0 ematen duen erregistroa.
  • li rd, value: balio konstantea rd erregistroan jartzen duen pseudoinstrukzioa. Hemen 0xFF200000 bezalako hardware-helbideak eta 0x3FF bezalako maskarak kargatzen ditu; mihiztatzaileak oinarrizko ISAren hainbat instrukziotara zabal dezake.
  • lw rd, offset(rs1): memoriatik 32 biteko hitza rd erregistrora kargatzen du. Helbidea rs1 erregistroko balioari offset byte gehituz kalkulatzen da. Hemen hardwareko erregistro bat irakurtzen du.
  • sw rs2, offset(rs1): rs2 erregistroko 32 biteko hitza memorian biltegiratzen du, helbidea modu berean kalkulatuta. Hemen hardwareko erregistro batean idazten du.
  • srli rd, rs1, amount: rs1 erregistroko bitak eskuinera desplazatzen ditu adierazitako posizio kopurua, ezkerretik zeroak sartuz, eta emaitza rd erregistroan gordetzen du.
  • and rd, rs1, rs2: bi jatorrizko erregistroetan 1 balioa duten bitak soilik uzten ditu bateko gisa emaitzan.
  • j label: label etiketara baldintzarik gabe jauzi egiten duen pseudoinstrukzioa. Hemen, j loop aginduak galdeketa-begiztaren (polling) hasierara itzultzen du exekuzioa. Mihiztatzaileak jal zero, label bihurtzen 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.

RISC-V mihiztadurako galdeketa-begizta: lw aginduak JP1 irakurtzen du 0xFF200060 helbidean; srli aginduak balioa bost posizio eskuinera desplazatzen du; li aginduak t4 = 0x3FF kargatzen du, eta and aginduak maskara aplikatzen du; sw aginduak LEDRn idazten du 0xFF200000 helbidean; j loop aginduak exekuzioa JP1 berriz irakurtzera itzultzen du.

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.

2

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.

  1. Ireki Nios V Assembly IDE for DE1-SoC.

  2. Aztertu main.s.

  3. Sakatu Build ELF.

  4. Sakatu Enviar a la FPGA ELF fitxategia plakan kargatzeko.

  5. Aktibatu eta desaktibatu NSW0, NSW5 eta NSW9 kontrolak.

  6. 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
3

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?

4

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.

5

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.