Teach ikasgaia
Logika digitala DE1-SoC plakan VHDLrekin (6/6): amaierako FSM proiektua, salmenta-makina
Sintetizatu salmenta-makinaren FSMa VHDL erabiliz, kargatu DE1-SoC plakan eta probatu txanponen sarrerak, reset, LED irteerak eta HEX kreditua.
Hasi saioa irakasle-kontu batekin klase-saioa prestatzeko. Ikasleak klase-kode batekin sartzen dira.
Lehen aldia duzu LabsLand-en? Sortu irakasle-kontua
Ikaskuntza-emaitzak
Hainbat egoera eta funtzio dituen FSMa benetako hardwarean exekutatzea eta azaltzea.
Kreditua egoera gisa gordetzen duen salmenta-makinaren kontrolagailua eraikitzea.
Kanbioak itzultzea, produktu-hautaketa eta bistaratze hamartarra aukerako hedapen gisa ezagutzea.
Oinarrizko diseinuak zergatik gogoratu behar dituen kreditu-egoerak azaltzea; 3-C2 eginez gero, egoera eta biegonkor kopuruaz arrazoitzea.
Ikaslearen jardueraren aurrebista
Jardueraren edukia
Aurrebista soilik. Klase-saio batean, ikasleek erantzunak bete eta lana irakasleari bidal diezaiokete.
Semaforotik kontrolagailura: kreditua gogoratzen duen FSMa
8 min
Bosgarren ikasgaian berdea → horia → gorria zikloa egiten zuen semaforoa eraiki zenuen. Aukerako detektagailua egin bazenuen, egoerak patroiaren jadanik ikusitako zatia gogoratzen zuela ere ikusi zenuen. Amaierako proiektu honetan, egoerak orain arte sartutako diruaren balioa adieraziko du. Salmenta-makina baten kontrolagailu txikia eraikiko duzu eta, aukerako hedapenak eginez gero, funtzioz funtzio zabalduko duzu. Etengailuek txanponak ordezkatzen dituzte, eta LEDek produktua emateko eta kanbioak itzultzeko aginduak adierazten dituzte.
Gogoratu FSM batek egoerak, uneko egoeraren eta sarreren araberako hurrengo egoeraren araua, eta egoeraren araberako irteerak dituela; Mealy irteeretan, sarrerek ere eragiten dute. Gaurko trebetasun nagusia diseinatzea da: erabaki egoerak, marraztu trantsizio-taula eta, ondoren, idatzi VHDL kodea.
Txanponak onartzen dituen makinan, egoera bakoitza kreditu-maila bat izatea egokia da. 5 eta 10 zentimoko txanponak onartu eta produktua 15 zentimotan ematen badu, gordetako kreditua 0, 5, 10 edo 15 zentimokoa izan daiteke: lau egoera. S0, S5, S10 eta S15 deituko diegu. Txanponak kreditua handitzen du; preziora iristean, makinak produktua emateko agindua sortu eta S0ra itzultzen da, behean zehaztutako ertzetan.
Plakaren seinaleak lehengoak dira. Diseinuak erlojua behar du, eta hasierako blink.vhd txantiloiak ez du erloju-sarrerarik; beraz, CLOCK_50 : in std_logic gehitzen dugu. Etengailua gora jartzea 1 da; KEY maila baxuan aktibo da (sakatuta = 0); LEDR maila altuan aktibo da (1 = piztuta); eta HEX0–HEX5 zazpi segmentuko bistaratzaileak maila baxuan aktibo dira (segmentua 0 balioarekin pizten da).
Egoera bakoitzak gordetako kreditua adierazten du. Txanponak banaka sartu: 5 zentimo SW(0) bidez edo 10 zentimo SW(1) bidez. S15 egoeratik hurrengo ertzean produktua eman eta S0ra itzultzen da; S10 + 10 zentimoko bideak ere produktua ematen du. Oinarrizko bertsioak ez du kanbiorik itzultzen. KEY(0) resetak edozein egoeratik S0ra eramaten du makina. Ondorengo hedapenek kanbioak eta produktu-hautaketa gehitzen dituzte.
Oinarrizko makinak S0, S5, S10, S15 lau egoerak erabiltzen ditu. Zergatik behar du kreditu-maila bakoitzerako egoera bana, egoera bakarra eduki beharrean? Zer ezingo luke egin egoera bakarrarekin?
LEDR(7) produktua ematearen adierazlea piztuta mantentzen da KEY(0) sakatu arte. Makina produktua eman eta S0ra itzuli ondoren, zerk ezabatzen du gordetako adierazle hori? Zer arazo legoke inoiz ezabatuko ez balitz?
3-C ariketa: salmenta-makinaren FSMa
14 min
Hau da oinarrizko diseinuaren txantiloia. Irakurri lehendik ezagutzen dituzun zatien bidez: txanponen laginketa behatzeko moduko erritmora ekartzen duen erloju-zatitzailea, hurrengo egoeraren eta irteeraren logika konbinazionala, eta erlojudun egoera-erregistroa, maila baxuan aktibo den reset asinkronoarekin. Produktua emateko baldintza ere osatu behar duzu. Bete TODO_* markatzaileak sintetizatu aurretik.
Egoerak. S0, S5, S10, S15 lau kreditu-mailen izenak state_t enumerazio-motako balioak dira. Kreditua zentimotan egoeratik kalkulatu eta bi modutan erakusten da: LEDR(3 downto 0) irteeran zenbaki bitar gisa, eta HEX0 bistaratzailean karaktere hamaseitar gisa: 0 = 0c, 5 = 5c, A = 10c eta F = 15c. Txantiloiak kredituaren bihurketa eta seg deskodetzailea ematen ditu.
Trantsizioak. Hona diseinatu aurretik prestatuko zenukeen taularen laburpena:
S0(0c): 5c →S5; 10c →S10; produkturik ez.S5(5c): 5c →S10; 10c →S15; produkturik ez oraindik.S10(10c): 5c →S15; 10c →S0eta produktua eman, 20c ordainduta, oinarrizko bertsioan kanbiorik gabe.S15(15c): hurrengo ertzean →S0eta produktua eman, sarreren balioa edozein dela ere.
S0, S5 edo S10 egoeran txanponik ez badago, mantendu egoera. Sartu txanponak banaka; ez jarri SW(0) eta SW(1) biak gora aldi berean.
Bi xehetasun dira garrantzitsuak. S10 egoeran 10c gehitzeak 20c ematen du, 15c-ko prezioa baino gehiago. Makinak produktua ematen du txanpon hori hartzen duen ertzean eta S0ra itzultzen da, baina oinarrizko bertsioak ez du kanbiorik itzultzen; 3-C1 hedapenak gehituko du funtzio hori. S15, berriz, «produktua eman eta kreditua hustu» egoera da: hurrengo ertzean egiten du hori, sarrerak edozein direla ere. Zehazki 15c-ra iristean, lehenik F ikusiko duzu; hurrengo ertzean piztuko da produktua ematearen adierazlea.
Produktua ematearen adierazlea gordeta mantentzen da. dispense seinale konbinazionala egoeraren eta sarreren arabera kalkulatzen da. Ez du beti urrats oso bat irauten: S10 egoeran, adibidez, 10c-ko sarrera aldatzean aktiba edo desaktiba daiteke. dispensed_latch erregistroak 1 hartzen du goranzko ertzean dispense = '1' bada. LEDR(7) irteeran erakusten da, eta resetak bakarrik ezabatzen du. Gertakari laburra kameran ikusteko moduko adierazle egonkor bihurtzen dugu. Izenak latch badio ere, erloju-ertzak gidatutako erregistroa da. Ez nahastu gertakaria eta gordetako adierazlea: S0ra itzultzeak ez du berez LED hori itzaltzen.
Txanpona sartzeko unea. DIV = 16_666_666 izanik, slow_clk 0,33 s ingurutik behin alderantzikatzen da, baina makina goranzko ertzetan eguneratzen da: ondoz ondoko ertzen tartea 0,67 s ingurukoa da. Igo txanponaren etengailua, mantendu hurrengo goranzko ertzak hartu arte, eta jaitsi hurrengo ertza iritsi aurretik. Hainbat ertzetan gora badago, hainbat txanpon gisa zenbatuko da. Resetaren ondorengo lehen ertza 0,33 s ingurura dator. Erlojuaren faseak eta kameraren atzerapenak eragiten dutenez, segundo kopuru jakin bat itxaroteak ez du berez txanpon bakarra bermatzen: egiaztatu kredituaren aldaketa, eta errepikatu reset eginda beharrezkoa bada.
-- Ikaslearen txantiloia: osatu TODO lerroak sintetizatu aurretik.
-- 6. ikasgaia - 3-C ariketa: salmenta-makinaren oinarrizko FSMa.
-- SW(0)=5c-ko txanpona, SW(1)=10c-ko txanpona, KEY(0)=reset. LEDR(7)=produktua eman dela gordeta.
-- Sartu txanpon bat SW(0) edo SW(1) goranzko ertz bakarrean 1 izanda; ertzen tartea 0,67 s inguru da.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity blink is
port (
CLOCK_50 : in std_logic;
KEY : in std_logic_vector(3 downto 0);
SW : in std_logic_vector(9 downto 0);
LEDR : out std_logic_vector(9 downto 0);
HEX0 : out std_logic_vector(6 downto 0)
);
end entity blink;
architecture rtl of blink is
type state_t is (S0, S5, S10, S15);
signal state, next_state : state_t := S0;
signal dispense, dispensed_latch : std_logic := '0';
signal credit : unsigned(3 downto 0);
constant DIV : unsigned(24 downto 0) := to_unsigned(16666666, 25);
signal div_count : unsigned(24 downto 0) := (others => '0');
signal slow_clk : std_logic := '0';
function seg(d : unsigned(3 downto 0)) return std_logic_vector is
begin
case d is
when "0000" => return "1000000"; -- 0
when "0101" => return "0010010"; -- 5
when "1010" => return "0001000"; -- A = 10
when "1111" => return "0001110"; -- F = 15
when others => return "1111111";
end case;
end function;
begin
process(CLOCK_50)
begin
if rising_edge(CLOCK_50) then
if KEY(0) = '0' then
div_count <= (others => '0'); slow_clk <= '0';
elsif div_count = DIV then
div_count <= (others => '0'); slow_clk <= not slow_clk;
else
div_count <= div_count + 1;
end if;
end if;
end process;
process(state, SW)
begin
next_state <= state;
dispense <= '0';
case state is
when S0 => TODO_FROM_0_CENTS;
when S5 => TODO_FROM_5_CENTS;
when S10 => TODO_FROM_10_CENTS;
when S15 => TODO_DISPENSE_AND_RESET;
end case;
end process;
process(slow_clk, KEY)
begin
if KEY(0) = '0' then
state <= S0; dispensed_latch <= '0';
elsif rising_edge(slow_clk) then
state <= next_state;
if TODO_DISPENSE_CONDITION then dispensed_latch <= '1'; end if;
end if;
end process;
credit <= to_unsigned(0, 4) when state = S0 else
to_unsigned(5, 4) when state = S5 else
to_unsigned(10, 4) when state = S10 else
to_unsigned(15, 4);
LEDR(7) <= TODO_DISPENSE_LED;
LEDR(3 downto 0) <= std_logic_vector(credit);
LEDR(6) <= '0'; -- ordezkatu lerro hau change_latch erabiliz 3-C1 hedapenean
LEDR(5 downto 4) <= (others => '0');
LEDR(9 downto 8) <= (others => '0');
HEX0 <= seg(credit);
end architecture rtl;S0 egoeratik hasita, aurresan zer karaktere-sekuentzia ikusiko duzun HEX0 bistaratzailean eta noiz piztuko den LEDR(7), lehenik 10c-ko txanpon bat eta ondoren 5c-ko bat sartuta, bakoitza erloju-ertz batean hartuz.
Exekutatu makina: txanponak, produktua ematea eta reset
14 min
Eraiki kontrolagailua benetako plakan, probatu bi txanpon-bide eta egiaztatu produktua ematearen LEDa piztuta mantentzen dela.
Ireki DE1-SoC plakaren VHDL laborategia. Editorean
blink.vhdagertzen da.Ordeztu fitxategiko eduki guztia osatu duzun salmenta-makinaren txantiloiarekin. Mantendu
blinkizena.CLOCK_50 : in std_logicdeklaratu behar da; hasierako txantiloiak ez du erlojua berez gehitzen.Sakatu Sintetizatu. Gida batek botoia estaltzen badu, itxi edo saltatu gida. Itxaron amaitu arte (1–3 min inguru). Zuzendu erroreak eta sintetizatu berriz. Jarraitu amaierako emaitzak 0 errore dituenean.
Sakatu FPGAra igo eta itxaron plaka eta kamera prest egon arte.
Jarri
SW(0)etaSW(1)behera; sakatu eta askatuKEY(0).HEX0bistaratzaileak0erakutsi behar du, etaLEDR(7)itzalita egon.5c-ko hiru txanpon. Igo
SW(0), utzi goranzko ertz batek hartzen, eta jaitsi hurrengoa baino lehen.HEX0balioa5bihurtzen da. ErrepikatuA(10c) lortzeko, eta hirugarrenezF(15c) lortzeko. Utzi etengailuak behera: hurrengo ertzean produktua ematen da,LEDR(7)piztu etaHEX0balioa0bihurtzen da.LEDR(7)piztuta geratzen da. Espero ez den jauzirik badago, egin reset eta errepikatu.Egin reset
KEY(0)erabiliz:LEDR(7)itzaliko da etaHEX0balioa0izango da.5c + 5c + 10c. Sartu 5c-ko bi txanpon (
HEX0:0→5→A), eta ondoren 10c-ko bat (SW(1)). S10 egoeratik 20c-ra iristen denez, txanpon hori hartzen duen ertzean produktua eman eta S0ra itzultzen da.LEDR(7)pizten da.Egin reset
KEY(0)erabiliz hurrengo hedapena probatu aurretik.
Klase-saio batean erabilgarri
Egin reset hasteko. Sartu txanponak banaka, bakoitza goranzko ertz bakarrean hartuz, eta jaso HEX0 kreditua eta LEDR(7) egoera. Lehenik probatu 5c-ko hiru txanpon; ondoren, reset eginda, 5c+5c+10c. Hirugarren 5c-ko txanponaren errenkadan, jaso F eta LED itzalia; hurrengo errenkadan, aparteko ertzeko 0/piztuta emaitza.
| Sartutako txanpona | Kreditua HEX0-n (0/5/A/F) | LEDR(7) piztuta? (bai/ez) |
|---|---|---|
Jaso zure ebidentzia. 5c-ko hiru txanpon sartu eta produktua eman ondoren, hartu kameraren irudi bat LEDR(7) piztuta dagoela erakusteko. Gehitu irudiaren erreferentzia edo esteka.
Kreditua 15c-ra iristean (HEX0 = F), produktua ez da ertz horretan ematen, hurrengoan baizik. Azaldu esaldi batean zergatik, S15 trantsizioa eta erlojudun blokeko produktua emateko baldintza kontuan hartuta.
Oinarrizko diseinuan, S10 egoeran 10c sartzeak 20c ematen du eta produktua emanarazten du, baina bezeroak 5c galtzen ditu. Zer irteera gehitu beharko zenuke hori zuzentzeko, eta zein egoera-sarrera konbinaziotan bakarrik aktibatu beharko litzateke?
3-C1 kontrol-puntua (aukerakoa): kanbioak itzultzea
12 min
Irakasleak proposatutako aukerako hedapen honek gehiegizko ordainketa zuzentzen du. Makina 20 zentimora iristen denean —S10 egoeran 10c sartuta—, LEDR(7) produktua ematearen LEDaz gain, LEDR(6) bigarren LEDa piztu behar da: «itzuli 5c kanbio». Zehazki 15c ordainduta produktua ematen denean, ez dago kanbiorik.
Gehitu gordeta mantentzen den change_latch irteera, LEDR(6) irteerara eramana, eta aktibatu 20c-ko bidean produktua ematen den ertzean. Horretarako, change baldintza konbinazionala sor dezakezu: S10 egoeran 10c-ko txanpona hartzen denean bakarrik egia izango da. Gorde gertakaria dispensed_latch bezala, eta ezabatu resetarekin. Ordeztu hasierako LEDR(6) <= '0'; esleipena LEDR(6) <= change_latch; esleipenarekin; ez utzi biak batera aktibo. Eman change seinaleari '0' balio lehenetsia prozesu konbinazionalean, eta '1' dagokion adarrean.
Espero den portaera:
5+5+5: 15c; itxaron aparteko ertza;LEDR(7)bai,LEDR(6)ez; S0ra itzuli.5+10: 15c; itxaron aparteko ertza;LEDR(7)bai,LEDR(6)ez; S0ra itzuli.10+5: 15c; itxaron aparteko ertza;LEDR(7)bai,LEDR(6)ez; S0ra itzuli.5+5+10: 20c;LEDR(7)bai,LEDR(6)bai; S0ra itzuli.10+10: 20c;LEDR(7)bai,LEDR(6)bai; S0ra itzuli.
Inplementatu eta egiaztatu LEDR(6) 20c-ko bideetan soilik pizten dela. Egin reset bide batetik hurrengora, aurreko probako adierazlea ez nahasteko oraingo emaitzarekin.
Gehitu kanbioak itzultzeko irteera eta ordeztu
LEDR(6) <= '0';esleipena:LEDR(6)piztuta mantenduko da S10 + 10c bidean produktua ematean, lehendik dagoenLEDR(7)irteerarekin batera.Sintetizatu, zuzendu idazketa-akatsak eta kargatu diseinua FPGAra.
Egin reset. Probatu 15c zehatzeko bidea, adibidez
5+5+5; itxaron produktua emateko aparteko ertza:LEDR(7)piztu behar da etaLEDR(6)itzalita geratu.Egin reset. Probatu 20c-ko bidea, adibidez
5+5+10edo10+10: biak,LEDR(7)etaLEDR(6), piztu behar dira.
Klase-saio batean erabilgarri
3-C1 aldaketa eginda, exekutatu bide bakoitza, probak resetarekin bereiziz. 15c zehatzeko bideetan, itxaron aparteko ertza. Jaso amaieran LEDR(7) (produktua ematea) eta LEDR(6) (kanbioak) piztuta geratu diren.
| Txanpon-bidea | Ordaindutako guztizkoa (15c/20c) | LEDR(7) piztuta? (bai/ez) | LEDR(6) piztuta? (bai/ez) |
|---|---|---|---|
Jaso zure ebidentzia. 20c-ko bide batean, adibidez 5+5+10, hartu kameraren irudi bat LEDR(7) eta LEDR(6) biak piztuta erakusteko.
Jaso laborategiko kodea. Gorde moldatutako blink.vhd laborategian eta erabili beheko kode-ebidentziaren kontrola 3-C1 bertsioa entregatzeko, kanbioak itzultzeko funtzioarekin. Irakasleak egoera-diagrama eskatzen badu, entregatu bereizita.
Zure FSM moldatuan, zer egoera eta sarreraren konbinaziotan aktibatzen da zehazki kanbioen irteera (LEDR(6))? Zergatik da hori makina honetako gehiegizko ordainketaren kasu bakarra?
3-C2 kontrol-puntua (aukerakoa): produktua hautatzea
8 min
Hedapen honetan, makinak bi produktu saltzen ditu: 15 zentimoko freskagarria (SW(2) bidez hautatua) eta 20 zentimoko kafea (SW(3) bidez hautatua). Hautatutako produktuaren preziora iristean soilik eman behar du produktua: freskagarrirako 15c behar dira, eta kaferako 20c.
Ideia nagusia da egoera-espazioa handitzen dela hautaketa gordetzen badugu. Kreditua bakarrik ez da nahikoa: 15c izanda, freskagarria ematea dagokio, baina kafea bada, itxarotea. Makinak kreditua eta hautaketa gogoratu behar ditu. Konbinatu, adibidez, (hautatutako produktua, kreditu-maila) bikoteen bidez, eta erabaki zer konbinazio gerta daitezkeen eta bakoitzak zer egin behar duen.
Marraztu lehenik egoera-diagrama zabaldua. Zehaztu noiz gordetzen den hautaketa eta zer egin behar den bi hautaketa-etengailuak aktibo edo biak inaktibo badaude. Ondoren, zenbatu zure arauek behar dituzten egoerak eta inplementatu. Ez dago kodetze zuzen bakarra: aukeratutako portaerak bereizi beharreko egoerak zehazten ditu, eta horiek kodetzeko gutxieneko bit kopurua kalkula dezakezu.
Entregatu diseinua, hedapena egin baduzu. Gehitu diagrama PDF gisa edo irudiaren esteka bidez, eta VHDL kodea testu gisa edo .txt fitxategian.
(Aukerakoa) Zenbat egoera bereizten ditu zure bi produktuko makinak? Zein da egoera horiek kodetzeko biegonkor kopuru minimoa? Erabili ceil(log2(N)): N egoera kopurua da, eta ceil gorantz zenbaki oso batera biribiltzea da; emaitza dagoeneko osoa bada, bere horretan geratzen da. Adierazi N, erakutsi kalkulua eta justifikatu egoeren zenbaketa. Kalkulu hau egoera-kodetzeari dagokio, ez zatitzailea eta gainerako erregistroak barne hartzen dituen zirkuitu osoko biegonkor guztiei.
3-C3 kontrol-puntua (aukerakoa): bi digitu hamartar
7 min
Oinarrizko makinak kreditua karaktere hamaseitar bakar batez erakusten du (0, 5, A, F). Trinkoa da, baina ohiko salmenta-makina baten antza txikia du. Hedapen honetan bi digitu hamartar erabiliko dituzu HEX1:HEX0 bistaratzaileetan: 00, 05, 10 eta 15; 20 erakusteko, kreditu hori gordetzen duen egoera edo erregistro gehigarria ere beharko duzu. HEX0-k unitateak erakusten ditu; HEX1-ek, hamarrekoak.
Erabili 2. ikasgaiko aukerako zazpi segmentuko deskodetzailearen ideia: seg_dec funtzioak 0..9 digitu hamartarra {g,f,e,d,c,b,a} patroi bihurtzen du, maila baxuan aktibo. Beste izen bat erabiltzen dugu oinarrizko seg funtzioarekin batera egon ahal izateko. Bereizi kredituaren hamarrekoak eta unitateak, deskodetu bakoitza eta konektatu HEX1 eta HEX0 irteeretara. Gehitu HEX1 : out std_logic_vector(6 downto 0) entitatearen portu-zerrendan, eta ordeztu lehengo HEX0 <= seg(credit); esleipena; ez utzi bi esleipen aktibo irteera bererako.
Beheko zatia txantiloian txertatu behar duzu: portuak entitatean; funtzioa eta seinaleak arkitekturaren begin aurretik; eta amaierako esleipenak begin ondoren. Osatu seg_dec funtzioaren TODOak eta gehitu 5 digituaren adarra, oinarrizko 05 eta 15 balioak erakusteko. Deskodetzaile orokorra nahi baduzu, osatu 0–9 digitu guztiak. cents seinalea 5 bitekoa da; 4 biteko credit balioa zabal dezakezu resize(credit, 5) erabiliz. Hamarrekoak eta unitateak kalkulatzean, emaitzak bakoitzaren 4 biteko zabalerara egokitu behar dira.
-- Gehitu HEX1 entitatearen portu-zerrendan; ondoren, osatu bistaratze-funtzioa.
HEX0 : out std_logic_vector(6 downto 0);
HEX1 : out std_logic_vector(6 downto 0)
-- ...
function seg_dec(d : unsigned(3 downto 0)) return std_logic_vector is
begin
case d is
when "0000" => return "1000000";
when "0001" => return TODO_PATTERN_FOR_1;
when "0010" => return TODO_PATTERN_FOR_2;
when others => return "1111111";
end case;
end function;
signal cents : unsigned(4 downto 0);
signal tens : unsigned(3 downto 0);
signal ones : unsigned(3 downto 0);
-- ...
cents <= TODO_CREDIT_AS_CENTS;
tens <= TODO_TENS_DIGIT;
ones <= TODO_ONES_DIGIT;
HEX0 <= TODO_ONES_DISPLAY;
HEX1 <= TODO_TENS_DISPLAY;(Aukerakoa) Gehitu
HEX1 : out std_logic_vector(6 downto 0)entitatearen portu-zerrendan. Gehituseg_decdeskodetzaile hamartarra, bereizi kredituaren hamarrekoak eta unitateak eta kontrolatuHEX1:HEX0. Ordeztu lehengo HEX0 esleipena, irteera bera bi aldiz kontrolatu gabe.Sintetizatu, zuzendu idazketa-akatsak eta kargatu diseinua FPGAra.
Egin reset eta sartu txanponak. Egiaztatu
00,05,10eta15.20erakusteko, 20 zentimoko egoera edo balio gordea behar da; oinarrizko FSMak ez du gordetzen. C1 kanbio-hedapenak ere00erakusten du produktua eman ondoren,LEDR(6)piztuta dagoela.
Klase-saio batean erabilgarri
Jaso ebidentzia, hedapena egin baduzu. Hartu kameraren irudi bat HEX1:HEX0 bistaratzaileek bi digituko kreditua erakusten dutenean, adibidez 10 edo 15, eta gehitu haren erreferentzia edo esteka.
(Aukerakoa) 15 zentimoko kredituarentzat, zer hamarreko eta unitateko digitu kalkulatzen dira HEX1 eta HEX0 irteeretara bidaltzeko? Zein bistaratzailek erakusten du 5?
Amaierako proiektuaren itxiera: ikastaroan eraikitakoa
8 min
Ikastaroan logika digitalaren ibilbidea egin duzu benetako hardwarean:
- Ateak (1. ikasgaia): AND, OR, NOT, NAND, NOR, XOR; zirkuituen oinarrizko osagaiak, eta VHDLk programa bat urratsez urrats exekutatu beharrean hardwarea deskribatzen duela ulertzea.
- Diseinu konbinazionala eta minimizazioa (2. ikasgaia): egia-taulak, SOP eta Karnaughen mapak, gehi aukerako hedapenak; espezifikazioa betetzen duen adierazpen logikoa sinplifikatzea.
- Memoria (3. ikasgaia): biegonkorra eta karga paraleloko erregistroa; zirkuituak gogoratzeko gaitasuna.
- Kontagailuak (4. ikasgaia): erloju-zatitzaileak gidatutako bloke sekuentziala eta konstantea erregistroan sartzen den egiaztatzea; BCD eta desplazamendu-erregistroak aukerako hedapenetan lantzen dira.
- Egoera finituko makinak (5. ikasgaia): gordetako egoeraren arabera jarduten duen Moore semaforoa, eta aukerako Mealy detektagailua.
- Amaierako FSM proiektua (ikasgai hau): trantsizio-taulatik eraiki, exekutatu eta azaldu duzun salmenta-makina. Aukerako lanetan, kanbioak itzultzea, produktu-hautaketa, bistaratze hamartarra eta egoera-kodetzearen bit kopurua ere landu ditzakezu.
Ibilbide horrek logika digitalaren oinarriak lotzen ditu, FPGA errealean egindako probekin.
Nondik jarraitu. Aukerako ildo batzuk:
- Denborazko baldintzak: setup eta hold. Biegonkor errealen sarrerak egonkor egon behar du erloju-ertzaren aurreko eta ondorengo tarte laburretan. Baldintza horiek betetzea beharrezkoa da nahi den maiztasunean lan egiteko; denboren analisi estatikoaren abiapuntua da.
- Aritmetika eta ALU. Batu batugailuak, konparagailuak eta logika unitate aritmetiko-logiko batean, prozesadore baten kalkulu-nukleoa eraikitzeko.
- Etapazko prozesamendua (*pipelining*). Banatu bide konbinazional luzea erlojudun etapetan, datuak prozesatzeko erritmoa handitzeko.
- VHDL aurreratua eta simulazioa. Sakondu VHDLren ezaugarri aurreratuetan. Proba-banku eta uhin-formen bidezko simulazioak plaka programatu aurretik portaera egiaztatzen laguntzen du.
Aukerako irakurgaiak. FPGA Academy-ren ikastaro-materialek logika digitaleko azalpenak eta FPGA ariketak eskaintzen dituzte. Harris eta Harris-en Digital Design and Computer Architecture liburuko 1.–3. kapituluak ere erabil ditzakezu ateetatik logika sekuentzialerako oinarrietan sakontzeko. Ez dira beharrezkoak jarduera hau osatzeko.
Azaldu esaldi gutxi batzuetan nola zabaldu den memoriaren ideia ikastaroan: biegonkorretik (3. ikasgaia), erregistro eta kontagailura (3.–4. ikasgaiak), eta esanahia duen egoera gordetzen duen FSMra (5.–6. ikasgaiak). Zer egiteko aukera eman du memoriak zirkuitu konbinazional hutsek ezin zutena?
Laburbildu zure proiektua hiru esalditan: (1) zer adierazten zuen makinaren egoerak eta txanponak nola aldatzen zuen; (2) oinarrizko diseinuak produktua eman duela erakusteko edo aukerako hedapen baterako jasotako ebidentzia; eta (3) noiz izan den garrantzitsua maila baxuko aktibazioa edo adierazle bat gordeta mantentzea, emaitza kameran ikusteko.
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