2009 november 1 Verilog Digital System Design Copyright Z. Navabi, 2006 Verilog Digital System Design Z. Navabi, McGraw-Hill, Fejezet Register Transfer szintű tervezés Verilog nyelven Fordította és kiegészítette: Végh János
2009 november 2 Verilog Digital System Design Copyright Z. Navabi, 2006 Register Transfer szintű tervezés Verilog nyelven 2.1 RT szintű tervezés Vezérlés/adat felosztás Adat partíció Vezérlés partíció 2.2 A Verilog elemei Hardver modulok Primitív példányok Értékadó utasítások Feltételek kifejezések Procedurális blokkok Modul példányok készítése
2009 november 3 Verilog Digital System Design Copyright Z. Navabi, 2006 Register Transfer szintű tervezés Verilog nyelven 2.3 Komponens leírása a Verilogban Adat komponensek Vezérlők 2.4 Testbench-ek Egy egyszerű tesztelő Taszkok és függvények 2.5 Összefoglalás
2009 november 4 Verilog Digital System Design Copyright Z. Navabi, 2006 RT szintű tervezés RT szintű tervezés: A terv magas szintű leírásának elkészítése Felosztás Architektúra készítése Busz megtervezése Az architektúra különböző komponenseinek implementálása Az RT szintű tervezés lépései: Vezérlés/Adat felosztás Adat partíció tervezése Vezérlési partíció tervezése
2009 november 5 Verilog Digital System Design Copyright Z. Navabi, 2006 RT szintű tervezés RT szintű tervezés Vezérlés/adat felosztás AdatpartícióVezérléspartíció
2009 november 6 Verilog Digital System Design Copyright Z. Navabi, 2006 Vezérlés/adat felosztás Vezérlés/adat felosztás
2009 november 7 Verilog Digital System Design Copyright Z. Navabi, 2006 Vezérlés/adat felosztás
2009 november 8 Verilog Digital System Design Copyright Z. Navabi, 2006 Adat rész RT szintű tervezés Vezérlés/adat felosztás Data Part VezérléspartícióAdatpartíció
2009 november 9 Verilog Digital System Design Copyright Z. Navabi, 2006 Adat partíció
2009 november 10 Verilog Digital System Design Copyright Z. Navabi, 2006 Adat partíció module DataPath (DataInput, DataOutput, Flags, Opcodes, ControlSignals); input [15:0] DataInputs; output [15:0] DataOutputs; output Flags,...; output Opcodes,...; input ControlSignals,...; // instantiation of data components //... // interconnection of data components // bussing specification endmodule Adatút modul : Az adat rész bemenő jelei, amelyeket az adat komponensek és a buszok fogadnak Vezérlő jelek: Az adat rész bemenő jelei, amelyeket az adat komponensek és a buszok fogadnak Kimenő jelek: a vezérlő részhez mennek, ezek lesznek az adatok jelző- és állapotbitjei Busz vezérlőjelek: Ezek választják ki az adatok forrását és az egyik adatkomponenstől a másikhoz vezető huzalt
2009 november 11 Verilog Digital System Design Copyright Z. Navabi, 2006 Adat partíció module DataComponent (DataIn, DataOut, ControlSignals); input [7:0] DataIn; output [7:0] DataOut; input ControlSignals; // Depending on ControlSignals // Operate on DataIn and // Produce DataOut endmodule Az adatkomponens Verilog kódjának részlete Adat komponens: Azt mutatja, hogy a komponens hogyan használja bemenő jeleit, hogy különböző műveleteket végezzen bemenő adatain
2009 november 12 Verilog Digital System Design Copyright Z. Navabi, 2006 Vezérlés rész RT szintű tervezés Vezérlés/adat felosztás Adatpartíció Control Part Vezérléspartíció
2009 november 13 Verilog Digital System Design Copyright Z. Navabi, 2006 Vezérlés partíció Egy vagy több állapotgépből áll, amelyek az áramkör állapotát tárolják. Döntéseket hoz arról, hogy mikor és milyen vezérlőjeleket bocsát ki, az állapottól függően.
2009 november 14 Verilog Digital System Design Copyright Z. Navabi, 2006 Vezérlés partíció module ControlUnit (Flags, Opcodes, ExternalControls, ControlSignals); input Flags,...; input Opcodes,...; input ExternalControls,...; output ControlSignals; // Based on inputs decide : // What control signals to issue, // and what next state to take endmodule Egy vezérlő blokkvázlata Fogadja az adat partícióból származó vezérlőjeleket
2009 november 15 Verilog Digital System Design Copyright Z. Navabi, 2006 A Verilog elemei Csak a Verilog alapelemeit tárgyaljuk, amelyekkel egy hardver modult már le tudunk írni.
2009 november 16 Verilog Digital System Design Copyright Z. Navabi, 2006 A Verilog elemei Hardver modulok Modulpéldányok Primitív példányokÉrtékadóutasítások Feltételeskifejezés Procedurális blokkok
2009 november 17 Verilog Digital System Design Copyright Z. Navabi, 2006 Hardver modulok Hardver modulok
2009 november 18 Verilog Digital System Design Copyright Z. Navabi, 2006 Hardver modulok module module-name List of ports; Declarations... Functional specification of module...endmodule Modul specifikáció module kulcsszó module : A Verilog fő komponense endmodule kulcsszó Itt deklaráljuk a változókat, vezetékeket és a modul paramétereit.
2009 november 19 Verilog Digital System Design Copyright Z. Navabi, 2006 Hardver modulok A Verilogban egy modult többféleképpen is leírhatunk. Különböző absztrakciós szintű leírásoknak vagy a modul különböző részletességű funkcionalitásának felelhet meg. Egy modul különböző leírásainak nem kell pontosan ugyanúgy viselkedni és az sem követelmény, hogy valamennyi leírás helyesen írjon le egy viselkedésmódot. Megtárgyaljuk a Verilog hardver modul leírására szolgáló alapvető konstrukcióit. Bemutatunk egy rövid példát és néhány egyenértékű módot, amivel a Verilog le tudja írni.
2009 november 20 Verilog Digital System Design Copyright Z. Navabi, 2006 Primitive Instantiations Primitív példányok
2009 november 21 Verilog Digital System Design Copyright Z. Navabi, 2006 Primitív példányok Egy alap logikai kapukat tartalmazó multiplexer A logikai kapuk is ún. primitívek
2009 november 22 Verilog Digital System Design Copyright Z. Navabi, 2006 Primitív példányok module MultiplexerA (input a, b, s, output w); wire a_sel, b_sel, s_bar; not U1 (s_bar, s); and U2 (a_sel, a, s_bar); and U3 (b_sel, b, s); or U4 (w, a_sel, b_sel); endmodule Példánykészítés primitívekből Példánykészítés primitívekből
2009 november 23 Verilog Digital System Design Copyright Z. Navabi, 2006 Értékadó utasítások Értékadóutasítások
2009 november 24 Verilog Digital System Design Copyright Z. Navabi, 2006 Értékadó utasítások module MultiplexerB (input a, b, s, output w); assign w = (a & ~s) | (b & s); endmodule Értékadó utasítás és logikai kifejezés w olyamatosan megkapja a jobb oldali kifejezés értékét w f olyamatosan megkapja a jobb oldali kifejezés értékét Logikai kifejezést használunk a logika leírására
2009 november 25 Verilog Digital System Design Copyright Z. Navabi, 2006 Feltételes kifejezés Feltételeskifejezés
2009 november 26 Verilog Digital System Design Copyright Z. Navabi, 2006 Feltételes kifejezés module MultiplexerC (input a, b, s, output w); assign w = s ? b : a; endmodule Értékadó utasítás és feltételes operátor Akkor használjuk, amikor egy unit által végzett művelet túl bonyolult, nem írható le logikai kifejezésekkel Nagyon hatékony komplex funkcionalitás leírására Jól használható egy viselkedés nagyon kompakt leírására
2009 november 27 Verilog Digital System Design Copyright Z. Navabi, 2006 Procedurális blokkok Procedurális blokkok
2009 november 28 Verilog Digital System Design Copyright Z. Navabi, 2006 Procedurális blokkok module MultiplexerD (input a, b, s, output w); reg w; b, s) begin if (s) w = b; else w = a; endendmodule Procedurális utasítás alwaysutasítás if-elseutasítás Akkor használjuk, amikor egy egység túl bonyolult ahhoz, hogy logikai vagy feltételes kifejezéssel írjuk le Érzékenységi lista
2009 november 29 Verilog Digital System Design Copyright Z. Navabi, 2006 Module példánykészítés Modul példányok
2009 november 30 Verilog Digital System Design Copyright Z. Navabi, 2006 Modul példányok module ANDOR (input i1, i2, i3, i4, output y); assign y = (i1 & i2) | (i3 & i4); endmodule// module MultiplexerE (input a, b, s, output w); wire s_bar; not U1 (s_bar, s); ANDOR U2 (a, s_bar, s, b, w); endmodule Modul példányok Definiáljuk az ANDOR modult ANDOR modul példányt készítünk
2009 november 31 Verilog Digital System Design Copyright Z. Navabi, 2006 Modul példányok Multiplexer készítés ANDOR használatával
2009 november 32 Verilog Digital System Design Copyright Z. Navabi, 2006 Komponens leírás Verilog nyelven Komponensleírás AdatkomponensVezérlők
2009 november 33 Verilog Digital System Design Copyright Z. Navabi, 2006 Adat komponensek Adat komponensek
2009 november 34 Verilog Digital System Design Copyright Z. Navabi, 2006Adatkomponensek Kapcsolódások MultiplexerFlip-Flop Számláló Teljes összeadó Shift-regiszter ALU Adat komponensek
2009 november 35 Verilog Digital System Design Copyright Z. Navabi, 2006Adatkomponensek Kapcsolódások MultiplexerFlip-Flop Számláló Teljes összeadó Shift-regiszter ALUMultiplexer Multiplexer
2009 november 36 Verilog Digital System Design Copyright Z. Navabi, 2006 Multiplexer `timescale 1ns/100ps module Mux8 (input sel, input [7:0] data1, data0, output [7:0] bus1); output [7:0] bus1); assign #6 bus1 = sel ? data1 : data0; endmodule Oktálil 2-t az 1-re MUX A 8-bites data0 vagy data1 bemenetet választja ki, a sel bemenetétől függően. Definiál egy 1 ns egységet és egy 100 ps pontosságot. Egy 6-ns késleltetést adunk meg a bus1– hez tartozó valamennyi értékre
2009 november 37 Verilog Digital System Design Copyright Z. Navabi, 2006Adatkomponensek Kapcsolódások MultiplexerFlip-Flop Számláló Teljes összeadó Shift-regiszter ALUFlip-Flop Flip-Flop
2009 november 38 Verilog Digital System Design Copyright Z. Navabi, 2006 Flip-Flop `timescale 1ns/100ps module Flop (reset, din, clk, qout); input reset, din, clk; output qout; reg qout; clk) begin if (reset) qout <= #8 1'b0; else qout <= #8 din; endendmodule Flipflop leírás Szinkron reset bemenet Egy reg jel képes megtartani értékét az órajel élek között Az adat partícióban flipflopokat használunk jelzőbitként és adattárolásra 8-ns késleltetés Nem-blokkoló értékadás Szoftver-szerű eljárás kódolási stílus A flipflop a clk bemenet lefutó élére aktiválódik A törzs always utasítása a clk lefutó élére hajtódik végre
2009 november 39 Verilog Digital System Design Copyright Z. Navabi, 2006Adatkomponensek Kapcsolódások MultiplexerFlip-Flop Counter Teljes összeadó Shift-Regiszter ALUSzámláló Számláló
2009 november 40 Verilog Digital System Design Copyright Z. Navabi, 2006 Számláló `timescale 1ns/100ps module Counter4 (input reset, clk, output [3:0] count); output [3:0] count); reg [3:0] count; clk) begin clk) begin if (reset) count <= #3 4'b00_00; if (reset) count <= #3 4'b00_00; else count <= #5 count + 1; else count <= #5 count + 1; end endendmodule Számláló Verilog kódja Az adat partícióban a számlálókat adattárolásra, memória elérésre vagy sorok és veremtárolók ábrázolására használjuk Egy 4-bites modulo-16 számláló Konstans definíció 4-bites regiszter Amikor count eléri a 1111 értéket, a következő felvett érték 10000
2009 november 41 Verilog Digital System Design Copyright Z. Navabi, 2006Adatkomponensek Kapcsolódások MultiplexerFlip-Flop SzámlálóFull-Adder Shift-Regiszter ALU Teljes összeadó
2009 november 42 Verilog Digital System Design Copyright Z. Navabi, 2006 Teljes összeadó `timescale 1ns/100ps module fulladder (input a, b, cin, output sum, cout); assign #5 sum = a ^ b ^ cin; assign #3 cout = (a & b)|(a & cin)|(b & cin); endmodule Teljes összeadó Verilog kódja Az adat partícióban teljes összeadókat használunk Carry-Chain összeadók építésére Kombinációs áramkör Minden változás 5 ns után történik Minden változás 3 ns után történik Minden kimenet egységes késleltetése: tPLH és tPHL
2009 november 43 Verilog Digital System Design Copyright Z. Navabi, 2006Adatkomponensek Kapcsolódások MultiplexerFlip-Flop Számláló Teljes összeadó Shift-RegisterALU Shift-Regiszter
2009 november 44 Verilog Digital System Design Copyright Z. Navabi, 2006 Shift-Regiszter `timescale 1ns/100ps module ShiftRegister8 (input sl, sr, clk, input [7:0] ParIn, input [1:0] m, output reg [7:0] ParOut); input [1:0] m, output reg [7:0] ParOut); clk) begin case (m) case (m) 0: ParOut <= ParOut; 0: ParOut <= ParOut; 1: ParOut <= {sl, ParOut [7:1]}; 1: ParOut <= {sl, ParOut [7:1]}; 2: ParOut <= {ParOut [6:0], sr}; 2: ParOut <= {ParOut [6:0], sr}; 3: ParOut <= ParIn; 3: ParOut <= ParIn; default: ParOut <= 8'bX; default: ParOut <= 8'bX; endcase endcaseendendmodule 8-bites univerzális shift regiszter Az m[1:0] bemenetek két bites számot képeznek m=0 : semmit sem csinál m=3 : a párhuzamos bemenő regiszter tartalmát tölti a regiszterbe m=1,2: balra és jobbra léptet Case utasítás 4 alternatívával és alapértelmezett értékkel
2009 november 45 Verilog Digital System Design Copyright Z. Navabi, 2006 Shift-Regiszter (folytatás) `timescale 1ns/100ps module ShiftRegister8 (input sl, sr, clk, input [7:0] ParIn, input [1:0] m, output reg [7:0] ParOut); input [1:0] m, output reg [7:0] ParOut); clk) begin case (m) case (m) 0: ParOut <= ParOut; 0: ParOut <= ParOut; 1: ParOut <= {sl, ParOut [7:1]}; 1: ParOut <= {sl, ParOut [7:1]}; 2: ParOut <= {ParOut [6:0], sr}; 2: ParOut <= {ParOut [6:0], sr}; 3: ParOut <= ParIn; 3: ParOut <= ParIn; default: ParOut <= 8'bX; default: ParOut <= 8'bX; endcase endcaseendendmodule Jobbra léptetés: Az sl értékét a ParOut bal oldalához csatoljuk Balra léptetjük ParOut értékét
2009 november 46 Verilog Digital System Design Copyright Z. Navabi, 2006Adatkomponensek Kapcsolódások MultiplexerFlip-Flop Számláló Teljes összeadó Shift-Regiszter ALUALU ALU
2009 november 47 Verilog Digital System Design Copyright Z. Navabi, 2006 ALU `timescale 1ns/100ps module ALU8 (input [7:0] left, right, input [1:0] mode, input [1:0] mode, output reg [7:0] ALUout); output reg [7:0] ALUout); right, mode) begin right, mode) begin case (mode) case (mode) 0: ALUout = left + right; 0: ALUout = left + right; 1: ALUout = left - right; 1: ALUout = left - right; 2: ALUout = left & right; 2: ALUout = left & right; 3: ALUout = left | right; 3: ALUout = left | right; default: ALUout = 8'bX; default: ALUout = 8'bX; endcase endcaseendendmodule Egy 8-bites ALU 2-bites mode bemenet választja ki a 4 funkció egyikét ÖsszeadásKivonásANDOR
2009 november 48 Verilog Digital System Design Copyright Z. Navabi, 2006 ALU (folytatás) `timescale 1ns/100ps module ALU8 (input [7:0] left, right, input [1:0] mode, input [1:0] mode, output reg [7:0] ALUout); output reg [7:0] ALUout); right, mode) begin right, mode) begin case (mode) case (mode) 0: ALUout = left + right; 0: ALUout = left + right; 1: ALUout = left - right; 1: ALUout = left - right; 2: ALUout = left & right; 2: ALUout = left & right; 3: ALUout = left | right; 3: ALUout = left | right; default: ALUout = 8'bX; default: ALUout = 8'bX; endcase endcaseendendmodule Egy 8-bites ALU ALUout deklarációja output és reg: mivel a procedurális blokkban értéket kap Blokkoló értékadások A default lehetőség csupa X-et tesz ALUOut-ba, ha a mode nem csupa 1-et és 0-t tartalmaz
2009 november 49 Verilog Digital System Design Copyright Z. Navabi, 2006Adatkomponensek Interconnection s MultiplexerFlip-Flop Számláló Teljes összeadó Shift-Regiszter ALUKapcsolódások Kapcsolódások
2009 november 50 Verilog Digital System Design Copyright Z. Navabi, 2006 Kapcsolódások MUX8 és ALU elemeket használó részleges hardver A részleges hardver például Mux8 és ALU elemből áll
2009 november 51 Verilog Digital System Design Copyright Z. Navabi, 2006 Kapcsolódások ALU8 U1 (.left(Inbus),.right(ABinput),.mode(function),.ALUout(Outbus) );.mode(function),.ALUout(Outbus) ); Mux8 U2 (.sel(select_source),.data1(Aside),.data0(Bside),.bus1 (ABinput)); Verilog példa-kód a részleges hardverre Példánykészítés ALU8 és MUX8 elemekből U1 és U2 : Példány nevek Zárójelek veszik körül a modul példányokat
2009 november 52 Verilog Digital System Design Copyright Z. Navabi, 2006 Kapcsolódások ALU8 U1 ( Inbus, ABinput, function, Outbus ); Mux8 U2 ( select_source, Aside, Bside, ABinput ); Rendezett port kapcsolatok A port kapcsolódás egy másik formája A komponens példány aktuális portjai ki vannak zárva A helyi jelek listája ugyanolyan sorrendben van, mint a kapcsolódó portok
2009 november 53 Verilog Digital System Design Copyright Z. Navabi, 2006 VezérlőkKomponensleírás AdatkomponensekControllers Vezérlők
2009 november 54 Verilog Digital System Design Copyright Z. Navabi, 2006 Vezérlők Vezérlő vázlat
2009 november 55 Verilog Digital System Design Copyright Z. Navabi, 2006 Vezérlők Vezérlő: Az adat partícióhoz van huzalozva és az adatáramlást vezérli. A vezérlő bemenetei határozzák meg annak következő állapotát és kimeneteit. Monitorozza a bemeneteket és döntést hoz arról, hogy mikor és milyen jelek hatására assertáljon. A megfelelő állapotokba való kapcsolással tárolja az áramkör történetét. Két példa illusztrálja a Verilog használatát állapotgépek leírására: Szinkronizáló Minta felismerő
2009 november 56 Verilog Digital System Design Copyright Z. Navabi, 2006 VezérlőkVezérlők SzinkronizálóMintakereső
2009 november 57 Verilog Digital System Design Copyright Z. Navabi, 2006 Szinkronizáló Vezérlők SynthesizerMintafelismerő
2009 november 58 Verilog Digital System Design Copyright Z. Navabi, 2006 Szinkronizáló adata szinkronizálása
2009 november 59 Verilog Digital System Design Copyright Z. Navabi, 2006 Szinkronizáló `timescale 1ns/100ps module Synchronizer (input clk, adata, output reg synched); output reg synched); clk) if (adata == 0) synched <= 0; else synched <= 1; endmodule Egy egyszerű szinkronizáló áramkör Ha az órajel felfutó élénél adata értéke 1, synched értéke 1 lesz és legalább egy órajel periódusra 1 értékű marad
2009 november 60 Verilog Digital System Design Copyright Z. Navabi, 2006 MintafelismerésVezérlők Szinkronizáló SequenceDetector Minta felismerő
2009 november 61 Verilog Digital System Design Copyright Z. Navabi, 2006 Mintafelismerés Állapotgép leírása Az a bemenetén az 110 mintát keresi Amikor a mintát megtalálja, a w kimenet 1 értékűvé válik és legalább egy órajel idejére 1 is marad
2009 november 62 Verilog Digital System Design Copyright Z. Navabi, 2006 Mintafelismerés Mintafelismerő állapotgép Kezdeti állapot Az állapotok neve: s0, s1, s2, s3 Az az állapot, amikor az 110 mintát felismertük. Az s3 állapot eléréséhez legalább 3 órajel periódus szükséges Mintafelismerő Moore állapotgép
2009 november 63 Verilog Digital System Design Copyright Z. Navabi, 2006 Mintafelismerés module Detector110 (input a, clk, reset, output w); parameter [1:0] s0=2'b00, s1=2'b01, s2=2'b10, s3=2'b11; reg [1:0] current; clk) begin if (reset) current = s0; if (reset) current = s0; else else case (current) case (current) s0: if (a) current <= s1; else current <= s0; s0: if (a) current <= s1; else current <= s0; s1: if (a) current <= s2; else current <= s0; s1: if (a) current <= s2; else current <= s0; s2: if (a) current <= s2; else current <= s3; s2: if (a) current <= s2; else current <= s3; s3: if (a) current <= s1; else current <= s0; s3: if (a) current <= s1; else current <= s0; endcase endcaseend assign w = (current == s3) ? 1 : 0; endmodule Az 110 mintafelismerő Verilog kódja
2009 november 64 Verilog Digital System Design Copyright Z. Navabi, 2006 Mintafelismerés module Detector110 (input a, clk, reset, output w); parameter [1:0] s0=2'b00, s1=2'b01, s2=2'b10, s3=2'b11; reg [1:0] current; clk) begin if (reset) current = s0; if (reset) current = s0; else else A 110 mintafelismerő Verilog kódja Az állapotgép viselkedési leírása A paraméter deklaráció definiálja az s0, s1, s2, s3 konstansokat Egy 2-bites regiszter
2009 november 65 Verilog Digital System Design Copyright Z. Navabi, 2006 Mintafelismerés clk) begin if (reset) current = s0; if (reset) current = s0; else else case (current) case (current) s0: if (a) current <= s1; else current <= s0; s0: if (a) current <= s1; else current <= s0; s1: if (a) current <= s2; else current <= s0; s1: if (a) current <= s2; else current <= s0; s2: if (a) current <= s2; else current <= s3; s2: if (a) current <= s2; else current <= s3; s3: if (a) current <= s1; else current <= s0; s3: if (a) current <= s1; else current <= s0; endcase endcaseend Az 110 mintafelismerő Verilog kódja Egy if-else utasítás vizsgálja a reset feltételt Ha nem 1 értékű a reset A 4 case lehetőség mindegyike az állapotgép egy állapotának felel meg
2009 november 66 Verilog Digital System Design Copyright Z. Navabi, 2006 Mintafelismerés Állapot átmenetek a megfelelő Verilog kóddal
2009 november 67 Verilog Digital System Design Copyright Z. Navabi, 2006 Mintafelismerés end assign w = (current == s3) ? 1 : 0; endmodule Az 110 mintafelismerő Verilog kódja 1 –be állítja a w kimenet értékét, amikor az állapotgép eléri az s3 állapotot Az always blokkon kívül: Kombinációs áramkör
2009 november 68 Verilog Digital System Design Copyright Z. Navabi, 2006 Testbench-ek Egy egyszerű tesztelő Taszkok ésfüggvények
2009 november 69 Verilog Digital System Design Copyright Z. Navabi, 2006 Egy egyszerű tesztelő Testbench-ek A Simple Tester Taszkok ésfüggvények Egy egyszerű tesztelő
2009 november 70 Verilog Digital System Design Copyright Z. Navabi, 2006 Egy egyszerű tesztelő `timescale 1ns/100ps module Detector110Tester; reg aa, clock, rst; wire ww; Detector110 UUT (aa, clock, rst, ww); initial begin initial begin aa = 0; clock = 0; rst = 1; end initial repeat (44) #7 clock = ~clock; initial repeat (15) #23 aa = ~aa; initial begin #31 rst = 1; #23 rst = 0; end if (ww == 1) $display ("A 1 was detected on w at time = %t", $time); endmodule A Detector110 tesztbench-e
2009 november 71 Verilog Digital System Design Copyright Z. Navabi, 2006 Egy egyszerű tesztelő `timescale 1ns/100ps module Detector110Tester; reg aa, clock, rst; wire ww; Detector110 UUT (aa, clock, rst, ww); A Detector110 tesztbench-e A module kulcsszóval kezdődik A többi leírástól eltérően, nincs be- és kimenet A bemeneteket reg-ként deklaráljuk A Detector110 modul példány készítése A kimeneteket wire-ként deklaráljuk
2009 november 72 Verilog Digital System Design Copyright Z. Navabi, 2006 Egy egyszerű tesztelő initial begin aa = 0; clock = 0; rst = 1; end initial repeat (44) #7 clock = ~clock; initial repeat (15) #23 aa = ~aa; initial begin #31 rst = 1; #23 rst = 0; end A Detector110 tesztbench-e Az initial utasítás állítja elő a bemenetekhez kapcsolt változókba az értékeket. Egy initial utasítás: szekvenciális utasítás, ami egyszer fut le és az utolsó utasítás után megáll Valamennyi initial blokk 0 időnél indul és konkurrens módon fut
2009 november 73 Verilog Digital System Design Copyright Z. Navabi, 2006 Egy egyszerű tesztelő initial begin aa = 0; clock = 0; rst = 1; end initial repeat (44) #7 clock = ~clock; initial repeat (15) #23 aa = ~aa; initial begin #31 rst = 1; #23 rst = 0; end A Detector110 tesztbench-e A bemenő jelek inicializálására 44 alkalommal ismétli a clock órajel komplementálását 7 ns késleltetéssel, periodikus jelet generálva a clock-on Az aa szintén periodikus jelet generál, de eltérő frekvenciával Vár 31 ns-ot, mielőtt 1 értéket adna az rst-nek
2009 november 74 Verilog Digital System Design Copyright Z. Navabi, 2006 Egy egyszerű tesztelő if (ww == 1) $display ("A 1 was detected on w at time = %t", $time); endmodule A Detector110 tesztbench-e Bejelenti azokat az időpontokat, amikor a ww változó 1 értéket vesz fel Az always blokk akkor ébred fel, amikor ww megváltozik Ez a megjegyzés a szimulációs környezet „console” vagy „transcript” ablakában jelenik meg Egy Verilog rendszer taszk
2009 november 75 Verilog Digital System Design Copyright Z. Navabi, 2006 Taszkok és függvények Tesztbench-ek Egy egyszerű tesztelőTasksAndFunctions Taszkok és függvények
2009 november 76 Verilog Digital System Design Copyright Z. Navabi, 2006 Taszkok és függvények Verilog taszkok és függvények: Rendszer taszkok bemeneti, kimeneti, kijelzési és időzítési feladatokra Felhasználó által definiált taszkok és függvények Taszkok: A Verilog modulon belüli almodult ábrázol A task kulcsszóval kezdődik A törzse csak olyan szekvenciális utasításokat tartalmazhat, mint az if-else és case Függvények: Hardver entitások megfeleltetésére használható Strukturált kód írására használható Alkalmazásai: logikai függvények ábrázolása, adat és kód konverzió, be- és kimeneti formátumozás
2009 november 77 Verilog Digital System Design Copyright Z. Navabi, 2006 Összefoglalás Ebben a fejezetben bemutattuk: A Verilog áttekintését és hogy a nyelv hogyan használható tervezésre és RT szintű leírás tesztelésére Az RT szintű tervezés komponenseit Olyan kis példákat, amelyek ilyen komponenseket illusztrálnak, és ezzel egyidejűleg a hardver modulok Verilog kódját Hogyan fejleszthetünk tesztbench-et Verilogban Az ebben a részben megadott leírások mind szintetizálhatók és egy- az-egyben van hardver megfelelőjük.