21
Odsjek za raunarstvo i informatiku Digitalni raunari S E M I N A R S K I R A D Verilog sa primjerima Sarajevo, juni.2004.g. Maja Vasi Irena Serna

Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

  • Upload
    others

  • View
    21

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

Odsjek za ra�unarstvo i informatiku Digitalni ra�unari

S E M I N A R S K I R A D

Verilog sa primjerima

Sarajevo, juni.2004.g. Maja Vasi� Irena Serna

Page 2: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

2

Uvod

Verilog je u po�ecima svog nastanka, oko 1984.g., kao jezik za modeliranje, bio u vlasništvu Automated Integrated Design Systems , kasnije nazvanog Gateway Design Automation Inc. U to vrijeme kompanija je bila u privatnom vlasništvu Dr. Prabhu Goel, koji je otkrio PODEM testni algoritam. Verilog HDL je dizajnirao Phil Moorby, koji je kasnije postao i glavni dizajner Verilog-XL-a . Smatra se da je Verilog nastao na temeljima najpopularnijeg u to vrijeme HDL jezika zvanog HiLo kao i sada ve� dobro poznatog programskog jezika C.

S obzirom da Verilog još tada nije bio standardiziran sve revizije koje su nastale u periodu izme�u 1984. i 1990. godine unijele su neke promjene u strukturu Veriloga. Tako je npr. Verilog simulator kontinuirano korišten u periodu od 1985. godine do 1987. Prva zna�ajna oznaka Veriloga nastala tim raznim modifikacijama je Verilog – XL, koja je predstavljala poboljšanje i uvela tzv. « XL algoritam» , vrlo efikasan metod za gate- level simulacije.

Uskoro , dizajneri su došli do zaklju�ka da bi trebalo izvršiti integraciju API-ja u jezik. Prema Yatin Trivedi , jednog od najzaslužnijih za oblikovanje Veriloga, potreba za uvo�enjem API –ja javila se sa pokušajima simulacije cijelog sistema što se sa dotadašnjim Verilogom nije moglo izvesti. Tako je ro�en PLI *.

Kao što je ve� re�eno, Verilog u po�etku nije bio standardizovan , pa je sa gotovo svakim izdanjem Gateway produkata , izašla i nova verzija Veriloga, nadopunjena ili izmjenjena. Ni pri�a oko PLI se ne razlikuje mnogo od ove. Tako su se npr. funkcije stalno mijenjale, i kao što je jedan od dizajnera Veriloga rekao, tu je bio potpuni haos.

1990. godine Cadence Design System, �iji je osnovni produkt u to vrijeme bio tzv. Thin film- procesni simulator, odlu�uje da kupi Gateway Automation System. Kao što je bio slu�aj i sa ostalim gateway produktima , Cadence je postao vlasnikom Verilog jezika i PLI-a.

Iste godine kada je kupio i Gateway, Cadenece je u�inio jedan prili�no neobi�an korak. Cadence je uvidio da ako Verilog ostane u formi «zatvorenog» jezika , tržište �e se okrenuti VHDL-u. Zato , Cadence osniva Open Verilog International (OVI) i 1991.g. prilaže dokumentaciju za Verilog Hardware Description Language pod nazivom Language Reference Manual (LRM). Glavna zada�a dana OVI-ju bila je standardizacija Veriloga i PLI-a. Taj pothvat je izvršen u dva navrata i oba puta standardi su ustanovljeni prema pravilima i uputstvima Cadence-a.

Ovo je bio doga�aj koji je «otvorio» jezik Veriloga. Dakle, oni su Verilog i PLI stavili na otvoreno tržište kao slobodni produkt što je prakti�no zna�ilo da je sada svako mogao razviti Verilog simulator i postati potencijalni rival Cadence-u.

* Verilog PLI ( Programming Language Interface ) je mehanizam za pozivanje C ili C++ funkcija iz Verilog koda.

Page 3: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

3

