Teach Urruneko laborategidun ikasgaiak

Teach ikasgaia

Logika digitala DE1-SoC plakan (4/6): kontagailuak eta desplazamendu-erregistroak

Eraiki kontagailuak eta desplazamendu-erregistroak Verilog erabiliz, behatu LEDen sekuentziak eta azaldu erlojuak nola gidatzen dituen aldaketak.

  • DE1-SoC
  • 65 min
  • Batxilergo teknologikoa, hasierako heziketa-zikloa edo ikasketa teknikoen lehen mailak
  • eu
  • Digital systems & FPGA

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

CLOCK_50 erloju azkarrak 0tik DIVera zenbatzen duen kontagailua gidatzen du. DIV mugara iristean, slow_clk seinale motela alderantzikatzen da. Bi seinaleen uhinak bereizita ageri dira, denbora-eskala desberdinetan.
DE1-SoC

Ikaskuntza-emaitzak

  • Erloju-zatitzaileak zer egiten duen azaltzea eta erabiltzea, 50 MHz-eko erlojuak gidatutako portaera kameran bereizi ahal izateko.

  • 4 biteko kontagailua eraikitzea eta haren balioa LEDetan eta 7 segmentuko bistaratzailean irakurtzea.

  • Desplazamendu-erregistroa eraikitzea eta biten ordena LEDen kokapen fisikotik bereiztea.

  • Erregistroaren bit kopuruarekin lotutako arazoak antzematea; adibidez, deklaratutako erregistroan sartzen ez den konstantea.

Ikaslearen jardueraren aurrebista

Jardueraren edukia

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

1

Gordetzetik aldatzera: zergatik behar dugu erloju-zatitzailea?

10 min

Hirugarren ikasgaian bit bat edo byte bat gogoratzen duten zirkuituak eraiki zenituen: biegonkorra eta karga paraleloko erregistroa. Erloju-ertzean eguneratzen dute gordetako balioa. Orain, ideia bera erabiliko duzu ertz bakoitzean berez aurrera egiten duten zirkuituak eraikitzeko: 0, 1, 2, 3, ... zenbatzen duen kontagailua eta bitak alde baterantz mugitzen dituen desplazamendu-erregistroa.

Plakaren erlojua CLOCK_50 da: 50 MHz-eko uhin karratua, hau da, 50.000.000 goranzko ertz segundo bakoitzean. Kontagailuak CLOCK_50 erlojuaren ertz bakoitzean urrats bat egingo balu, 4 biteko kontagailuaren 16 balioak segundoan hiru milioi aldiz baino gehiagotan zeharkatuko lituzke. Ez zenituzke urratsak banaka bereiziko. Urruneko kamerak segundoan fotograma gutxi batzuk besterik ez ditu hartzen, eta ezingo luke sekuentzia horri jarraitu.

Horregatik moteltzen dugu aldaketen erritmoa erloju-zatitzaile batekin. Funtsean, beste kontagailu bat da: CLOCK_50 erlojuaren ertzak zenbatzen ditu eta, DIV mugara iristean, slow_clk izeneko seinale motelagoa alderantzikatu eta berriz hasten da. DIV zenbat eta handiagoa izan, orduan eta motelagoa da slow_clk. Ondoren, seinale hori erabiltzen dugu zirkuitu nagusia —4 biteko kontagailua edo desplazamendu-erregistroa— gidatzeko, CLOCK_50 zuzenean erabili beharrean.

Diseinu sekuentzialek erlojua deklaratu behar dute. Hasierako leds_mirror.v txantiloiak ez du erloju-sarrerarik; beraz, ikasgai honetako modulu guztiek input CLOCK_50; gehitzen dute ataken deklarazioetan. Plakaren seinaleak lehengoak dira: SW[9:0] (etengailua gora = 1), KEY[3:0] (maila baxuan aktibo: sakatuta = 0), LEDR[9:0] (maila altuan aktibo: 1 denean piztuta) eta HEX0–HEX5 (zazpi segmentuak maila baxuan aktibo).

CLOCK_50 erloju azkarrak 0tik DIVera zenbatzen duen kontagailua gidatzen du. DIV mugara iristean, slow_clk seinale motela alderantzikatzen da. Bi seinaleen uhinak bereizita ageri dira, denbora-eskala desberdinetan.

