Teach Urruneko laborategidun ikasgaiak

Teach ikasgaia

Nios V DE1-SoC plakan (2/5): memorian mapatutako S/I C-rekin

Aldatu C kodea Nios V sistemako memorian mapatutako sarrera/irteerak kontrolatzeko: irakurri NSW0..NSW9 kontrol logikoak, kontrolatu LEDak eta azaldu helbideek nola lotzen dituzten kodea eta hardwarea.

  • 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.

LabsLandeko NSW kontrolak JP1eko biten bidez irakurri eta DE1-SoC plakaren LED gorrietara bidaltzeko bidea.
DE1-SoC · Nios V · Laborategiaren xehetasunak

Ikaskuntza-emaitzak

  • C-ko erakusleak erabiltzea volatile gisa deklaratutako erregistroak atzitzeko, memorian mapatutako sarrera/irteeretan.

  • LabsLandeko Nios V etengailu logikoak JP1 GPIO bidearen bidez irakurtzea.

  • Maskarak eta desplazamenduak erabiltzea sarrerako bitak LEDen irteerako bitekin lotzeko.

  • Hardwarearen portaera egiaztatzea plakaren zuzeneko kamerarekin.

Ikaslearen jardueraren aurrebista

Jardueraren edukia

Aurrebista soilik. Klase-saio batean, ikasleek erantzunak bete eta lana irakasleari bidal diezaiokete.

1

Sarrera/irteeren mapa

8 min

Nios V prozesadoreak hardwareko periferikoak memoria-helbideen bidez atzitzen ditu. Memorian mapatutako sarrera/irteera (S/I) deitzen zaio horri. Laborategiko hasierako programak helbide hauek erabiltzen ditu:

  • LEDR, 0xFF200000 helbidean: LED gorrien irteera-erregistroa.
  • JP1 datu-erregistroa, 0xFF200060 helbidean: LabsLandeko etengailu logikoen sarrera-bidea.
  • JP1 noranzko-erregistroa, 0xFF200064 helbidean: GPIO lineak sarrera edo irteera gisa konfiguratzen ditu.
  • JTAG UART, 0xFF201000 helbidean: terminaleko irteera, printf bidez.

CPUak helbide horiek irakurri eta idazten ditu memoria arrunta balira bezala, baina FPGAren logikak atzipen bakoitza periferiko batera bideratzen du, ohiko RAM memoriara bideratu ordez. Horrela funtzionatzen du memorian mapatutako S/I sistemak.

Nabigatzaileko kontrolak NSW0..NSW9 dira. Egungo urruneko bidean ez datoz bat 0xFF200040 helbideko SW0..SW9 portu fisikoarekin. NSW kontrol logikoak JP1eko GPIO biten bidez sartzen dira; hasierako programak bit horiek beheko posizioetara desplazatzen ditu LEDen erregistroan idatzi aurretik.

FPGAcademy DE1-SoC Computer with Nios V eskuliburuak Nios V sistemaren diseinu finkoa eta memorian mapatutako periferikoen mapa azaltzen ditu. Jarduera honetan LabsLandek egiaztatutako JP1 bidea erabiliko duzu nabigatzaileko NSW kontroletarako, FPGAcademyren etengailu fisikoen erregistroa zuzenean erabili ordez.

LabsLandeko NSW kontrolak JP1eko biten bidez irakurri eta DE1-SoC plakaren LED gorrietara bidaltzeko bidea.

Nabigatzaileko NSW kontrolak JP1eko datuen 5.–14. bitetan irakurtzen dira. Programak balioa bost posizio eskuinera desplazatzen du, NSW0 0. bitera eramateko; ondoren, hamar biteko balioa LEDR0..LEDR9 irteeretan idazten du.

Bit-posizio nagusiak:

  • NSW0 JP1eko datuen 5. bitean irakurtzen da, eta LEDR0 kontrolatzen du.
  • NSW1 JP1eko datuen 6. bitean irakurtzen da, eta LEDR1 kontrolatzen du.
  • NSW2 JP1eko datuen 7. bitean irakurtzen da, eta LEDR2 kontrolatzen du.
  • Patroiak NSW9 arte jarraitzen du: JP1eko datuen 14. bitean irakurtzen da, eta LEDR9 kontrolatzen du.

Laborategiko profil honetan, JP1eko noranzko-erregistroan 0 idazteak JP1eko lineak sarrera gisa konfiguratzen ditu, NSW0..NSW9 kontrolek erabiltzen dituztenak barne. Horregatik exekutatzen du programak *JP1_DIR = 0; JP1eko datu-erregistroa irakurri aurretik. Hemen noranzkoa sarrera/irteera da; helbidea, berriz, erregistroa atzitzeko zenbakia.

Zergatik idazten du programak 0xFF200064 helbidean etengailuen sarrera 0xFF200060 helbidean irakurri aurretik?

2

Konpilatu C-ko hasierako programa

14 min

IDEko lan-eremua kontu bakoitzean gordetzen da. Konpilatu aurretik, egiaztatu main.c fitxategiak NSW0..NSW9 eta LEDR0..LEDR9 lotzen dituen hasierako adibidea duela. Aurreko aldaketak gordeta baditu, eskatu irakasleari hasierako programa emateko edo berrezartzeko. Build ELF botoiak ELF programa konpilatzen du; Enviar a la FPGA botoiak plakan kargatzen du, eta Upload to FPGA ere ager daiteke ingelesezko interfazean.

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

  2. Aztertu main.c.

  3. Sakatu Build ELF.

  4. Sakatu Enviar a la FPGA programa kargatzeko.

  5. Egiaztatu terminalak Hello from Nios V erakusten duela.

  6. Aktibatu eta desaktibatu NSW0, NSW3 eta NSW9; egiaztatu dagozkien LEDR irteerak plakaren zuzeneko kameran.

