62
PROJEKTOVANJE LOGIČKIH SISTEMA Uvod u Verilog HDL Uvod u Verilog HDL Vanr. prof. dr. Lejla Banjanović-Mehmedović PLS 6 Copyright: Lejla Banjanovic- Mehmedovic

Osnovna kombinaciona kola

Embed Size (px)

Citation preview

Page 1: Osnovna kombinaciona kola

PROJEKTOVANJE LOGI ČKIH SISTEMA

Uvod u Verilog HDLUvod u Verilog HDL

Vanr. prof. dr. Lejla Banjanović-Mehmedović

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 2: Osnovna kombinaciona kola

Sadržaj izlaganja

• Uvod u hardverske programske jezike (HDL)• Uvod u Verilog

– Tipovi Verilog kodiranja– Osnovni elementi – Operatori– Operatori– Ključne riječi– Moduli– Kontinualna i procesna pridruživanja– Vremenska kašnjenja– Kontrolne konstrukcije– Forme funkcije i taska

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 3: Osnovna kombinaciona kola

HDL

• Opis ponašanja i strukture sistema elektroničkih digitalnih kola - uz pomoć HDL opisnog jezika (Hardware Description Language)

• Virtualno svaki čip (FPGA, ASIC, ...) je dizajniran korištenjem jednog od aktuelnih hardverskih jezika:korištenjem jednog od aktuelnih hardverskih jezika:– VHDL– Verilog– SystemVerilog

• Razlikuju se od jezika za programiranje softwara, jer uključuju vrijeme propagacije i snagu signala.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 4: Osnovna kombinaciona kola

VHDL• VHSIC Hardware Description Language.

– VHSIC (Very High Speed Integrated Circuit)• 1981 Razvijen u U.S. Department of Defense

– 1986 prava data IEEE– 1987 Postao standard– 1987 Postao standard– 1993 Revidiran standard kakvog poznajemo (VHDL

1076-1993)– IEEE 1076-2008

• VHDL – poput ADA jezika, u konceptu i sintaksi, nije kao C, neophodno dodatno konvertovanje tipova podatka.

• Koristi top-down pristup za particioni dizajn u male blokove (‘components’)

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 5: Osnovna kombinaciona kola

Jednostavan VHDL kod

reg1: process (rst, clk)begin

if rst = '1' thenq_reg <= (others => '0');q_i <= (others => '0');

elsif rising_edge(clk) thenif s_l = '1' then

q_i (0) <= q_i (7);

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

q_i (0) <= q_i (7);loop1: for i in 6 downto 0

loopq_i(i + 1) <= q_i(i);

end loop loop1;q_reg <= y;

elseq_i <= q_reg;q_reg <= y;

end if;end if;

end process reg1;

Page 6: Osnovna kombinaciona kola

Verilog

• Razvijen od strane Gateway Design Automation (1980)– 1989, usvojen od strane Cadence Design,

koji ga je učinio javnim 1990– Postao standard 1995 u okviru IEEE (Std

1364)– IEEE 1364-2005

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 7: Osnovna kombinaciona kola

Verilog

• Verilog – poput C programskog jezika.• Verilog ima samo jedan gradivi blok

– Modul: moduli su povezani kroz portove slično kao kod VHDLVHDL

– Obično je samo jedan modul po fajlu.– Moduli mogu biti specificirani strukturalno ili ponašajno:

• Strukturalna specifikacija definiše hijerarhijskuinterkonekciju submodula

• Ponašajna specifikacija definiše ponašanje digitalnog sistema.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 8: Osnovna kombinaciona kola

Jednostavan Verilog kod

• always @(posedge CLK or posedge RST)begin

if (RST) beginq_reg = 0; Q = 0;

end else if (S_L) beginQ[7:0] = {Q[6:0],Q[7]};q_reg = Y;q_reg = Y;

end else beginQ = q_reg; q_reg = Y;

endend

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 9: Osnovna kombinaciona kola

SystemVerilog

• Hibridni jezik - kombinuje HDLs i Verilog i objektno-orjentisani programski pristup.

• SystemVerilog razvijen da obezbjedi evolucionu putanju od VHDL i Verilog da bi podržao složeno projektovanje vrlo kompleksnih sistemavrlo kompleksnih sistema

• Standard: IEEE 1800-2012

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 10: Osnovna kombinaciona kola

Jednostavan SystemVerilog kod

• property p_push_error;@ (posedge clk)