Uskoro je postalo jasno, da �e se pojaviti veliki broj kompanija na tržištu sa Verilogom i svaka od njih �e pokušati ono što je i Gateway svojevremeno u�inio, modifikovao Verilog za svoje potrebe. Kada je Cadence objavio LRM, nekoliko kompanija je po�elo raditi na Verilog simulatorima, tako da je 1993. godine nekoliko njih ve� bilo dostupno na tržištu. Najuspješniji od njih bio je VCS, Verilog Compiled Simulator, od kompanije Chronologic Simulation. On je predstavljao pravi kompajler, nasuprot Verilog- XL koji je bio interpreter. Kao rezultat toga vrijeme kompajliranja ostalo je isto, ali se izvršenje simulacije odvijalo mnogo brže.

IEEE Std. 1364-1995

U me�uvremenu, interesovanje za Verilog i PLI je ubzano raslo. Verilog je kao HDL pronašao više sljedbenika nego tada ve� dobro formirani i korišteni VHDL. To je bio još jedan od pokazatelja za potrebom standardizacije Veriloga. Ubrzo je rukovodstvo OVI zatražilo od IEEE da oformi radni odbor koji bi uspostavio Verilog kao djelom IEEE standarda. Taj radni odbor 1364 oformljen je sredinom 1993. godine i 14. oktobra 1993. održano je prvo zasjedanje. Standard usvojen maja 1995.godine , predstavljao je kombinaciju Verilog sintaxe i PLI-a i otada poznat kao IEEE Std. 1364-1995.

Nakon 4 godine IEEE standard nalazi se pod revizijom , ali nisu u�injene zna�ajnije promjene.

Nakon niza godina, nove verzije i poboljšanja obilježili su razvoj Veriloga, i novija verzija nastala je 2001. Ova verzija �ini se da je riješila mnoge nedostatke koje je sadržavao Verilog iz 1995.godine. Verzija je nazvana 1364-2000. Sada je na dizajnerima alata je da je imlplemetiraju.

Verilog je naj�eš�e korišteni HDL sa preko 50,000 aktivnih dizajnera.

Page 4: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

4

Verilog

Verilog predstavlja programski jezik za opis hardware-a (HARDWARE DESCRIPTION LANGUAGE (HDL) ) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše digitalni sistem, npr. mikroprocesora, memorije ili flip-flopa. Ovo zna�i, da korištenjem HDL-a svaki dio hardware-a se može opisati na bilo kojem nivou apstrakcije.

Verilog može opisati kako jednostavni flip-flop, tako i složenu strukturu sa 1

milion gate-ova. Verilog predstavlja jedan od onih HDL jezika dostupnih u industriji za dizajniranje hardware-a. Verilog nam omogu�ava velik nivo apstrakcija, koji mogu biti korišteni za razli�ite namjene u razli�itim fazama dizajna ( Behavior Level, Register Transfer Level (RTL), Gate Level i Switch Level ). On podržava modeliranje apstraktnog ponašanja, te tako omogu�ava dizajnerima hardware-a modeliranje funkcionalnog sistema na visokom nivou apstrakcije. Nivoi apstrakcije kod Veriloga Verilog podržava dizajn na razli�itim nivoima apstrakcije. Najzna�ajniji me�u njima su:

Behavioral Level Register-Transfer Level Gate Level

module d_ff ( d, clk, q, q_bar); input d ,clk; ouput q, q_bar; always @ (posedge clk) begin q <= d; q_bar <= !d; end endmodule

Page 5: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

5

Behavioral Level

Ovaj nivo opisuje sistem prema konkurentnim algoritmima (Behavioral). Svaki algoritam je sekvencijalan , tj. sastoji se od niza instrukcija koje se izvršavaju jedna za drugom. Osnovni elementi su Functions (funkcije), Tasks ( taskovi, zadaci ) i Always blokovi. Nema pogleda na strukturnu realizaciju dizajna. Register-Transfer Level

Register-Transfer Level specificira karakteristike kola pomo�u niza operacija i transfer podataka izme�u registara. Koristi se ta�no definiran sat ( RTL * dizajn sadrži ta�no definiran tajming, operacije se izvršavaju u ta�no odre�enom trenutku). Gate Level

