Upload
vuongxuyen
View
236
Download
3
Embed Size (px)
Citation preview
PROJEKTOVANJE LOGI ČKIH SISTEMA
Uvod u Verilog HDLUvod u Verilog HDL
Vanr. prof. dr. Lejla Banjanović-Mehmedović
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
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
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
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
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;
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
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
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
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
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
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
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
Primjer usporedbe VHDL i Verilog
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
Primjer usporedbe VHDL i Verilog
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
Primjer usporedbe VHDL i Verilog
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
Primjer usporedbe VHDL i Verilog
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
Uvod u VerilogUvod u Verilog
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
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
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
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
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
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
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
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
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
Operatori
• Aritmetički operatori: + , -, *, /, %(moduo)• Relacioni operatori: ==, !=, <, <=, >, >=• Ulančavanje { } zagrade se koriste za promjenu
prioriteta.prioriteta.
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
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
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
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
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
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
Primitive Veriloga
• Bazni logički gejtovi– and– or– not– buf– buf– xor– nand– nor– xnor
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
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
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
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
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
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
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
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
Strukturna specifikacija logičkih krugova (Gate level)
• Na nivou gejtova:
• nand, nor,...
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
Strukturna specifikacija logičkih krugova (Gate level)
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
Strukturna specifikacija logičkih krugova (Gate level)
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
Strukturna specifikacija logičkih krugova (Gate level)
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
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
Kontinualno pridruživanje
• Primjer 1:
• Primjer 2:• Primjer 2:
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
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
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
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
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
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
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
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:
• 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
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
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.
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
For iskaz� Korištenje for iskaza:
PLS 6 Copyright: Lejla Banjanovic-Mehmedovic
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
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
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
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
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