Budapesti Műszaki és Gazdaságtudományi Egyetem. A Verilog HDL II. Nagy Gergely. Elektronikus Eszközök Tanszéke (BME) szeptember 26.

Hasonló dokumentumok
Kombinációs áramkörök modelezése Laborgyakorlat. Dr. Oniga István

Hardver leíró nyelvek (HDL)

Laborgyakorlat 3 A modul ellenőrzése szimulációval. Dr. Oniga István

Újrakonfigurálható eszközök

A Verilog HDL áttekintése

Újrakonfigurálható eszközök

Újrakonfigurálható eszközök

Digitális technika (VIMIAA02) Laboratórium 5

Digitális technika (VIMIAA02) Laboratórium 5

Verilog HDL ismertető 2. hét : 1. hét dia

Dr. Oniga István DIGITÁLIS TECHNIKA 8

Újrakonfigurálható eszközök

Egyszerű RISC CPU tervezése

Digitális technika (VIMIAA02) Laboratórium 4

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Dr. Oniga István

Digitális technika (VIMIAA02) Laboratórium 4

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Előadó: Dr. Oniga István

Digitális technika (VIMIAA02) Laboratórium 3

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Digitális technika (VIMIAA02) Laboratórium 3

Előadó: Nagy István (A65)

Verilog ismertető (Szántó Péter, BME MIT, )

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

Mérési jegyzőkönyv. az ötödik méréshez

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Újrakonfigurálható eszközök

Dr. Oniga István DIGITÁLIS TECHNIKA 9

FPGA & Verilog ismertetı. BME Méréstechnika és Információs Rendszerek Tanszék

LOGSYS LOGSYS LCD KIJELZŐ MODUL FELHASZNÁLÓI ÚTMUTATÓ november 8. Verzió

Újrakonfigurálható eszközök

BASH script programozás II. Vezérlési szerkezetek

DIGITÁLIS TECHNIKA 7. Előadó: Dr. Oniga István

A Picoblaze Core implementálása FPGA-ba

11. KÓDÁTALAKÍTÓ TERVEZÉSE HÉTSZEGMENSES KIJELZŐHÖZ A FEJLESZTŐLAPON

C programozási nyelv

12. NYOMÓGOMBOK ÉS KAPCSOLÓK PERGÉSMENTESÍTÉSE A FEJLESZTŐLAPON

Perifériák hozzáadása a rendszerhez

Digitális technika II. (vimia111) 5. gyakorlat: Tervezés adatstruktúra-vezérlés szétválasztással, vezérlőegység generációk

LOGIKAI TERVEZÉS PROGRAMOZHATÓ. Elő Előadó: Dr. Oniga István

7.hét: A sorrendi hálózatok elemei II.

SysCVideo: fiktív grafikus kártya SystemC modulként, SDL alapú megjelenítéssel

Verilog HDL ismertető

SZORGALMI FELADAT. 17. Oktober

Szántó Péter BME Méréstechnika és Információs Rendszerek Tanszék, FPGA Labor

Digitális technika (VIMIAA02) Laboratórium 5.5

PROTOTÍPUSKÉSZÍTÉS. Előadó: Dr. Oniga István

Mikrorendszerek tervezése

Digitális rendszerek tervezése FPGA áramkörökkel Szimuláció és verifikáció

Verilog HDL ismertető 4. hét : hét dia

Digitális technika (VIMIAA01) Laboratórium 4

A Memory Interface Generator (MIG) beállítása a Logsys Kintex-7 FPGA kártyához

Szimuláció és verifikáció. Digitális rendszerek tervezése FPGA áramkörökkel Szimuláció és verifikáció. Kétfajta szimulációs módszer

Digitális technika (VIMIAA02) Laboratórium 1

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Digitális technika (VIMIAA02) Laboratórium 1

Adatfeldolgozó rendszer tervezése funkcionális elemekkel

Verilog HDL ismertető

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT FPGA laboratórium

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

The modular mitmót system. DPY kijelző kártya C API

Digitális eszközök típusai

Nyolcbites számláló mintaprojekt

