A VERILOG HARDVER LEÍRÓ NYELV ALKALMAZÁSA A LOGIKAI SZINTÉZISBEN M.D. CILETTI Department of Electrical and Computer Engineering University of Colorado Colorado Springs, Colorado Copyright 1997 No part of these notes may be copied or reproduced in any form without the written permission of the author. A szerző írásbeli engedélye és jóváhagyása alapján átdolgozta és magyarra fordította FEHÉR BÉLA Budapesti Műszaki Egyetem Méréstechnika és Információs Rendszerek Tanszék 1
TARTALOM 1. rész: Bevezetés, modellek, hierarchikus tervezés, szimuláció 2. rész: Modulok felépítése, adattípusok, logikai operátorok 3. rész: Felhasználói primitívek, késleltetési modellek 4. rész: Működési leírás modellezése Veriloggal 5. rész: A Verilog szintézis módszereinek ismertetése 2
A SZINTÉZIS PARADIGMA TERV BEVITEL HDL VISELKEDÉSI MODELL FUNKCIONÁLIS SZIMULÁCIÓ IDŐZÍTÉS SZIMULÁCIÓ TERV ELLENŐRZÉSE HDL FORRÁS FILE FIZIKAI OPTIMALIZÁLÁS ÉS MEGVALÓSÍTÁS PLD: PARTICIONÁLÁS, MAP, ÖSSZEKÖTÉSEK FPGA: MAP, ELHELYEZÉS, HUZALOZÁS STANDARD CELLÁS ASIC: ELHELYEZÉS, HUZALOZÁS 3
HDL-ALAPÚ SZINTÉZIS A HDL-ALAPÚ SZINTÉZIS ELŐNYEI: A SZINTÉZIS ESZKÖZÖK BIZTOSÍTJÁK: A kapu szintű tervezés alternativája Magas szintű tervezési absztrakció Leírja a teljes architektúrát Leírja a funcionalitást A kapu szintű reprezentáció automatikus generálását Optimális megvalósítást Architekturális vizsgálat, elemzés 4
HDL-ALAPÚ TERV OPTIMALIZÁLÁS VISELKEDÉSI LEÍRÁS TECHNOLÓGIAI KÖNYVTÁRAK TRANSLATION FORDÍTÓ ENGINE EGYSÉG KÉTSZINTŰ LOGIKAI FÜGGVÉNYEK OPTIMALIZÁLÓ MAPPING ENGINE EGYSÉG OPTIMALIZÁLT TÖBBSZINTŰ LOGIKAI FÜGGVÉNYEK LEKÉPEZŐ MAPPING ENGINE EGYSÉG TECHNOLÓGIAI MEGVALÓSÍTÁS Tervezési célok: Funkcionalitás, felület, időzítés, fogyasztás, tesztelhetőség 5
HDL-ALAPÚ TERV ELLENŐZÉS A viselkedési és kapu-szintű funkcionalitás egyezőségét ellenőrizi kell. Verilog viselkedési leírás Logikai Szintézis Kapu szintű leírás Tesztjel Generator Test környezet a terv verifikálására Válaszok Komparálása t Eredmény jelzése 6
A SZINTÉZIS SZINTJEI VISELKEDÉSI SZINTÉZIS REGISZTER TRANSZFER SZINTŰ (RTL) SZINTÉZIS VEZÉRLŐ EGYSÉG SZINTÉZIS LOGIKAI SZINTÉZIS 7
VISELKEDÉSI SZINTÉZIS CÉL: Adott algoritmushoz szintetizálunk egy architektúrát, melynek erőforrásait és ütemezését az algoritmushoz optimalizáltuk. Fetch B Fetch C Fetch B Fetch C + + Store A Fetch A Fetch E Fetch E A = B + C; D = A * E; X = D - A; * Store D * Fetch D Fetch A - - Store X Store X VERILOG LEÍRÁS ELEMZÉS ADATFOLYAM GRÁF 8
REGISZTER TRANSZFER SZINTŰ SZINTÉZIS CÉL: A regiszterekkel, jelekkel és konstansokkal megadott viselkedési leíráshoz szintetizáljuk a modellt közel optimálisan megvalósító architektúrát. FELTÉTELEZÉS: Az erőforrások, ezek kapcsolódásai és ütemezésük az adatfolyam gráf által előre meghatározott. 9
VÉGES ÁLLAPOTÚ VEZÉRLŐ SZINTÉZISE CÉL: Az állapot átmeneti gráf lefordítása/kódolása regiszterekre és kombinációs logikai elemekre. (Az RTL szintézis egy speciális esete.) SR LATCH - ÁLLAPOT ÁTMENETI GRÁF SR = 01 S Q 0 1 R Q' MOORE MODELL SR = 10 (NEM SZINTETIZÁLT) 10
LOGIKAI FÜGGVÉNYEK OPTIMALIZÁLÁSA ESPRESSO: KÉTSZINTŰ LOGIKAI MINIMALIZÁLÁSA (U CAL - BERKELEY) CÉL: A logikai kifejezések számának minimalizálása egyetlen függvénynél. KITERJESZTÉS A kifejezések helyettesítése kevesebb változót tartalmazó prím implikánsokkal. NEMREDUNDÁNS LEFEDÉS A lehetséges lefedésekből egy minimális halmaz kiválasztása. REDUKCIÓ A nem redundáns lefedés transzformálása egy új lefedésre. 11
LOGIKAI FÜGGVÉNYEK OPTIMALIZÁLÁSA MIS-II: TÖBBSZINTŰ LOGIKAI MINIMALIZÁLÁS (U CAL - BERKELEY) A több-bemenetű, több-kimenetű logikai függvényeket az Espresso egyedi függvényeket minimalizáló módszerével nem lehet optimalizálni. Többszintű Kombinációs Logika A többszintű logikai optimalizáló technikák kihasználják a redundáns belső struktúrákat és don t care feltételeket. 12
LOGIKAI FÜGGVÉNYEK OPTIMALIZÁLÁSA MIS-II: TÖBBSZINTŰ LOGIKAI MINIMALIZÁLÁS (U CAL - BERKELEY) DEKOMPOZÍCIÓ FEJEZZÜNK KI EGYETLEN FÜGVÉNYT BELSŐ CSOMÓPONTOKKAL F = abc + abd + a c d + b c d F = XY + X Y X = ab Y = c + d a b c d a b c d X Y F F 13
LOGIKAI FÜGGVÉNYEK OPTIMALIZÁLÁSA MIS-II: TÖBBSZINTŰ MINIMALIZÁLÁS (U CAL - BERKELEY) KIEMELÉS: FEJEZZÜK KI A FÜGGVÉNYEK EGY CSOPORTJÁT BELSŐ CSOMÓPONTOKKAL F = (a + b)cd + e G = (a + b)e' H = cde e' a b c d + + G F H F = XY + e G = Xe' H = Ye X = a + b Y = cd e' a b c d + X Y + G F H e e OPTIMALIZÁLÁS: BELSŐ CSOMÓPONTOK KERESÉSE A HÁLÓZAT MINIMALIZÁLÁSÁRA, A KÉSLELTETÉS, A FOGYASZTÁS CSÖKKENTÉSÉRE VAGY A TESZTELHETŐSÉG JAVÍTÁSÁRA. 14
LOGIKAI FÜGGVÉNYEK MINIMALIZÁLÁSA MIS-II: TÖBBSZINTŰ LOGIKAI MINIMALIZÁLÁS (U CAL - BERKELEY) SZORZATTÁ ALAKÍTÁS: SZORZATOK ÖSSZEGÉBŐL ÖSSZEGEK SZORZATA FORMA F = ac + ad + bc + bd + e F = (a + b)(c + d) + e a b c d e a b c d e + + (a+b) + + (c+d) OPTIMALIZÁLÁS: A MINIMÁLIS SZÁMÚ MŰVELETET TARTALMAZÓ FORMA KERESÉSE. 15
LOGIKAI FÜGGVÉNYEK MINIMALIZÁLÁSA MIS-II: TÖBBSZINTŰ LOGIKAI MINIMLIZÁLÁS (U CAL - BERKELEY) HELYETTESÍTÉS: A FÜGGVÉNYT MÁS FÜGGVÉNYEKKEL ÉS SAJÁT RÉSZFÜGGVÉNYEIVEL FEJEZZÜK KI. G = a + b F = a + b + c F = G + c a b c a b c + G + G + F + F 16
LOGIKAI FÜGGVÉNYEK MINIMALIZÁLÁSA MIS-II: TÖBBSZINTŰ LOGIKAI MINIMALIZÁLÁS (U CAL - BERKELEY) KIFEJTÉS: EGY BELSŐ CSOMÓPONT MEGSZÜNTETÉSE BEHELYETTESÍTÉSSEL F = Ga + G b F = ac + ad + bc d G = c + d a b c d a b c d + G + F + F 17
A LOGIKAI SZINTÉZIS CÉL: A KOMBINÁCIÓS LOGIKAI FÜGGVÉNY OPTIMÁLIS SZINTÉZISE AZ ERŐFORRÁSIGÉNY, SEBESSÉG, FOGYASZTÁS FIGYELEMBE VÉTELÉVEL. Többszintű Kombinációs Logika A technológia: A MIS-II optimalizációs algoritmusai többszörösen kihasználják a logikai egységeket és a don't care feltételeket, miközben megőrzik a tesztelhetőséget és a be-/kimeneti azonosságot. 18
SZINTÉZIS A VERILOG HDL NYELVRŐL CÉL A Verilog nyelven adott különböző szintű és stílusú (RTL, FSM, egyenletek) leírások alapján a megfelelő kombinációs és szekvenciális logikai modulok kapu színtű reprezentációjának automatikus generálása az erőforrások, sebesség és fogyasztás paraméterek optimalizálásával. FONTOSABB JELLEMZŐK SZINTETIZÁLHATÓSÁG HATÉKONYSÁG MINŐSÉG 19
AZ ERŐFORRÁS - SEBESSÉG KOMPROMISSZUM Kompromisszum: Architektúra, logika, könyvtári elemek Késleltetés Architekturális módosítás Tervezési pont Felület 20
LEHETSÉGES TECHNOLÓGIAI OPCIÓK EGYEDI IC-k Darabszám STANDARD CELLÁS IC-k (CBICs) Tervezési idő PROGRAMOZHATÓ LOGIKAI ESZKÖZÖK (PLDS) FPGA-k és maszk prog. áramkörök Technológiai lépés: Exponenciális javulás a sűrűségben, lineáris a késleltetésben Egyszeri (NRE) költségek Gyártási költségek Méret Sebesség, komplexitás 21
A HDL-ALAPÚ SZINTÉZIS KÖVETELMÉNYEI A SZINTÉZIS ESZKÖZÖK HATÉKONY HASZNÁLATA MEGKÖVETELI: A megfelelő tervezési módszerek követését A funkciók intelligens partícionálását Ügyes és okos HDL leíró stílus használatát (A várható eredmény előrelátása) Az eszközre vonatkozó gyártói ajánlások figyelembevételét A szintézissel kapott kapu-szintű modell ellenőrzését 22
A SZINTÉZIS FONTOS SZABÁLYAI A teljes funkcionalitásra koncentráljunk Készítsünk architekturális tervet, felosztást (top-down) Definiáljuk az egyes egységek funkcionalitását Ellenőrizzük az egységeket (bottom-up) Használjunk technológia független tervezési stílust A kapu szintű szintézist tervezési feltételekkel futassuk Végezzünk a szintézis után ellenőrzést az időzítési adatok és a funkcionalitás ellenőrzésére EREDMÉNY: Technológia függő optimalizált kapu szintű terv. 23
A SZINTÉZIS PARADIGMA KÖLTSÉGEI A szintézis eszközöket meg kell venni A tervezői csapatnak meg kell tanulni az új módszert. A tervezői csapatnak meg kell tanulnia az új nyelvet. A tanulási görbe kezdetben lapos. Az eredmények kezdetben nem jósolhatók. Szükség van tervezői intelligenciára! 24
SZINTÉZEREK TIPIKUS TULAJDONSÁGAI Elfogadják a teljes Verilog HDL nyelvet Elhanyagolják a nem támogatott szerkezeteket Időzítés adatokat elhanyagolják. Késleltetés vezérlést (#) elhanyagolják. Minden jelet maximális erősségűnek tekintenek. Az 'x' és 'z' értékekkel végzett logikai műveletek tiltottak. Ösztönöznek a szintetizálható szerkezetek használatára. Nem támogatják a tároló elemekre történő hivatkozást. 25
SZINTETIZÁLHATÓSÁG Ugyanazon változóra ne hivatkozzunk több 'always' blokkban. (Esetleg a szintetizált rendszer viselkedése eltérő lesz a szimulációtól) Az állapotváltozásokat rendeljük egy közös órajel clock aktív éléhez/éleihez. Az aszinkron 'reset'-et támogatják. 26
TECHNOLÓGIA FÜGGETLEN TERVEZÉS Kombinációs logika A tároló elemeket külső órajel ill. reset jel vezérli. A kombinációs logika bemeneti jelei vagy elsődleges bemenetek, vagy a tárolók kimenetei. A kombinációs logika terjedési ideje kevesebb, mint az órajel periódusideje. 27
A SZINTÉZIS EREDMÉNYÉNEK ELLENŐRZÉSE Verilog HDL Modell tsim clk reg_a reg_b 0 0 0000 1100 50 0 0000 1100 100 1 1011 0011 150 1 1011 0011 Ellenőrző környezet Verilog fordítás, optimalizálás ás technologiai leképezés xor 0000 0000 0000 0000 Fizikai hálózat modellje tsim clk reg_a reg_b 0 0 0000 1100 50 0 0000 1100 100 1 1011 0011 150 1 1011 0011 A terv funkcionalitása független a reprezentációs modelltől és ennek késleltetéseitől. Az adatváltozások egy órajel ciklus alatt lezajlanak. A két modell kimeneti értékeinek az órajel éleknél meg kell egyezniük. 28
A SZINTÉZIS ELŐNYEI Rövidebb terv megvalósítási idő. Kevesebb kapu szintű hibakeresés szükséges. Hatékony kapu szintű megvalósítás. Egyezés az RTL és kapu szintű leírások között. Könnyebb a terv módosítása, más eszközre váltás. A figyelem a tervezési döntésekre irányulhat. Top-down tervszerkesztés, nyelvi alapú leírással és dokumentációval. 29
SZINTETIZÁLHATÓ FUNKCIONÁLIS ELEMEK KOMBINÁCIÓS Multiplexerek Dekóderek Enkóderek Komparátorok Általános logika Táblázatos függvények Összeadók, kivonók ALUs Szorzók PLA Struktúrák Paritás Generátorok SZEKVENCIÁLIS ELEMEK Adat regiszterek és latch-ek Shift regiszterek Regiszter tömbök Akkumlátorok Párhuzamos/soros konverterek SZEKVENCIÁLIS (SZÁMLÁLÓ ALAPÚ) Bináris számlálók Johnson számlálók BCD számlálók Gray számlálók Kapuzott számlálók Pulzus számlálók Időzítők, órajel generátorok Esemény számlálók Memória cím számlálók FIFO memória címmutatók VEZÉRLŐ LOGIKA Vezérlők (Sequencers or Controllers) Állapotgépek (Finite State Machines) Él-detektorok Szinkronizáló egységek A RAM, ROM, aszinkron FIFO elemekhez speciális modul generátorokat kell használni. 30
A VERILOG HDL LEÍRÓ STÍLUSA A HDL FORRÁS STÍLUSA DÖNTŐEN BEFOLYÁSOLJA A SZINTETIZÁLT HÁLÓZATOT! A TERVEZŐ BEFOLYÁSOLHATJA AZ IDŐZÍTÉST/ÓRAJELEZÉST A TERV HIERARCHIÁJÁT A FIZIKAI REALIZÁCIÓT AZ ELŐRE DEFINIÁLT BLOKKOKAT A VERILOG TEREZŐI STÍLUSAI GYÁRTÓFÜGGŐEK A tervezőnek meg kell ismernie és értenie az eszközbe épített fordítási algoritmusokat, és a kombinációs és szekvenciális logikák megkülönböztetésének alapvető szabályait. Az aszinkron és szinkron viselkedéseknél figyelemmel kell lenni az órajelezésre. Nem minden algoritmusból lehet áramkört szintetizálni. A terület - sebesség mérlegelés az eszköz belső feltételei szerinti. 31
A SZINTÉZEREK NYELVI ESZKÖZKÉSZLETE Modul hivatkozás Név és pozíció szerinti port hozzárendelés input, output, inout port módok macromodule, module parameter TELJESEN TÁMOGATOTT KONSTRUKCIÓK case, casex, casez, endcase default disable function, endfunction if, if... else, if... else... if Résztartományok a hivatkozott változókban Shift, feltételes és összekapcsoló műveleti operátorok Procedurális blokkok (begin end) wire, wand, wor, tri supply0, supply1 task, endtask (Időzítés vagy eseményvezérlés nélkül) Különböző számábrázolások Egész és regiszter típusok Folytonos értékadás Procedurális értékadás Nem-blokkoló értékadás Procedurális-folytonos értékadás 32
A SZINTÉZEREK NYELVI ESZKÖZKÉSZLETE RÉSZBEN TÁMOGATOTT KONSTRUKCIÓK *, /, % Mindkét operandusnak konstansnak, vagy a másodiknak 2 hatványának kell lennie. for A hurokváltozó csak statikus változó lehet. fork... join Az esemény vagy késleltetés vezérlés nem lehet nagyobb, mint az órajel periódus. <= Egy viselkedési blokkon belül a blokkoló és nem-blokkoló típusú értékadások nem keverhetők. and, nand, &&, Esetleg az explicit x vagy z konstrukciók nem használhatóak a primitivekben vagy operátorokban. 33
A SZINTÉZEREK NYELVI ESZKÖZKÉSZLETE ELHANYAGOLT (FIGYELEMBE NEM VETT) KONSTRUKCIÓK Értékadáson belüli késleltetés vagy eseményvezérlések scalared, vectored small, medium, large specify... endspecify $time weak1, weak0, high0, high1, pull0, pull1 $keyword wait 34
A SZINTÉZEREK NYELVI ESZKÖZKÉSZLETE NEM TÁMOGATOTT KONSTRUKCIÓK (Gyártó függő!!!!) Értékadások a baloldalon bit- vagy résztartománnyal Globális változók ===,!== cmos, rcmos, rnmos, nmos, pmos, rpmos tran, tranif0, tranif1, rtran, rtranif0, rtranif1 deassign (Kombinációs esetekre) defparam event force fork, join forever, while initial pulldown, pullup release repeat 35
KOMBINÁCIÓS LOGIKA SZINTÉZISE Logikai bemenetek(t) Kombinációs logika Logikai kimenetek(t) Logikai_kimenetek(t) = f(logikai_bemenetek(t)) SZABÁLYOK Kerüljük el a technológiafüggő modelleket, a funkcionalitást modellezzük, ne az időzítést. A kombinációs logika nem tartalmazhat visszacsatolást. A kombinációs viselkedési blokkokban specifikáljuk a kimenetet minden lehetséges bemenet esetére Minden nem tisztán kombinációs viselkedésből a szintézer szekvenciális logikát készít. 36
KOMBINÁCIÓS LOGIKA SZINTÉZISE Logikai bemenetek(t) Kombinációs logika Logikai kimenetek(t) Logikai_kimenetek(t) = f(logikai_bemenetek(t)) LEÍRÁSI STÍLUSOK Verilog primitívek és kapuk strukturális huzalozási listája. Kombinációs UDP Függvények Folytonos értékadás Viselkedési utasítások Taszkok időzítés és eseményvez. nélkül. Fentiek összekapcsolt moduljai. 37
KOMBINÁCIÓS LOGIKA SZINTÉZISE PÉLDA - PRIMITÍVEK HUZALOZÁSI LISTÁJA (STRUKTURÁLIS) x1 x2 enable x3 x4 w1 w2 y module or_nand_1 (enable, x1, x2, x3, x4, y); input enable, x1, x2, x3, x4; output y; // Belső vezetékeket nem kell deklarálni or (w1, x1, x2); or (w2, x3, x4); nand (y, w1, w2, enable); endmodule 38
KOMBINÁCIÓS LOGIKA SZINTÉZISE PÉLDA - FOLYTONOS ÉRTÉKADÁS x1 x2 enable x3 x4 w1 w2 y module or_nand_2 (enable, x1, x2, x3, x4, y); input enable, x1, x2, x3, x4; output y; assign y =!(enable & (x1 x2) & (x3 x4)); endmodule 39
KOMBINÁCIÓS LOGIKA SZINTÉZISE PÉLDA - PROCEDURÁLIS UTASÍTÁS (1) module or_nand_3 (enable, x1, x2, x3, x4, y); input enable, x1, x2, x3, x4; output y; reg y; always @ (enable or x1 or x2 or x3 or x4) if (enable) y =!((x1 x2) & (x3 x4)); else y = 1; // konstans operandus. endmodule FIGYELEM: Az eseményvezérlő kifejezésben minden bemenetet fel kell sorolni, különben a szintézer beépít egy latch tárolót. MEGJEGYZÉS: Az eseményvezérlő kifejezés önmagában még nem jelenti regiszter vagy órajel szintézisét. 40
KOMBINÁCIÓS LOGIKA SZINTÉZISE PÉLDA - PROCEDURÁLIS UTASÍTÁS (2) module and4_behav (y_out, x_in); input [3:0] x_in; output y_out; reg temp; integer k; assign y_out = temp; always @ (x_in) begin: check_for_0 temp = 1; for (k = 0; k <= 3; k = k+1) if (x_in[k] == 0) begin temp=0; disable check_for_0; end end endmodule MEGJEGYZÉS: A deklarált 'reg' típuső változó nem feltétlenül eredményez egy tároló elemet a szintetizált hálózatban. 41
KOMBINÁCIÓS LOGIKA VISELKEDÉSI LEÍRÁSA module comparator (a, b, a_gt_b, a_lt_b, a_eq_b); // Iteratív algoritmus parameter size = 8; input [size-1: 0] a, b; output a_gt_b, a_lt_b, a_eq_b; reg a_gt_b, a_lt_b, a_eq_b; always @ (a or b) begin: compare_loop for (k = size 1; k >= 0; k = k-1) begin if (a[k]!= b[k]) begin a_gt_b = a[k]; a_lt_b = ~a[k]; a_eq_b = 0; disable compare_loop; end // if szerkezet end // for hurok szerkezet a_gt_b = 0; a_lt_b = 0; a_eq_b = 1; end // compare_loop blokk endmodule // Az a és b értéke azonos, ha // bitjeik megegyeznek. // Egyébként az első nagyobb // helyiértékű biten lévő eltérés // meghatározza az eredményt 42
A KOMBINÁCIÓS LOGIKA SZINTÉZISÉNÉL ELKERÜLENDŐ KONSTRUKCIÓK Többszörös eseményvezérlés egyetlen viselkedési blokkon belül Nevesített események Visszacsatolt hurkok Esemény vagy késleltetés vezérlést tartalmazó procedurális, folytonos értékadások. fork... join blokkok wait utasítások Külső disable utasítások Procedurális hurkok időzítésse Adat függő hurkok Taszkok időzítés vezérléssel Szekvenciális UDP-k 43
A SZINTÉZIS - SZIMULÁCIÓ HATÉKONYSÁG OPTIMALIZÁLÁSA PÉLDA - MÓDOSÍTOTT ÉRZÉKENYSÉGI LISTA module or_nand_4 (enable, x1, x2, x3, x4, y); input enable, x1, x2, x3, x4; output y; reg y; always @ (enable) if (enable) assign y =!((x1 x2) & (x3 x4)); else assign y = 1; // konstans operandus endmodule MEGJEGYZÉS: A procedurális-folytonos értékadás csökkenti az always blokk érzékenységi listájának hosszát, továbbá javítja a szimulációs hatékonyságot az assign érzékenységi listájának dinamicus változtatásával. MEGJEGYZÉS: Az assign értékadásokat itt a deassign nélkül használtuk, így megvalósított kötés fennmarad, amíg más értékadás azt felül nem írja. 44
MULTIPLEXEREK SZINTÉZISE LEHETŐSÉGEK FELHASZNÁLÓI PRIMITÍV assign / FELTÉTELES OPERÁTOR VISELKEDÉSI BLOKK case SZERKEZETTEL, PROCEDURÁLIS FOLYTONOS ÉRTÉKADÁSSAL (PCA) VISELKEDÉSI BLOKK if... else SZERKEZETTEL, PROCEDURÁLIS FOLYTONOS ÉRTÉKADÁSSAL (PCA) 45
MULTIPLEXER PÉLDÁK assign / conditional case / PCA if... else / PCA module syn1_mux_4bits (y, a, b, c, d, sel); input [3:0] a, b, c, d; input [1:0] sel; output [3:0] y; module syn2_mux_4bits (y, a, b, c, d, sel); input [3:0] a, b, c, d; input [1:0] sel output [3:0] y; reg [3:0] y; module syn3_mux_4bits (y, a, b, c, d, sel); input [3:0] a, b, c, d; input [1:0] sel; output [3:0] y; reg [3:0] y; assign y = (sel == 0)? a : (sel == 1)? b : (sel == 2)? c : (sel == 3)? d : 4 bx; endmodule always @ (sel) case (sel) 0: assign y = a; 1: assign y = b; 2: assign y = c; 3: assign y = d; always @ (sel) if (sel == 0) assign y = a; else if (sel == 1) assign y = b; else if (sel == 2) default assign y = 4'bx; assign y = c; endcase else if (sel == 3) endmodule assign y = d; else assign y = 4 bx; endmodule A case utasítás minden ága azonos precedenciájú, a case alapvetően egy multiplexer architectura. 46
MULTIPLEXER PÉLDÁK module mux4ch (y, a, b, c, d, sel); input a, b, c, d; input [1:0] sel output y; reg y; sel[1:0] sel[0] always @ (sel) case (sel) 0: assign y = a; 1: assign y = b; 2: assign y = c; 3: assign y = d; default assign y = 4'bx; endcase endmodule c d a b sel[1] y Bármely változás a sel bemeneten, egy új jelet rendel az y kimenethez. 47
AZ 'if' UTASÍTÁS SZINTÉZISE PÉLDA module mux_2 (y, sig_a, sig_b, select); input sig_a, sig_b; input select; output y; reg y; always @ (sig_a or sig_b or select) begin if (select == 0) y = sig_a; else y = sig_b; end; endmodule sig_a sig_b select mux_2 y A SZINTÉZIS EREDMÉNYE: MULTIPLEXER 48
MUXLTIPLEXER VEZÉRLŐ LOGIKÁVAL assign sig_out = (select == 1) (sig_g == 1) (sig_max == 0))? sig_a : sig_b; A SZINTÉZIS EREDMÉNYE: Multiplexer vezérlő logikával. sig_g select sig_max sig_b sig_a sig_out 49
MULTIPLEXER ADATÚT ELEMEKKEL assign sum = (select)? data_c + data_d : data_a + data_b; A SZINTÉZIS EREDMÉNYE: Összeadó multiplexelt adatúttal. select data_a data_c mux_2 data_b Add y data_d mux_2 Megjegyzés: Elképzelhető egy kevésbé hatékony alternatíva is! 50
AZ 'if' UTASÍTÁS ÉS A PRIORITÁS KEZELÉSE MEGJEGYZÉS: Az 'if' utasítások feltételei az ugrások végrehajtása során prioritásokat is jelentenek. PÉLDA module mux_4pri (y, a, b, c, d, sel_a, sel_b, sel_c); input a, b, c, d, sel_a, sel_b, sel_c; output y; reg y; always @ (sel_a or sel_b or sel_c or a or b or c or d) begin if (sel_a == 1) y = a; else if (sel_b == 0) y = b; else if (sel_c == 1) y = c; else y = d; end endmodule sel_a sel_b sel_c d c b a mux_2 mux_2 mux_2 A SZINTÉZIS EREDMÉNYE: Kaszkádosított multiplexerek vagy ennek megfelelő kapuk. 51
A KOMBINÁCIÓS LOGIKA SZINTÉZISÉNEK FELTÉTELEI A viselkedési blokk minden bemeneti jele explicit vagy implicit módon szerepeljen az eseményvezérlő kifejezésben. Bemenetek az értékadások jobb oldalán álló operandusok, és bármilyen olyan vezérlőjel, amely az értékadás baloldalán lévő vátozókra hatással van. Az eseményvezérlő kifejezésnek a viselkedési leírás elején explicit (@(enable, sel, a, b)) vagy implicit (@ enable) módon minden vezérlőjelet tartalmaznia kell, ami a baloldalt befolyásolja. Azok a jelek, amelyek a prodecedurális értékadás jobb oldalán operandusként szerepelnek, nem fordulhatnak elő az értékadás baloldalán (a visszacsatolás tiltott). A kombinációs logika szintézise szempontjából a procedurális folytonos értékadás (PCA) a kedvezőbb. (A PCA dinamikus kötéseket valósít meg.) A nem teljesen specifikált feltételes kifejezések, (case,?:, if) ill. utasítások nem kívánt latch tárolók szintéziséhez vezetnek, ami már nem kombinációs logika. Függvényekben a nem teljesen specifikált (case,?:, if) feltételes utasítás nem megengedett. 52
AZ ESEMÉNYVEZÉRLŐ KIFEJEZÉS JAVASOLT STÍLUSA always @ (opcode or a or b) case (opcode) 3'b111: out_i = a & b; 3'b011: out_i = a b; 3'b001: out_i = a^b; default: out_i = 2'bx; endcase // Less efficient. always @ (opcode) case (opcode) 3'b111; assign out_i = a & b; 3'b011: assign out_i = a b; 3'b001: assign out_i = a^b; default: assign out_i = 2'bx; endcase // Preferred Megjegyzés: a és b implicit módon jelenik meg az esemény vezérlő kifejezésben. MEGJEGYZÉS: Ne keverjük a PCA és a procedurális értékadást ugyanazon változóra. MEGJEGYZÉS: A kombinációs logikát modellező viselkedési leírásnak, blokknak eseményvezérlő kifejezést mindenképpen kell tartalmaznia. 53
PÉLDA NEM TELJES 'case' UTASÍTÁSRA always @( sel_a or sel_b or data_a or data_b) case ({sel_a, sel_b}) 2'b10: y_out = data_a; 2'b01: y_out = data_b; endcase A megvalósítás egy latch-et tartalmaz, amelyet nem az eseményvezérlő kifejezés, hanem a case kifejezés két kiválasztott kombinációja engedélyez csak. data_b sel_a sel_b data_a En Latch y_out A latch engedélyezése a case két feltételének ({sel_a, sel_b} == 2'b10) és ({sel_a, sel_b} == 2'b01) VAGY kapcsolatából származik. 54
NEM TELJES FELTÉTELES 'if' UTASÍTÁS module incomplete_and (y, a1, a2); input a1, a2; output y; reg y; always @ (a1 or a2) begin if (a1 && a2) y = 1; end endmodule MEGJEGYZÉS: Az eredmény az első teljesülés után konstans y=1. 55
A DEFAULT ÉRTÉKEK KEZELÉSE A tisztán kombinációs case utasításokban a szimuláció és szintézis eredménye azonos lesz, ha a default értékadások 0 vagy 1 értékekre vonatkoznak. A szimuláció eredménye eltérő lehet, ha a default értékadás 'x' értéket használ. A casex és casez utasítások normál case utasításokra konvertálódnak és a "don t care" bitek az összehasonlításban nem szerepelnek. Az elsődleges bemeneteken keletkező "don t care" feltételek a szintézis során érvényesek maradnak. 56
LOGIKAI KAPUK SZINTÉZISE A logikai kapukkal definiált hálózatokat logikai egyenletekre fordítja. A logikai egyenleteket optimalizálja. Az optimalizált logikai egyenleteket a könyvtári cellákkal realizálja. A komplex viselkedési funkciók, melyeket kapukkal modelleztünk, nem helyettesítődnek komplex könyvtári modulokkal (pl. összeadó, szorzó) A felhasználói interfész megengedi a kapu szintű modellek megőrzését a szintézis során. 57
PÉLDA A LOGIKAI OPTIMALIZÁCIÓRA module boole_opt (y_out1, y_out2, a, b, c, d, e); input a, b, c, d, e; output y_out1, y_out2; and (y1, a, c); and (y2, a, d); and (y3, a, e); or (y4, y1, y2); or (y_out1, y3, y4); and (y5, b, c); and (y6, b, d); and (y7, b, e); or (y8, y5, y6); or (y_out2, y7, y8); endmodule 58
OPTIMALIZÁLÁS ELŐTTI KAPU SZINTŰ MODELL e a y_out1 y_out2 b c d 59
OPTIMALIZÁLT ÉS KAPUKKAL REALIZÁLT VERZIÓ c d e y_out1 a b y_out2 60
KOMBINÁCIÓS FELHASZNÁLÓ ÁLTAL DEFINIÁLT PRIMITÍV SZINTÉZISE Minden kombinációs UDP szintetizálható. A táblázatok előírásait logikai egyenletekké alakítja, optimalizálja és leképezi a könyvtári cellákra. A szintézis eszközök elhanyagolják az 'x' táblázat bejegyzéseket (pesszimista feltételezés) A '?' táblázat bejegyzéseket don t care -ként kezeli és ezt az optimalizálás során ki is használja. A szintézis utáni szimuláció eredménye eltérő lehet a szintézis előtti szimuláció eredményétől. 61
PÉLDA UDP SZINTÉZISE primitive boolean_eqs (y, a, b, c, d); output y; input a, b, c, d; table // Inputs Output // a b c d y 0 0 0 0 : 0 ; 0 0 1 0 : 0 ; 0 0 0 1 : 1 ; 0 1 0 0 : 0 ; 1 1 0 0 : 1 ; 1 0 1 0 : 1 ; 1 0 0 1 : 0 ; endtable endprimitive a b c d Combinational UDP y 62
PÉLDA ENKÓDER SZINTÉZISÉRE module encoder (Data, Code); 8 3 input [7:0] Data; Data[7:0] encoder Code[2:0] output [2:0] Code; reg [2:0] Code; always @ (Data) begin if (Data == 8 b00000001) Code = 0; else if (Data == 8 b00000010) Code = 1; else if (Data == 8 b00000100) Code = 2; else if (Data == 8 b00001000) Code = 3; else if (Data == 8 b00010000) Code = 4; else if (Data == 8 b00100000) Code = 5; else if (Data == 8 b01000000) Code = 6; else if (Data == 8 b10000000) Code = 7; else always @ (Data) case (Data) 8 b00000001 : Code = 0; 8 b00000010 : Code = 1; 8 b00000100 : Code = 2; 8 b00001000 : Code = 3; 8 b00010000 : Code = 4; 8 b00100000 : Code = 5; 8 b01000000 : Code = 6; 8 b10000000 : Code = 7; Code = 3 bx; default : Code = 3 bx; end endmodule endcase endmodule FELTÉTELEZÉS: A működés során csak a jelzett szavak fordulnak elő. A default értékadás ezért kötelező, a nem kívánt extra latch-ek szintézisét akadályozza meg. A szintézis során ezek "don t care" bejegyzésekként kezelődnek. 63
PÉLDA PRIORITÁS ENKÓDER SZINTÉZISÉRE module priority (Data, Code, valid_data); input [7:0] Data; output [2:0] Code; output valid_data; reg [2:0] Code; assign valid_data = Data; // red. VAGY Data[7:0] 8 priority 3 Code[2:0] valid_data always @ (Data) begin if (Data[7]) Code = 7; else if (Data[6]) Code = 6; else if (Data[5]) Code = 5; else if (Data[4]) Code = 4; else if (Data[3]) Code = 3; else if (Data[2]) Code = 2; else if (Data[1]) Code = 1; else if (Data[0]) Code = 0; else Code = 3 bx; end endmodule always @ (Data) casex (Data) 8 b1xxxxxxx : Code = 7; 8 b01xxxxxx : Code = 6; 8 b001xxxxx : Code = 5; 8 b0001xxxx : Code = 4; 8 b00001xxx : Code = 3; 8 b000001xx : Code = 2; 8 b0000001x : Code = 1; 8 b00000001 : Code = 0; default : Code = 3 bx; endcase endmodule 64
PÉLDA DEKÓDER SZINTÉZISÉRE module decoder (Code, Data); output [7:0] Data; input [2:0] Code; reg [7:0] Data; Code[2:0] 3 decoder 8 Data[7:0] always @ (Code) begin if (Code == 0) Data = 8 b00000001; else if (Code == 1) Data = 8 b00000010; else if (Code == 2) Data = 8 b00000100; else if (Code == 3) Data = 8 b00001000; else if (Code == 4) Data = 8 b00010000; else if (Code == 5) Data = 8 b00100000; else if (Code == 6) Data = 8 b01000000; else if (Code == 7) Data = 8 b10000000; else Data = 8 bx; end endmodule always @ (Code) case (Code) 0 : Data = 8 b00000001; 1 : Data = 8 b00000010; 2 : Data = 8 b00000100; 3 : Data = 8 b00001000; 4 : Data = 8 b00010000; 5 : Data = 8 b00100000; 6 : Data = 8 b01000000; 7 : Data = 8 b10000000; default: Data = 8 bx; endcase endmodule 65
ÖSSZEADÓK SZINTÉZISE A kapukkal modellezett összeadókat (tehát a hierarchikus modulokból és primitívekből felépített egységeket) az eszközök nem szintetizálják a könyvtári összeadó cellákra. A megfelelő művelettel definiált összeadókat, kivonókat és komparátorokat a szintézerek a könyvtári elemek komplex celláira képezi le. assign accum_out = data_a + accum; Ha a könyvtár nem tartalmaz összeadót vagy kivonót, az eszköz generálja a megfelelő logikai egyenleteket. 66
ÖSSZEADÓK SZINTÉZISE module adder_9 (add_out, add_a_in, add_b_in); input [8:0] add_a_in, add_b_in; output [9:0] add_out; assign add_out = add_a_in + add_b_in; endmodule 67
ERŐFORRÁS MEGOSZTÁS Az erőforrások a feltételes operátorok egymást kölcsönösen kizáró ágai között megoszthatók. Az erőforrás megosztás opcióként vezérelhető a felhasználói interfészen keresztül (pl. complex operator constraint ) PÉLDA - MEGOSZTÁS assign y_out = sel? data_a + accum : data_a + data_b; A szintézis eredménye multiplexelt adat utak és megosztott összeadó. Megosztás nélkül két összeadót generálnak az eszközök. 68