BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK Digitális technika (VIMIAA02) Laboratórium 3 Fehér Béla Raikovich Tamás, Fejér Attila BME MIT
Lab3_1 feladat: DEC/DMP, MPX A feladat során szabványos kombinációs funkcionális egységek realizációit tekintjük át ISE elindítása, projekt létrehozása Lab3_1.v forrásfájl mintakeret specifikálása sw[7:0], bt[3:0], ld[7:0] (a bt később kell majd ) LOGSYS_SP3E.UCF fájl hozzáadása és adaptálása a kívánt interfészekhez (sw, bt és ld interfészek) A Lab3_1_x feladatok specifikálása a funkcionális kódrészletekkel Funkcionális kód ellenőrzése szimulációval Konfigurációs fájl generálása, letöltése és a működés tesztelése a kártyán 1
Lab3_1_1 feladat Dekóder/Demultiplexer modul tervezése Bináris n bites bemenet 1-az-N-ből kimenet, ahol N=2 n Teljes mintermkészlet generálása, engedélyező jellel Lehetséges specifikációs stílusok Mintermek egyedi logikai felírása, logikai egyenletek Ugyanez aritmetikai kifejezéssel, == operátor Specifikáció a logikai shift művelettel {} és << op. Viselkedési leírás: always @(*) blokkos szerkezet Hierarchikus struktúra felépítése kisebb modulokból HDL leírásnál ezen a szinten nincs semmi előnye 2
Lab3_1_1 feladat: kódolási stílusok (1) DEC3_8E specifikáció: Logikai kifejezésekkel, 8 minterm 3
Lab3_1_1 feladat: kódolási stílusok (2) DEC3_8E specifikáció: Aritmetikai (==) művelettel 4
Lab3_1_1 feladat: kódolási stílusok (3) DEC3_8E specifikáció: Shift (<<)operátor használatával 5
Lab3_1_1 feladat: kódolási stílusok (4) DEC3_8E specifikáció: Speciális nyelvi elem, az always @(*) blokk használata 6
Lab3_1_1: Az FPGA realizálás eredménye DEKÓDER eredmény: Teljesen azonos felépítés minden esetben, a specifikációs stílustól függetlenül 8 db 4 bemenetű ÉS kapu, a mintermek közvetlen realizációja 7
Lab3_1_1 feladat Válasszon egy tetszőleges specifikációs stílust és ez alapján készítse el a DEC3_8E.v Verilog modult A modul 3-ból 8-ba végez dekódolást/demultiplexelést Bemenetei: sel[2:0], en; kimenete: out[7:0] Hozza létre a modul mintakeret fájlt és egészítse ki a választott stílusú leírással! Készítse el a modul tesztkörnyezetét DEC3_8E_TF.v és tesztelje a funkcionalitást! Ha hibamentes, akkor építse be a Lab3_1.v top module fájlba, a következő jelek megfeleltetésével: SEL[2:0] sw[2:0], EN sw[3], ld[7:0] OUT[7:0] 8
Lab3_1_1 feladat A DEC3_8E.v modul beépítése DECODER néven 9
Lab3_1_1 feladat: szimuláció, ellenőrzés Ellenőrizzük szimulációval a teljes tesztvektor készletre 8 tesztvektor EN = 0, és 8 tesztvektor EN = 1 esetre Vagy ha EN = 0, akkor SEL = 3 bxxx is lehet???? Generáljuk a konfigurációs adatfájlt Letöltés után ellenőrizzük a működést 10
Lab3_1_2 feladat Multiplexer funkció tervezése A multiplexer adatbemenet választóként működik, az egyik legfontosabb funkcionális egység. Definíciója: Az N=2 n bemenet bármelyikét az n bites kiválasztó bemenet értéke alapján a kimenetre kapcsolja, ha a működés engedélyezett A multiplexer bemenetei önmagukban is lehetnek bitvektorok, ekkor buszmultiplexerről beszélünk (pl. 4 db 8 bites bemenetből választ egyet) Specifikációja a dekóderhez hasonlóan igen sokféle lehet, ezeket áttekintjük A tervezendő modul 8-ból 1-be kapcsoló multiplexer, engedélyezéssel 11
Lab3_1_2 feladat: kódolási stílusok (1,2) MPX8_1E funkció tervezése Az out kimenet specifikálása logikai kifejezésekkel És ennek aritmetikai stílusú verziója 12
Lab3_1_2 feladat: kódolási stílusok (3) MPX8_1E funkció tervezése: a kimenet specifikálása always @(*) blokkban, viselkedési leírással 13
Lab3_1_2 feladat: kódolási stílusok (4) MPX8_1E funkció tervezése dekóder felhasználásával Ha a multiplexer struktúráját megvizsgáljuk, látszik, hogy benne egy dekóder van elrejtve (minden bemenet egyedi kiválasztása csak az egyedi mintermek használatával lehetséges) Ezért a DECODER beépítésével is specifikálhatjuk 14
Lab3_1_2 feladat: kódolási stílusok (5) MPX8_1E funkció tervezése a dekóder funkció implicit felhasználásával Az előző módszer alapján, a dekóder shift operátoron alapuló specifikációjával egyetlen kifejezéssel is leírható a multiplexer Megj. 1: ehhez szükségesek a bitvektoros változók Megj. 2: Nem mindenki jön rá, hogy mi ez Jó lesz vizsgakérdésnek. 15
Lab3_1_2 feladat Válasszon egy tetszőleges specifikációs stílust és ez alapján készítse el a MPX8_1E.v Verilog modult A modul 8-ból választ 1 bemenetet, ha engedélyezett Bemenetei: DINP[7:0], SEL[2:0], EN, Kimenete: OUT Hozza létre a modul mintakeret fájlt és egészítse ki a választott stílusú leírással! Készítse el a modul tesztkörnyezetét MPX8_1_TF.v és tesztelje a funkcionalitást! Ha hibamentes, akkor építse be a Lab3_1.v top module fájlba, a következő megfeleltetéssel: SEL[2:0] sw[2:0], EN sw[3], ld[0] OUT, DINP[7:4] sw[7:4], DINP[3:0] bt[3:0] 16
Lab3_1_2 feladat A MPX8_1E.v modul beépítése MULTIPX néven Az alsó 4 adatbemenetet a bt[3:0] nyomógombok adják 17
Lab3_1_2 feladat: szimuláció, ellenőrzés Ellenőrizzük szimulációval néhány tesztvektorral Teljes, kimerítő tesztelés ( fekete doboz ) 8+3+1 bemenet 2048 tesztvektor lenne Generáljuk a konfigurációs adatfájlt Letöltés után ellenőrizzük a működést 18
Lab3_2 feladat A feladatban a hétszegmenses kijelző működését vizsgáljuk különböző sebességű működtetéssel A 4 digitből 2 digiten valósítunk meg időosztásos vezérlést Az időosztásos vezérlés kapcsolását a LOGSYS letöltőkábel CLK jele szolgáltatja A kijelzési képet (2 digites hexadecimális számérték) a kapcsolókon állítjuk be Megtervezzük a HEXA 7SEGMENS kódkonvertert Használjuk a megismert multiplexer funkciót 19
Lab3_2 feladat: projekt létrehozása A Xilinx ISE 14.7 használata diasorozatban leírtak alapján (ISE elindítása), a Lab3_2 új projekt létrehozása Lab3_2.v forrásfájl keret specifikálása Bemenetek: sw[7:0], clk (LDC letöltőkábelről) Kimenetek: seg_n[7:0], dig_n[3:0], col_n[4:0] Az _n aktív alacsony vezérlést jelent ( 0 aktív) A LOGSYS_SP3E.UCF fájl hozzáadása és adaptálása (a fenti jelcsoportok aktiválása a fájlban) A Lab3_2 feladathoz szükséges forráskód specifikálása HEX7SEG Verilog kódkonverter modul tervezése, beépítése Szimuláció az időosztásos működés bemutatására Konfiguráció generálás, letöltés, működés tesztelése 20
Lab3_2 feladat: HEX 7SEG A Lab3_2 feladatban csak numerikus értékeket szeretnénk kijelezni (nem kell 26 C, vagy bármi más karakter) A kódkonverter 4 bites bemenetet fogad és 7+1 bites kimeneti szegmenskódot generál. Tehát 4 db 1 bites változó 8 db logikai függvénye, amelyből a 8. függvény konstans 0 (a kijelző tizedespontja). Lehetőségek 8 db logikai egyenlet, egyedi optimalizálás 8 db logikai egyenlet, közös, együttes optimalizálás Kódtáblázat használata always @(*) blokk szerkezettel ROM memória beépítésével 21
Lab3_2 feladat: HEX 7SEG Hozzuk létre a HEX7SEG.v Verilog modult Bemenet: value[3:0] Kimenet: code[7:0] A függvény pozitív logikában specifikált, 1 ahol a szegmens világít (megj: seg_n kimenet negatív vezérlést vár majd!) 22
Lab3_2 feladat: teljes projekt A Lab3_2.v top modulban Definiáljuk a számjegyeket: TENS[3:0] sw[7:4], ONES[3:0] sw[3:0] Tiltsuk le a pontmátrix vezérlését! Állítsuk be az időosztásos vezérlést a 2 alsó digiten CLK=0 tízes helyiérték, CLK=1 egyes helyiérték aktív 23
Lab3_2 feladat: teljes projekt Definiáljuk az elkészített HEX7SEG kódkonverter interfész jeleit: value[3:0], code[7:0] A digitek kapcsolgatásával azonos ütemben a bemenetre a TENS ill. ONES értéket adjuk Beépítjük a HEX7SEG modul egy példányát A kimenetet invertáltan vezetjük a seg_n vonalakra 24
Lab3_2 feladat: ellenőrzés Letöltés után ellenőrizzük a működést Az órajelfrekvencia függvényében vizsgáljuk meg a következő eseteket: Mit tapasztal alacsony frekvencián (clk ~ 10Hz)? Megfelel 2 digites kijelzésnek? Mi az elfogadható működési frekvencia alsó határa? Mit javasolna működési frekvenciának 4 digit esetén? Mit tapasztal igen magas, pl. 8 MHz kapcsolási sebességnél? (Válasszon olyan kódot, amelyben a két digiten eltérő szegmensek világítanak, pl. C1.) 25