Teach ikasgaia
Logika digitala DE1-SoC plakan (2/6): egia-taulak, SOP/POS, Karnaughen mapak eta multiplexadoreak
Egia-taulak, adierazpen boolearrak, Karnaughen mapak eta multiplexadoreak lotuko dituzu, eta minimizatutako logika konbinazionala DE1-SoC plakan probatuko duzu.
Hasi saioa irakasle-kontu batekin klase-saioa prestatzeko. Ikasleak klase-kode batekin sartzen dira.
Lehen aldia duzu LabsLand-en? Sortu irakasle-kontua
Ikaskuntza-emaitzak
Egia-taula batetik biderkaduren batura (SOP) eta baturen biderkadura (POS; aukerako sakontze-ariketa) eratortzea.
Funtzio boolear bat Karnaughen mapa batekin minimizatzea eta adierazpen sinplifikatua irakurtzea.
Forma kanonikoa eta forma minimoa benetako hardwarean konparatzea eta emaitza bera ematen dutela egiaztatzea.
Aukerako sakontze-ariketa: lau sarreretako bat irteerara bideratzen duen 4:1 multiplexadorea eraikitzea eta egiaztatzea.
Ikaslearen jardueraren aurrebista
Jardueraren edukia
Aurrebista soilik. Klase-saio batean, ikasleek erantzunak bete eta lana irakasleari bidal diezaiokete.
Egia-taulatik zirkuitura
10 min
Saio nagusia (70 minutu): osatu egia-taula, eratorri eta minimizatu SOP adierazpena, eta egiaztatu bi formak plakan. POS eta MUX aukerako sakontze-ariketak dira, 20 minutu ingurukoak bakoitza; deskodetzaileak beste 20 minutu eskatzen ditu. Ez dira saio nagusiaren kalifikazioan sartzen.
Lehenengo ikasgaian, ateak banan-banan etengailuei konektatu zenizkien. Diseinu errealetan, zirkuituak zer egin behar duen erabakitzen da lehenik, normalean egia-taula baten bidez. Ondoren, portaera hori emango duen ate-sarea bilatzen da. Ikasgai honetan, funtzio bera hainbat modutan adieraziko duzu, eta adierazpena sinplifikatuko duzu.
Lehenengo bi ariketetako funtzioa F(C,B,A) da, hiru sarrerakoa. SW[0]=A, SW[1]=B eta SW[2]=C konektatuko dituzu, eta emaitza LEDR[0] LEDarekin erakutsiko duzu. Hona hemen egia-taula. Errenkadek C B A zenbaketa bitarraren ordenari jarraitzen diote, 000-tik 111-ra:
F(C,B,A) funtzioaren egia-taula, ordena bitarrean:
- 0. errenkada:
C B A = 0 0 0→F=0 - 1. errenkada:
C B A = 0 0 1→F=1 - 2. errenkada:
C B A = 0 1 0→F=0 - 3. errenkada:
C B A = 0 1 1→F=1 - 4. errenkada:
C B A = 1 0 0→F=1 - 5. errenkada:
C B A = 1 0 1→F=0 - 6. errenkada:
C B A = 1 1 0→F=1 - 7. errenkada:
C B A = 1 1 1→F=0
Zortzi errenkadetatik lautan F=1 da, eta beste lautan F=0. Egiaztatu taulan, erantzun aurretik. Banaketa hori da ikasgaiaren abiapuntua: F=1 errenkadek biderkaduren batura ematen dute, eta F=0 errenkadek, baturen biderkadura. Eduki taula eskura; hurrengo urratsetan erabiliko duzu.
Gogoratu 1. ikasgaiko konbentzioak: etengailua goian dagoenean 1 logikoa ematen du, eta LEDR maila altuan aktibatzen da; beraz, irteerak 1 balio duenean LEDa pizten da. Ariketa hauek guztiz konbinazionalak dira: irteera etengailuen uneko posizioen araberakoa da soilik. Ez da erlojurik deklaratu behar.
Zortzi errenkadetatik zenbatetan da F=1, eta zein dira errenkada horiek?
Biderkaduren batura eta Karnaughen mapa
20 min
Minterminoa. Mintermino bat sarrera guztiak, bakoitza zuzenean edo ezeztatuta, AND bidez lotzen dituen biderkadura da. Egia-taulako errenkada bakarrean balio du 1. Hiru sarrerarako zortzi mintermino daude, bana errenkadako. 1. errenkadan C=0, B=0, A=1 denez, haren minterminoa (~C & ~B & A) da: C=0, B=0 eta A=1 direnean bakarrik balio du 1.
Biderkaduren batura kanonikoa (SOP). Hemen «batura» OR eragiketa da, ez batuketa aritmetikoa. F eraikitzeko, lotu OR bidez F=1 duten errenkada guztien minterminoak. Erabili aurreko egia-taula F funtzioaren lau minterminoak zeuk idazteko. Ez saltatu forma oso hau: plakan probatuko duzu forma sinplifikatua probatu aurretik.
Karnaughen maparekin minimizatzea. K mapa batek egia-taula berrantolatzen du, ondoko gelaxken artean sarrera bakarra alda dadin. Ondoko bi 1 taldekatzean, taldearen barruan aldatzen den aldagaia ez da beharrezkoa bikote hori deskribatzeko, eta terminotik desagertzen da. Hala, termino laburrago bat lortzen da. Beheko irudiak 1 duten lau gelaxkak eta bi talde posible erakusten ditu. Talde bakoitzean, erabaki zer sarrera mantentzen diren, zer sarrera aldatzen den eta zer biderkadura-termino geratzen den.
F funtzioaren Karnaughen mapa. Markatutako bikote bakoitzak elkarren ondoko bi 1 ditu. Talde bakoitzean, alderatu bi gelaxkak eta kendu aldatzen den aldagaia; mantentzen diren aldagaiek osatzen dute termino sinplifikatua. Maparen ezkerreko eta eskuineko ertzak ere elkarren ondokoak dira.
Idatzi F(C,B,A) funtzioaren SOP kanoniko osoa, taulako F=1 diren lau errenkadetatik abiatuta. Erabili ~ NOT eragiketarako, & AND eragiketarako eta | OR eragiketarako.
K mapa erabiliz, idatzi bi taldeetako bakoitzaren biderkadura-termino sinplifikatua. Adierazi talde bakoitzean zer aldagai aldatzen den eta, beraz, terminotik desagertzen den. Ondoren, konbinatu bi terminoak F funtzioaren adierazpen minimo batean.
Sarrerako aldagairen bat desagertzen al da zure adierazpen minimotik? Azaldu horrek zer esan nahi duen F funtzioaren eta hiru sarreren arteko erlazioari buruz. Ondoren, bilatu aldagai horretan bakarrik desberdinak diren bi errenkada, eta eman haien zenbakiak eta F balioak, azalpena egiaztatzeko.
Eraiki SOP kanonikoa eta forma minimoa
30 min
Eraman orain funtzioa benetako plakara. Lehenik SOP kanonikoa probatuko duzu zortzi errenkadetan. Ondoren, txantiloi bera editatuko duzu, K mapatik lortutako adierazpen minimoa probatzeko.
Beheko modulua nahita dago osatu gabe. Ordeztu TODO_CANONICAL_SOP_EXPRESSION zure SOP osoarekin. Plakan egiaztatu ondoren, ordeztu lerro hori bera zure adierazpen minimizatuarekin, eta sintetizatu berriro.
// 2. ikasgaia - 1-B ariketa: biderkaduren baturaren txantiloia (SOP)
// F(C,B,A): erabili egia-taulako F=1 errenkadak. SW[0]=A, SW[1]=B, SW[2]=C.
// Osatu lehenik SOP kanonikoa. Ondoren, ordeztu K maparekin minimizatutako adierazpenarekin.
module leds_mirror(SW, LEDR);
input [9:0] SW;
output [9:0] LEDR;
wire A = SW[0];
wire B = SW[1];
wire C = SW[2];
// 1. urratsa: SOP kanonikoa. Idatzi biderkadura-termino bat F=1 errenkada bakoitzeko.
assign LEDR[0] = TODO_CANONICAL_SOP_EXPRESSION;
// 2. urratsa: forma kanonikoa egiaztatu ondoren, ordeztu aurreko lerroa
// K maparekin minimizatutako adierazpenarekin, eta sintetizatu berriro.
assign LEDR[9:1] = 9'b0;
endmoduleIreki DE1-SoC Verilog laborategia. Editoreak
leds_mirror.vfitxategia erakusten du.Hautatu
leds_mirror.vfitxategiaren eduki osoa eta ordeztu aurreko txantiloiarekin. Mantendu moduluarenleds_mirrorizena.Ordeztu
TODO_CANONICAL_SOP_EXPRESSIONzure SOP kanonikoarekin.assign LEDR[0] = ...;lerro bakarra geratu behar da.Sakatu Sintetizatu. Gida batek botoia estaltzen badu, itxi edo saltatu. Itxaron amaitu arte (normalean 1–3 minutu). Errore bat agertzen bada, berrikusi puntu eta komak eta parentesiak, zuzendu eta sintetizatu berriro. Jarraitu soilik azken egoerak 0 errore adierazten dituenean.
Sakatu FPGAra igo, eta itxaron plakaren saioa eta kamera agertu arte.
Jarri
SW[2:0](C B A) zortzi konbinazioetan:000, 001, 010, 011, 100, 101, 110, 111. IrakurriLEDR[0]kameran, eta jaso emaitza bakoitza taulan.Bigarren proban, editatu
assign LEDR[0]lerro bera K maparekin minimizatutako adierazpena erabiltzeko. Sintetizatu eta kargatu berriro. Egiaztatu gutxienez hiru errenkada, tarteanF=0duen bat etaF=1duen beste bat, eta alderatu bertsio minimizatua kanonikoarekin.
Klase-saio batean erabilgarri
Errenkada bakoitzean, jarri SW[2:0] = C B A, eta jaso kameran irakurritako LEDR[0] balioa (1 = piztuta, 0 = itzalita). Erabili zure egia-taula SOP kanonikoak eta adierazpen minimizatuak emaitza bera ematen duten egiaztatzeko. Bigarren proban berriz egiaztatutako errenkadetan, bereizi bi irakurketak gelaxka berean.
| C = SW2 | B = SW1 | A = SW0 | F = LEDR0 (behatutakoa) |
|---|---|---|---|
SOP kanonikoak eta adierazpen minimizatuak LEDR[0] balio bera eman al dute egiaztatu dituzun errenkadetan? Esaldi batean, azaldu zer berresten duen horrek bi adierazpenei buruz.
Erantsi zure ebidentzia. Hartu kameraren pantaila-argazki bat adierazpen minimizatua plakan dagoela, zure taulak F=1 iragartzen duen errenkada batean. Testuan, adierazi aukeratutako C B A errenkada.
Aukerako sakontzea (ez da entregarik behar). Quartusek diseinuak zenbat elementu logiko erabiltzen dituen adierazten du. Zure saioan txosten hori agertzen bada, sintetizatu SOP kanonikoa eta adierazpen minimizatua, eta alderatu elementu logikoen kopuruak. Hartu esplorazio gisa; baliabideen txostena ez da saio guztietan modu berean erakusten.
Funtzio bera baturen biderkadura gisa
20 min
SOP formak F eraikitzen du 1 duten errenkadetatik abiatuta. Baturen biderkadurak (POS) F bera eraikitzen du 0 duten errenkadetatik.
Maxterminoa. Maxtermino bat sarrera guztiak, zuzenean edo ezeztatuta, OR bidez lotzen dituen batura da. Errenkada bakarrean balio du 0; minterminoaren pareko kontzeptua da, alderantzizko balioarekin. 0. errenkadarako (C=0, B=0, A=0), maxterminoa (A | B | C) da: OR horrek 0 balio du A, B eta C hirurak 0 direnean bakarrik, eta 1 gainerako errenkadetan.
Baturen biderkadura kanonikoa. Lotu AND bidez F=0 duten errenkadetako maxterminoak. Maxtermino bakoitzak 0 ematen du bere errenkadan, eta 1 gainerakoetan; guztien AND eragiketak, beraz, 0 ematen du zehazki F=0 diren errenkadetan. Bilatu errenkada horiek egia-taulan, eta idatzi lau maxterminoak.
// 2. ikasgaia - 1-C ariketa: baturen biderkaduraren txantiloia (POS)
// F(C,B,A) bera. Erabili taulako F=0 errenkadak maxterminoak idazteko.
module leds_mirror(SW, LEDR);
input [9:0] SW;
output [9:0] LEDR;
wire A = SW[0];
wire B = SW[1];
wire C = SW[2];
// POS kanonikoa: batura-termino bat F=0 errenkada bakoitzeko, denak AND bidez lotuta.
assign LEDR[0] = TODO_CANONICAL_POS_EXPRESSION;
assign LEDR[9:1] = 9'b0;
endmoduleDE1-SoC Verilog laborategian, hautatu
leds_mirror.vfitxategi osoa eta ordeztu aurreko POS txantiloiarekin. Mantendu moduluarenleds_mirrorizena.Ordeztu
TODO_CANONICAL_POS_EXPRESSIONFfuntzioaren POS kanonikoarekin.Sakatu Sintetizatu, eta itxaron. Zuzendu sintaxi-erroreak eta sintetizatu berriro.
Sakatu FPGAra igo, eta itxaron kamera agertu arte.
Jarri
SW[2:0](C B A)000 ... 111bitarteko zortzi konbinazioetan, eta irakurriLEDR[0]aldi bakoitzean. Egiaztatu POS formak SOP taulan behatutako balio berak ematen dituela.Errenkada bateko emaitza ez badator espero zenuenarekin bat, egiaztatu etengailuen posizioak:
SW[2]=C,SW[1]=B,SW[0]=A. Ondoren, berrikusi POS adierazpeneko lau maxterminoak eta haiek lotzen dituen AND eragiketa. Gogoratu adierazpen horretanF=0duten errenkadetako maxterminoak soilik sartu behar direla.
Klase-saio batean erabilgarri
F honetarako, nolakoa da POS kanonikoaren tamaina SOP kanonikoarenarekin alderatuta?
4:1 multiplexadorea
20 min
Multiplexadore (MUX) bat hautagailu bat da: hainbat datu-sarreretako bat irteera bakarrera bideratzen du, hautapen-lerroek aginduta. 4:1 MUX batek lau datu-sarrera ditu eta bi hautapen-lerro behar ditu, bi bitek 2^2 = 4 sarreren artean hautatzeko aukera ematen dutelako. Kommutadore birakari baten antzera jokatzen du: hautapen-balioak erabakitzen du zer datu-lerro konektatzen den irteerara.
Ariketa honetako pin-esleipena honako hau da; kontuan hartu biten ordena:
- Datu-sarrerak:
SW[3]=D3,SW[2]=D2,SW[1]=D1,SW[0]=D0 - Hautapen-lerroak:
SW[5]=S1,SW[4]=S0 - Irteera:
LEDR[0] = Y
{S1,S0} hautapenak honela aukeratzen du: 00 → D0, 01 → D1, 10 → D2, 11 → D3. always @(*) bloke konbinazionalak Y esleitu behar du konbinazio posible guztietan. Lau kasuek bi biten balio bitar guztiak estaltzen dituzte; default adarrak simulazioan bat ez datozen balioetarako irteera ematen du. Zirkuituko sarrera-konbinazio posible batek Y esleitu gabe uzten badu, latch bat, hau da, nahi gabeko memoria, inferitzen da. Ez da gertatzen default falta delako soilik.
// 2. ikasgaia - 1-D ariketa: 4:1 multiplexadorearen txantiloia
// Datu-sarrerak: SW[3]=D3, SW[2]=D2, SW[1]=D1, SW[0]=D0
// Hautapen-lerroak: SW[5]=S1, SW[4]=S0. Irteera: LEDR[0]=Y.
module leds_mirror(SW, LEDR);
input [9:0] SW;
output [9:0] LEDR;
wire D0 = SW[0], D1 = SW[1], D2 = SW[2], D3 = SW[3];
wire S0 = SW[4], S1 = SW[5];
reg Y;
always @(*) begin
case ({S1, S0})
2'b00: Y = TODO_SELECTED_INPUT_00;
2'b01: Y = TODO_SELECTED_INPUT_01;
2'b10: Y = TODO_SELECTED_INPUT_10;
2'b11: Y = TODO_SELECTED_INPUT_11;
default: Y = 1'b0; // Bat ez datozen balioetarako irteera simulazioan
endcase
end
assign LEDR[0] = Y;
assign LEDR[9:1] = 9'b0;
endmoduleKonpilatu aurretik, ordeztu lau TODO adierazpenak D0, D1, D2 eta D3 balioekin, 00, 01, 10, 11 hautapen-ordenan.
DE1-SoC Verilog laborategian, ordeztu
leds_mirror.vfitxategiaren eduki osoa multiplexadorearen moduluarekin. Mantenduleds_mirrorizena.Sakatu Sintetizatu eta itxaron amaitu arte. Zuzendu erroreak eta sintetizatu berriro.
Sakatu FPGAra igo, eta itxaron kamera agertu arte.
Jarri lau datu-etengailuak
SW[3:0] = 1010patroian:D3=1(SW[3]goian),D2=0(SW[2]behean),D1=1(SW[1]goian),D0=0(SW[0]behean).Jarri hautapen-lerroak
S1:S0 = 00, 01, 10, 11egoeretan,SW[5](S1) etaSW[4](S0) erabiliz. Balio bakoitzerako, irakurriLEDR[0](Y) eta idatzi taulan.1010datuekin, irteerak hautatutako lerroari jarraitu behar dio:0, 1, 0, 1.Egiaztapen azkar baterako, aukeratu hautapen-balio bat eta aldatu dagokion datu-etengailua. Egiaztatu
Yirteerak lerro horri bakarrik jarraitzen diola, eta beste datu-lerroek ez diotela eragiten.
Klase-saio batean erabilgarri
Mantendu SW[3:0] = 1010 datuak (D3 D2 D1 D0 = 1 0 1 0). Hautapen-balio bakoitzerako, jarri SW[5]=S1 eta SW[4]=S0, adierazi zer sarrera hautatzen den eta jaso behatutako LEDR[0] balioa (Y). Patroi honekin, espero den Y sekuentzia 0, 1, 0, 1 da.
| S1 = SW5 | S0 = SW4 | Hautatutako sarrera (D0..D3) | Y = LEDR0 (behatutakoa) |
|---|---|---|---|
Erantsi zure ebidentzia. Hartu multiplexadorearen kameraren pantaila-argazkia, datuak SW[3:0] = 1010 eta hautapena S1:S0 = 01 direla (SW[4] goian eta SW[5] behean). Horrek D1 = 1 hautatzen du; beraz, LEDR[0] piztuta egon behar da. Erantsi irudiaren erreferentzia edo esteka behean.
Demagun 2'b10 kasua eta default adarra biak kentzen dituzula. Zer gertatzen da {S1,S0}=10 denean, Y esleitu gabe geratzen bada? Azaldu inferitzen den nahi gabeko memoria. Gauza bera gertatuko al litzateke default bakarrik kenduta, lau kasu bitarrek Y esleitzen jarraituko balute?
Sakontzea: bi digituko deskodetzaile hamartarra, 7 segmenturekin
20 min
Ariketa hau aukerakoa da. Denborarik baduzu, LED bakar batetik zazpi segmentuko bistaratzaileetan antolatutako irteera batera igaroko zara.
Zazpi segmentuko bistaratzaile batek a–g izeneko zazpi barra ditu. Konbinazio desberdinetan piztuz, digituak marrazten dituzte. DE1-SoC plakan, HEX bistaratzaileak maila baxuan aktibatzen dira, eta biten ordena {g, f, e, d, c, b, a} da: segmentua pizten da haren bitak 0 balio duenean. Beraz, 0 digituaren patroia (a,b,c,d,e,f piztuta eta g itzalita) 7'b1000000 da: sei 0 piztutako segmentuetarako eta 1 bat itzalitako g segmenturako.
DE1-SoC plakako HEX bistaratzaileen segmentu-izenak eta {g,f,e,d,c,b,a} bit-ordena. 0 bitak segmentua pizten du, eta 1 bitak itzaltzen du. 0 digituak g izan ezik segmentu guztiak pizten ditu: 7'b1000000.
Hurrengo diseinuak SW[3:0] 0..15 bitarteko balio gisa irakurtzen du. Unitateen digitua HEX0 bistaratzailean erakusten du, eta hamarrekoena (0 edo 1), HEX1 bistaratzailean. Hasierako proiektuak ez du hori automatikoki ematen: HEX1 kontrolatzeko, output [6:0] HEX1 gehitu behar diozu moduluaren portu-zerrendari. Hasierako leds_mirror moduluak HEX0 bakarrik eskaintzen du. Beheko moduluak HEX0 eta HEX1 deklaratzen ditu; portu osagarria nola gehitu erakusten du.
// 2. ikasgaia - 1-E ariketa (aukerakoa): bi digituko deskodetzaile hamartarra
// Osatu maila baxuan aktibatzen diren patroiak eta hamarrekoen/unitateen ekuazioak.
module leds_mirror(SW, HEX0, HEX1);
input [9:0] SW; // SW[3:0] = 0..15 balioa
output [6:0] HEX0; // Unitateen digitua
output [6:0] HEX1; // Hamarrekoen digitua (0 edo 1)
wire [4:0] v = {1'b0, SW[3:0]};
function [6:0] seg;
input [3:0] d;
case (d)
4'd0: seg = 7'b1000000;
4'd1: seg = TODO_SEGMENT_PATTERN_1;
4'd2: seg = TODO_SEGMENT_PATTERN_2;
4'd3: seg = TODO_SEGMENT_PATTERN_3;
4'd4: seg = TODO_SEGMENT_PATTERN_4;
4'd5: seg = TODO_SEGMENT_PATTERN_5;
4'd6: seg = TODO_SEGMENT_PATTERN_6;
4'd7: seg = TODO_SEGMENT_PATTERN_7;
4'd8: seg = TODO_SEGMENT_PATTERN_8;
4'd9: seg = TODO_SEGMENT_PATTERN_9;
default: seg = 7'b1111111;
endcase
endfunction
wire [3:0] tens = TODO_TENS_DIGIT;
wire [3:0] ones = TODO_ONES_DIGIT;
assign HEX0 = seg(ones);
assign HEX1 = seg(tens);
endmoduleAukerakoa. DE1-SoC Verilog laborategian, ordeztu
leds_mirror.vfitxategi osoa deskodetzailearen moduluarekin. Mantenduleds_mirrorizena eta osatu TODO adierazpenak. Egiaztatu portu-zerrendakmodule leds_mirror(SW, HEX0, HEX1);dioela: gehitutakooutput [6:0] HEX1deklarazioak hamarrekoen bistaratzailea kontrolatzeko aukera ematen du.Sakatu Sintetizatu, zuzendu erroreak eta sintetizatu berriro.
Sakatu FPGAra igo, eta itxaron kamera agertu arte.
Jarri
SW[3:0]hainbat baliotan, eta irakurri bi bistaratzaileak:0000sarrerarekin,HEX0-k0etaHEX1-ek0erakutsi behar dituzte;1001sarrerarekin (9 hamartarra),9eta0;1111sarrerarekin (15 hamartarra),HEX0-k5etaHEX1-ek1.
Klase-saio batean erabilgarri
Zer aldaketa egin behar izan duzu moduluaren portu-zerrendan diseinuak HEX1 kontrolatu ahal izateko, eta zergatik zen beharrezkoa?
Zer eraiki duzu?
10 min
Azaldu zure Karnaughen mapak nola ezabatzen duen B adierazpenetik, eta aipatu plakan egiaztatutako errenkada-bikote bat hori berresteko. Egin erreferentzia zure taulari, osorik kopiatu gabe.
Multiplexadorean SW[3:0] = 1010 datuak izanda, zer Y balio-sekuentzia behatu duzu S1:S0 = 00, 01, 10, 11 egitean? Azaldu zergatik dagokion balio bakoitza une horretan hautatutako datuari.
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