A VERILOG HARDVER LEÍRÓ NYELV ALKALMAZÁSA a LOGIKAI SZINTÉZISBEN M.D. CILETTI Deparmen of Elecrical and Compuer Engineering Universiy of Colorado Colorado Springs, Colorado Copyrigh 1997 No par of hese noes may be copied or reproduced in any form wihou he wrien permission of he auhor. A szerző írásbeli engedélye és jóváhagyása alapján ádolgoza és magyarra fordíoa FEHÉR BÉLA Budapesi Műszaki Egyeem Mérésechnika és Információs Rendszerek Tanszék 1
TARTALOM 1. rész: Bevezeés, modellek, hierarchikus ervezés, szimuláció 2. rész: Modulok felépíése, adaípusok, logikai operáorok 3. rész: Felhasználói primiívek, késleleési modellek 4. rész: Működési leírás modellezése Veriloggal 5. rész: A Verilog szinézis módszereinek ismereése 2
LOGIKAI MODELLEZÉS TÁMOGATÁSA A VERILOG NYELVBEN COMBINATIONAL SEQUENTIAL STRUCTURAL (Explici) PRE-DEFINED PRIMITIVES USER-DEFINED PRIMITIVES INSTANTIATED MODULES STRUCTURAL (Implici, Daa Flow) CONTINUOUS ASSIGNMENT (assign) BEHAVIORAL / ALGORITHMIC PROCEDURAL ASSIGNMENT (=) NON-BLOCKING ASSIGNMENT (<=) PROCEDURAL CONTINUOUS ASSIGNMENT (assign) 3
PÉLDÁK A VERILOG STRUKTURÁLIS LEÍRÁSRA module mux_4_sr(a, b, c, d, selec, y_ou); inpu a, b, c, d; inpu [1:0] selec; oupu y_ou; selec[1:0] nor (y_ou, w1, w2, w3, w4); nand (w1, sel_1_bar, sel_0_bar, a); nand (w2, sel_1_bar, selec[0], b); nand (w3, selec[1], sel_0_bar, c); nand (w4, selec[1], selec[0], d); no (sel_1_bar, selec[1]); no (sel_0_bar, selec0]); a b c d mux_4_sr y_ou endmodule 4
FELHASZNÁLÓ ÁLTAL DEFINIÁLT PRIMITIVEK (UDP) CÉL: TÁMOGATÁS A FELHASZNÁLÓI KOMBINÁCIÓS ÉS SZEKVENCIÁLIS PRIMITÍV FÜGGÉNYEK MEGVALÓSÍTÁSÁRA. FLEXIBILITÁS HATÉKONY SZIMULÁCIÓ HATÉKONY MEMÓRIA KIHASZNÁLÁS PÉLDÁK MUX MEGVALÓSÍTÁSA LATCH (SZINTÉRZÉKENY) FLIP FLOP (ÉLVEZÉRELT) 5
UDP - MULTIPLEXER primiive mux_prim (mux_ou, selec, a, b); oupu mux_ou; inpu selec, a, b; able //selec a b : mux_ou Jellemzők a b selec mux_ou 0 0 0 : 0 ; // Tábláza oszlopai a porok sorrendjében 0 0 1 : 0 ; // Egy kimene, öbb bemene, nincs inou 0 0 x : 0 ; // Csak 0,1,x a be- és kimeneeken 0 1 0 : 1 ; // z nagyimpedanciás érék x-kén kezelve 0 1 1 : 1 ; // Az uolsó oszlop a kimene 0 1 x : 1 ; 6
// Bemeneek Kimeneek // selec a b : mux_ou 1 0 0 : 0 ; 1 1 0 : 0 ; 1 x 0 : 0 ; a b selec mux_ou 1 0 1 : 1 ; 1 1 1 : 1 ; 1 x 1 : 1 ; x 0 0 : 0 ; x 1 1 : 1 ; endable endprimiive 7
// Megjegyzés: A nem egyérelműen specifikál kombinációk x kimenee adnak. // Tömöríe jelölés: //? jelöli a 0,1,x érékeken való eljes ieráció, vagyis a don' care bemenei érékeke a b selec mux_ou // selec a b : mux_ou // 0 0? : 0 ; // 0 1? : 1 ; // 1? 0 : 0 ; // 1? 1 : 1 ; //? 0 0 : 0 ; //? 1 1 : 1 ; 8
UDP SZINTÉRZÉKENY LATCH daa enable enable daa TRANSPARENT LATCH q_ou q_ou 9
UDP SZINTÉRZÉKENY LATCH primiive _lach1 (q_ou, enable, daa); oupu q_ou; inpu enable, daa; reg q_ou; able // en daa sae q_ou/nex_sae 1 1 :? : 1 ; // Transzparens magas 1 0 :? : 0 ; // Rögzíe alacsony 0? :? : - ; // Megjegyzés: '-' eseén //nincs válozás a kimeneen, // az állapo az előző éréke arja endable endprimiive 10
UDP POZITÍV ÉLVEZÉRELT FLIP-FLOP primiive d_flop (q_ou, clock, daa); oupu q_ou inpu clock, daa; reg q_ou; able // clk daa sae q_ou/nex_sae (01) 0 :? : 0 ; // Órajel felfuó éle (01) 1 :? : 1 ; (0?) 1 : 1 : 1 ; (0?) 0 : 0 : 0 ; // lehene - is (?0)? :? : - ; // Órajel lefuó éle? (??) :? : - ; // Sabil órajel szin // nincs válozás endable endprimiive // A (0x) ípusú válozás az x reprezenálja 11
UDP LATCH, KEVESEBB PESSZIMIZMUSSAL primiive _lach2 (q_ou, enable, daa); oupu q_ou; inpu enable, daa; reg q_ou; able // en daa sae q_ou/nex_sae 1 1 :? : 1 ; 1 0 :? : 0 ; 0? :? : - ; // Nincs válozás // Nem kezelük az engedélyezés = x esee. // Ha daa = sae, legyen az en engedélyezés közömbös: x 0 : 0 : - ; x 1 : 1 : - ; endable endprimiive 12
SZINT ÉS ÉLVEZÉRELT UDP primiive jk_flop (q_ou, clock, j, k, prese, clear); oupu q_ou; inpu clock, j, k, prese, clear; reg q_ou; // j k q(+1) j k q(+1) // JK Flip-Flop // 0 0 q() 1 0 1 // 0 1 0 1 1 ~q() able // Prese logika (Akív alacsony) // clk j k pre clr sae q_ou/nex_sae??? 0 1 :? : 1 ;??? * 1 : 1 : 1 ; 13
// Clear logika (Akív alacsony) // clk j k pre clr sae q_ou/nex_sae??? 1 0 :? : 0 ;??? 1 * : 0 : 0 ; // Normal órajeles működés // clk j k pre clr sae q_ou/nex_sae r 0 0 0 0 : 0 : 1 ; r 0 0 1 1 :? : - ; r 0 1 1 1 :? : 0 ; r 1 0 1 1 :? : 1 ; r 1 1 1 1 : 0 : 1 ; r 1 1 1 1 : 1 : 0 ; f???? :? : - ; 14
// j és k vezérlése // clk j k pre clr sae q_ou/nex_sae b *??? :? : - ; // sabil óra b? *?? :? : - ; // Kisebb pesszimizmussal. p 0 0 1 1 :? : - ; p 0? 1? : 0 : - ; p? 0? 1 : 1 : - ; (?0)???? :? : - ; (1x) 0 0 1 1 :? : - ; (1x) 0? 1? : 0 : - ; (1x)? 0? 1 : 1 : - ; x * 0? 1 : 1 : - ; x 0 * 1? : 0 : - ; endable endprimiive 15
// JELÖLÉSEK: // * jelöli az összes válozás a bemeneen (??). // r jelöli a (01) ámenee // f jelöli a (10) ámenee // b jelöli a 0 or 1 (pl. sabil óra) // p jelöli a (01), (0x), (x1), (0z), (z1) ámeneeke // n jelöli az (10), (1x), (x0), (1z), (z0) ámeneeke 16
UDP KIÉRTÉKELÉSE EGYIDEJŰ VÁLTOZÁSOKRA Az egyidejű öbbszörös eseményekkel meghajo UDP kiérékelése függ az események feldolgozásának sorrendjéől. PÉLDA: d_flip_flop ESEMÉNY IDŐ STATE = 0 AKTUÁLIS ÉRTÉK CLOCK: 0 --> 1 0 DATA: 0 --> 1 HA AZ ÓRA ESEMÉNNYEL INDUL ==> KÖV. ÁLL. = JELENLEGI ÁLL.= 0 HA AZ ADAT ESEMÉNNYEL INDUL ==> KÖV. ÁLL. = 1 MEGJEGYZÉS: AZ IGAZSÁGTÁBLÁZAT NEM TUDJA FELOLDANI EZT A VERSENYT. IDŐZÍTÉSFIGYELÉSSEL A BEÁLLÁSI IDŐ FELTÉTEL ELLENŐRIZHETŐ. 17
UDP - ÁLTALÁNOS SZABÁLYOK AZ UDP-K A MODULOKKAL AZONOS SZINTAKTIKAI SZÍNTŰ EGYSÉGEK. AZ UDP-KET AZ ELŐRE DEFINIÁLT (BELSŐ) PRIMITÍVEKHEZ HASONLÓAN HASZNÁLHATJUK. AZ INTERFÉSZ LISTÁBAN SORRENDBEN A KIMENET AZ ELSŐ. AZ UDP KIMENETE CSAK SKALÁR LEHET. AZ UDP BEMENETEI IS CSAK SKALÁROK LEHETNEK. A KOMBINÁCIÓS TÍPUSÚ UDP-K KIMENETI PORTJA HUZAL. A SZEKVENCIÁLIS TÍPUSÚ UDP-K KIMENETI PORTJA REGISZTER. 18
UDP - ÁLTALÁNOS SZABÁLYOK AZ UDP-K AUTOMATIKUSAN BIZTOSÍTJÁK AZ ÉLÉRZÉKENY VISELKEDÉST. EGY-EGY SORBAN CSAK EGYETLEN BEMENET VÁLTOZHAT. A NEM TELJESEN SPECIFIKÁLT VÁLTOZÁSOK EREDMÉNYE A KIMENETEN X. AZOKAT A BEMENETI VÁLTOZÁSOKAT IS FELL KELL SOROLNI, AMELYEK NEM VÁLTOZTATJÁK MEG A KIMENETET (EGYÉBKÉNT A KIMENET EZEK HATÁSÁRA X ÉRTÉKET VESZ FEL). HA A KIMENET BÁRMEYIK BEMENETI ÉLRE ÉRZÉKENY, AZ ÖSSZES BEMENET ÖSSZES ÉLÉRE DEFINIÁLNI KELL A VISELKEDÉST. AZ UDP-K HASZNÁLATAKOR MEGADHATÓK ÉLVÁLTOZÁSI IDŐK (felfuó, lefuó). 19
UDP - ÁLTALÁNOS SZABÁLYOK AZ 'inou' TÍPUS NEM MEGENGEDETTAZ UDP TÁBLÁZATBAN. CSAK 0, 1, X ÉRTÉKEK SZEREPELHETNEK A TÁBLÁZATOK KIMENETI ÉS BEMENETI OSZLOPAIBAN. A Z ÉRTÉK (A SZIMULÁCIÓ SORÁN) X -KÉNT SZEREPEL A TÁBLÁZAT SORRENDJE MEGFELEL A PORTOK SORRENDJÉNEK A TÁBLÁZAT NEM TARTALMAZHAT EGYIDEJŰ VÁLTOZÁSOKAT LEGFELJEBB KÉT KÉSLELTETÉSI IDŐ (FELFUTÓ ÉS LEFUTÓ) DEFINIÁLHATÓ EGY UDP-HEZ. 20
A VERILOG NYELV IDŐZÍTÉS MODELLEZÉSE: PRIMITÍVEK, HUZALOK, FOLYTONOS KIJELÖLÉS. A VERILOG NYELV ELŐRE DEFINIÁLT TÁMOGATÁST AD AZ IDŐZÍTÉSEK MODELLEZÉSÉRE: KAPU TERJEDÉSI IDŐ (PROPAGATION DELAY) HUZALTERJEDÉSI IDŐ (TRANSPORT DELAY) KIFEJEZÉSEKKEL DEFINIÁLT KOMBINÁCIÓS LOGIKA, FOLYTONOS KIJELÖLÉS (CONTINUOUS ASSIGNMENT) BEMENET/KIMENET TÍPUSÚ KOMBINÁCIÓS KÉSLELTETÉS (ALGORITMIKUS VISELKEDÉSI LEÍRÁSOKBAN) MODULOK INTERFÉSZEIN LÁB-LÁB KÉSLELTETÉS 21
A VERILOG LOGIKAI PRIMITÍVEK KÉSLELTETÉSEI CÉL: A FIZIKAI TERJEDÉSI KÉSLELTETÉS MODELLEZÉSE KAPU / PRIMITÍV KÉSLELTETÉS (INERCIÁLIS) X_in Y_ou X_in Y_ou pd EGYETLEN ÉRTÉKKEL (késleleés nélküli, egységnyi, egyéb) TÖBB ÉRTÉKŰ (min : yp : max) JELVÁLTÁS SZERINT ASZIMMETRIKUS (lefuás, felfuás, kikapcsolás) ALAPÉRTELMEZÉSBEN NINCS KÉSLELTETÉS RÖVID IMPULZUSOKAT ELNYELI (INERCIÁLIS MODELL) 22
PÉLDA KAPUKÉSLELTETÉSEK MEGADÁSÁRA nand (y_ou, x_in1, x_in2); nand #5 (y, a, b, c); nand #1 (y_ou, x_in1, x_in2); nand #(2,3) (y_ou, x_in1, x_in2); nand #(3:4:5) (c, a, b); a_prim_buffer #(3,5) (y_ou, x_in1, x_in2); // UDP buf_if1 #(3:4:5, 6:7:8, 5:8:9) (y_ou, x_in, enable); MEGJEGYZÉS: A TERJEDÉSI IDŐ HATÁROZZA MEG, HOGY A KIMENET VÁLTOZÁSA MENNYI IDŐ MÚLVA KÖVESSE A BEMENET VÁLTOZÁSÁT. MINDEN BEMENETRE AZONOSAK A KÉSLELTETÉSEK. 23
A KÉSLELTETÉSEK JELENTÉSE ÉS SZINTAKTIKÁJA FELFUTÁS: 0 -> 1, x LEFUTÁS: 1 -> 0, x KIKAPCSOLÁS: 0 -> z x -> 1 x -> 0 1 -> z z -> 1 z -> 0 x -> z A PRIMITÍV KAPUK KÉSLELTETÉSE A KIMENET VÁTOZÁSÁHOZ KAPCSOLÓDIK. ÁLTALÁNOS SZINTAKTIKA gae_prim_name #(d1, d2, d3) insance_name_1 (pors),... insance_name_n(pors); AHOL: d1 d2 d3 Felfuási idő késleleései (egy, keő, vagy három érék) Lefuási késleleés Kikapcsolási késleleés (ahol szükséges) 24
TÖBBSZÖRÖS KÉSLELTETÉSI IDŐK: min, yp, max SZINTAKTIKA #(d1_min:d1_yp:d1_max, d2_min: d2_yp: d2_max, d3_min: d3_yp: d3_max) MEGJEGYZÉSEK A SZIMULÁTOROK ÁLTALÁBAN EGY ÉRTÉKET HASZNÁLNAK. A MEGFELELŐ PARAMÉTER INDÍTÁSI OPCIÓKÉNT VÁLASZTHATÓ. MINDHÁROM IDŐADATOT HASZNÁLJÁK AZ IDŐZÍTÉS ANALIZÁTOROK (PL. CADENCE VERITIME) 25
PÉLDA IDŐZÍTÉS ADATOK ALKALMAZÁSÁRA TRI-STATE LATCH module ri_lach(q_ou, nq_ou, clock, daa, enable); oupu q_ou, nq_ou; inpu clock, daa, enable; ri q_ou, nq_ou; // nagyimpedanciás kimene no #5 (ndaa,daa); // egyszerű késleleés nand #(3,5) (wa, daa, clock), // azonos felfuó/lefuó késleleések (wb, ndaa, clock); // ké kapura nand #(12,15) (q, nq, wa), (nq, q, wb); bufif1 #(3,7,13) q_drive (q_ou, q, enable), // felfuó és lefuó // kikapcsolási késleleések nq_drive (nq_ou, nq, enable); endmodule 26
A TRI-STATE LATCH KAPCSOLÁSI RAJZA daa clock (3,5) wa (12,15) q enable (3,7,17) q_ou (5) (3,7,17) (3,5) wb (12,15) nq enable nq_ou 27
AZ INTERCIÁLIS KÉSLELTETÉSEK MODELLJEI AZ INERCIÁLIS (TEHETETLENSÉGI) KÉSLELTETÉSI MODELL A HATÁRÉRTÉKNÉL KISEBB IDŐTARTAMÚ IMPULZUSOKAT ELNYOMJA. X_in = 1 Y_ou X_in Y_ou X_in = 3 pd = 2 2 5 28
HUZALOZÁSOK KÉSLELTETÉSI MODELLJE: A TRANSZPORT KÉSLELTETÉS CÉL: A JELEK ÁTFUTÁSI IDEJÉNEK MODELLEZÉSE A HUZALOZÁSI KAPCSOLATOKON. X_in X_ou X_in ne_ab X_ou ran EGY KÉSLELTETÉSI IDŐT KAPCSOL KÉT ESEMÉNY, A KIMENETI FORRÁS OLDALI MEGHAJTÓ JELVÁLTÁSA ÉS A HUZAL VÉGPONTJÁN MEGJELENŐ JELVÁLTÁS KÖZÉ. KÉSLELTETÉSI MODELL TRANSZPORT KÉSLELTETÉS (HUZALOZÁSOKON) ALAPÉRTÉK: NINCS KÉSLELTETÉS 29
PÉLDA HUZALOZÁSI KÉSLELTETÉSEKRE nand #3 (y_ou_bar, x_in1, x_in2); // meghajó késleleése 3 ns // a bemenei jelválások uán. wire #2 y_ou1; // huzal fuási ideje 2 ns // a meghajó jelválása uán. wire #4 y_ou2; no #1 (y_ou1, y_ou2, y_ou_bar); // y_ou1 (y_ou2) válozása // 2 ns (4 ns) múlva x_in1 x_in2 3 7 y_ou_bar 3 1 #2 #4 y_ou1 y_ou2 6 10 4 10 8 12 ALKALMAZÁS: HUZALKÉSLELTETÉS FPGA ÁRAMKÖRÖKBEN, ÖSSZEKÖTTETÉSEK MULTI-CHIP MODULOKBAN 30
KÉSLELTETÉS MODELLEZÉSE AZ IMPLICIT KOMBINÁCIÓS LOGIKAI FÜGGVÉNYEKNÉL (CONTINUOUS ASSIGNMENTS) CÉL: KÉSLELTETÉS HOZZÁRENDELÉSE A KÖZVETLEN FÜGGVÉNY FORMÁJÁBAN DEFINIÁLT KOMBINÁCIÓS LOGIKÁHOZ (INERCIÁLIS KÉSLELTETÉSŰ ADATFOLYAM MODELL). X_in Y_ou X_in IMPLICIT LOGIC (Coninuous Assignmen) Y_ou pd A FOLYTONOS KIJELÖLÉS (CONTINUOUS ASSIGNMENT) KÉSLELTETÉSE MODELLEZI AZT AZ IDŐT, AMI A KIFEJEZÉS JOBB OLDALI VÁLTOZÓINAK MEGVÁLTOZÁSÁTÓL A BALOLDALI VÁLTOZÓ VÁLTOZÁSÁIG ELTELIK. 31
PÉLDA IDŐZÍTÉS KÖZVETLEN MEGADÁSÁRA module my_xor (y_ou, a, b); inpu [15:0] a, b; oupu [15:0] y_ou; assign #delay y_ou = a ^ b; endmodule // explici assign MEGJEGYZÉS: EZ A MODELL INERCIÁLIS KÉSLELTETÉST VALÓSÍT MEG. 32
PÉLDA EXPLICIT assign ÉS HUZALOZÁSI KÉSLETETÉSRE a y_ou b a 5 10 a a ^ b y_ou b 10 15 module my_xor (y_ou,a,b); inpu [15:0] a,b; oupu [15:0] y_ou; wire [15:0] #5 y_ou; // ranszpor assign y_ou = a^b; // explici endmodule b 5 y_ou a a ^ b y_ou b 10 5ns TRANSZPORT KÉSLELTETÉS NINCS INERCIÁLIS HATÁS 6 33
PÉLDA EXPLICIT assign ÉS HUZALOZÁSI KÉSLETETÉSRE a b 5 y_ou a a ^ b y_ou b 13 18 a b 5 10 a b a ^ b y_ou y_ou module my_xor (y_ou,a,b); inpu [15:0] a,b; oupu [15:0] y_ou; wire [15:0] #5 y_ou; // 5ns huzalozás assign #3 y_ou = a^b; // 3ns inerciális endmodule 5ns TRANSZPORT KÉSLELTETÉS 3ns INERCIÁLIS HATÁS 6 34
KÉSLELTETÉS MEGADÁSI FORMÁI FOLYTONOS KIJELÖLÉS ESETÉN IMPLICIT assign module my_xor (y_ou, a, b); inpu [15:0] a, b; oupu [15:0] y_ou; wire #some_delay y_ou = a^b; // implici assign, a XOR // inerciális késleleése endmodule MEGJEGYZÉS: A MEGHAJTÓNAK INERCIÁLIS KÉSLELTETÉSE, A HUZALNAK 0 ÉRTÉKŰ TRANSZPORT KÉSLELTETÉSE VAN. 35
KÉSLELTETÉSI MODELLEK PÉLDA module wand_of_assigns (y_ou, x1, x2); inpu [31:0] x1, x2; oupu [31:0] y_ou; wand # 10 y; // wired-and huzal deklaració // ranszpor késleleés assign #5 y = ~x1; // meghajó inerciális késleleése assign #3 y = ~x2; // meghajó inerciális késleleése buf (y_ou, y); // modul áfuási idő endmodule MEGJEGYZÉS: A FOLYTONOS KIJELÖLÉS MEGHAJTÓJA MINDIG AKTÍV. A VISELKEDÉSI LEÍRÁSOK KÉSLELTETÉSI MODELJEINEK LEÍRÁSA (A BEMENETI/KIMENETI ALGORITMUS) KÉSŐBB FOG SZEREPELNI. 36
ÖSSZEFOGLALÓ A KAPUK, HUZALOK ÉS A FOLYTONOS KIJELÖLÉS KÉSLELTETÉSI MODELLJEIRŐL KAPUK: gae_ype #delay ( ); A BEMENETI ÉS KIMENETI ESEMÉNYEK KÖZÖTTI KÉSLELTETÉST DEFINIÁLJA A JELTERJEDÉS AZ INERCIÁLIS MODELL SZERINTI FOLYTONOS KIJELÖLÉS: wire #delay ne_name = expression; // Inerciális késleleés a jobboldali kifejezésre. wire ne_name; assign #delay ne_name = expression // Inerciális késleleés a jobboldali kifejezésre. 37
ÖSSZEFOGLALÁS wire #wire_delay ne_name; // huzal ranszpor késleleés assign ne_name = expression; // inerciális késleleés nélkül KÉSLELTETÉS A HUZALT MEGHAJTÓ KIMENET VÁLTOZÁSA ÉS ENNEK AZ ESEMÉNYNEK A MEGJELENÉSE A TERHELÉST JELENTŐ KAPU, PRIMITÍV VAGY FOLYTONOS KIJELÖLÉS KIFEJEZÉS VÁLTOZÓJA KÖZÖTT TRANSZPORT KÉSLELTETÉST VALÓSÍT MEG wire #wire_delay ne_name; // hual ranszpor késleleés assign #delay ne_name = expression; // inerciális késleleés 38