U sklopu logi�kog dizajna, karakteristike sistema su opisane logi�kim linkovima i vremenskim mogu�nostima. Svi signali su diskretni tj. mogu uzeti vrijednosti iz diskretnog skupa logi�kih vrijednosti (`0', `1', `X', `Z`). Operacije koje se mogu koristiti su AND, OR, NOT . Korištenje Gate Level nivoa u modeliranju ponekad nije najbolji izbor na bilo kojem nivou logi�kog dizajna. * RTL ( Register Transfer Level ) je nivo apstrakcije koji specificira karakteristike kola na osnovu prenosa podataka izme�u registara.

Page 6: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

6

LEKSI�KA PRAVILA

Leksi�ka pravila Verilog-a su sli�na onima iz programskog jezika C++. Klju�ne rije�i se pišu malim slovima. Ovaj jezik je ‘case sensitive’ tj. razlikuju se mala i velika slova. Komentari

• Komentari u jednoj liniji koji se ozna�avaju sa // • Višelinijski komentari koji se navode izme�u /* i */

Identifikatori Identifikator, uklju�uju�i i imena varijabli, može sadržavati bilo koju sekvencu slova, cifara, znaka za dolar ‘$’, i donje crtice (_). Prvi karakter identifikatora mora biti slovo ili ‘_’. Identifikator ne može po�eti sa ‘$’ i ne može u sebi imati ‘-‘, zagrade ili ‘#’. Identifikatori su nizovi karaktera koji se koriste da se imenuju neki objekti, kao što su moduli ili registri. Identifikator mora po�eti sa slovom ili sa ‘_’ i može imati maksimalno 1024 karaktera. Stringovi

String je sekvenca karaktera koji se nalaze izme�u dvostrukih navodnika (“). Da bismo deklarisali varijablu za �uvanje stringa, trebamo deklarisati registar �ija veli�ina odgovara broju karaktera varijable koja �e se �uvati u njemu. Stringovi mogu sadržavati i neke specijalne karaktere, kao npr: \n karakter za novu liniju \t karakter za tab \\ karakter za ‘\’ \” karakter za duple navodnike (“) \ddd karakter koji ima 3 oktalne cifre (0<=d<=7) %% karakter za procenat ‘%’ Brojevi

Konstante se mogu navesti u decimalnom, heksadecimalnom, oktalnom ili binarnom formatu. Negativni brojevi se predstavljaju kao drugi komplement. Brojevi se navode u tradicionalnoj formi, kao nizovi cifara sa ili bez znaka (+,-) i to na slijede�i na�in: <veli�ina><format baze><broj> gdje je <veli�ina> broj decimalnih cifri koji ozna�ava veli�inu konstante u bitima, ovo je opcionalno, <format baze> ozna�ava da li se radi o binarnom, decimalnom, oktalnom ili heksadecimalnom broju, <broj> predstavlja cifre koje su u skladu sa <format baze>. Integer

• ako je <veli�ina> manje od broja bita u <broj> onda se otkidaju najzna�ajniji biti(biti na lijevoj strani) koji su viška.

• Ako je <veli�ina> ve�a od broja bita u <broj> onda se najzna�ajniji biti popunjavaju sa najzna�ajnijim bitom iz <broj>

Page 7: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

7

Integer Pohranjuje se kao Opis 6’hCA 001010 Zaokruženo, nije

11001010 6’hA 001010 Lijevo su dodane dvije 0 16’hbZ ZZZZZZZZZZZZZZZZ Popunjeno sa 16 Z 8’bx xxxxxxxx Popunjeno sa 8 x

Realni brojevi se mogu navesti na dva na�ina:

• <vrijednost>.<vrijednost> • <matisa>E<exponent>

TIPOVI PODATAKA FIZI�KI TIPOVI PODATAKA

Svrha Verilog-a kao HDL-a je modeliranje digitalnog hardware-a. Stoga nas ne �udi ni �injenica da su registri (reg) i žice (wire) dva osnovna tipa podataka.

• ‘Wire’ – predstavljaju fizi�ku vezu izme�u komponenti. Wire varijabla ne �uva nikakvu vrijednost. Ovdje je bitno da je wire samo jedan od podtipova net tipa podataka u koji još spadaju: “wired and (wand)”, “wired or (wor)” i “tristate bus (tri)”. Svaki od net tipova ima odre�enu funkcionalnost koja služi da se modeliraju razli�iti tipovi hardware-a (kao što su PMOS, NMOS, CMOS, …)