10. EGYSZERŰ HÁLÓZATOK TERVEZÉSE A FEJLESZTŐLAPON Ennél a tervezésnél egy olyan hardvert hozunk létre, amely a Basys2 fejlesztőlap két bemeneti

DIGITÁLIS TECHNIKA feladatgyűjtemény

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Dr. Oniga István

Számítógépek felépítése, alapfogalmak

Digitális technika VIMIAA02 7. hét Fehér Béla BME MIT

Digitális technika VIMIAA02 7. hét

6. hét: A sorrendi hálózatok elemei és tervezése

Digitális technika (VIMIAA01) Laboratórium 9

A feladatokat önállóan, meg nem engedett segédeszközök használata nélkül oldottam meg: Olvasható aláírás:...

és az instanceof operátor

Digitális technika (VIMIAA01) Laboratórium 9

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Digitális rendszerek. Mikroarchitektúra szintje

Beágyazott és Ambiens Rendszerek Laboratórium BMEVIMIA350. Mérési feladatok az 1., 2. és 3. mérési alkalomhoz

Hobbi Elektronika. A digitális elektronika alapjai: Újrakonfigurálható logikai eszközök

Occam 1. Készítette: Szabó Éva

Kiegészítő segédlet szinkron sorrendi hálózatok tervezéséhez

Digitális technika VIMIAA hét

MIKROELEKTRONIKA, VIEEA306

Tartalom Tervezési egység felépítése Utasítások csoportosítása Értékadás... 38

Digitális Technika. Dr. Oniga István Debreceni Egyetem, Informatikai Kar

3. A DIGILENT BASYS 2 FEJLESZTŐLAP LEÍRÁSA

III. Alapfogalmak és tervezési módszertan SystemC-ben

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Digitális technika VIMIAA01 5. hét

14. TARTALOM FUTTATÁSA A FEJLESZTŐLAP HÉTSZEGMENSES KIJELZŐJÉN

Mintavételes szabályozás mikrovezérlő segítségével

Programozás II. 2. Dr. Iványi Péter

Digitális technika VIMIAA01

Digitális technika VIMIAA01

_INVHU000_WriteReadParameter.cxf Frekvenciaváltók

A gyakorlatokhoz kidolgozott DW példák a gyakorlathoz tartozó Segédlet könyvtárban találhatók.

Programozási segédlet DS89C450 Fejlesztőpanelhez

OOP #14 (referencia-elv)

Átírás:

Áramkörtervezés az absztrakciótól a realizációig BMEVIEEM284 Budapesti Műszaki és Gazdaságtudományi Egyetem A Verilog HDL II. Nagy Gergely Elektronikus Eszközök Tanszéke (BME) 2013. szeptember 26. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 1 / 30

Szimuláció Szimuláció Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 2 / 30

Szimuláció Szimuláció Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 3 / 30

Szimuláció Szimuláció Szimuláció I. Projektjeink ellenőrzése egy nagyon fontos lépése a tervezésnek. Egy grafikus szimulátorban a rendszerünk jeleinek hullámformáját nézhetjük meg és láthatjuk a buszok értékét számként is. Egy szimulátor képes megmutatni a rendszer felépítést: a modulok hierchia-fáját bejárhatjuk és a,,belenézhetünk az egyes példányokba. Láthatjuk az aktuálisan kiválasztott modul vezetékeit, regisztereit. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 4 / 30

Szimuláció Szimuláció Szimuláció II. Bármely modul bármely vezetékét, regisztereit megjeleníttethetjük. A több-bites vezetékek/regiszterek esetén megválaszthjatjuk, hogy milyen számrendszerben jelenjen meg azok értéke. Egy kurzorral tetszőleges pillanatban lekérdezhetjük az összes megjelenített jel aktuális értékét. Némely szimulátornál, meg kell adni egy parancsban azt, hogy mely jeleket rögzítse a futás során. Ez a $dumpvars paranccsal történik, amely legegyszerűbb formájában egyedül áll, paraméterek nélkül. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 5 / 30