not (b_if.push && b_if.full && !b_if.pop);endproperty : p_push_errorap_push_error_1 : assert property (p_push_error);

property p_pop_error;@ (posedge clk)

not (b_if.pop && b_if.empty);not (b_if.pop && b_if.empty);endproperty : p_pop_errorap_pop_error_1 : assert property (p_pop_error);

always_ff @ (posedge clk) beginb_if.error <= (b_if.pop && b_if.empty) || (b_if.push && b_if.full && !b_if.pop);

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 11: Osnovna kombinaciona kola

Sličnosti

• Ovi jezici usmjeravaju dizajnere od detalja na niskom nivou do mnogo viših nivoa abstrakcije.

• Simulacija i sinteza - glavni alati za operiranje VHDL iVerilog.Verilog.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 12: Osnovna kombinaciona kola

Razlike

• Nema mnogo razlika shodno mogućnostima svakog ponaosob.

• VDHL – zbog strukture otkriva greške rano još u procesu dizajna; determinističan

• Verilog – omogućava inžinjerima brzo pisanje modela.• Verilog – omogućava inžinjerima brzo pisanje modela.• SystemVerilog – pokušava ujediniti najbolje

karakteristike oba, uključujući testove i verifikacijske tehnike.

• Izbor baziran na:– personalnim preferencama, raspoloživosti alata i komercijalnim

efektima.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 13: Osnovna kombinaciona kola

Primjer usporedbe VHDL i Verilog

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 14: Osnovna kombinaciona kola

Primjer usporedbe VHDL i Verilog

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 15: Osnovna kombinaciona kola

Primjer usporedbe VHDL i Verilog

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 16: Osnovna kombinaciona kola

Primjer usporedbe VHDL i Verilog

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 17: Osnovna kombinaciona kola

Uvod u VerilogUvod u Verilog

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 18: Osnovna kombinaciona kola

Verilog

• Verilog - HDL- hardverski programski jezik za projektovanje digitalnih sistema na različitim nivoima apstrakcije:– Behavioral Level– Register-Transfer Level– Register-Transfer Level– Gate Level

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 19: Osnovna kombinaciona kola

Ponašajna apstrakcija• Kod sličan C programskom jeziku; svaki algoritam je

sekvencijalan, tj. sastoji se od niza instrukcija koje se izvršavaju jedna za drugom.

• Verilog opisuje sistem konkurentnim algoritmima (Behavioral), primjer skevencijalnih kola - u registru se dešava tranzicija pri rastućoj ili opadajućoj vrijednosti dešava tranzicija pri rastućoj ili opadajućoj vrijednosti klok signala.

• Osnovni elementi:– Functions (funkcije)– Tasks (zadaci)– Always blokovi.

• Malo strukturnih detalja (izuzev interkonekcija modula)

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 20: Osnovna kombinaciona kola

Register-Transfer Level (RTL)

• Specificira karakteristike kola pomoću niza operacija i transfera podataka između registara.

• Koristi se tačno definisan sat (RTL projektovanjesadrži tačno definisano izvršavanje operacija u sadrži tačno definisano izvršavanje operacija u određenom trenutku).

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 21: Osnovna kombinaciona kola

Gate Level• U sklopu logičkog dizajna, karakteristike sistema su

opisane logičkim linkovima i vremenskim odredbama.� Interkonekcija jednostavnih komponenti � Potpuno struktuiran