Postoji mogu�nost da se pri deklaraciji podataka koji su tipa wire definiše i njihova veli�ina.

• Registri (‘reg’) – predstavljaju varijable u kojima se �uvaju podaci i komparabilni su sa varijablama u programskim jezicima. Deklaracija se vrši pomo�u klju�ne rije�i reg. Registri �uvaju zadnju vrijednost koja im je pridružena, sve dok im neki drugi izraz ne promijeni vrijednost.

Postoji mogu�nost da se naprave nizovi registara koji se nazivaju memorija.

Realni broj Decimalni zapis 1.2 1.2 0.6 0.6 3.5E6 3,500000.0

Page 8: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

8

‘Reg’ i ‘Wire’ mogu imati slijede�e vrijednosti:

• 0 logi�ka nula ili ‘false’ • 1 logi�ka jedinica ili ‘true’ • x nepoznata logi�ka vrijednost • z vrijednost visoke impedanse U Verilog-u nije dozvoljena upotreba višedimenzionalnih nizova. Na po�etku

simulacije ‘reg’ varijabla je inicijalizirana na x, dok je varijabla ‘wire’ inicijalizirana na z. Reg i wire varijable su po default-u skalarne (npr. jedan bit), ali postoji mogu�nost da ih definišemo i kao niz bita. To se radi tako što u zagradama navedemo najzna�ajniji i najmanje zna�ajni bit. Primjer

Ovdje je data 8-bitni registar kod kojeg je sedmi bit najviše zna�ajan, dok je status 15-bitni registar kod kojeg je nulti bit najviše zna�ajan.

APSTRAKTNI TIPOVI PODATAKA

Zbog potreba korisnika u Verilog-u postoje i neki dodatni tipovi podataka koji nemaju odgovaraju�u realizaciju u hardware-u. Ovi tipovi uklju�uju integer, real i time. Integer i real imaju iste karakteristike kao i u drugim programskim jezicima (npr. C). Bitno je napomenuti da je reg varijabla neozna�ena, dok je integer ozna�eni 32-bitni cijeli broj. Varijabla time sadrži 64-bitnu vrijednost koja se koristi zajedno sa sistemskom funkcijom $time. OPERATORI U VERILOG-u Binarni aritmeti�ki operatori rade nad dva operanda. Ovdje se reg i net (wire) operandi tretiraju kao neozna�eni, dok real i integer mogu biti ozna�eni. Ako je i jedan od operanada nepoznat (x), tada je i rezultat nepoznat. Operator Name Comments + sabiranje - oduzimanje * množenje / dijeljenje rezultat dijeljenja sa 0 je x (nepoznato), % Modul

Page 9: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

9

Unarni aritmeti�ki operatori Operator Name Comments - Unarni Minus mjenja znak operanda Relacioni operatori upore�uju dva operanda i vra�aju logi�ku vrijednost true (1) ili false (0). Ako je jedan bit nekog operanda nepoznat, tada je i razultat nepoznat. Operator Name Comments > ve�e od >= ve�e od ili jednako < manje od <= manje od ili jednako == logi�ka jednakost != logi�ka nejednakost Logi�ki operatori rade nad logi�kim operandima i vra�aju logi�ku vrijednost. Koriste se obi�no u if i while izrazima. Treba ih razlikovati od Boolovih operatora nad bitima. Operator Name Comments ! logi�ka negacija && logi�ko AND || logi�ko OR Operatori nad bitima – operator nad nepoznatom vrijednoš�u daje o�ekivani rezultat. Operator Name Comments ~ binarna negacija & binarni AND | binarni OR ^ binarni XOR ~& binarni NAND ~| binarni NOR ~^ or ^~ ekvivalencija binarni NOT XOR Unarni redukcioni operatori se primjenjuju na sve bite operanda, a kao rezultat daju jedan bit. Operator Name Comments & AND reduction | OR reduction ^ XOR reduction ~& NAND reduction ~| NOR reduction ~^ XNOR reduction Ostali operatori Operator Name Comments === jednakost binarno se porede vrijednosti x i z. svi biti moraju biti isti da bi bila