Klase-saio batean erabilgarri

Jaso laborategiko hiru proba azkar taulan, etengailu-patroi bakoitzeko errenkada bat. Lehenik, aurresan LEDR irteera; ondoren, eragin dagozkien NSW kontrolei eta idatzi plakaren zuzeneko kameran behatutakoa. Probatu banaka: utzi gainerako NSW kontrolak desaktibatuta, eta egiaztatu hori proba bakoitzaren hasieran.

Jaso laborategiko hiru proba. Errenkada bakoitzean, aurresan LEDR irteera probatu aurretik; ondoren, idatzi plakan benetan behatutako LEDR irteera.

Probatutako sarrera Proba aurretik espero zen LEDR irteera Plakan behatutako LEDR irteera Bat etorri al da aurresanarekin?
3

Jarraitu kodeko datu-bideari

15 min

Utzi irekita laborategiko C IDEaren fitxa. Atal honi erantzuteko, beheko zatia erabil dezakezu; konpilatu eta probatu berri duzun hasierako main.c fitxategiko kodea da.

Ondorengo deklarazioak eta begizta hasierako programa horretatik datoz. LEDS C-ko erakuslea da, LEDR irteera-erregistrora zuzendua:

volatile int *LEDS = (int *) 0xFF200000;
volatile int *JP1 = (int *) 0xFF200060;
volatile int *JP1_DIR = (int *) 0xFF200064;

*JP1_DIR = 0;
while (1) {
    *LEDS = (*JP1 >> 5) & 0x3FF;
}

Desplazamenduak LabsLandeko NSW0..NSW9 kontrolek erabiltzen dituzten JP1eko bitak 0.–9. posizioetara eramaten ditu. Maskarak hamar bit horiek soilik uzten ditu, LEDen erregistroan idatzi aurretik.

Adibidez, NSW0 bakarrik aktibatuta dagoenean, JP1eko 5. bitak 1 balio du. >> 5 egin ondoren, balioa 0. bitera pasatzen da eta LEDR0 pizten da. volatile kalifikatzailea erakusleak seinalatzen duen datuari aplikatu behar zaio: JP1 bidez irakurritako erregistroa hardwarearen eraginez alda daiteke, C-ko esleipenik egin gabe. volatile gabe, konpiladorearen optimizazio batek aurreko balioa berrerabil lezake edo erregistroko atzipen errepikatu bat kendu, memoria arruntean alferrikakoa dirudielako.

NSW0 JP1eko datuen 5. bitera iristen bada, zergatik desplazatzen du kodeak JP1eko balioa bost posizio eskuinera?

Zer bit uzten ditu & 0x3FF eragiketak? Zergatik komeni da balioa hamar bitera mugatzea LEDR erregistroan idatzi aurretik?

Zergatik deklaratu behar da erakusle horiek seinalatzen duten datu mota volatile gisa? Azaldu konpiladorearen optimizazioak eta hardwareko erregistroak kontuan hartuta.

4

Aldatu sarreren eta irteeren arteko erlazioa

13 min

Itzuli laborategiko Nios V C IDE for DE1-SoC fitxara. Aldatu programa, LEDek etengailu-patroiaren eraldaketa bat erakuts dezaten, eta sakatu Build ELF. Plakarekiko saioak irekita jarraitzen badu, berrerabili dezakezu; iraungi bada, Enviar a la FPGA botoiak beste saio bat abiaraziko du. Sakatu Enviar a la FPGA eta probatu eraldatutako portaera plakan.

Hautatu eraldaketa bat:

  • Alderantzikatu etengailuen hamar bitak LEDetan idatzi aurretik: zeroak bat bihurtu, eta batekoak zero.
  • Erakutsi zenbaki txikieneko bost NSW kontrolak soilik, LEDR0..LEDR4 irteeretan.
  • Desplazatu NSW patroia LED-posizio bat ezkerrera, eta azaldu zer gertatzen den NSW9 kontrolarekin.

Aldatutako C lan-eremua

Gorde probatu duzun lan-eremu osoaren kode-instantanea, erregistroen deklarazioak eta aldatutako begizta barne. Aurreko zatia ez da programa osoa: instantaneak main funtzioa eta konpilatzeko behar diren gainerako zatiak ere jaso behar ditu.

Azaldu paragrafo batean zer eraldaketa aplikatu duzun.

Behatu daitekeen emaitzak azalpenarekin bat etorri behar du. Adibidez, patroiko bitak alderantzikatzea hautatzen baduzu, NSW0 desaktibatuta dagoenean LEDR0 piztu behar da; NSW0 aktibatuta dagoenean, berriz, LEDR0 itzali.

Deskribatu probatutako etengailu-patroi bat: zer portaera espero zenuen LEDetan, eta zer erakutsi zuen plakak?

5

Amaiera

5 min

Laburtu jatorrizko programaren datu-bide osoa: nabigatzailean NSW4 sakatzen duzunetik plakan LEDR4 aldatzen ikusten duzun arte.

Bihurtu aurrebista hau klase-saio batean

Jarraitu LabsLand Teach-era ikasgai hau ikasleekin erabiltzeko eta kontuaren sarbidea berrikusteko.