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.
Hasi saioa irakasle-kontu batekin klase-saioa prestatzeko. Ikasleak klase-kode batekin sartzen dira.
Lehen aldia duzu LabsLand-en? Sortu irakasle-kontua
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.
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).
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-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;
endmoduleZatitzailean 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.
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.
Ireki DE1-SoC plakaren Verilog laborategia. Editorean
leds_mirror.vagertzen da.Ordeztu
leds_mirror.vfitxategiko eduki guztia osatu duzun 4 biteko kontagailuarekin. Mantenduleds_mirrorizena. Kontuan hartuinput CLOCK_50;deklaratu behar dela: hasierako txantiloiak ez du erlojua berez gehitzen.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.
Sakatu FPGAra igo eta itxaron plaka eta kamera prest egon arte. Sakatu eta askatu
KEY[0], zirkuitua egoera ezagun batean hasteko.Behatu
LEDR[3:0]etaHEX0. Balio berri bat agertu behar da 1,33 s-tik behin, gutxi gorabehera (0,75 urrats/s). Egiaztatu LEDetako balio bitarra etaHEX0digitu hamaseitarra bat datozela; adibidez,HEX0bistaratzaileakCerakustean,LEDR[3:0]patroia1100izan behar da.Eutsi
KEY[0]sakatuta kontagailua0balioan mantentzeko; askatu eta behatu nola hasten den berriz0-tik zenbatzen.Aldatu
DIVbalioa8_333_333izatera (idatzi27'd8_333_333), sintetizatu, kargatu eta egin reset: kontagailua azkarrago dabilela ikusiko duzu. Ondoren, erabili100_000_000(idatzi27'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.
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.
Moldatu zure kontagailuaren
alwaysblokea9ondoren0baliora itzul dadin, goian adierazi bezala.Sintetizatu, zuzendu idazketa-akatsak eta kargatu diseinua FPGAra.
Behatu
HEX0sekuentzia:0, 1, 2, ... 9, 0, 1, .... Egiaztatu ez dela inoizAagertzen. SakatuKEY[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?
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;
endmoduleHasi 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.
Mugitu bitak LEDen lerroan zehar
9 min
Eraiki desplazamendu-erregistroa. Behatu nola sartzen eta mugitzen diren batekoak, eta nola datozen ondoren zeroak.
Ordeztu
leds_mirror.vfitxategiko edukia osatu duzun 8 biteko desplazamendu-erregistroarekin. Mantenduleds_mirrorizena etainput CLOCK_50;deklarazioa.Sintetizatu, zuzendu idazketa-akatsak eta kargatu diseinua FPGAra.
Sakatu eta askatu
KEY[0], erregistroa zeroz betetzeko (LEDR[7:0]LED guztiak itzalita).Jarri
SW[0]gora (serieko sarrera =1) eta eutsiKEY[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).Jarri
SW[0]behera (serieko sarrera =0), mantenduKEY[1]sakatuta eta utzi beste lau urrats igarotzen. Zeroak batekoen atzetik sartuko dira, erregistroak1111_0000balioa izan arte.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.
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.
Aldatu zure moduluaren lerro bakarra, goian azaldutako eskuinerako desplazamendua egiteko. Sintetizatu eta kargatu.
Egin reset, eutsi
KEY[1]sakatuta, eta erabiliSW[0]=1lau urratsetan etaSW[0]=0hurrengo lauetan. Egiaztatu bitak kontrako noranzkoan mugitzen direla LEDen lerroan.(Aukerako hedapena) Eraiki eraztun-kontagailua: resetak
8'h01kargatzen du, eta desplazamendu-lerroakshreg[7]bita0bitera berrelikatzen du. EutsiKEY[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.
Lehen aldia duzu LabsLand-en? Sortu irakasle-kontua