Zatitzaileak CLOCK_50 erlojuaren ertz azkarrak zenbatzen ditu, eta DIV mugara iristen den bakoitzean slow_clk alderantzikatzen du. DIV handitzeak aldaketak moteltzen ditu. Zirkuitu nagusiak slow_clk erabiltzen du, haren urratsak kameran bereizteko. Uhinak eskematikoki marraztuta daude, denbora-eskala desberdinetan.

CLOCK_50 erlojuari zuzenean konektatutako 4 biteko kontagailuak segundoan 50 milioi urrats egiten ditu. 16 egoeren sekuentzia osoa segundoan 3,125 milioi aldiz errepikatzen da. Kamerak segundoan fotograma gutxi batzuk hartzen ditu. Zer bereiziko zenuke LEDetan, eta zergatik?

DIV muga bikoiztuko bazenu —adibidez, 33_333_333 balioaren ordez 66_666_666 erabiliz—, nola aldatuko litzateke gutxi gorabehera kontagailuaren aurreratze-abiadura? Azaldu zergatik, esaldi batean.

2

2-C ariketa: erloju-zatitzailea duen 4 biteko kontagailua

12 min

Kontagailua erregistro bat da, eta haren hurrengo balioa oraingo balioa gehi bat da. 4 biteko kontagailuak 0 eta 15 arteko balioak gordetzen ditu. 15 ondoren, automatikoki 0 baliora itzultzen da: 15 + 1 = 16 = 10000 bitarrez, baina pisu txikieneko lau bitak soilik gordetzen dira (0000). Itzulera hori ez da bereziki programatu behar: erregistroaren bit kopuruaren ondorioa da.

Beheko diseinuak bi zati ditu. Zatitzaileak CLOCK_50 erlojuaren ertzak zenbatzen ditu DIV mugara arte, eta slow_clk alderantzikatzen du. Kontagailuak unitate bat aurrera egiten du slow_clk seinalearen goranzko ertz bakoitzean; KEY[0] sakatzeak, berriz, 0 baliora eramaten du (reset: maila baxuan aktibo). Balioa bitarrez erakusten da LEDR[3:0] irteeran, eta digitu hamaseitar gisa HEX0 bistaratzailean: 0–9, eta ondoren A–F, 10–15 balioetarako. Osatu kodeko TODO markatzaileak. HEX0 irteerarako, kontagailuaren balioa zazpi segmentuen patroi bihurtzen duen deskodetzailea ere prestatu behar duzu; kontuan hartu segmentuak maila baxuan aktibo direla.

Denborak zehazki. Zatitzaileak 0 balioa ere zenbatzen duenez, slow_clk DIV + 1 goranzko ertzetik behin alderantzikatzen da. DIV = 33_333_333 bada, 33.333.334 ertz behar dira: 50.000.000 ertz/s-ko erritmoan, gutxi gorabehera 0,67 s. Kontagailuak slow_clk seinalearen goranzko ertzean bakarrik egiten du aurrera. Ondoz ondoko goranzko ertzen artean periodo osoa igarotzen da —igoera eta jaitsiera—; beraz, kontagailuak 1,33 s-tik behin egiten du urrats bat, 0,75 Hz inguruko maiztasunez. Resetaren ondoren, lehen urratsa 0,67 s ingurura iristen da; hurrengoen arteko tartea 1,33 s ingurukoa da.

Bit kopuruarekin lotutako ohiko arazoa. Kontagailu honetako zatitzailearen erregistroak 27 bit ditu. 26 biteko erregistroak gehienez 2^26 − 1 = 67.108.863 gorde dezake. Beraz, DIV = 100_000_000 ez da sartzen 26 bitetan. 27 bitekin, gehieneko balioa 2^27 − 1 = 134.217.727 da; hortaz, bai DIV = 100_000_000 (motelagoa), bai DIV = 8_333_333 (azkarragoa), sartzen dira. Egiaztatu beti konstantea deklaratutako erregistroan sartzen dela.

Diseinu honen muga. slow_clk beste erregistro baten erloju gisa erabiltzea baliabide didaktikoa da: urratsak ikustea errazten du. Benetako aplikazioetarako, oro har, CLOCK_50 erloju azkar bera erabiltzen da diseinu osoan, erloju-gaikuntza (clock enable) batekin: ziklo bateko pultsuak adierazten du zein ertzetan eguneratu behar den egoera. Horrela, erloju bakarra dago, eta sintesi-tresnek errazago aztertzen dute haren denborazko portaera. Hemen zatitutako erlojua erabiltzen dugu kontagailuaren funtzionamendua ikusteko.