zaovoljena jednakost. Vra�a TRUE ili FALSE. !== nejednakost vra�a TRUE ili FALSE. { , } spajanje spaja bite koji su navedeni izme�u zareza. Npr.

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

Page 10: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

10

<< Shift lijevo desni biti se popunjavaju nulama. Npr. A = A << 2; šifta A dva bita lijevo, a desne bite popunjava nulama

>> Shift desno lijeve bite popunjava nulama ?: uslov u zavisnosti od uslova pridružuje jednu ili drugu vrijednost. Npr. A = C >

D ? B+3 : B-2; Ako je c>d onda je B+3, a u suprotnom je B-2. PRIORITET OPERATORA

Kao i u standardnoj matematici, i ovdje zagrade mogu biti korištene za promjenu prioriteta. MODULI

Moduli su osnovni gradivni elementi Verilog-a. Moduli su veoma sli�ni procedurama ili funkcijama u programskim jezicima (za zadani ulaz oni proizvode neki izlaz). Modul se ne može pozvati, ve� se on instancira na po�etku izvršenja programa. Pokretanje instanci modula se vrši na slijede�i na�in:

< ime modula > < lista parametara > < ime instance > ( < lista portova > ) Unutar jednog modula mi možemo instancirati druge module, ali ne postoji

mogu�nost deklarisanja drugih modula unutar jednog modula. Moduli imaju slijede�u formu:

module <ime modula> (<lista portova>); <deklaracije> <module items> endmodule

Ovdje <ime modula> može biti bilo koje ime koje �e odre�ivati taj modul. <Lista portova> je lista portova koji omogu�avaju vezu sa drugim modulima. Klju�ne rije�i input, output i inout u deklaraciji se koriste da odrede smjer u kojem se podaci mogu kretati. Module items mogu biti initial i always konstrukcije. Svaki modul se mora završiti klju�nom rije�i endmodule.

Page 11: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

11

Moduli se povezuju pomo�u portova (ports). Svaki port mora biti ekspicitno

deklarisan kao input, output ili inout. Tabela 11.3 predstavlja karakteristike pojedinih portova.

Bitno je primjetiti da reg ne može biti input ili inout port. Ovo je zbog toga što

ne možemo povezati dva registra jer oni mogu sadržavati razli�ite vrijednosti. Primjer

INITIAL I ALWAYS KONSTRUKCIJE

Initial i always izrazi su veoma sli�ni. Glavna razlika je ta da initial odre�uje doga�aje koji se dese samo na po�etku (samo jednom i to u nultom vremenu), dok su always aktivnosti koje se dešavaju sve dok je uslov, ako je zadan, ispunjen. Ako uslov nije zadan, tada se always aktivnost dešava stalno, u petlji. KONTROLNE KONSTRUKCIJE

Funkcionalnost Verilog kontrolnih konstrukcija je ista kao i u jeziku C. Ali, pošto je Verilog HDL (Hardware Description Language), kontrolne konstrukcije se trebaju prevesti na hardware.

Page 12: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

12

If-else iskaz se koristi u slu�ajevima kada se na osnovu kriterija vrši izbor dijela koda koji �e se izvršavati. if (A == 4) begin B = 2; end else begin B = 4; End ‘Case’ iskaz se koristi kada se treba provjeriti vrijednost jedne varijable. Kao primjer ovdje možemo navesti adresni dekoder, gdje su ulazi adrese. case(address) 0: $display(“izlaz 1”); 1: $display(“izlaz 2”); 2: $display(“izlaz 3”); default: $display (“izlaz 0”); endcase ‘While’ iskaz izvršava odre�eni dio koda sve dok je zadani uslov ta�an. while (slobodno_vrijeme) begin $display(“pravi web stranicu”); end; ‘For loop’ iskaz izvršava dio koda ta�no odre�en broj puta. Razlika u odnosu na C je ta što ovdje nije podržan operator ++ nego se mora pisati varijabla=varijabla+1. for(i = 0; i < 10; i = i + 1) begin $display("i= %0d", i); end Repeat iskaz ponavlja neke izraze odre�eni broj puta: repeat (5) begin $display("i= %0d", i); i = i + 1; end PARAMETARSKI ISKAZI omogu�avaju programeru da dodjeli naziv konstanti. Npr: parameter veli�ina = 8; reg [veli�ina - 1:0] A; // definiše se A kao 8-bitni registar KONTINUALNO PRIDRUŽIVANJE prati wire varijable i mjenja njihovu vrijednost kad god ulazni operator promijeni vrijednost. Nasuprot ovome, proceduralno pridruživanje ne vrši ra�unanje kad god se operand promjeni. Ovdje se ra�unanje vrši samo kad se pozove iskaz pridruživanja. Klju�na rije� assign se koristi za razlikovanje proceduralnog od kontinualnog pridruživanja. Npr: assign izlaz = ~(in1 & in2); // izlaz mora biti tipa wire ZADACI I FUNKCIJE

