NÉV:... neptun kód:.. feladatokat önállóan, meg nem engedett segédeszközök használata nélkül oldottam meg: Olvasható aláírás:... Kedves Kolléga! kitöltést a név és aláírás rovatokkal kezdje! z alábbi kérdésekre a válaszokat - ahol lehet - mindig a feladatlapon adja meg! feladatok megoldása során a részletes kidolgozást nagyfeladatonként, ha szükséges külön papíron végezze, (egyértelműen jelölje, hogy melyik lap melyik feladathoz tartozik, a papírra már a kezdetkor írja rá a nevét és neptun kódját) és ezeket a papírokat is adja be a dolgozatával! kérdésekre a táblázatok vagy a pontozott vonalak értelemszerű kitöltésével válaszoljon, hacsak külön másként nem kérjük. Mindenütt a legegyszerűbb megoldás éri a legtöbb pontot. Jó munkát! Ellenőrző kérdések (27p) E. Konvertálja az alábbi számokat a kért formátumra! (3p) kiinduló formátum konvertálandó szám kért formátum konvertált szám 6 bites 2-es komplemens 8 bites 2-es komplemens decimális 62 CD (6 bites) Fixpontos decimális 3.25 8 bites fixpontos 2-es komplemens, 2 db 2-edes jegy. E2. dja meg, a oole algebra disztributív tulajdonságának 2 féle alakját 2 változóval! (2p) ( C) = C...... (C) = ( )( C)... E3. (2p) Megadtuk egy ismert funkcionális elem Verilog leírásának egy jellemző részletét. dja meg a funkcionális elem nevét! (2p) wire [7:],; wire [2:] O; assign O = {<, ==, >} ; neve:..nagyság (magnitude) komparátor... E. felrajzolt multiplexerrel az alábbi 3 változós logikai függvényt kell megvalósítani. Kösse rá a multiplexer bemeneteire a megfelelő jeleket és konstansokat a következők közül: C, /C,,! (Írja oda a megfelelő jelneveket!) (2p) f(,,c) f(,,c) = ///C / /C E5. lább megadtunk egy F(,,C) logikai függvény Verilog leírását. Végezze el az alábbi feladatokat! (C az LS) assign F = ({,,C}>3 b) & ({,,C}<3 b) ({,,C}>3 b); C a. Töltse ki a függvény Karnaugh tábláját! (2p) MS S S Y MPX 2 3 /C C b. dja meg a függvény egyszerűsítetlen SOP alakját Verilog logikai kifejezésként! (p) C 2 assign F = ~&&C &&~C &&~C &&C;... c. dja meg a függvény legegyszerűbb SOP alakját dja meg a függvény egyszerűsítetlen SOP alakját Verilog logikai kifejezésként!! (p) assign F =...;... E6. a. Rajzolja le egy olyan logika blokkvázlatát tanult funkcionális elemekkel, amely a bemenetére érkező [3:], [3:] előjel nélküli bites számok közül a nagyobbat teszi a bites O[3:] kimenetére! (2p) E: F: F2: F3: : I MPX O s O I Oa>b a b komp b. dja meg a fenti logika Verilog leírását! (2p) assign O = ( > )? : ;...
E7. Röviden írja le, mi történik egy szubrutin meghívásakor a MiniRISC CPU esetén! (2p).... STCK-re kerül a következő utasítás címe. 2...Elugrik a szubrutin címére. E8. Melyik tanult kombinációs funkcionális elem Verilog leírását adtuk meg alább? (p) wire [3:] In, In, Y; wire s; assign Y = In & {{~s}} In & {{s}}; funkcionális elem neve:...2/-es bites busz multiplexer... E9. Rajzolja le az USRT soros adatátvitel idődiagramját (start bit, 8 adat bit, stop bit esetére)! (Egészítse ki az alábbi rajzot!) (2p) E. Mely állítások igazak és melyek hamisak? Jelölje -al az igaz, --al a hamis állításokat! (5p). Csak NOR kapukkal és a logikai konstanssal minden logikai függvény megvalósítható. 2. Egy D flip-flopból egyetlen EXOR kapuval bites engedélyezhető számláló készíthető. 3. z aszinkron RM-ok az /WR alacsony szintje alatt írják be az adatot.. z processzorhoz a perifériától érkező interrupt kérés mindig érvényre jut. - 5. MiniRISC processzor 3 regiszter címes architektúrával relkezik. - Feladatok: F. (3p) dott egy FSM az alábbi kódolt állapotgráfjával. Végezze el az alábbi feladatokat! // konstans és változó deklarációk c. //Next_state logika (6p): always@(...*... ) localparam [:] = 2 b, = 2 b, case (state) C = 2 b, D = 2 b,; : next_state <= ; reg [:] state; reg [:] next_state; : next_state <= C; a. Mealy vagy Moore modell szerint működik? C: if(x) next_state <= D; (p) Mealy. next_state <= ;. b. dja meg az állapotregiszter Verilog leírását! //Állapotregiszter (2p): always@( posedge clk...) if () state <= ; clk tx start D D D2 D3 D D5 D6 D7 stop C x D z=!x z= state <= next_state; z = D: next_state <= ; default: next_state <= ; case d. z FSM kimenete az állapotkód és a z változó. dja meg a z kimenet Verilog leírását! Elkezdtük, folytassa! (2p) wire z; assign z = (state ==C)& ~x (state ==D); z = state[] &~x state[]&state[] ; e. z automata bemenetére x=-át adunk folyamatosan. Milyen ismert funkcionális elemnek megfelelően viselkedik az FSM? dja meg a nevét és tulajdonságait! (2p) számláló, modulusa 3, törölhető F2. (8p) feladat egy páros reflexidő játék tervezése adatstruktúra-vezérlő felbontásban. készülék nyomógombjai lenyomáskor órajel hosszú impulzust adnak adnak a rszerórajellel szinkronban (nem kell megtervezni). játékot a STRT nyomógombbal indítja a játékmester. Ennek hatására a készülék véletlenszerűen kigyújtja valamelyik játékos LED-jét (LD vagy LD). (Relkezésre áll egy külső bites jel (RND), melynek állapota a STRT impulzus megjelenése után véletlenszerű). Ugyanekkor elindul a másik játékoshoz tartozó 2 számjegyes pont számláló (CD_cnt vagy CD_cnt) és.sec-onként lép -et. ( léptetéshez adott egy külső. sec-onként órajelig aktív sigs jel.) játékosok feladata, hogy a saját LED-jük kigyulladásakor minél gyorsabban nyomják le a nyomógombjukat (P ill. P), hogy a másik játékos pontszámlálója minél kevesebbet lépjen. mint az aktuális játékos lenyomta a nyomógombját, leáll a másik ponszámlálója, elindul a sajátja és kigyullad a másik játékos LED-je. Most neki kell minél gyorsabban lenyomni a nyomógombját. játék addig tart, amíg valamelyik játékos pont számlálója el nem éri a 99-et (ez a játékos nyer), ekkor ponszámlálók megállnak, LD és LD kialszik.. Ezután a STRT újboli megnyomására kezdhető újra a játék. z áramkör órajele egy néhány MHz-es clk jel (pontos értéke itt lényegtelen). kijelzés megvalósításától az egyszerűsítés végett eltekintünk. 2
feladat megoldását részfeladatokra bontottuk. a. Tervezzen meg egy CD_cnt, -es modulusú felfele számláló egységet! (dja meg a Verilog leírását!) Legyen szinkron törölhető (), engedélyezhető (e)! leírást alább elkezdtük, fejezze be! (5p) b. Példányosítson az a-pontbeli modulból kettőt-kettőt úgy, hogy azok páronként egy 2 dekádos CD számlálót alkossanak (CD_cntL ill. CD_cntL a kisebb helyiértékű digit). Ezek a pont számlálók. számlálókat törölje az és a vezérlő cnt_cl jele is,.sec-onként lépjen (sig_s), amelyiket a vezérlő engedélyezi a cnt_e vagy cnt_e jellel! (6p) CD_cnt CD_cntL (.clk(clk), ( cntcl),.e(cnt_e & sig_s.),.tc(tcl),.q(ql)); CD_cnt CD_cntH (.clk(clk), ( cntcl),.e(tcl ),.tc(tch),.q(qh)); CD_cnt CD_cntL (.clk(clk), ( cntcl),.e(cnt_e & sig_s.),.tc(tcl),.q(ql)); CD_cnt CD_cntH (.clk(clk), ( cntcl),.e(tcl),.tc(tch),.q(qh)); a. CD számlálóverilog leírása: module CD_cnt ( input clk,, e, output tc, output reg [3:] q); assign tc = e&(q == d9);.. always @( posedge clk ) if ()...q<= d;... if ( e ) if( tc.)...q<= d;... q <= q d; module c. dja meg azt az f feltételt, amely jelzi, hogy két kaszkádosított számláló közül valamelyik végállapotban van! (a qh, ql, qh, ql jeleket használja) (p) assign f = ({qh, ql} ==8 h99) ({qh, ql} ==8 h99); d. Tervezze meg a vezérlő Moore állapotgráfját és rajzolja le! rajzot elkezdtük, fejezze be! (Hiányzó állapotátmenetek (nyilak), hiányzó állapotátmeneti feltételek, hiányzó kimenetek! Feltétel nélküli állapotátmenet esetén ne írjon semmit a nyílra!) (6p) /STRT IDLE STRT INIT f... RND WIT_P P& ~f LD = LD =... cnt_cl =... cnt_e = cnt_e =... LD = LD = cnt_cl = cnt_e = cnt_e =!RND LD =... LD =... cnt_cl = cnt_e =... cnt_e =... f P&~f WIT_P LD =... LD =... cnt_cl =... cnt_e =... cnt_e =... IMSC (5p) Külön lapon adja meg a sigs jelet előállító modul Verilog leírását! modul a rszer 6MHz-es órajeléből állítja elő a.sec-onként órajelig aktív sigs jelet. Megoldás. Megoldás 2. module msec(input clk,, output sigs) module msec(input clk,, output sigs) reg[2:] q; reg[2:] q; localparam ini_value = 2 d_599_999; localparam max_value = 2 d_599_999; assign sigs = (q == 2 d); assign sigs = (q ==max_value); always @(posedge clk ) always @(posedge clk ) if( sigs) q <= ini_value; if( sigs) q <= 2 d; q<= q 2 d; q<= q 2 d; module module F3(7p) Egy külső adatfogadó egységet kell kezelni a MiniRSIC processzorhoz illesztett logika segítségével. külső egység bites részletekben képes 8 bites adatokat fogadni a PD3- adatvonalain. Egy USY jellel jelzi, amikor nem képes adat fogadására. 8 bites adat beírása két DWR impulzussal történik. z alsó bitjet az első DWR, felső bitjet a második DWR impulzus lelfutó éle írja be. 2. DWR hatására a USY jel -be áll, amíg a periféria újabb adat fogadására nem képes. DWR impulzus minimális hossza legalább MiniRISC Tclk. Mini RISC busz Din[7:] Dou[7:] [7:] WR RD clk Periféria illesztõ megtervezõ külsõ adatfogadó egység PD3- PD3- DWR DWR USY USY 3 D3- D7-
Ehhez a külső egységhez kell periféria illesztő logikát tervezni a MiniRISC buszra ([7:], Din[7:], Dou[7:], RD, WR, IRQ, clk, ). periféria illesztő parancs regiszterrel (PR), státusregiszterrel (SR) és egy adatregiszterrel (DR) relkezik. DWR impulzus előállítására a parancsregiszter beíró jelét használjuk (DWR = PR_wr, a kiírt adat értéke lényegtelen). periféria USY jelének aktuális értéke a státusregiszter D bitjén olvasható be, a többi bit értéke a beolvasáskor bármi lehet. z bites adatot az illesztő adatregiszterének alsó bitjére kell kiírni, a felső bit értéke tetszőleges lehet. z adat regiszter visszaolvasható. periféria báziscíme xd. programozói felülete a következő: funkció Cím D7 D6 D5 D D3 D2 D D olvasható/írható Parancs regiszter PR áziscím x x x x x x x x W (PR_wr) Státus regiszter SR áziscím x x x x x x x USY R (SR_rd) dat regiszter DR áziscím 2 x x x x PD3 PD2 PD PD W/R (DR_wr, DR_rd), a. Tervezze meg Verilog nyelven a periféria parancs regiszterbe írást engedélyező PR_wr, a státus regiszter és az adatregiszter olvasását engedélyező SR_rd és DR_rd jeleit, továbbá a kimeneti adatregiszter írását engedélyező DR_wr jelet! (6p) parameter base_addr = 8 HD; // a periféria kezdőcíme assign psel = (base_ddr >> 2) == ( >> 2);. processzor assign PR_wr = psel & ([:] == 2 b) & WR;... assign SR_rd = psel & ([:] == 2 b) & RD;... assign DR_rd = psel & ([:] == 2 b) & RD;...... // aktív, ha a periféria címtartományához fordul a assign DR_wr = psel & ([:] == 2 b) & WR;... b. dja meg Verilog nyelven az adatregiszter leírását! z adatregiszter bites, a Dou[3:] íródik bele, ha a DR_wr jel aktív. z jel törli. Elkezdtük, folytassa! (2p) c. dja meg Verilog nyelven a státus regiszter és adat regiszter visszaolvasásához szükséges logikát! Elkezdtük, folytassa! (2p) b. reg [3:] q;] always @( posedge clk ) if( ) q <= b;... if(..dr_wr.) q <=..Dou[3:]; assign PD = q; Folytassa az assembly programhoz szükséges definíciókat! (p) DEF PR xd DEF SR..xD... DEF DR..xD2... DEF USY...x... DT DatrrLen: D x6 Datrr: D xaa, xfd, xbf, x75, x79,x55 CODE c. alwasys(*) case({sr_rd, DR_rd}) 2 b: Din[] <=...USY;... 2 b.: Din[3:] <=...q;.(pd is jó) default: Din <= 8 h.;...; case e. Irjon meg egy olyan szubrutint, amely az r regiszterben megadott 8 bites adatot két bites részletben kiírja a perifériára, ha az nem foglalt! (2p) DatWR: mov r2,..sr... ;státus olvasás tst r2, #USY... ;USY bit tesztelése jnz DatWR... ;vissza, ha még foglalt mov DR, r... ;adat alsó bit kiírása DR-be mov PR, r ;DWR generálás swp r... ;felső alsó bit csere mov DR, r... ;adat felső bit kiírása DR-be mov PR, r ;DWR generálás rts... ;visszatérés f. z előbbi szubrutint felhasználva írjon olyan program részletet, amely a d-pontnál definiált Datrr területről kiír a DatrrLen címen található számú adatot a perifériába! (DatrrLen > és DatrrLen < 32) (p) rrwr: mov r, #DatrrLen. ;tömb hossz címének betöltése mov r,(r). ;tömb hossz beolvasása mov r, #Datrr. ;tömb címének betöltése loop: mov r, (r) ;adat beolvasása a memóriából jsr DatWR. ;adat kiírása a perifériába add r, #. ;cím növelés sub r, #. ;adat számláló csökkentés jnz loop. ;vissza, ha van még adat IMSC (5p) külső egység kezelése a fenti módon kicsit nehézkes. Használjon az illesztő eredeti bites adatregisztere helyett 8 biteset, így a teljes 8 bites adat egyszerre beleírható! Tervezzen utána olyan logikát, amely a külső egység bites PD[3:] adat bemenetére az adatregiszterbe írás (DR_wr) után az adatregiszter alsó bitjét kapcsolja, a DWR impulzus (PR_wr) kiadása után pedig a felső bitjét.
wire [3:] PD reg sel; reg [7:] dreg; always @(posedge clk) if() sel <= b; dreg <= 8 h; if(dr_wr) sel <= b; dreg <= Dou; if(pr_wr) sel <= b; assign PD = sel? dreg[7:] : dreg[3:]; (iztonságosabb volna a sel jel egy órajellet történő késleltetése, de ezt ne várjuk el a hallgatóktól.) Relkezésre álló idő: perc 5