// 4. ikasgaia - 2-C ariketa: erloju-zatitzailea duen 4 biteko kontagailuaren txantiloia
// KEY[0]=reset. LEDR[3:0]=count; HEX0=count, digitu hamaseitar gisa.
module leds_mirror(CLOCK_50, KEY, LEDR, HEX0);
    input        CLOCK_50;
    input  [3:0] KEY;
    output [9:0] LEDR;
    output [6:0] HEX0;

    localparam [26:0] DIV = TODO_DIVIDER_LIMIT;
    reg [26:0] div;
    reg        slow_clk;

    always @(posedge CLOCK_50) begin
        if (!KEY[0]) begin div <= 0; slow_clk <= 0; end
        else if (div == DIV) begin div <= 0; slow_clk <= ~slow_clk; end
        else div <= div + 1'b1;
    end

    reg [3:0] count;
    always @(posedge slow_clk or negedge KEY[0]) begin
        if (!KEY[0]) count <= TODO_RESET_COUNT;
        else         count <= TODO_NEXT_COUNT;
    end

    assign LEDR[3:0] = TODO_LED_COUNT;
    assign LEDR[9:4] = 6'b0;
    assign HEX0 = TODO_HEX_PATTERN_FOR_COUNT;
endmodule

Zatitzailean 24 biteko erregistroa erabiliko bazenu, zein litzateke gorde lezakeen baliorik handiena? Kalkulatu 2^24 − 1, eta azaldu esaldi batean ea DIV = 33_333_333 sartuko litzatekeen.

3

Exekutatu kontagailua, egin reset eta aldatu abiadura

12 min

Eraiki kontagailua benetako plakan, behatu nola zenbatzen duen, egin reset eta probatu zatitzailearen beste bi balioak.

  1. Ireki DE1-SoC plakaren Verilog laborategia. Editorean leds_mirror.v agertzen da.

  2. Ordeztu leds_mirror.v fitxategiko eduki guztia osatu duzun 4 biteko kontagailuarekin. Mantendu leds_mirror izena. Kontuan hartu input CLOCK_50; deklaratu behar dela: hasierako txantiloiak ez du erlojua berez gehitzen.

  3. Sakatu Sintetizatu. Gida batek botoia estaltzen badu, itxi edo saltatu gida. Itxaron prozesua amaitu arte (1–3 min inguru). Zuzendu idazketa-akatsak eta sintetizatu berriz. Quartus-ek denborazko portaerari buruzko abisuak erakuts ditzake zatitzaile didaktiko honekin; jarraitzeko, amaierako emaitzak 0 errore izan behar ditu. Abisuak ulertzen ez badituzu, galdetu irakasleari.

  4. Sakatu FPGAra igo eta itxaron plaka eta kamera prest egon arte. Sakatu eta askatu KEY[0], zirkuitua egoera ezagun batean hasteko.

  5. Behatu LEDR[3:0] eta HEX0. Balio berri bat agertu behar da 1,33 s-tik behin, gutxi gorabehera (0,75 urrats/s). Egiaztatu LEDetako balio bitarra eta HEX0 digitu hamaseitarra bat datozela; adibidez, HEX0 bistaratzaileak C erakustean, LEDR[3:0] patroia 1100 izan behar da.

  6. Eutsi KEY[0] sakatuta kontagailua 0 balioan mantentzeko; askatu eta behatu nola hasten den berriz 0-tik zenbatzen.

  7. Aldatu DIV balioa 8_333_333 izatera (idatzi 27'd8_333_333), sintetizatu, kargatu eta egin reset: kontagailua azkarrago dabilela ikusiko duzu. Ondoren, erabili 100_000_000 (idatzi 27'd100_000_000), sintetizatu, kargatu eta egin reset: motelago ibiliko da. Bi balioak sartzen dira 27 biteko erregistroan.

Klase-saio batean erabilgarri

DIV = 33_333_333 erabiliz, behatu kontagailua eta jaso balio batzuk. Idatzi LEDR[3:0] patroi bitarra eta HEX0 bistaratzailean ikusten duzun karakterea (0–9 eta ondoren A–F). Egin reset KEY[0] erabiliz eta egiaztatu kontagailua 0 baliora itzultzen dela.

Behaketa zk. LEDR[3:0] (bitarrez) HEX0-ko karakterea Balio hamartarra (0–15)