• Svi signali su diskretni (uzimaju vrijednosti iz diskretnog • Svi signali su diskretni (uzimaju vrijednosti iz diskretnog skupa logičkih vrijednosti:– '0': zero (logička nula) ili false (ground), – '1': one (logička jedinica) ili true– 'X': nepoznata logička vrijednost, – 'Z' : vrijednost visoke impedance (unconnected, tri-state)

• Operacije koje se mogu koristiti su: – AND, OR, NOT.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 22: Osnovna kombinaciona kola

Leksička pravila

• Leksička pravila Verilog-a su slična pravilima C++ programskog jezika:– Ključne riječi se pišu malim slovima. – Verilog razlikuje mala i velika slova.– Imena varijabli mogu sadržavati bilo koju sekvencu – Imena varijabli mogu sadržavati bilo koju sekvencu

slova, cifara, znakove ‘$’ i _.– Ista pravila vrijede i za identifikatore (imenuju objekte

poput modula ili registara). – Imena varijabli i identifikatori ne mogu početi sa ‘$’,

ne mogu u sebi imati ‘-‘, zagrade ili ‘#’; mogu početi sa slovom ili ‘_’; maksimalna dužina 1024 karaktera.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 23: Osnovna kombinaciona kola

Brojevi u Verilogu

<veličina>’<brojni sistem> <vrijednost>

Brojbita

Binary → b ili BOctal → o ili O

uzastopni chars 0-f, x, z

– 8’h ax = 1010xxxx– 12’o 3zx7 = 011zzzxxx111

bita Octal → o ili ODecimal → d ili DHexadecimal → h ili H

0-f, x, z

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 24: Osnovna kombinaciona kola

Elementi Veriloga – tipovi podataka• Dva osnovna tipa podataka: net (wire –žice) i regis tri (reg).• Nets

– Nets – fizičke konekcije između uređaja, ne čuva nikakvu vrijednost

– Mnogi tipovi nets, fokus na wire.• Deklaracija net

wire [<range>] <net_name>;Opseg specificiran kao [MSb:LSb]. Default : širina 1 bitOpseg specificiran kao [MSb:LSb]. Default : širina 1 bit

• Registri– Predstavlja varijablu, implicitno storiranje – drže vrijednost dok

se nova vrijednost ne pridruži.– Tip registra je određen sa reg.

• Deklaracija registerreg [<range>] <reg_name>;– ‘Reg’ i ‘Wire’ mogu imati sljedeće vrijednosti: '0‘, '1’, 'X' i 'Z‘

• Na početku simulacije ‘reg’ varijabla je inicijalizirana na x, a varijabla ‘wire’ na z.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 25: Osnovna kombinaciona kola

Elementi Veriloga – tipovi podataka• Reg i wire varijable su po default-u skalarne (npr. jedan bit), ali ih

možemo definisati i kao niz bita:– Deklaracija 4 bit wire, indeks starta od 0:

wire [3:0] w;– Deklaracija 8 bit registra:

reg [7:0] r;reg [7:0] r;– Deklaracija 32 elementa memorije 8 bita širine:

reg [7:0] mem [0:31]– Ekstrakcija određenih bita:

r[5:2]• logic se može koristiti umjesto reg ili wire• Postoje i neke druge varijable: integer, real i time.• Parameters nisu varijable, već su constante: parameter foo = 42

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 26: Osnovna kombinaciona kola

Operatori

• Aritmetički operatori: + , -, *, /, %(moduo)• Relacioni operatori: ==, !=, <, <=, >, >=• Ulančavanje { } zagrade se koriste za promjenu

prioriteta.prioriteta.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 27: Osnovna kombinaciona kola

Logički operatori

• && → logički AND• || → logički OR• ! → logički NOT

• Operandi evaluirani na bit vrijednost: 0, 1 ili x• Rezultat je bit vrijednost: 0, 1 ili x• Rezultat je bit vrijednost: 0, 1 ili x

A = 1; A && B → 1 && 0 → 0

B = 0; A || !B → 1 || 1 → 1

C = x; C || B → x || 0 → x

ali C&&B=0

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 28: Osnovna kombinaciona kola

Binarni operatori

• & binarni AND• | binarni OR• ~ binarni NOT

binarni XOR• ^ binarni XOR

• ~& binarni NAND• ~| binarni NOR• ~^ ili ^~ binarni NOT XOR

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 29: Osnovna kombinaciona kola

Binarni operatori

c = ~a; c = a & b;

• a = 4’b1010;

b = 4’b1100;

Unarni aritmeti čki operator; mjenja znak operanda

• a = 4’b1010;

b = 2’b11;

c = a ^ b;

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 30: Osnovna kombinaciona kola

Operatori pomjeranja i uslovni operator

• >> šift u desno (lijeve bite popunjava nulama)

• << šift u lijevo (desni biti se popunjavaju nulama)

• a = 4’b1010;d = a >> 2;// d = 0010,c = a << 1;// c = 0100

• uslovni_izraz ? tačno : pogrešno• uslovni_izraz ? tačno : pogrešno

A

BY

sel

Y = (sel)? A : B;0

1

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 31: Osnovna kombinaciona kola

Ostali operatori

• === jednakost; binarno se porede vrijednosti x i z. Svi biti moraju biti isti da bi bila zadovoljena jednakost. Vraća TRUE ili FALSE.

• !== nejednakost vraća TRUE ili FALSE.• { , } spajanje; spaja bite koji su navedeni između • { , } spajanje; spaja bite koji su navedeni između

zareza. – {A[0], B[1:7]} spaja nulti bit od A sa bitima od 1 do 7 od B.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 32: Osnovna kombinaciona kola

Primitive Veriloga

• Bazni logički gejtovi– and– or– not– buf– buf– xor– nand– nor– xnor

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 33: Osnovna kombinaciona kola

Verilog ključne riječi

• Sve su definisane malim slovima• Primjeri:

– module, endmodule– input, output, inout– reg, integer, real, time– reg, integer, real, time– not, and, nand, or, nor, xor– parameter– begin, end– fork, join– specify, endspecify

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 34: Osnovna kombinaciona kola

Moduli

• Logički krugovi su specificirani u formi modula, koji sadrži iskaze koji definišu krugove.

• Modul može imati inputs i outputs, koji se odnose na portove. odnose na portove.

• Port – uobičajeni termin koji se odnosi na ulazne i izlazne konekcije elektronskih krugova.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 35: Osnovna kombinaciona kola

Moduli• module – fundamentalni blok za Verilog dizajn; slični

procedurama ili funkcijama u drugim programskim jezicima.• Ne može se pozvati, već se s njim pokreće izvršenje. Unutar

jednog modula možemo postaviti druge module, ali ne i deklarisati druge module (ne vrijedi princip ugnježdenja)

• endmodule – kraj modula• endmodule – kraj modula• Deklaracija modula

• module module_name (module_port, module_port, …);<deklaracije><module items>

endmodule

• Primjer:module full_adder (A, B, c_in, c_out, S);

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 36: Osnovna kombinaciona kola

Moduli• <module_port> - lista portova koji omogućavaju vezu sa

drugim modulima.• Svaki port mora biti ekspicitno deklarisan kao input (tipa

wire), output (tipa reg ili wire)ili inout (tipa wire). – reg ne može biti input ili inout port, ne možemo povezati dva

registra jer oni mogu sadržavati različite vrijednosti.

• Module items: mogu biti initial i always konstrukcije:– initial određuje događaje koji se dese samo na početku (samo

jednom); always aktivnosti se dešavaju sve dok je uslov, ako je zadan, ispunjen.

• Svaki modul se mora završiti ključnom riječi endmodule

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

initial begin clk = 0; reset = 0; req_0 = 0; req_1 = 0;

end

Page 37: Osnovna kombinaciona kola

Moduli

• Ulazna deklaracija• Skalar

• input lista ulaznih identifikatora;

• Primjer: input A, B, c_in;

• Vektor• Vektor• input[ range] lista ulaznih identifikatora;

• Primjer: input[15:0] A, B, data;

• Izlazna deklaracija• Skalar primjer : output c_out, OV, MINUS;

• Vektor primjer : output[7:0] ACC, REG_IN, data_out;

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 38: Osnovna kombinaciona kola

Moduli

f

in1

in2

out1

out2my_module

module my_module(out1, .., inN);

output out1, .., outM;

input in1, .., inN;

.. // deklara cijefinN outM

.. // deklara cije

.. // opis f (možda

.. // sekvencijalan)

endmodule

Sve što je napisano u Verilogu mora biti unutar modulaizuzev: kompajlerskih direktiva

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 39: Osnovna kombinaciona kola

Hijerarhijski dizajn

modulGornjimodul

Podmodul 1 Podmodul 2

Potpuni sabirač

Primjer

Podmodul 1 Podmodul 2

3Bazni modul 32Bazni modul 21Bazni modul 1

Polu-sabirač Polu-sabirač

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 40: Osnovna kombinaciona kola

Strukturna specifikacija logičkih krugova (Gate level)

• Na nivou gejtova:

• nand, nor,...

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 41: Osnovna kombinaciona kola

Strukturna specifikacija logičkih krugova (Gate level)

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 42: Osnovna kombinaciona kola

Strukturna specifikacija logičkih krugova (Gate level)

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 43: Osnovna kombinaciona kola

Strukturna specifikacija logičkih krugova (Gate level)

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 44: Osnovna kombinaciona kola

Pridruživanja

• Kontinualna pridruživanja pridružuju vrijednosti (vektor i scalar) kad god ulazni operator promijeni vrijednost (prati wire varijabe)– Ključna riječ assign se koristi za razlikovanje proceduralnog od

kontinualnog pridruživanja. – Računanje se vrši samo kad se pozove iskaz pridruživanja. – Računanje se vrši samo kad se pozove iskaz pridruživanja.

Primjer: assign out = in1 & in2; // izlaz mora biti tipa wire

• Proceduralno pridruživanje pobuđenih vrijednosti u registre (vektor i scalar)– Dešava se unutar procedura kao always i initial– Dešava se kada se trigerovanjem dosegne tok izvršenja (poput

C programskog jezika)– Blok i Ne-Blok pridruživanja unutar procedura

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 45: Osnovna kombinaciona kola

Kontinualno pridruživanje

• Primjer 1:

• Primjer 2:• Primjer 2:

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 46: Osnovna kombinaciona kola

Kontinualno pridruživanje

• Verilog programiranje svih gate-ova:

• module gates(a, b, y1, y2, y3, y4, y5, y6, y7);• input [3:0] a, b;• output [3:0] y1, y2, y3, y4, y5, y6, y7;

• /* Sedam različitih logičkih gejtova djelujući na 4-bitnim podacima */• assign y1= ~a; // NOT gate• assign y2= a & b; // AND gate• assign y3= a | b; // OR gate• assign y4= ~(a & b); // NAND gate• assign y5= ~(a | b); // NOR gate• assign y6= a ^ b; // XOR gate• assign y7= ~(a ^ b); // XNOR gate• endmodulePLS 6 Copyright: Lejla Banjanovic-

Mehmedovic

Page 47: Osnovna kombinaciona kola

Proceduralna pridruživanja• Iskaz blok pridruživanja (= operator) djeluje kao u tradicionalnim

programskim jezicima. Cjeli iskaz je urađen prije nego što kontrola pređe na sljedeći iskaz.

• Izvršava se u redoslijedu koji je specificiran u sekvencijalnom iskazu (između begin i end).

• Korištenje blocking pridruživanja u always blokovima koja su isključivo kombinaciona isključivo kombinaciona

• Iskaz ne-blok pridruživanja (<= operator) evaluira desnu stranu tekuće vremenske jedinice i pridružuje lijevoj strani na kraju vremenske jedinice .

• Dozvoljava izvršenje svakog iskaza bez obzira na rezultate iz predhodnih sekvencijlanih iskaza.

• Nonblocking pridruživanje u always blokovima za sintezu/simulaciju sekvencijalne logike ili miksa kombinacionih i sekvencijalnih kola.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 48: Osnovna kombinaciona kola

Ponašajna specifikacija logičkih krugova

• Always aktivnosti - dešavaju se sve dok je uslov, ako je zadan, ispunjen. Ako uslov nije zadan, tada se always aktivnost dešava stalno, u petlji.

• Proceduralni iskazi u okviru always

• Ako je signalu pridružena vrijednost korištenjem proceduralnog iskaza, Verilogsyntaksa zahtjeva deklaraciju kao variable,korištenjem ključne riječi reg

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 49: Osnovna kombinaciona kola

Ponašajna logika• Opis sekvencijalnih kola koristi model ciklusa ( eng. behavioural

model) jer model se “ponaša” na određeni način kada se desi događaj.

• Kod sekvencijalnih kola - u registru se dešava tranzicija pri rastućoj ili opadajućoj vrijednosti klok signala.

• always @ ( posedge clk ) // activates on the positive edge of clock• always @ ( posedge clk ) // activates on the positive edge of clock• begin• …..• end

• always @ ( negedge clk) // activates on the negative edge of clock.• begin• …..• endProjektovanje sistema na čipu 8

Copyright: Lejla Banjanovic-Mehmedovic

Page 50: Osnovna kombinaciona kola

Iskaz blok pridruživanja

Za kombinaciona kola:

reg y, t1, t2;always @(a or b or c or d)

beginbegint1 = a & b;t2 = c & d;y = t1 | t2;

end

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 51: Osnovna kombinaciona kola

Iskaz ne-blok pridruživanja

• Registrima se pridružuje u okviru always_ff block –a koji specificira odakle klok dolazi:

always_ff @(posedge clock)

r<=r+1;r<=r+1;

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Trigerovanje na svakoj pozitivnoj ivici kloka

Page 52: Osnovna kombinaciona kola

Iskaz ne-blok pridruživanja

• Za sekvencijalna kola:module timetest (y1,y2,a,clk);output y1,y2;input a,clk;reg y1,y2;reg y1,y2;always @(posedge clk) begin

y1 <= a;y2 <= y1;end

endmodule

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Rezultat sinteze:

Page 53: Osnovna kombinaciona kola

• Delay kontrola (#)– Izraz specificira vremensko trajanje između incijalnih

iskaza brojanja i kada se iskaz stvarno izvršava.– Delay u proceduralnom pridruživanju

• Inter-Statement Delay• Intra-Statement Delay

Vremenska kontrola bazirana na kašnjenju (Delay)

• Intra-Statement Delay– Na primjer:

• Inter-Statement Delay

#10 A = A + 1;• Intra-Statement Delay

A = #10 A + 1;

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 54: Osnovna kombinaciona kola

Kontrolne konstrukcije u Verilogu

• Prilagođene izvršavanju na hardveru:– If-else iskaz se koristi kada se na osnovu kriterija vrši

izbor dijela koda koji će se izvršavati.– ‘Case’ iskaz se koristi kada treba provjeriti vrijednost

jedne varijable. jedne varijable. – ‘For loop’ iskaz - izvršava dio koda tačno određen

broj puta.– ‘While’ iskaz - izvršava određeni dio koda sve dok je

zadani uslov tačan.– Repeat iskaz ponavlja neke izraze određeni broj

puta.

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 55: Osnovna kombinaciona kola

If-else iskaz

if (expr1)true_stmt1;

else if (expr2)true_stmt2;

..else

Primjer: 4-to-1 mux:module mux4_1(out, in, sel);output out;input [3:0] in;input [1:0] sel;

reg out;wire [3:0] in;wire [1:0] sel;else

def_stmt;

wire [1:0] sel;

always @(in or sel)if (sel == 0)

out = in[0];else if (sel == 1)

out = in[1];else if (sel == 2)

out = in[2];else

out = in[3];endmodule

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Mora se koristiti ‘reg’ deklaracija ako jesignal pridružen iz alwaysbloka.

Proces trigerovan na bilo koju promjenu

signala in ili sel

Blok pridruživanje.

Page 56: Osnovna kombinaciona kola

Case iskaz

case (expr)

item_1, .., item_n: stmt1;item_n+1, .., item_m: stmt2;..

Primjer:4-to-1 mux:module mux4_1(out, in, sel);output out;input [3:0] in;input [1:0] sel;

reg out;wire [3:0] in;..

default: def_stmt;

endcase

wire [3:0] in;wire [1:0] sel;

always @(in or sel)case (sel)0: out = in[0];1: out = in[1];2: out = in[2];3: out = in[3];endcase

endmodule

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 57: Osnovna kombinaciona kola

For iskaz� Korištenje for iskaza:

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 58: Osnovna kombinaciona kola

While iskaz

• Primjer korištenja while iskaza za brojanje logičkih vrijednosti:

• begin :count1s reg [7:0] tempreg; count = 0; count = 0; tempreg = rega; while(tempreg)

begin if (tempreg[0]) count = count + 1; tempreg = tempreg >> 1;

end end

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 59: Osnovna kombinaciona kola

Repeat iskaz

• Primjer korištenja repeat iskaza:

repeat (16) begin

$display ("Current value of i is %d", i); i = i + 1;

end

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 60: Osnovna kombinaciona kola

Usporedba task i function formi

• Function i task- za postavljanje istih djelova koda, koji se ponavljaju.

• Funkcije i taskovi imaju istu semantiku; razlika je da taskovi imaju kašnjenja, dok funkcije nemaju bilo kakva kašnjenja. To znači da se funkcije koriste za modeliranje kombinacionih kola. kombinacionih kola.

• Funkcije ne mogu omogućiti task, dok task može omogućiti druge taskove i funkcije.

• Funkcija mora imati najmanje jedan ulazni argument, task može imati nijedan ili više argumenata bilo kojeg tipa.

• Funkcije mogu vraćati vrijednost, dok taskovi ne mogu.PLS 6 Copyright: Lejla Banjanovic-

Mehmedovic

Page 61: Osnovna kombinaciona kola

Forma function

function parity; input [31:0] data; integer i; begin parity = 0; for (i= 0; i < 32; i = i + 1)

begin parity = parity ^ data[i];

endend

endfunction

PLS 6 Copyright: Lejla Banjanovic-Mehmedovic

Page 62: Osnovna kombinaciona kola

Forma taskamodule this_task;

task my_task; input a, b; inout c; output d, e; reg foo1, foo2, foo3; reg foo1, foo2, foo3; begin // the set of statements performs the work of the task

c = foo1; // the assignments that initialize d = foo2; // the results variables e = foo3;

end endtask

endmodulePLS 6 Copyright: Lejla Banjanovic-

Mehmedovic