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 2 Fehér Béla Raikovich Tamás, Fejér Attila BME MIT
Kombinációs hálózatok Lab2_1 feladat: 4 változós logikai függvények tervezése Elemi függvények: ÉS, VAGY, XOR, NOR BCD kód ellenőrzése Lab2_2 feladat: hierarchikus tervezés bemutatása 1 bites teljes összeadó realizálása FADD modul Ebből 4 bites összeadó kialakítása kaszkádosítással, azaz 1 bites egységek láncbakapcsolásával Működés ellenőrzése összehasonlítással, referenciaként a Verilog + operátorát felhasználva Hiba esetén a H karakter kiírása a hétszegmenses kijelző első digitjére 1
Lab2_1_1 feladat: egyszerű függvények Az AND, OR, XOR és NOR függvények realizálása Bemeneti változók: DIP kapcsoló alsó 4 bitje Kimenet: alsó 4 LED, mégpedig a következőképen ld[0] ÉS ld[2] XOR ld[1] VAGY ld[3] NOR A függvények realizálása kétfajta felírással A kapcsoló bitjeit egyedi jeleknek tekintve A kapcsoló jeleit vektorváltozóként tekintve, a Verilog redukciós logikai operátorait használva Szimulátor használata a tesztvektorokat ciklussal generálva 2
Lab2_1_1 feladat: projekt létrehozása Előző heti munka alapján a Xilinx ISE GUI használata diasorozatban ismertetett módon ISE elindítása, új projekt létrehozása Lab2_1.v forrásfájl mintakeret specifikálása LOGSYS_SP3E.UCF fájl másolatának hozzáadása és adaptálása a kívánt interfészekhez (sw[3:0], ld[3:0]) A Lab2_1_1 feladat specifikálása a funkcionális kódrészletekkel Funkcionális kód ellenőrzése szimulációval Konfiguráció generálás, letöltés, működés tesztelése a kártyán 3
Lab2_1_1 feladat Egybites változókként használva a bemeneti jeleket A NOR kapcsolatot a De Morgan szabályt használva írjuk fel Ugyanez redukciós operátorokkal vektorváltozóra 4
Lab2_1_1 feladat: szimuláció Átkapcsolás szimulációs módba Új forrás: Lab2_1_TF Verilog Test Fixture hozzáadása Az automatikus kódrészletet most nem mutatjuk A tesztvektorok generálhatók lineáris kóddal, 16 értékadással vagy egy for ciklusban, az i ciklusváltozó használatával Négyváltozós függvények Max. 16 kombináció Teljes lefedést ad 5
Lab2_1_1 feladat: ellenőrzés A szimuláció eredménye ld[0] ÉS, ld[1] VAGY, ld[2] XOR, ld[3] NOR Generáljuk a specifikációhoz tartozó konfigurációs adatfájlt Letöltés után ellenőrizzük a működést 6
Lab2_1_2 feladat Érvénytelen BCD kód detektálása Ha sw[3:0] nem BCD, akkor mind a 4 LED világít, egyébként az érvényes bemeneti kód jelenjen meg A 4 bites bemeneti kód 6 esetben nem felel meg Tehát 6 minterm detektálása a feladat Felírható lenne másképpen is, a szintézer majd egyszerűsíti 7
Lab2_1_2 feladat Felírhatjuk egyszerűbb formában is Vagy aritmetikai feltételként Bármelyiket is választjuk, a teljes megoldás ilyen lesz 8
Lab2_1_2 feladat A legtömörebb felírási mód Itt az error jel meg sem jelenik explicit módon A szintézer persze minden bitre a lehető legegyszerűbb logikát generálja ld[3] = sw[3]; //1 vált. ld[2] = sw[2] sw[3] & sw[1]; //3 vált. ld[1] = sw[1] sw[3] & sw[2]; //3 vált. ld[0] = sw[0] sw[3] & sw[2] sw[3] & sw[1]; //4 vált. 9
Lab2_1_2 feladat: szimuláció, ellenőrzés Váltsunk át szimulációs módra A szimulációhoz a korábban már használt Lab2_1_TF.v Verilog Test Fixture már készen van, a 4 bites bemenethez 16 kombinációt generál Generáljuk a specifikációhoz tartozó konfigurációt Letöltés után ellenőrizzük a működést 10
A Lab2_2 feladat 4 bites teljes összeadó tervezése A saját tervünket 4 db 1 bites FADD modulból építjük fel Az egybites teljes összeadókat kaszkádosítjuk, ez az aritmetikai egység generál egy sum[3:0] értéket Ellenőrzésül a Verilog beépített + műveletével is generáljuk az összeget ref[3:0] néven Ha bármilyen bemeneti adatok esetén előfordul, hogy sum[3:0] ref[3:0], akkor valószínűleg hibás a tervünk. (Mert feltételezzük, hogy a Verilog HDL összeadás művelete jól számol.) 11
A Lab2_2 feladat Egybites teljes összeadók (FADD) tervezése Az egybites FADD modul funkcionalitása az előadásról és gyakorlatról ismert F1 és F2 függvényekkel adható meg. Tehát az egybites FADD összeg (s), és átvitel (co) logikai függvények felírhatók, a bemeneteket a, b és ci-vel jelölve Többféle megoldás létezik, használjuk a legismertebb formát A 4 bites összeadó a 4 db FADD alábbi soros összekapcsolásával alakítható ki. Az egyes pozíciókba beépített FADD modulok bemenetei az aktuális jeleket kapják meg és generálják a megfelelő kimeneti biteket. a[3] b[3] a[2] b[2] a[1] b[1] a[0] b[0] C[0] a b ci a b ci a b ci a b ci FADD (ADD3) FADD (ADD2) FADD (ADD1) FADD (ADD0) co s co s co s co s C[4] sum[3] C[3] sum[2] 12 C[2] sum[1] C[1] sum[0]
Lab2_2 feladat: projekt létrehozása Új projekt létrehozása Lab2_2 néven Lab2_2.v forrásfájl keret specifikálása Bemenetek: sw[7:0] Kimenetek: ld[7:0], seg_n[7:0], dig_n[3:0], col_n[4:0] Az _n aktív alacsony vezérlést jelent ( 0 aktív) LOGSYS_SP3E.UCF fájl hozzáadása és adaptálása (a fenti jelcsoportok aktiválása a fájlban) A Lab2_2 feladat forráskódjának specifikálása a részfunkciók fokozatos beírásával FADD.v egybites összeadó létrehozása Hierarchikus tervfelépítés kialakítása az FADD modul használatával 13
Lab2_2 feladat:specifiláció Elvégzendő feladatok 1: be és kimeneti jelek Definiálunk 2 db 4 bites előjel nélküli változót a[3:0] és b[3:0] néven, ezek az SW alsó és felső 4-4 bitjét használják Definiálunk 2 db 4 bites eredmény változót sum[3:0] és ref[3:0] néven, ez utóbbi a teszteléshez kell majd A sum és ref értékeket a LED-ekre is kiírjuk, a sum a ld[3:0], a ref a ld[7:4] LED-eken jelenik meg Definiálunk egy h hiba bitet, ez jelzi, ha esetleg sum ref előfordulna valamilyen tesztvektor esetén 14
Lab2_2 feladat: specifikáció Elvégzendő feladatok 2: kijelzés A hiba kijelzés a 7 szegmenses kijelző legkisebb helyiértékű pozícióján egy H karaktert ír ki, ha a h hiba-flag jelezne Ehhez a seg_n[7:0] vonalakra a H karakter szegmenskódját tesszük, negált értelmezéssel A dig_n[3:0] vonalak közül a felső három bit inaktív, a legalsó a h jelet kapja, negált értelmezéssel (bekapcsolja a kijelző digitet, ha hiba van) Gondoskodunk a col_n[4:0] jelek kikapcsolásáról (mindegyiket inaktív, magas értékkel vezéreljük) 15
A Lab2_2 feladat Egybites teljes összeadó (FADD) létrehozása Új Verilog forrás modul, FADD.v definiálása Interfészek: 1 bites a, b, ci bemenetek és s, co kimenetek Az FADD modul funkcionalitása az előadásról és gyakorlatról ismert, az s és a co logikai függvények felírhatók a b ci FADD co s 16
A Lab2_2 feladat lényegi része Az FADD.v egység tesztelése szimulációval A teljes projekten belül most csak az FADD.v modult ellenőrizzük, mert egyszerűbb tesztelni az 1 bites alapegységet, mint a teljes 4 bites blokkot Xilinx ISE átkapcsolása szimulációs módba Új Verilog Test Fixture forrás létrehozása FADD_TF.v néven Az FADD_TF.v társítása az FADD.v tervezési egységhez (azaz nem a Lab2_2.v top level modulhoz) 17
A Lab2_2 feladat lényegi része Az ISE szimulációs módban két független jövőbeni szimulációs feladat látszik Az FADD_TF környezet és benne az FADD.v, mint uut A Lab2_2.v tervezési egység, amihez még nincs létrehozva a Verilog Test Fixture A továbbiakban az FADD_TF.v környezet kialakítására koncentrálunk, a teljes Lab2_2 projekt szimulációjára a már tesztelt FADD.v 4 példányos beépítése után kerül sor 18
A Lab2_2 feladat lényegi része Az FADD_TF kialakítása Az automatikusan generált rész Az általunk beírt tesztvektorok A 3 db 1 bites változó 8 db tesztvektort jelent Minden esetet tesztelünk, teljes, kimerítő tesztelés 19
A Lab2_2 feladat lényegi része A szimuláció indítása Design ablakban FADD_TF kiválasztása Process ablakban Simulate ISim elindul, és megfelelő Zoom után látható az eredmény 8 tesztvektor, 8 eredmény 20
A Lab2_2 feladat lényegi része A hullámforma ablak optimalizálása (popup menü) Definiáljunk New Virtual Bus buszokat Csoportosítsuk vektorba a jeleket Az a, b, ci bemenetekből hozzuk létre a BEMENETEK buszt Az s és co kimenetekből hozzuk létre a KIMENETEK buszt Ez utóbbinál a jelek eltérő súlyúak: 2 1 co + 2 0 s = 2co + s, ezt a busz értékkijelzésénél, ha nem bináris számrendszert használunk, figyelembe kell venni (Reverse Bit Order, ha kell) KIMENETEK értéke = BEMENETEK 1-es bitjeinek száma Az FADD megszámolja a bemeneti 1-es biteket 21
A Lab2_2 terv teljes felépítése Az ellenőrzött FADD.v egybites teljes összeadó használata Könyvtári modulok beépítésének szabálya (lásd TF uut) típusnév példánynév(port-jel társítás lista); FADD.v portjai: a, b és ci bemenetek; s és co kimenetek Kódminta a 4 db FADD példány beépítésére Példánynév bitpozíció szerint (tetszőleges is lehetne) A port-jel társítás formátuma:.port_neve(jel neve), A vektorváltozók bitjei megfelelő sorrendben. 22
Lab2_2 feladat: FADD példányosítás Az ellenőrzött modul beépítése 4 példányban, lineáris kaszkádosítással Az a[3:0], b[3:0] és sum[3:0] jelek használata értelemszerű Az átviteljelek c[4:0] lánca adja a kaszkádosítást, jelterjesztés jobbról balra, a kisebb helyiértéktől a nagyobb felé c[4] ADD3 c[3] ADD2 c[2] ADD1 c[1] ADD0 0 Az első ci konstans 0, az utolsó co nem lesz bekötve sehova 23
Lab2_2 feladat: teljes projekt A 4 FADD modul beépítésével a projekt hierarchia az implementációs nézetben a következő Lab2_2 top module 4 db FADD modul És a LOGSYS_SP3E.UCF fájl Mentés, szintaktikai ellenőrzés, hibák javítása A teljes projekt ellenőrzése szimulációval Kérdés: SUM = REF? (azaz a saját összeadó azonos eredményt ad-e a beépített, hiteles operátorral) 24
A Lab2_2 terv teljes szimulációja Új Verilog Test Fixture létrehozása Lab2_2_TF Ezt most a LAB2_2.v top module -hoz társítjuk Szimulációs módban így a projekt struktúra a következő A Lab2_2_TF alatt az uut a teljes Lab2_2.v tervet magába foglalja Ennek a tervnek a teljes szimulációját érdemes már ciklusban leírni (256 darab tesztvektor) 25
A Lab2_2 terv teljes szimulációja A Lab2_2_TF.v tartalma Általános, automatikus kód Az algoritmikus tesztvektor generálás Futtatásnál Lab2_2_TF kiválasztás és Simulate 26
A Lab2_2 terv teljes szimulációja A szimuláció eredményéhez (256+1)*100ns = 25,6us futásidő szükséges: N * Run 1us A belső részletesebb jeleket is hozzáadva ( szükséges az új jelek értékeinek kijelzéséhez) a, b, sum és ref hexa értékek A carry lánc bináris kijelzésű h = 0 mutatja, hogy nincs hiba 27 Restart
Lab2_2 feladat: hibainjektálás Beépítettünk egy HIBÁT (véletlenül ) ADD2.ci bemenet c[1] lett c[2] helyett Láthatóan általában a LED-eken sum = ref De ahol a dig_n[0] = h jel aktív, ott valóban sum ref 28
Lab2_2 feladat: ellenőrzés Generáljuk a specifikációhoz tartozó konfigurációs adatfájlt Letöltés után ellenőrizzük a működést 29