Jaso zure ebidentzia. Itxaron HEX0 bistaratzaileak C (12 hamartarrez) erakutsi arte, eta hartu kameraren irudi bat: aldi berean, LEDR[3:0] patroia 1100 izan behar da. Gehitu behean irudiaren erreferentzia edo esteka.

DIV = 8_333_333 eta DIV = 100_000_000 probatu dituzu. Zeinekin egin du kontagailuak azkarrago aurrera? Bi zenbaki horiek erabiliz, kalkulatu gutxi gorabehera zenbat aldiz azkarragoa den bata bestea baino.

Kontagailua erloju gisa erabili nahi duzu, 24 orduko egun oso batean gehienez segundo bateko aurrerapena edo atzerapena izan dezan. Kontagailuaz gain, zer zaindu beharko zenuke? Aipatu funtsezko osagaia eta azaldu zergatik den garrantzitsua.

4

Aldaketa: 0tik 9ra zenbatzen duen BCD kontagailua

7 min

4 biteko kontagailu arruntak 0–15 balioak zeharkatzen ditu eta azken seietan A–F erakusten du. Bistaratzaile askotan, ordea, digitu hamartar bakarra nahi dugu: 0, 1, 2, ..., 9 zenbatu eta zuzenean 0 baliora itzuli. 0–9 soilik zenbatzen duen kontagailu horri BCD kontagailu deritzo (binary-coded decimal: bitarrez kodetutako hamartarra).

Aldaketa txikia da: 4 biteko erregistroari 15 ondoren berez 0 baliora itzultzen utzi beharrean, 9 detektatu eta hurrengo balioa 0 izatera behartzen duzu. Moldatu kontagailuaren always blokea honela; mantendu count erregistroaren deklarazio bakarra, ez kopiatu bi aldiz:

reg [3:0] count;
always @(posedge slow_clk or negedge KEY[0]) begin
    if (!KEY[0])           count <= TODO_RESET_COUNT;
    else if (count == TODO_LAST_BCD_DIGIT) count <= TODO_WRAP_VALUE;
    else                   count <= TODO_NEXT_COUNT;
end

Utzi gainerakoa dagoen bezala: zatitzailea, LEDR/HEX0 esleipenak eta aurretik prestatu duzun segmentuen deskodetzailea (seg funtzioa erabili baduzu, hura ere bai). Orain HEX0 bistaratzaileak 0–9 zeharkatu behar ditu, A–F erakutsi gabe.

  1. Moldatu zure kontagailuaren always blokea 9 ondoren 0 baliora itzul dadin, goian adierazi bezala.

  2. Sintetizatu, zuzendu idazketa-akatsak eta kargatu diseinua FPGAra.

  3. Behatu HEX0 sekuentzia: 0, 1, 2, ... 9, 0, 1, .... Egiaztatu ez dela inoiz A agertzen. Sakatu KEY[0] hasieratik behatu nahi baduzu.

Klase-saio batean erabilgarri

BCD kontagailuan, zer balio hartzen du count erregistroak HEX0 bistaratzailean 9 agertu ondorengo lehen erloju-ertzean? Zer kode-lerrok eragiten du aldaketa hori?

5

2-D ariketa: 8 biteko desplazamendu-erregistroa

9 min

Desplazamendu-erregistroa biegonkorren lerro bat da: erloju-ertz bakoitzean bit bakoitza ondoko posiziora pasatzen da eta mutur batetik bit berri bat sartzen da. Serieko komunikazio askoren oinarrizko ideia da. UART, SPI eta I2C protokoloek, adibidez, datuak bitez bit bidaltzen dituzte; desplazamendu-erregistroak bitak byte batean bildu edo byte bat bitetan banatu dezake.

Beheko diseinuan shreg[7:0] 8 biteko erregistroa dago. Desplazamendua gaituta dagoenean, slow_clk seinalearen goranzko ertz bakoitzean honela eguneratzen da:

shreg <= TODO_SHIFT_LEFT_UPDATE;   // Desplazatu ezkerrera eta sartu SW[0] dagokion bitean.

Osatu eskuineko adierazpena arretaz: hartu pisu txikieneko zazpi bitak, shreg[6:0], eraman bakoitza posizio bat gorago eta sartu SW[0] balioa 0 bitean. Bitak pisu handiagoko muturrerantz doazenez, ezkerrerako desplazamendua da. Kontrolak: SW[0] = serieko sarrerako bita; KEY[0] = reset (maila baxuan aktibo); KEY[1] = desplazamendua gaitzea (maila baxuan aktibo: eutsi sakatuta urrats bakoitzean desplazatzeko).