Zadaci su sli�ni procedurama u drugim programskim jezicima kojima se može predati nijedan, jedan ili više parametara, ali ne vra�aju vrijednost. Funkcije se ponašaju kao potprogrami, ali imaju i neke karakteristike.

Page 13: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

13

• Funkcije se moraju izvršavati u jednoj jedinici vremena tj. ne mogu sadržavati vremenske kontrole (npr. delay control).

• Funkcije ne mogu pozivati zadatke jer oni mogu sadržavati vremenske kontrole. Za razliku od ovoga zadaci mogu pozivati druge zadatke i funkcije.

Definicija zadatka je slijede�a:

Task <naziv taska>; <portovi argumenata> // nema liste parametara!!!! <deklaracije> <iskazi> endtask

Pobu�ivanje zadatka: (<ime taska>) (<lista portova>); //Redoslijed u <lista portova> mora odgovarati <portovi argumenata> u definiciji Važno je naglasiti da se I/O parametri predaju po vrijednosti (poziv po referenci nije mogu�). Varijable su stati�ke i nisu smještene na stek. Za razliku od zadataka, funkcije vra�aju neku vrijednost koja se dalje koristi u nekim izrazima. Funkcija mora imati najmanje jedan argument. Definicija funkcije je kako slijedi:

function (rang ili tip) (naziv funkcije); (portovi argumenata) // nema parametara!!! (deklaracije) (iskazi) endfunction

gdje je <rang ili tip> tip rezultata koji vra�a funkcija. Unutar funkcije se mora nazivu funkcije pridružiti vrijednost. VREMENSKE KONTROLE Kontrola kašnjenja (‘delay control’) Programer odre�uje vrijeme izme�u nailaska na neki iskaz i stvarnog izvršenja tog iskaza. Kontrola kašnjenja odre�uje broj vremenskih jedinica koje trebaju pro�i da bi se izvršio neki izraz. Npr: #10 A=A+B; - ozna�ava da treba pro�i 10 vremenskih jedinica prije nego se izvrši ovo pridruživanje. Events Izvo�enje proceduralnih koraka može biti izazvano promjenom vrijednosti wire ili registar varijabli. Npr. @r begin // kontrolirano promjenom vrijednosti u registru r A = B&C; End @(posedge clock2) A = B&C; // kontrolirano uzlaznom ivicom signala sata @(negedge clock3) A = B&C; // kontrolirano silaznom ivicom signala sata Iza posedge (positive edge) i negedge (negative edge) mora stajati 1-bitni izraz, koji je obi�no clock. Negedge detektuje promjenu stanja sa 1 na 0 (ili nepoznato x), dok posedge detektuje promjenu sa 0 na 1 (ili nepoznato x). Verilog pruža mogu�nost imenovanja event-a. Prvo moramo deklarisati event:

Page 14: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

14

event event6; event se poziva pomo�u simbola -> -> event6; da bismo kontrolisali blok koda koristimo symbol @: @(event6) begin <neki proceduralni kod> end Wait izraz �eka da se ispuni odre�eni uslov nakon �ega �e se izvršiti odre�eni dio koda. Npr. wait (A == 3) A = B & C; FORK I JOIN ISKAZI Pomo�u fork i join konstrukcija se može uspostaviti više tokova kontrole unutar always i initial konstrukcije. Grananje se vrši pomo�u naredbe fork, a spajanje pomo�u join. To se može vidjeti iz slijede�eg primjera: initial initial begin fork #1 clk = 0; #1 clk = 0; #5 reset = 0; #5 reset = 0; #5 enable = 0; #5 enable = 0; #2 data = 0; #2 data = 0; end join SISTEMSKI ZADACI I FUNKCIJE

