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 (VIMIAA01) Laboratórium 2 Fehér Béla Raikovich Tamás, Fejér Attila BME MIT BME-MIT Digit labor 2., 2014.08.11. (v1.0)
FPGA labor
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 – Oszthatóság ellenőrzése 3-ra vagy 5-re • 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 kijelzőre BME-MIT Digit labor 2., 2014.08.11. (v1.0)
1
FPGA labor
Lab2_1a 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
• Függvényreprezentációk elemzése az ISE szintézer technológiai szintű kapcsolási rajza alapján • Szimulátor használata a tesztvektorokat ciklussal generálva BME-MIT Digit labor 2., 2014.08.11. (v1.0)
2
FPGA labor
Lab2_1a feladat: projekt létrehozása Előző heti munka alapján a „Xilinx ISE 14.6 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 • A Lab2_1a 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 BME-MIT Digit labor 2., 2014.08.11. (v1.0)
3
FPGA labor
Lab2_1a feladat • Egybites változókként használva a bemeneti jeleket
• Ugyanez redukciós operátorokkal vektorváltozóra
• Nézzük meg a grafikus kapcsolásokat is (RTL + Tech.) – A technológiai nézetben a LUT-ra: SCH+EQ+TT+KM BME-MIT Digit labor 2., 2014.08.11. (v1.0)
4
FPGA labor
Lab2_1a 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 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
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
5
FPGA labor
Lab2_1a 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 • A Laboratórium 2. hét eredmények kérdőíven jegyezzük fel a tapasztalatokat BME-MIT Digit labor 2., 2014.08.11. (v1.0)
6
FPGA labor
Lab2_1b 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
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
7
FPGA labor
Lab2_1b feladat • Felírhatjuk egyszerűbb formában is
• Vagy aritmetikai feltételként
• Bármelyiket is választjuk, a teljes megoldás ilyen lesz
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
8
FPGA labor
Lab2_1b 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] ld[2] ld[1] ld[0]
= = = =
sw[3]; sw[2] | sw[3] & sw[1]; sw[1] | sw[3] & sw[2]; sw[0] | sw[3] & sw[2] | sw[3] & sw[1];
//1 //3 //3 //4
vált. vált. vált. vált.
• Nézzük meg → View Technology Schematic BME-MIT Digit labor 2., 2014.08.11. (v1.0)
9
FPGA labor
Lab2_1b 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 • A Laboratórium 2. hét eredmények kérdőíven jegyezzük fel a tapasztalatokat BME-MIT Digit labor 2., 2014.08.11. (v1.0)
10
FPGA labor
Lab2_1c feladat 4 bites érték 3-mal vagy öttel oszthatóságának jelzése • Ez sajnos semmilyen módon nem egyszerűsíthető, nincsenek összevonható mintermek • Esetleg felírhatjuk aritmetikai formában, de így sem tűnik egyszerűbbnek
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
11
FPGA labor
Lab2_1c feladat • A komplexitás ijesztőnek látszik – View RTL Schematic → 8 db AND4, 1 db OR8 – View Technology Schematic → 1 db LUT ????????? • Alaposabban megvizsgálva észrevehetünk valamit
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
12
FPGA labor
Lab2_1c 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 négyfajta leírás a 4 LED-en azonosan működik
• Generáljuk a specifikációhoz tartozó konfigurációt • Letöltés után ellenőrizzük a működést • A Laboratórium 2. hét eredmények kérdőíven jegyezzük fel a tapasztalatokat BME-MIT Digit labor 2., 2014.08.11. (v1.0)
13
FPGA labor
Lab2_2 feladat – Csak érdeklődőknek! 4 bites összeadó 4 db 1 bites FADD modulból Elvégzendő feladatok 1: adatfolyam elemek • 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 reprezentá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 (4-4 bit) • Definiálunk egy „h” hiba bitet, ez jelzi, ha esetleg sum ≠ ref előfordulna valamilyen tesztvektor esetén BME-MIT Digit labor 2., 2014.08.11. (v1.0)
14
FPGA labor
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 (bekapcsolja a kijelző digitet, ha hiba van) • Gondoskodunk a col_n[4:0] jelek kikapcsolásáról BME-MIT Digit labor 2., 2014.08.11. (v1.0)
15
FPGA labor
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 BME-MIT Digit labor 2., 2014.08.11. (v1.0)
16
FPGA labor
A Lab2_2 feladat lényegi része 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 ismert, az s és a co logikai függvények felírhatók • Többféle megoldás létezik, használjuk a legismertebb formát a[3] b[3]
a
a[2] b[2]
b
ci
a
a[1] b[1]
b
a
ci
a[0] b[0] C[0]
b
ci
a
b
ci
FADD (ADD3)
FADD (ADD2)
FADD (ADD1)
FADD (ADD0)
co
co
co
co
s
C[4] sum[3]
C[3]
s sum[2]
C[2]
s sum[1]
C[1]
s sum[0]
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
17
FPGA labor
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) BME-MIT Digit labor 2., 2014.08.11. (v1.0)
18
FPGA labor
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
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
19
FPGA labor
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 BME-MIT Digit labor 2., 2014.08.11. (v1.0)
20
FPGA labor
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
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
21
FPGA labor
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: 21·co + 20·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
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
22
FPGA labor
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…. BME-MIT Digit labor 2., 2014.08.11. (v1.0)
23
FPGA labor
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 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
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
24
FPGA labor
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) BME-MIT Digit labor 2., 2014.08.11. (v1.0)
25
FPGA labor
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) BME-MIT Digit labor 2., 2014.08.11. (v1.0)
26
FPGA labor
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…
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
27
FPGA labor
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 ( Restart 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 BME-MIT Digit labor 2., 2014.08.11. (v1.0)
28
FPGA labor
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
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
29
FPGA labor
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 • A Laboratórium 2. hét eredmények kérdőíven válaszoljuk meg a Lab2_2 feladathoz tartozó kérdéseket
BME-MIT Digit labor 2., 2014.08.11. (v1.0)
30
FPGA labor