Espero den patroia. Arrazoitu biten balioekin, kameraren orientazioaz bakarrik fidatu gabe. Hasi 0000_0000 egoeran. Jarri SW[0] = 1 eta utzi lau urrats igarotzen: erregistroa 0 bitetik gorantz betetzen da, 0000_0001, 0000_0011, 0000_0111 eta 0000_1111 emanez. Ondoren, jarri SW[0] = 0 eta utzi beste lau urrats igarotzen. Zeroak 0 bitetik sartzen dira eta batekoak gorantz bultzatzen dituzte: 0001_1110, 0011_1100, 0111_1000 eta, azkenik, 1111_0000. Beraz, lau 1 eta ondoren lau 0 sartuta, shreg[7:0] balioa 1111_0000 da.

Biten balioa eta kamerako irudia. Jaso biak: erregistroaren balio bitarra eta kameran ikusten duzuna. Bitak shreg[7] ezkerrean eta shreg[0] eskuinean idazten ditugu. Kameraren orientazioaren arabera, LEDen kokapena alderantziz ikus liteke. Egiaztatu LEDR indizeak: orientazioaren ondorioa da balio bera alderantziz ikustea, baina ez du bestelako patroi oker bat justifikatzen. Horregatik gordeko dituzu kalkulatutako balioa eta irudia.