Sistemski zadaci nisu dio Verilog jezika, ali se nalaze u njegovoj biblioteci (‘library’). Ovdje �emo objasniti samo par od njih. $display Prikazuje tekst na ekranu sli�no kao iskaz printf iz programskog jezika C. Opšta forma je: $display(<parametar>, <parametar>, ... <parametar>); gdje <parametar> može biti string, izraz koji vra�a vrijednost ili null parametar. Specijalni karakter % ozna�ava da slijede�i karakter ima odre�en format. Iza svakog % mora slijediti odgovaraju�i izraz. Slijede�i primjer ispisuje vrijednost A binarno, oktalno, hexadecimalno i decimalno: $display("A=%b binarno %o octal %d decimal %h hex",A,A,A,A); Rezultat ovoga bi bio: A=00001111 binarno 017 octal 15 decimal 0f hex Formati koji se obi�no koriste su %b ispisuje binarni format

Page 15: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

15

%c ispisuje ASCII format %d ispisuje decimalni format %h ispisuje hexadecimalni format %o ispisuje octalni format %s ispisuje string format Bitno je napomenuti da $display svaki put ispisuje u novi red. $finish Ovo je sistemski zadatak koji izlazi iz simulatora i vra�a nas na host operativni sistem. $finish; $monitor Ovaj sistemski zadatak daje mogu�nost pra�enja i prikazivanja vrijednosti bilo koje varijable ili izraza koji su specificirani kao parametri u zadatku. Parametri se specificiraju na isti na�in kao kod $display. $monitor ispisuje vrijednost varijabli kada se desi neka promjena nad njima i kada se do�e do kraja. Ako više od jednog parametra promijene vrijednost u istom momentu, prikazuje se samo jedan od njih. Npr. slijede�a naredba �e ispisati liniju svaki put kada se promijene A, B ili C. $monitor(" %0d %b %b "%b, $time, A, B, C); samo jedan $monitor iskaz može biti aktivan u vremenu. Postoji mogu�nost da monitore isklju�ujemo i uklju�ujemo: $monitoroff; <neki kod> $monitoron; $scope Omogu�ava korisniku da odredi odre�eni nivo u hijerarhiji kao interaktivno podru�je za identifikovanje objekata. Ovo je korisno pri debug-iranju, jer korisnik može promijeniti podru�je radi kontrole vrijednosti varijabli u razli�itim modulima, zadacima i funkcijama. $scope(<ime>); <ime> mora biti kompletno hijerarhijsko ime modula, zadatka, funkcije ili imenovanog bloka. Poslije �e biti malo više rije�i o sistemskom zadatku $showscopes koji ispisuje ta imena. $settrace Omogu�ava pra�enje simulacije. Prate se razli�ite informacije kao što su vrijeme simulacije, broj linije, ime fajla, modula i neki rezultati izvršavanja izraza. $settrace; $showscopes Ispisuje kompletnu listu modula, zadataka, funkcija i imenovanih blokova koji su definisani na trenutnom nivou. $showscopes;

Page 16: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

16

$showvars Prikazuje statusne informacije o registrima i net varijablama, skalarne i vektorske. Kad se navede bez parametara ispisuje sve varijable u datoj oblasti, a kad se navedu parametri vra�a informacije samo za navedene parametre. $showvars; $showvars(<list of variables>); $stop Zaustavlja simulator i vra�a kontrolu korisniku. $stop; $time Kao rezultat vra�a trenutno vrijeme simulacije kao 64-bitni integer. $time mora biti korišteno u nekom izrazu.

Page 17: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

17