Szimuláció III. Szimuláció Szimuláció A kíırás valamilyen bináris vagy szöveges fájlba történik. Egy nagyon elterjedt, szöveges formátum a VCD: a Value Change Dump név rövidítése, a Verilog 1995-ös szabványában definiálták, lényegében minden Verilog szimulátor ismeri. Használatos még a bináris LXT formátum: az interlaced extensible Trace név rövidítése, a GTKWave programhoz fejlesztették ki és támogatja például az Icarus Verilog és VeriWell, mivel nem annyira elterjedt, csak akkor érdemes használni, ha az eredményeket biztosan csak ezt értő megjelenítővel fogjuk vizsgálni, előnye, hogy gyorsabban dolgoznak vele a programok. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 6 / 30

Szimuláció IV. Szimuláció Szimuláció Egy szimuláció az ingyenes GTKWave programmal. Figyeljük meg a különböző állapotok, értékek jelölését, azt, hogy a három nyolc-bites regiszter értéke háromféle számrendszerben van megjelenítve. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 7 / 30

Technikai részletek, tervezési ökölszabályok Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 8 / 30

Makrók alkalmazása Makrók alkalmazása I. Van lehetőség a C nyelvű megoldáshoz nagyon hasonló módon makrókat definiálni. Ezek segítségével könnyen tudunk olyan globális konstansokat létrehozni, amelyeket a projekt több helyén is felhasználhatunk. A makrót definiáló kulcsszó: define `define SIZE 8 reg [ SIZE -1:0] ax; Nagyon fontos, hogy a makró összes hivatkozása elé is le kell írni a karaktert, ami nem egyezik meg az egyszerű aposztróffal! Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 9 / 30

Makrók alkalmazása II. Makrók alkalmazása A makrókat összefoghatjuk beszerkeszthető állományokban. A beszerkesztés az include kulcsszóval történik. `include " global_constants. vh" Egy beszerkeszthető fájlt a C-ből ismert módszerrel kell megvédeni a többszörös definiálástól. A global_constants.vh szerkezete: `ifndef `define... `endif GLOBAL_CONSTANTS GLOBAL_CONSTANTS Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 10 / 30

Makrók alkalmazása III. Makrók alkalmazása Felhasználhatjuk a makrókat a moduljaink paramétereinek való kezdeti értékadásra is:... parameter size = SIZE ;... Így, ha az összes modulunkban a size paramétert ugyanarra az értékre szeretnénk inicializálni, azt így érdemes megtenni, mert ez a megoldás könnyű módosíthatóságot tesz lehetővé. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 11 / 30

Blokkoló és nem-blokkoló értékadás Blokkoló és nem-blokkoló értékadás I. Az always és initial blokkokban kétféle értékadás létezik: 1 Blokkoló értékadás: több értékadás esetén az n. sor kiértékelés csak akkor kezdődik meg, ha az (n 1). sor már végrehajtódott. Operátora: =. 2 Nem-blokkoló értékadás: több értékadás esetén az összes egy időben hajtódik végre. Operátora: <=. always @( posedge clk ) begin a = b; c = a + b; // c = b + b end (a) always @( posedge clk ) begin a <= b; c <= a + b; // c = kor á bbi a + b end (b) Az (a) kódban a c-nek történő értékadás csak akkor hajtódik végre, amikor a már megkapta az új értékét, a (b) kódban ezzel szemben a két értékadás egyszerre történik, így a-nak még az előző értékével dolgozunk. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 12 / 30

Blokkoló és nem-blokkoló értékadás II. Blokkoló és nem-blokkoló értékadás A késleltetések és a különböző értékadási módok: Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 13 / 30

Blokkoló és nem-blokkoló értékadás Blokkoló és nem-blokkoló értékadás III. Blokkoló és nem-blokkoló értékadások késleltetés nélkül: always @( posedge clk ) begin y1 = in; y2 = y1; end (a) always @( posedge clk ) begin y1 <= in; y2 <= y1; end (b) Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 14 / 30

Blokkoló és nem-blokkoló értékadás Blokkoló és nem-blokkoló értékadás IV. Blokkoló és nem-blokkoló értékadások késleltetett órajelekkel: always @( posedge clk ) begin #5 y1 = in; #5 y2 = y1; end (a) always @( posedge clk ) begin #5 y1 <= in; #5 y2 <= y1; end (b) Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 15 / 30

Blokkoló és nem-blokkoló értékadás Blokkoló és nem-blokkoló értékadás V. Még nagyobb problémát jelent az, ha egy modulon belül több always blokk is szerepel, ugyanis ezek végrehajtási sorrendje nem rögzített: always @( posedge clk ) begin #5 y1 = in; end always @( posedge clk ) begin #5 y2 = y1; end Itt, a kialakuló versenyhelyzet miatt y 2 értéke már az első változást követő felfutó élnél bizonytalan. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 16 / 30

Blokkoló és nem-blokkoló értékadás Blokkoló és nem-blokkoló értékadás VI. Nem soroljuk fel az összes lehetséges buktatót, helyettük álljon itt néhány ökölszabály, amelyekkel biztonságosan lehet fejleszteni. Kombinációs logikákhoz: ha nincs késleltetés: blokkoló értékadás, tehetetlenségi késleltetés esetén: blokkoló értékadás (#5 a = b;) átviteli késleltetés esetén: nem-blokkoló értékadás ( a <= #5 b;). Sorrendi logikákhoz: ha nincs késleltetés: nem-blokkoló értékadás, késleltetések esetén: nem-blokkoló értékadás (a <= #5 b;) az átviteli késleltetést alkalmazzuk. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 17 / 30

Blokkoló és nem-blokkoló értékadás Blokkoló és nem-blokkoló értékadás VII. Ajánlott kódolási stílus sorrendi logikáknál: always @( posedge clk ) begin y1 <= #5 in1 ; end always @( posedge clk ) y2 <= #5 y1; end Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 18 / 30

Adatbuszok alkalmazása Adatbuszok alkalmazása I. Ha egy adatbuszra több áramköri elem is csatlakozik, akkor 1 megfelelő vezérléssel el kell érni, hogy mindig csak egy elem adhasson érvényes jelet rá, 2 meg kell oldani, hogy az egyes elemek magas impedanciás állapotba kerüljenek, amikor passzívak 3 azoknál az elemeknél, amelyek írják és olvassák is a buszt, meg kell oldani a kétirányú kapcsolat helyes működését. Az 1. pont szervezési kérdés, a 2-hoz szükség van arra, hogy a megfelelő meghajtó pufferek értéke z legyen, amikor nem írják a buszt. A 3. pont teljesítéséhez ún. inout-okra, vagyis olyan portokra van szükség, amelyek ki-, és bemenetként is funkcionálnak. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 19 / 30

Adatbuszok alkalmazása Adatbuszok alkalmazása II. Az nagy impedanciás érték mind vezetékeknek, mind regisztereknek értékül adható. Nem hasonĺıthatunk z értékhez, hiszen ezt legfeljebb analóg áramkörrel lehetne eldönteni! if ( data_bus == 8 bzzzzzzzz )... // HIBA!!!! Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 20 / 30

Adatbuszok alkalmazása Adatbuszok alkalmazása III. Az inout olyan port, amely kimenetként és bemenetként is képes működni. Csak vezeték jellegű lehet, nem készíthetünk belőle regisztert. Az olvasást érdemes procedurális blokkban, olvasási állapot során egy egyszerű értékadással megoldani. Az írás: érdemes egy belső regisztert rendelni a kimeneti adatokhoz, feltételes értékadással hozhatunk létre háromállapotú puffer: reg [7:0] data_out ; assign data_bus = ( write_en )? data_out : 8 bzzzzzzzz ; Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 21 / 30

Adatbuszok alkalmazása Adatbuszok alkalmazása IV. Az alábbiakban látható egy egyszerű memória, amelyben az adatbuszról olvassuk be egy memóriacella új értékét, és oda írjuk a memóriából kiolvasott értéket is. // write_nread : read (0) -- memory is read // write (1) -- memory is written module memory ( input clk, input chip_enable, input write_nread, input [ SIZE -1:0] address, inout[ SIZE -1:0] data ); reg [ SIZE -1:0] data_out ; reg [ SIZE -1:0] memory [0: MEM_SIZE -1]; assign data = ( write_nread == 1 b0 && chip_enable == 1 b1)? data_out : {( SIZE ){1 bz }}; always @( posedge clk ) begin end if ( chip_enable == 1 b1) begin if ( write_nread == 1 b0) data_out <= #1 memory [ address ]; else memory [ address ] <= #1 data ; end endmodule Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 22 / 30

Adatbuszok alkalmazása V. Adatbuszok alkalmazása A memória felépítése nagyon egyszerű, ám a vele való kommunikáció már körülményesebb. Legalább két órajel beírni egy adatot: 1 kitesszük a címbuszra a címet, az adatbuszra a beírandó bájtot, beálĺıtjuk az írást és engedélyezzük a memória példányt (chip_enable), 2 töröljük a chip engedélyezést. Az olvasás még bonyolultabb: 1 kitesszük a címbuszra a címet, az adatbuszról leveszünk minden egyéb meghajtást, beálĺıtjuk az olvasást és engedélyezzük a chipet, 2 mindezeket a következő órajelnél olvassa be a memória, ha nálunk volt késleltetés tehát várunk, hogy elkezdődjön az olvasás (ideális esetben csak 1 órajel), 3 értékül adjuk egy saját regiszternek az adatbusz értékét, töröljük a memória engedélyezését. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 23 / 30

Adatbuszok alkalmazása Adatbuszok alkalmazása VI. Az alábbiakban látható egy írás és egy olvasás művelete. Figyeljük meg, hogy a busz a műveletek között nagy impedanciás állapotba kerül! Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 24 / 30

Adatbuszok alkalmazása Adatbuszok alkalmazása VII. Természetesen a bemutatott módszer csak ASIC tervezésben használható. FPGA-kban nem használhatjuk a nagy impedanciás állapotot. FPGA-kban ha egy bemenetre több áramkör kapcsolódik, akkor egy multiplexert kell kötni a bemenetre, a kapcsolódó áramkörök a multiplexerre kapcsolódnak, készíteni kell egy kiválasztójelet, ami vezérli a multiplexert. Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 25 / 30

Skálázható memória és inicializálása I. Skálázható memória és inicializálása A korábbi memória példát kicsit átalakítjuk, hogy a méreteket skálázhatóvá tegyük. Ehhez paramétereket használunk. A változó méret megjelenik az interfészen is, ezért a be- és kimeneteket csak a hagyományos módon tudjuk megadni. module memory ( clk, chip_enable, write_nread, address, data ); parameter SIZE = 8; parameter MEM_SIZE = 256; input clk ; input chip_enable ; input write_nread ; input [ SIZE -1:0] address ; inout[ SIZE -1:0] data ; reg [ SIZE -1:0] data_out ; reg [ SIZE -1:0] memory [0: MEM_SIZE -1];... Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 26 / 30

Skálázható memória és inicializálása Skálázható memória és inicializálása II. module memory ( clk, chip_enable, write_nread, address, data ); parameter SIZE = 8; parameter MEM_SIZE = 256; input clk ; input chip_enable ; input write_nread ; input [ SIZE -1:0] address ; inout[ SIZE -1:0] data ; reg [ SIZE -1:0] data_out ; reg [ SIZE -1:0] memory [0: MEM_SIZE -1]; assign data = ( write_nread == 1 b0 && chip_enable == 1 b1)? data_out : {( SIZE ){1 bz }}; always @( posedge clk ) begin end if ( chip_enable == 1 b1) begin if ( write_nread == 1 b0) data_out <= #1 memory [ address ]; else memory [ address ] <= #1 data ; end endmodule Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 27 / 30

Skálázható memória és inicializálása Skálázható memória és inicializálása III. A memória példányosítása a méretek megadásával: memory #(8, 256) m( clk, chip_enable, write_nread, address, data ); A memória inicializálása fájlból: initial $readmemh (" mem. mif ", m. memory, 0, 255); A mem.mif fájl tartalma (256 db. sorból áll): f0 1a 21 3a 42... Paraméteresen adott méretű konstans: {(SIZE){1 bz}} Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 28 / 30

Irodalom Irodalom Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 29 / 30

Irodalom Irodalom Sutherland HDL:Understanding Verilog Blocking and Non-blocking Assignments Clifford E. Cummings: Verilog Nonblocking Assignments With Delays, Myths & Mysteries Nagy Gergely (BME EET) A Verilog HDL II. 2013. szeptember 26. 30 / 30