Txantiloi honetako zatitzaileak 25 bit ditu: gehienez 33_554_431 gorde dezake. Erabili hasierako DIV = 33_333_333 balioa (25'd33_333_333), hori sartzen baita. Aurreko ariketako 100_000_000 ez da 25 bitetan sartzen.

// 4. ikasgaia - 2-D ariketa: 8 biteko desplazamendu-erregistroaren txantiloia
// SW[0]=serieko sarrerako bita; KEY[0]=reset; KEY[1]=desplazamendua gaitzea.
module leds_mirror(CLOCK_50, SW, KEY, LEDR);
    input        CLOCK_50;
    input  [9:0] SW;
    input  [3:0] KEY;
    output [9:0] LEDR;

    localparam [24:0] DIV = TODO_DIVIDER_LIMIT;
    reg [24:0] div;
    reg        slow_clk;
    always @(posedge CLOCK_50) begin
        if (!KEY[0]) begin div <= 0; slow_clk <= 0; end
        else if (div == DIV) begin div <= 0; slow_clk <= ~slow_clk; end
        else div <= div + 1'b1;
    end

    reg [7:0] shreg;
    always @(posedge slow_clk or negedge KEY[0]) begin
        if (!KEY[0])      shreg <= TODO_RESET_VECTOR;
        else if (!KEY[1]) shreg <= TODO_SHIFT_LEFT_UPDATE;
    end

    assign LEDR[7:0] = TODO_SHIFT_REGISTER_OUTPUT;
    assign LEDR[9:8] = 2'b00;
endmodule

Hasi 0000_0000 egoeran. KEY[1] sakatuta mantenduz, sartu SW[0] = 1, 1, 0, 1 sekuentzia lau urratsetan; zerrendako lehen bita sartzen da lehenengo. Idatzi tarteko egoerak, eta adierazi shreg[7:0] balioa lau urratsen ondoren.

6

Mugitu bitak LEDen lerroan zehar

9 min

Eraiki desplazamendu-erregistroa. Behatu nola sartzen eta mugitzen diren batekoak, eta nola datozen ondoren zeroak.

  1. Ordeztu leds_mirror.v fitxategiko edukia osatu duzun 8 biteko desplazamendu-erregistroarekin. Mantendu leds_mirror izena eta input CLOCK_50; deklarazioa.

  2. Sintetizatu, zuzendu idazketa-akatsak eta kargatu diseinua FPGAra.

  3. Sakatu eta askatu KEY[0], erregistroa zeroz betetzeko (LEDR[7:0] LED guztiak itzalita).

  4. Jarri SW[0] gora (serieko sarrera = 1) eta eutsi KEY[1] sakatuta. Urrats bakoitzean (1,33 s inguru), beste bateko bat sartzen da mutur batetik eta aurrekoak desplazatzen dira. Lau urratsen ondoren, lau LED piztuta egon behar dira (0000_1111).

  5. Jarri SW[0] behera (serieko sarrera = 0), mantendu KEY[1] sakatuta eta utzi beste lau urrats igarotzen. Zeroak batekoen atzetik sartuko dira, erregistroak 1111_0000 balioa izan arte.

  6. Askatu KEY[1] patroia mantendu nahi duzunean, irakurri edo irudia hartu ahal izateko.

Klase-saio batean erabilgarri

Egin reset eta eutsi KEY[1] sakatuta. Jaso egoera urratsez urrats: lau urrats SW0=1 izanik eta beste lau SW0=0 izanik. Idatzi shreg zortzi biten bidez, shreg[7] ezkerrean eta shreg[0] eskuinean. Azken zutabean, azaldu kamerako LEDen kokapena idatzitako biten ordenarekin alderatuta; erabili LEDen indizeak.

Urrats zk. SW[0] sarrera shreg[7:0] (8 bit) Kamera: zer LED? Zer orientazio?

Jaso zure ebidentzia. SW0=1 izanik lau urrats eta SW0=0 izanik beste lau egin ondoren, askatu KEY[1] patroia mantentzeko (shreg = 1111_0000). Hartu kameraren irudi bat, jaso LEDen orientazioa eta gehitu irudiaren erreferentzia edo esteka.

Alderatu kalkulatutako 1111_0000 balio bitarra zure irudian piztuta dauden LEDekin. LEDen ordena alderantziz ikusten bada, azaldu indizeak erabiliz nola bereizten dituzun orientazioaren ondorioa eta desplazamendu-logikaren akatsa.

7

Aldaketa: eskuinera desplazatzea eta eraztun-kontagailua

6 min

Desplazatu kontrako noranzkoan. Erregistroa ezkerrera beharrean eskuinera desplazatzeko, bit bakoitza pisu txikiagoko muturrerantz mugitzen da, eta bit berria goiko muturretik sartzen da (shreg[7]). Lerro bakarra aldatu behar duzu. Ordeztu ezkerrerako desplazamenduaren markatzailea zuk idatzitako eskuinerako adierazpenarekin:

else if (!KEY[1]) shreg <= TODO_SHIFT_RIGHT_UPDATE;   // Desplazatu eskuinera eta sartu SW[0].

Aldatu lerro hori bakarrik. Orain SW[0] balioa shreg[7] bitean sartzen da, eta pisu handieneko zazpi bitak, shreg[7:1], shreg[6:0] posizioetara jaisten dira.

Hedapena: eraztun-kontagailua. Eraztun-kontagailuak erregistroaren irteera sarrerara berrelikatzen du; horrela, patroi batek etengabe bira egiten du. Eraiki ezkerrera desplazatzen den eraztuna: goiko bita beheko bitera eraman, eta reset egitean kargatu 0000_0001, piztutako LED bakarrak lerroari bira eman diezaion. Resetak 8'h01 kargatu behar du, ez 8'h00. Eutsi KEY[1] sakatuta eta behatu LED bakarraren ibilbidea.

  1. Aldatu zure moduluaren lerro bakarra, goian azaldutako eskuinerako desplazamendua egiteko. Sintetizatu eta kargatu.

  2. Egin reset, eutsi KEY[1] sakatuta, eta erabili SW[0]=1 lau urratsetan eta SW[0]=0 hurrengo lauetan. Egiaztatu bitak kontrako noranzkoan mugitzen direla LEDen lerroan.

  3. (Aukerako hedapena) Eraiki eraztun-kontagailua: resetak 8'h01 kargatzen du, eta desplazamendu-lerroak shreg[7] bita 0 bitera berrelikatzen du. Eutsi KEY[1] sakatuta eta behatu LED bakarra nola dabilen biraka.

Klase-saio batean erabilgarri

Eskuinera desplazatzen duen bertsioan, hasi 0000_0000 egoeran eta sartu SW[0] = 1 lau urratsetan. Zein muturretatik betetzen da erregistroa? Zer balio du shreg[7:0] erregistroak lau urratsen ondoren?

Azaldu hiru esalditan: (1) erloju-zatitzaileak zer egin duen kontagailuaren eta desplazamendu-erregistroaren urratsak ikusi ahal izateko; (2) jaso duzun ebidentzia zehatz bat (HEX0 balioa edo 1111_0000 patroia); eta (3) saihestu duzun nahaste bat (26 bitetan sartzen ez den konstantea, edo biten balioa eta LEDen orientazioa nahastea).

Bihurtu aurrebista hau klase-saio batean

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