PRIMJERI PRIMJER 1: // Digitalni model semafora u saobra�aju // By Dan Hyde August 10, 1995 module traffic; parameter on = 1, off = 0, red_tics = 35, amber_tics = 3, green_tics = 20; reg clock, red, amber, green; // simulacija se zaustavlja nakon 1000 vremenskih jedinica initial begin: stop_at #1000; $stop; end // inicijalizacija svjetla i uspostavljanje kontrole nad //registrima initial begin: Init red = off; amber = off; green = off; $display(" Time green amber red"); $monitor("%3d %b %b %b", $time, green, amber, red); end // zadatak koji �eka na okidanje pozitivne ivice sata // prije isklju�ivanja sata task light; output color; input [31:0] tics; begin repeat(tics) // wait to detect tics positive edges on clock @(posedge clock); color = off; end endtask // talasni oblik signala sata �iji jedan period traje dvije //vremenske jedinice always begin: clock_wave #1 clock = 0; #1 clock = 1; end always begin: main_process red = on; light(red, red_tics); // poziva zadatak koji �eka green = on; light(green, green_tics);

Page 18: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

18

amber = on; light(amber, amber_tics); end endmodule Izlaz iz simulatora: Time green amber red 0 0 0 1 70 1 0 0 110 0 1 0 116 0 0 1 186 1 0 0 226 0 1 0 232 0 0 1 302 1 0 0 342 0 1 0 348 0 0 1 418 1 0 0 458 0 1 0 464 0 0 1 534 1 0 0 574 0 1 0 580 0 0 1 650 1 0 0 690 0 1 0 696 0 0 1 766 1 0 0 806 0 1 0 812 0 0 1 882 1 0 0 922 0 1 0 928 0 0 1 998 1 0 0 Simulacija se zaustavlja nakon 1000 vremenskih jedinica.

Page 19: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

19

PRIMJER 2: 4-bitni broja� sa reset i enable signalom

module counter ( clock , // ulaz: sat reset , enable counter_out // 4-bitni izlazni vektor za broja� ); // kraj liste portova //-------------definisanje ulaznih portova----------------------------- input clock ; input reset ; input enable ; //-------------definisanje izlaznih portova---------------------------- output [3:0] counter_out ; //-------------definisanje tipova podataka ulaza------------------- // po pravilu svi ulazni portovi su tipa wire wire clock ; wire reset ; wire enable ; //-------------definisanje tipova podataka izlaza------------------ // izlazni portovi mogu biti tipa reg ili wire reg [3:0] counter_out ; //------------po�etak koda------------------------- // broja� se okida pozitivnom ivicom sata always @ (posedge clock) begin : COUNTER // ime bloka // na svakoj uzlaznoj ivici signala sata provjeravamo da li je reset aktivan

Page 20: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

20

// ako je aktivan broja� se resetuje na 0000 if (reset == 1'b1) begin counter_out <= #1 4'b000; end // ako je aktivan enable broja� se pove�ava za 1 else if (enable == 1'b1) begin counter_out <= #1 counter_out + 1; end end // kraj bloka COUNTER endmodule // kraj modula

Page 21: Verilog sa primjerima - QSL.net fileDESCRIPTION LANGUAGE (HDL)) i tekstualni format za opisivanje digitalnih struktura. Jezik za opisivanje hardware-a je jezik korišten da se opiše

21

LITERATURA

1. Osnove digitalnih ra�unara, Novica Nosovi� , MAG Plus , Sarajevo , 2003.g.

2. http://members.aol.com/SGalaxyPub/useful_links_verilog.htm

3. http://www.eg.bucknell.edu/~cs320/1995-fall/verilog-manual.html

4. http://www.ee.ucla.edu/~herwin/ocdma/reference/vlogtut.pdf

5. http://www.ece.cmu.edu/~thomas/VSLIDES.pdf

6. http://www.web-ee.com/primers/files/VlogIntro.pdf

7. http://www-ee.eng.hawaii.edu/~msmith/ASICs/Files/pdf/CH11.pdf

8. http://vlsicad.ucsd.edu/courses/ece260b-w04/verilog_tut.pdf

9. http://www.deeps.org/verilog/verifaq2.html

10. http://www.ee.cooper.edu/ice/resources/vertutor.htm

11. http://www.cecs.csulb.edu/~ebert/teaching/spring2004/340/VerilogManual.pdf

12. http://www.angelfire.com/in/verilogfaq/page2.html

13. http://www.pragmatic-c.com/commercial-cver/cver.htm

14. http://en.wikipedia.org/wiki/Verilog

15. http://www.syncad.com/vlg_form.htm