Upload
calin-gabriel-constantinescu
View
76
Download
0
Embed Size (px)
DESCRIPTION
Tutorial PDF -Romana
Citation preview
5/22/2018 2 Tutorial Verilog Extins
1/54
2.LIMBAJULVERILOGHDL
n acest capitol se va prezenta limajul de descriere arhitectural Verilog HDL, utilizat n scopul
proiectrii,implementrii,simulriiisintezeilogiceaunuisistemnumeric.
Astfel,vorfireliefateurmtoareleaspecte:
- Istoric,caracteristicigeneraleifuncionale,structuraifluxuldeproiectare;- Sintaxaisemantica;- Operatori,construcii/instruciuni,taskuriifuncii;- Sincronizareimodelare,programedetest.
2.1.INTRODUCERE
2.1.1.ISTORIC
Verilog a fost dezvoltatn momentul cnd proiectanii cutau unelte (toolsuri) software pentru a
combina diferitele niveluri de simulare. La nceputul anilor 1980, existau simulatoare la nivel de
comutare, simulatoare la nivel de pori i simulatoare funcionale. Mai mult, majoritatea limbajelor
tradiionale de programare erausuntn esen secveniale i astfel semantica lor era o provocare
pentrumodelareaconcureneidincadrulcircuitelordigitale.
LimbajulVerilogafostinventatdePhilMorbydelaAutomatedIntegratedDesignSzstems(redenumit
apoi Gateway Design Automation GDA) n anul 1984 ca un limbaj de modelare arhitectural
(hardware) iar n anul urmtor a fost scris primul simulator, extins substanial pn n 1987 i
redenumitVerilogXL.Verilogamprumutat mult de la limbajele existente, ca de exemplu: aspectele
referitoarelaconcuren delaModula iSimula,sintaxadelaC imetodeledecombinareanivelurilor
de abstractizare de la HiLo (Brunnel University, UK). Limbajul nu era standardizat i a suferit multe
modificripnn1990.
nanul1989,GDA(precumidrepturileasupraVerilogiVerilogXL)afostcumprat dectreCadence
careapusVerilogndomeniulpublicn1990.Acestlucruapermis ialtorcompanii(precumSynopsys)
s dezvoltetoolsurialternativelaCadence,ceeaceapermisutilizatorilors adoptelimbajulpescar
larg.
27
5/22/2018 2 Tutorial Verilog Extins
2/54
ns,nanul1981,DepartamentulAmericanalAprriiasponsorizatunworkshoppetemalimbajelor
dedescrierehardwarecaparteaprogramuluiVHSIC(VeryHighSpeedIntegratedCircuits)dincare
saunscutspecificaiilepentruVHDL(VhsicHDL)nanul1983.Dezvoltatcurestriciipnnanul1985,
VHDLadevenitstandardIEEE1076nanul1987.Acestlucruafcutca,nanul1990,Verilogs devin
un limbajnchis. De aceea, Cadence a organizat Open Verilog International (OVI) i a furnizatn anul
1991documentaiapentruVerilogHDL.nanul1992,OVI(cunoscut acumcaAccellera)adusomunc
laborioas dembuntireamanualuluidereferin alimbajului(LRMLanguageReferenceManual)
i,nanul1994,grupuldelucruIEEE1364atransformatOVILRMnstandardIEEE.
Astfel, n 1995, VerilogHDL a devenit standard comercial IEEE1364, fiind referit ca Verilog95.
StandardulcombinaattsintaxalimbajuluiVerilog,ct iPLI(ProgrammingLanguage Interface)ntr
unsingurvolum.
nurmtoriianiaufostadugatenoicaracteristiciiarnouaversiunealimbajuluiadevenitstandardIEEE
13642001 sau Verilog2001. Prin muntiri ulterioare, printrun proiect separat System Verilog,
limbajul a devenit stahdard IEEE 13642005 sauVerilog2005. Prin includerea suportului de modelare
analogice imixte, limbajulafostreferitcaVerilogAMS.nanul2005,dectreCoDesignAutomation
Inc, sa dezvoltat un limbaj de verificare de nivelnalt numitSuperlog; acest limbaj a fost donat ctre
Accellera,carelatransformatnSystemVerilog,devenindstandardIEEEP18002005completaliniatcu
Verilog2005.
2.1.2.CARACTERISTICIISTRUCTURAUNUIPROGRAMVERILOGHDL
Verilog este un limbaj de descriere hardware (HDL) utilizat pentru a modela sisteme numerice.
Limbajul suport proiectare, verificare i implementare a circuitelor analogice, digitale i mixte pe
diferitenivelurideabstractizare.
Limbajul are o sintax similar cu cea a limbajului C, ceea cel face familiarn utilizare. Astfel, ca i
limbajul C,Verilogare un preprocesor, construcii de control ca if, while, etc, rutine de afiare i
operatori similare lui C. El difer ns fundamental de Cn anumite aspecte, ca de exemplu: utilizeaz
begin/end pentru delimitarea blocurilor de cod, utilizeaz constante definite pe dimensiuni de bii, nu
arestructuri,pointeri isubrutinerecursive(totui,SystemVerilog includeacumacestecapabiliti) i
lucreaz cuconceptuldetimp,importantpentrusincronizare.
28
5/22/2018 2 Tutorial Verilog Extins
3/54
Limbajul difer deun limbaj convenionalnsensulc execuia instruciunilor nueste strict liniar. Un
proiectVerilogconst ntroierarhiedemodule.Modulelesuntdefinitecaunsetdeporturideintrare,
ieire i bidirecionale. Intern, moduleleconin firede legtur iregistre.Relaia dintreporturi, fire i
registre este definit prin construcii concurente i secveniale care stabilesc comprtamentul modului.
Construciile secveniale sunt plasaten interiorul blocurilor i sunt executaten ordine secvenial n
cadrul blocului. Toate construciile concurente i blocurile din proiect sunt executaten paralel. Un
modulpoateconineiunasaumaimulteinstanealealtormoduledefinitenierarhie.
Unsubsetdeconstruciidinlimbajsuntsintetizabile.Dacamoduleledinproiectconinnumaiconstrucii
sintetizabile, programulVerilog poate fiutilizat pentrua sintetiza proiectulntro list de legturicare
descriecomponenteledebaz iconexiunilecevorfiimplementatehardware.Listadelegturipoate
fiapoitransformat ntroform caredescriecelulestandardaleunuicircuitintegrat(cumesteASIC
Application Specific Integrated Circuit) sau un flux de bii (bitstream) pentru un dispozitiv logic
programabil(cumesteFPGAFieldProgrammableGateArrays).
Actualmenteexist oconcuren puternic ntrelimbajeleVHDLiVerilog,ceeaceimpuneprezentarea
uneiscurtecomparaiintreceledou limbaje.
Oprimadiferen ntrelimbajeestesintaxadup cumVerilogestebazatpeCiarVHDLestebazatpe
ADA:
Verilog este uor de invat pentru ca C este mai simplu. El produce astfel mai mult codcompact, att pentru citire, ct i pentru scriere. Mai mult, proiectanii )care deja tiu C
comparativcuceicaretiuADA)lnva ifactrainingmaiuor.
VHDLestefoarteputernictipizat ipermiteprogramatorilorsidefineasc propriilelortipuridei,npractic seutilizeaz tipuriledebaz iceledefinitedeIEEE.Beneficiulconst nfaptul
c verificareatipuluiserealizeaz dectrecompilator,ceeacereduceerorile;dezavantajuleste
c schimbareatipuluitrebuiefcut explicit.
Verilogaredou avantajeimportantefa deVHDL:
Permitemodelarealaniveldecomutare. Se asigur faptul c toate semnalele sunt iniializate ca nedefinite ceea ce asigur c toi
proiectaniivorfurnizalogicanecesar deiniializareaproiectelorlor(tipuriledebaz dinVHDL
iniializeaz la0).
29
5/22/2018 2 Tutorial Verilog Extins
4/54
VHDLaredou avantajeimportantefa deVerilog:
Sepermitinstaniericondiionaledemodule(if/for...generate) Sefurnizeaz unmecanismsimplu(construciaconfigure)carepermiteproiectantuluis comute
uorntredescrieridiferitedemoduleparticulare.
Alegereantre cele dou limbaje nu se poate facens n mod izolat. Trebuie inclui i ali factorin
mediuldeproiectare,cumarfivitezadesimulare,uurinacucaresepoatetestaidepanacodul,etc.
VerilogincludePLIcarepermiteaccesuldinamiclastructurilededate,ceeaceofer programatorilorun
grad de control mai mare asupra simulrii iar proiectanilor posibilitatea dezvoltrii mediului de
proiectareprinincludereadeinterfeegraficesaurutinedetipCpentruacalculantrzierilenanaliza
sincronizrii.Pragmatic,unproiectantarfibines letiepeamndou.
Stilurideproiectare
Verilog, la fel ca orice alt limbaj de descriere hardware, permite realizarea unui proiectn ambele
metodologii:bottomup(dejosnsus)sautopdown(desusnjos):
Proiectareabottomupestemetodatradiional.Fiecareproiectesterealizatlaniveldeporiutiliznd pori standard, ceea ce este greu de realizat pentru noile structuri numerice care au
milioanedetranzistoare.Proiecteleastfelrealizatesuntgrupatelamacronivel.
nmetodologiabottomup,maiintiseidentific blocurileconstructive,caresuntdisponibile.ncontinuareseconstruiesccelulemaimariutilizndacesteblocuri.Procesulcontinu pn se
ajungelasintezabloculuidenivelsuperior.
Figura2.1.Ierarhiadeblocuribottomup
Proiectareatopdownestemetodaactual princaresepleac delaspecificaiiledesistem ise detaliaz njos pn la componentele de sistem. Aceast metod permite testarea mai
devreme, schimbarea uoar a tehnologiilor, proiectarea structurat a sistemelor numerice i
30
5/22/2018 2 Tutorial Verilog Extins
5/54
multe ale avantaje. Estens sificil de urmrit un proiect pur topdown, de aceea multe
proiectecomplexembin ambelemetode.
n cazul topdown se definete un bloc de nivel superior, identificnd apoi subblocurile
necesare pentru construcia acestuia.n continuare subblocurile se divid pn se ajunge la
celulefrunze,carenumaipotfidescompusenelementemaisimple.
Figura2.2.Ierarhiadeblocuritopdown
StructuraunuiprogramVerilog
Limbajul Verilog descrie un sistem numeric ca un set de module. Fiecare dintre aceste module are o
interfa cualtemodule,pentruaspecificamanierancaresuntinterconectate.Deregula,unmodulse
plaseazntrunfiier,fr caaceastas fieocerin obligatorie.Moduleleopereaz concurent.
ngeneral,exist unmodulpenivelulcelmainalt,carespecific unsistemnchisceconine,attdatele
de test, ct i modelele/modulele hardware. Modulul de pe nivelul cel mainalt invoc instane ale
celorlalte module; acest modul poate fimpritntr+un modul de test i unul sau mai multe module
principale,careconincelelaltesubmodule.
Modulele reprezint pri hardware, care pot fi de la simple pori pn la sisteme complete, ca de
exempluunmicroprocesor.Elepotfispecificate,fiecomportamental,fiestructural(sauocombinaiea
celor dou). O specificare comportamental definete comportarea unui sistem numeric (modul)
folosindconstruciilelimbajelordeprogramaretradiionale,deexemplu:ifiinstruciunideatribuire.O
specificarestructural exprim comportarea unui sistem numeric (modul) ca o conectare ierarhic de
submodule.
Labazaierarhieicomponenteletrebuies fieprimitivesaus fiespecificatecomportamental.
PrimitiveleVerilogincludattpori,ctitranzistoaredetrecere(comutatoare).
31
5/22/2018 2 Tutorial Verilog Extins
6/54
Structuraunuiprogramesteurmatoarea:
Moduldetest; Modul(saumodule)toplevel; Submodul1;
Submoduln;Fie ca prim exemplu de modul Verilog programul care afieaz Hello World (dat ca exemplun toate
limbajeledeprogramare):
//-----------------------------------------------------// Acesta este primul program Verilog// Functia : Acest modul va afisa 'Hello World
//----modulehello_world ;
-------------------------------------------------
initialbegin // inceput de bloc de initializare$display ("Hello World"); // afisare#10 $finish; // terminare afisare
end // sfarsit de bloc
endmodule// sfarsit de modul
2.1.3.REPREZENTAREACIRCUITELORISITEMELORNUMERICENIVELURIDEABSTRACTIZAREVERILOG
Printroabordareierarhic,unsistemhardwarecomplexpoatefidescrissubaspectcomportamental,
structural,fiziciabstractpemaimulteniveluri:
Modalitide Comportamental Structural Fizic Abstractdescriere:
Niveluriierarhice: Aplicaii,sistemul Calculator, Modul, Arhitectur,deoperare procesor plachet, algoritm,
circuit modul/blocfuncional
Programe Sumatoare, Celule Logic,pori,registre comutaie
Subrutine, Tranzistoare Tranzistoare Circuitinstruciuni
Abordarea pe niveluri de abstractizare ajut la alegerea unui stil de proiectare, n funcie de
complexitateastructurilornumerice.ncontinuaresedefinescacesteniveluri:
32
5/22/2018 2 Tutorial Verilog Extins
7/54
1. Arhitectura, nivelul cel mai de sus, se refer la aspectele funcionale ale sistemului. La acestnivelexist urmtoareletreisubniveluri:
arhitecturasistemului:subnivelulcelmainalt,careconstituieinterfaacuutilzatorul; organizarea sistemului: structurarea sistemuluin uniti funcionale, interconectarea lor,
fluxuldeinformaiidintreele;
microarhitectura: structura unitilor funcionale, care realizeaz interfaa dintrehardwareifirmware.
2. Algoritmulmapeaz nivelularhitecturallanivelullogic.3. Modulul/bloculfuncionalesteunniveltipicdetransferntreregistre(RTLRegisterTransfer
Level), care caracterizeaz n termeni ca registre, ntrzieri, numrtoare, ceas, memorie,
circuitecombinaionaleisecveniale.
4. Logicareprezint nivelulcaredescriesistemul,utilizndporilogice.5. Comutaiaestenivelulcareanalizeaz comutareasemnalelordepeunnivellogicpealtul.6. Circuitul constituie nivelul abstract cel mai sczut, care reprezint sistemul la nivel de circuite
electronice.
Iniial descrierea structurilor hardware a fost realizat la nivelul transferurilor ntre registre (sunt
cunoscute limbaje ca APL (A Programming Language) sau AHPL (A Hardware Programming
Language));elepotservintromaimic msur ilanivelulproiectriilogice.
ncepndcuanii1980auaprutlimbajepentrudescrierealanivelarhitectural,cumarfiS*MsauADL.
Pentruaevitainconvenientulmajordedescriereastructurilorhardware,utilizndmaimultelimbaje
adecvatediferitelorniveluriprezentatemaisus,sacutatdezvoltarealimbajelorpentruaobineunele
capabilesneleag ctmaimultenivelurideabstractizare,mergndpn lanivelullogic.
Primele dintre ele au fost MIMOLA i M, dar cele care reprezint la ora actual vrfuln domeniul
proiectriiautomateastructurilorhardwaresuntVHDL(VeryHighSpeedIntegratedCicuitHardware
DescriptionLanguage)iVerilogHDL.
33
5/22/2018 2 Tutorial Verilog Extins
8/54
NivelurideabstractizareVerilog
Verilog suport proiectare pe diferite niveluri de abstractizare. Cele mai importante sunt nivelul
comportamental,nivelulRTL,nivelulstructuralsaupoart inivelulfizic.
NivelulcomportamentalNivelulcomportamental descrieunsistemprinalgoritmiconcureni.Fiecarealgoritmesteelnsui
secvenial, ceea censeamn c el const dintrun set de instruciuni care se execut una dup
cealalt.Elementeleprincipalesuntfunciile,taskurileiblocurileinitialialways.
Exemplu:
primitivedEdgeFF_UDP (q, clk, d);outputq;
reg q;input clk, d;table
// clk d stare q(01) 0 : ? : 0;(01) 1 : ? : 1;(0x) 1 : 1 : 1;(0x) 0 : 0 : 0;(?0) ? : ? : -;
endtable? (??) : ? : -;
endprimitive
NivelulRTLProiectarealanivelRTLspecific toatecaracteristicileunuicircuitprinoperaiiitransferuridedate
ntre registre. Se utilizeaz un semnal explicit de ceas. Proiectele RTL conin delimitri exacte de
ntrzieri:operaiilesunt planificate s apar la anumite momentede timp. Odefiniie modern a
coduluiRTLeste:OricecodcareestesintetizabilestenumitcodRTL.
Exemplu:
module geFF_RTL (q, clk, d);dEd
outputq;reg q;input clk, d;
initial
q = 0;always @(negedge clk)
#10 q = d;
endmodule
34
5/22/2018 2 Tutorial Verilog Extins
9/54
Nivelulpoart (structural)Lanivelpoart logic,caracteristicileunuisistemsuntdescriseprinsemnalelogiceintrzierilelor.
Toate semnalele pot avea doar valori logice de tipul 0, 1, X i Z. Operaiile uzuale sunt
predefinite ca primitive logice (pori AND, OR, NOT, etc). Utilizarea modelrii la nivel de poart
poates nufieceamaibun ideepentruoricenivelalproiectriilogice.Coduldenivelpoart este
generat de tooluri precum cel de sintez iar lista de legturi generat este utilizat pentru
simularealaniveldepori.
Exemplu:
moduledEdgeFF_gates(d,clk,q,q_bar);inputd,clk;outputq, q_bar;
wiren1,n2,n3,q_bar_n;wirecn,dn,n4,n5,n6;
// primul latchnot(n1,d);
nand(n2,d,clk);nand(n3,n1,clk);
nand(dn,q_bar_n,n2);nand(q_bar_n,dn,n3);
// al doilea latchnot(cn,clk);not(n4,dn);
nand(n5,dn,clk);nand(n6,n4,clk);
nand(q,q_bar,n5);nand(q_bar,q,n6);
endmodule
Nivelulfizic(altranzistoarelor)Descriereafizic furnizeaz informaiiprivindmoduldeconstruciealunuicircuitparticulardescris
din punct de vedere comportamental i structural; descrierea fizic este asociat cu descrierea la
nivel de mti tehnologice. Aceast descriere cuprinde mai multe niveluri de abstractizare: nivelul
modul(descrielimitelegeometriceexternepentrucircuit),unsetdesubmodule(librriideprimitive
fizice), nivelul porturilor (corespund unei conexiuni de intrare/ieire din descrierea structural a
35
5/22/2018 2 Tutorial Verilog Extins
10/54
componenteipentrucaresespecificpoziia,stratul,numele ilimea)iarlanivelulcelmaidejos
seafl apelriledetranzistoare,fireilaconexiuni.
ncontinuaresevaconsideradoarproiectarealanivelRTLicomportamental.
2.1.4.FLUXULDEPROIECTARE
FluxultipicdeproiectareaunuisistemnumericutilizndlimbajulVerilogpoatefireliefatastfel:
Proiectarelanivelnalt
Proiectarelanivelsczut
CodificareRTL
Verificarefuncional
Sintez logic
Plasareirutare
Fabricare
Simularelaniveldepori
ValidarepostfabricarewaferdeSiliciu
Specificaiideproiectare
36
5/22/2018 2 Tutorial Verilog Extins
11/54
Specificaiideproiectare
Este etajuln care se definesc parametrii de proiectare sistem. Astfel, se specific scopul proiectrii,
moduriledefuncionare,tipurilededateifuncii,etc.nacestscopsepotfolosieditoaredetexte.
Proiectarealanivelnalt
Acesta este etajuln care se precizeaz blocurile funcionale ale sistemului de proiectat, intrrile i
ieirilen/din sistem, forme de und precum i modul de comunicare dintre blocurile funcionale.n
acestscopsepotfolosieditoaredetexteideformedeund.
Proiectarealanivelsczut
Proiectarea aceasta se mai numete i microproiectare i este faza n care proiectantul descrie
implementarea fiecrui bloc. Ea conine detalii despre maina de tranziii de stri i despre blocurile
funcionale. Este bine s se deseneze formele de und pentru diferitele interfari. La aceast faz se
pierdedestuldemulttimp.Sepotutilizaeditoaredetexteideformedeund.
CodificareaRTL
n aceast faz, microproiectarea este convertit n codVerilog utiliznd constructorii sintetizabili ai
limbajului.Seutilizeaz editoareHDLseparatesauceledincadrultoolutilorfolositelaproiectare.
Verificareaisimularea
Aceast etap este procesul de verificare funcional la orice nivel de abstractizare. Se utilizeaz
simulatoareadecvate.Pentruatestadac codulRTLndeplinetecerinelefuncionaledinspecificaiile
deproiectare,trebuies sescrieprogramedetest(testbench)cucaresevaverificafuncionalcodul
RTL proiectat pe baza studiului formelor de und obinute n urma simulrii. Se pot utiliza
simulatoare/compilatoare separate sau inclusen diferite tooluri de proiectare, precum Modelsim,
ISEXilinx,Veriwell,Icarus,etc.Pentruaverificasimulareantrzierilorpentrusincronizare(attlanivel
depori,ctilaniveldefire),dup fazadesintez,semairealizeaz osimularelaniveldeporisauSDF
(StandardDelayFormat).
Sinteza
Esteprocesulprincaretooluriledesintez caXST,AhdlsauSynplifyiaucodulRTL i, inndcontde
tehnologie i constrngeri ca intrri,l mapeaz n primitive tehnologice la nivel de pori. Toolul de
37
5/22/2018 2 Tutorial Verilog Extins
12/54
sintez, dup mapare, realizeaz i o analiz minimal antrzierilor pentru a verifica cerinele de
sincronizare(ns doarlaniveldepori,lanivelulfirelorsefacenfazadeplasareirutare).
Plasareairutarea
Listadelegturilaniveldeporigenerat detooluldesintez esteluat iimportat ntoolulde
plasare i rutaren format list de legturiVerilog. Mainti toate porile i bistabilii sunt plasai iar
semnaleledeceas iiniializaresuntrutate,dup carefiecareblocesterutatobinndusecaieireun
fiierGDSutilizatlafabricareacircuitelorASIC.
Validarepostfabricare
O dat ce circuitul este gata de fabricaie, este necesar ca el s fie pusn condiii de mediu real de
funcionare i testatnainte de a fi lansat pe pia. Aceasta deoarece viteza de simulare a RTL estesczut iexist posibilitateagsiriiunorbugurilatestareawaferelordeSiliciu.
2.2.SINTAXAISEMANTICALIMBAJULUIVERILOGHDL
2.2.1.CONVENIILEXICALE
Sunt similare cu cele ale limbajului C.Verilog este un limbaj casesensitiven care toate cuvintele
cheiesuntculiteremici.
Spaiilibere(albe)
Spaiilealbepotconinecaractereprecumspaii(/bblank),caracteretab(/t),caracterelinienou
(/n),caracteresfritdelinie(CarriageReturn ),sfritdeparagrafisfritdefiier(EOFEnd
OfFile).
Aceste caractere sunt ignorate cu excepia cnd servesc la separarea altor convenii saun cadrul
irurilor.
Comentarii
Exist dou modurideaintroducecomentarii:
- Comentariipeosingur linie,carencepcu//isfresccu- Comentariipeliniimultiple,carencepcu/*isfresccu*/
38
5/22/2018 2 Tutorial Verilog Extins
13/54
Identificatori
Identificatoriisuntnumedatepentruunobiect,precumunregistru,ofunciesauunmodul,astfelnct
s poat fireferitdinalteprialedescrieriiRTL.
Identificatoriitrebuies nceap cuuncaracteralfabeticsaucaracterulunderscore(_).Eipotconine
caractere alfabetice, caractere numerice,_ i $. De asemenea, ei pot avea o lungime de pn la 1024
caractere.
Verilog permite utilizarea oricrui alt caracter prin omiterea lui plasnd un caracter \ (backslash) la
nceputulidentificatoruluiiterminndnumeleluicuunspaiuliber.
Deexemplu:
module\1dEdge_FF (, \q~, \reset*, );
Valorilogice
nVerilogexist treitipuridevalorilogice:
0zero,nivelsczutsaufals 1unu,nivelnaltsauadevrat Zsauznalt impedan (valoaretreistrisauflotant) Xsaux nedefint,necunoscutsauneiniializat
Puterilogice
nVerilogexist urmtoereletipurideputerilogice(valorilogiceputerniccuplatelogicstrengths):
Niveldeputere
Numevaloareputerniccuplat
Mnemonicspecific
Afiaremnemonic
7 Drivedealimentare supply0 supply1 Su0 Su1
6 Driveputerniccuplat strong0 strong1 St0 St1
5 Driveinut(pull) pull0 pull1 Pu0 Pu1
4 Capacitatemare Large La0 La1
3 Driveslabcuplat weak0 weak1 We0 We1
2 Capacitatemedie Medium Me0 Me1
1 Capacitatemic Small Sm0 Sm1
0 Impedannalt highz0 highz1 HiZ0 HiZ1
39
5/22/2018 2 Tutorial Verilog Extins
14/54
2.2.2.REPREZENTAREANUMERELOR
Sepotspecificaconstantenumericenformatzecimal,hexazecimal,octalsaubinar.Verilogsuport att
numerecusemn,ctinumerefr semn;oricenumrfr semnul esteconsideratpozitivntimp
cenumerele precedate desunt considerate negative cu semn.Numerelenegative se reprezint ncodcomplementar.
Numerentregi
Sintaxaeste:
Caracteristici:
- Numerelesuntcusemnsaufr semn.ntremrime,baz ivaloaresuntpermisespaii- (opional) este baza de numeraie (binar, octal, zecimal sau hexazecimal). Ea este
predefinit cazecimal inuestecasesensitive
- (opional)estenumruldebiidinntreg.ntregiifr semnsuntpredefiniila32bii- nuestecasesensitiveiar?esteunaltmoddeareprezentavaloareaZ
Baza Simbol Valorilegale
Binar bsauB 0,1,x,X,z,Z,?,_
Octal osauO 07,x,X,z,Z,?,_
Zecimal dsauD 09,_
Hexazecimal hsauH 09,af,AF,x,X,z,Z,?,_
- Caracterul_(underscore)poatefipusoriundeninteriorulnumruluiiesteignorat- Valorile sunt expandate de la dreapta la stnga (lsb (least signifiquant bit) spre msb (most
signifiquantbit))
- Cnd mrimea este mai mic dect valoarea, atunci biii cei mai semnificativi sunt trunchiai.Cnd mrimea este mai mare dect valoarea, atunci biii cei mai semnificativi sunt setai la 0
dac valoareaeste0sau1,laZsauXdac valoareaesteZsauX
- Valorile0i1potfifolositecanumerepentruc nupotfiidentificatori- Numerelepotfideclaratecaparametri
40
5/22/2018 2 Tutorial Verilog Extins
15/54
Numerereale
Sintaxaeste:
.(notaiazecimal)sau
EundeEnuestecasesensitive(notaiatiinific)
Caracteristici:
- Verilogsuport constanteivariabilerealeiconvertetenumerelerealelantregiprinrotunjire- NumerelerealenupotconineZsauXipotaveavaloridoardela0la9i_doarnvaloare- Numerelerealesuntrotunjitelacelmaiapropiatntregcndsuntatribuitelaunntreg
2.2.3.MODULE;INSTANIERI,PARAMETRIZRIIIDENTIFICATORIIERARHICI
DefinireamodulelornVerilogHDL
Modulele sunt blocurile constructive ale proiectelor Verilog. Se poate crea un proiect ierarhic prin
instaniereamodulelornaltemodule.Unmodulesteinstaniatcndseutilizeaz acestmodulnaltul,
peunnivelierarhicsuperior.
Sintaxaunuimodulesteurmtoarea:
Sintaxa
Conexiuneintern implicit(prinordineaporturilor)
modulenume_modul(nume_port,nume_port,...);
componente_modul
endmodule
Conexiuneintern explicit(prinnume)
modulenume_modul(.nume_port(nume_semnal),.nume_port(nume_semnal),...);
componente_modul
endmodule
41
http://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.html5/22/2018 2 Tutorial Verilog Extins
16/54
Conexiuneaintern implicit conecteaz portullaunfirinternsauunregistrucuacelainume.Ordineatrebuies sepotriveasc corect.Normal,nuesteoideebun s seconectezeporturile
implicitpentruc arputeacauzaproblemendepanare(deexemplulocalizareaunuiportcarea
cauzatoeroarelacompilare),cndoriceportesteadugatsauters.
Conexiunea intern explicit conecteaz portul la un semnal intern cu nume diferit sau lasemnaleinterneselectatepebiisaupeprisauconcatenate.
Numeletrebuies sepotriveasc cumodululfrunz iarordineanuesteimportant.
Componenteleunuimodulsunt:- declaraii_porturi_modul- declaraii_tipuridedate- instanieri_module- instanieri_primitive- blocuri_procedurale- atribuiri_continue- definiii_taskuri- definiii_funcii- blocuri_specificate
Funcionalitateaunuimodulpoatefi:- Comportamental (RTL): modelat cu constructori de blocuri procedurale sau atribuiri
continue
- Structural:modelatcaolist delegturideinstanedemodulei/sauprimitive- Combinat:comportamentalistructural
Definiiiledemodulenupotfimbricatens unmodulpoateinstaniaaltemodule. Definiiiledemodulepotfiexprimateutilizndconstanteparametru.
Fiecareinstan demodulpoateredefiniparametriipentruafiunicipentruaceainstan.
Componenteleunuimodulpotapreanoriceordinedardeclaraiiledeporturiiceledetipuridedatetrebuies aparnaintecaporturilesausemnaleles fiereferite.
Porturi
Porturilepermitcomunicareantreunmodul icomponentelesale.Toatemodulelemaipuinmodulul
detestareauporturi.Porturilepotfiasociateprinordinesauprinnume.
42
5/22/2018 2 Tutorial Verilog Extins
17/54
Sintaxadedeclarareaporturiloresteurmtoarea:
Sintaxa
direcie_port[msb:lsb]nume_port,nume_port,...;
Direciaporturilorpoatefi:- inputpentruscalarisauvectorideintrare- outputpentruscalarisauvectorideieire- inoutpentruscalarisauvectoribidiracionali
Valorile msb i lsb trebuie s fientregi, parametrintregi sau o expresie care se rezum la oconstantntreag.
Se poate folosi att convenia littleendian (lsb este cel mai mic bit) ct i convenia big
endian(lsbestecelmaimarebit)
Dimensiuneamaxim aunuiportpoatefilimitat darnumaipuinde256bii Ca o practic bun, se recomand declararea unui singur port de identificare pe linia program
pentruaputeaficomentat
Regulideconectareaporturilor:- Intrrile: intern trebuie s fientotdeauna un tip de fir, extern pot fi conectate la o
variabil detipregistrusaufir
- Ieirile:internpotfidetipfirsauregistru,externtrebuies fieconectatelaovariabildetipregistru
- Porturile bidirecionale: intern i extern trebuientotdeauna s fie de tip fir i pot ficonectatenumailaovariabil detipfir
- Potrivirea ca dimensiuni: este legal s se conecteze intern i extern porturi dedimensiunidiferite;darateniec tooluriledesintez potraportaprobleme
- Porturineconectate:suntpermiseprinutilizareanotaiei,- Fireletipuridedatesuntutilizatepentruaconectastructura;unastfeldefirestecerut
dac unsemnalpoatefidatntroconexiunestructural
Instaniereamodulelor
Sintaxapentruinstaniereesteurmtoarea:
43
5/22/2018 2 Tutorial Verilog Extins
18/54
Sintaxa
Conexiuniimpliciteprinordineaporturilor
nume_modulnume_instan [domeniu_tablou_instane](semnal,semnal,...);
Conexiuniexpliciteprinnumeleporturilor
nume_modulnume_instan [domeniu_tablou_instane](.nume_port(semnal),(.nume_port(semnal),...);
Redefinireexplicitprinparametri
defparamcale_ierarhic.nume_parametru=valoare;
Redefinireimplicitprinparametri
nume_modul#(valoaresaunumeparametru)nume_instan (semnale);
Unmodulpoatefiinstaniatutilizndordineasaunumeleporturilor:- Instaniereaprinordineaporturilorlisteaz semnaleleconectatelaelenaceeaiordine
canlistadeporturidindefinireamodulului
- Instaniereaprinnumeleporturilorlisteaz numeleportuluiisemnalulconectatlaelnoriceordine
Nume_instan(cerut)esteutilizatpentruerealizainstanemultiplealeaceluiaimodulnmodunicdintrunaltul.
Domeniu_tablou_instane (opional) instaniaz module multiple, fiecare instan fiindconectat labiiseparaiaiunuivector:
- Domeniul este specificat ca [lhi:rhi] (index stnga (lefthandindex) la index dreapta(righthandindex))
- Dac dimensiunea pe bii a unui modul port dintrun tablou este aceeai cu cea asemnalului conectat la el, semnalul complet este conectat la fiecare instan a
modulului port; daca dimensiunea difer, atunci fiecare instan de modul port este
conectat la o parte selectat a semnalului, cu cel mai puin semnificativ index de
instan conectatlaceamaipuinsemnificativ parteaunuivector itotaaprogresiv
ctrestnga
- Trebuies existeunnumrcorectdebi nfiecaresemnalpentruaseconectalatoateinstanele(mrimeasemnaluluiimrimeaportuluitrebuies fiemultiple)
44
http://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.html5/22/2018 2 Tutorial Verilog Extins
19/54
Parametriidintrunmodulpotfiredefiniipentrufiecareinstan:- Redefinirea explicit utilizeaz o construcie defparam cu numele ierarhic al
parametrului
- Redefinirea implicit utilizeaz jetonul # ca parte a instanierii modulului. Parametriitrebuieredefiniinaceeaiordinencareaufostdeclaraiprinmodul
Numele cii ierarhice este dat de identificatorul modulului rdcin (toplevel) urmat deidntificatoriiinstanelormodulului,separateprin puncte.Acestlucruestefolositoratuncicnd
sedoreteasevedeasemnaluldintrunmodulfrunz saucndsedoreteforareauneivalori
nuntrulunuimodulintern.
2.2.4.PRIMITIVEPROGRAM
Primitive
Verilogareprimitiveincluse(builtin)cumsuntporile,poriledetransmisieicomutatoarele.Acestea
sunt utilizate rarn proiecte RTL, dar sunt utilizaten faza de postsintez pentru modelarea celulelor
ASIC/FPGA;acestecelulesuntapoiutilizatepentrusimularealaniveldepori,saucumsemainumete,
simulareaSDF(StandardDelayFormat).Deasemenea,formatuldeieireallisteidelegturidintoolul
desintez,careesteimportatntooluldeplasare iderutare,estetotlcuprimitiveVeriloglanivelde
pori.Sintaxadeutilizareaacestorprimitiveesteurmtoarea:
Poart Descriere Listdeterminale
andorxor
Poart IPoart SAU
Poart SAUEXCLUSIV(1ieire,1saumaimulteintrri)
nandnorxnor
Poart INUPoart SAUNU
Poart SAUNUEXCLUSIV(1ieire,1saumaimulteintrri)
Poart detransmisie Descriere Listdeterminale
notbuf
InversorTampon
(1saumaimulteieiri,1_intrare)
bufif0bufif1
Tamponcutreistri(Low)Tamponcutreistri(High)
(1ieire,1intrare,1control)
notif0notif1
Inversorcutreistri(Low)Inversorcutreistri(High)
(1ieire,1intrare,1control)
45
5/22/2018 2 Tutorial Verilog Extins
20/54
Comutatoare Descriere Listdeterminale
pmosrpmos
PMOSunidirectionalPMOSrezistiv
(1ieire,1intrare,1control)
nmosrnmos
NMOSunidirectionalNMOSrezistiv
(1ieire,1intrare,1control)
cmosrcmos
CMOSunidirectionalCMOSrezistiv
(1ieire,1intrare,ncontrol,pcontrol)
tranif1rtranif1
Tranzistorbidirecional(High)Tranzistorrezistiv(High)
(2bidirecionale,1control)
tranif0rtranif0
Tranzistorbidirecional(Low)Tranzistorrezistiv(Low)
(2bidirecionale,1control)
tran
rtran
Tranzistordetrecerebidirecional
Tranzistordetrecererezistiv
(2bidirecionale)
pulluppulldown
RezistorlasursRezistorlamas
(1ieire)
Instaniereaprimitivelor
Sintaxadeinstaniereesteurmtoarea:
Sintax primitiv
tip_poart(drive_strength)#(ntrziere)nume_instan [domeniu_instan_tablou](terminal,terminal,...);
tip_comutator#(ntrziere)nume_instan [domeniu_instan_tablou](terminal,terminal,...);
iarsintaxantrzierilorprimitiveloreste:
Sintaxntrziereprimitiv
#ntrziereor#(ntrziere)ntrzieresingularpentrutoatetranziiiledeieire
#(ntrziere,ntrziere)ntrzieriseparatepentrutranziii(rising,falling)
#(ntrziere,ntrziere,ntrziere)ntrzieriseparatepentrutranziii(rising,falling,turnoff)
#(ntrziere_minim:ntrziere_tipic:ntrziere_maxim)Domeniudentrzieridelaminimumlamaximumpentrutoatetranziiile
46
http://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.html5/22/2018 2 Tutorial Verilog Extins
21/54
#(ntrziere_minim:ntrziere_tipic:ntrziere_maxim,ntrziere_minim:ntrziere_tipic:ntrziere_maxim)Domeniudentrzieridelaminimumlamaximumpentrutranziii(rising,falling)
#(ntrziere_minim:ntrziere_tipic:ntrziere_maxim,ntrziere_minim:ntrziere_tipic:ntrziere_maxim,
ntrziere_minim:ntrziere_tipic:ntrziere_maxim)Domeniudentrzieridelaminimumlamaximumpentrutranziii(rising,falling,turnoff)
unde:- ntrziereariseesteasociat tranziieiieiriiporiin1din0,x,z- ntrziereafallesteasociat tranziieiieiriiporiin0din1,x,z- ntrziereaturnoffesteasociat tranziieiieiriiporiinzdin0,1,x- ntrzierea (opional) reprezint timpul de propagare prin primitiv i este predefinit la
zero;poateaveavalorintregisaureale
- Nume_instan (opional)poatefiutilizatpentruareferiprimitivespecificentoolurilededepanare,scheme,etc
- Domeniu_instan_tablou (opional) instaniaz primitive multiple, fiecare instan fiindconectat la bii separai ai unui vector, unde semnalele vector trebuie s aib aceeai
dimensiune cu cea a tabloului iar semnalele scalare sunt conectate la toate instanele din
tablou;domeniulestespecificatca[lhi:rhi]lafelcalainstaniereamodulelor
PrimitiveDefinitedeUtilizator
CumprimitiveleinclusenVerilogsuntns puine,dac estenevoiedeprimitivemaicomplexeatuncise
furnizeaz UDP(UserDefinedPrimitivesprimitivedefinitedeutilizator).
UDPpotmodelalogic combinaional isecvenial ipotincludentrzieri.Eletrebuiedefinitenafara
corpuluimodule...endmodule.
SintaxanUDPesteurmtoarea:
primitivenume_primitiv (porturi/terminale);
declaraii_primitive
construcii_initial...
tabel_definiie
endprimitive
unde:
47
http://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.html5/22/2018 2 Tutorial Verilog Extins
22/54
- nume_primitiv:identificator- declaraii_UDP: declaraii_ieiri_UDP, declaraii_registre pentru ieiri (numai pentru UDP
secveniale),declaraii_intrri_UDP;
- construcii initial (opional): stabilesc valoarea iniial (1b0, 1b1, 1bx, 1, 0) a terminalelor deieireprinatrinuireauneivaloriliteralepeunsingurbitunuiregistruterminaldeieire;valoarea
predefinit estex.
- tabela_definiie a funcionrii: descrie funcionalitatea primitive, att combinaional, ct isecvenialiarestructuratableintrri_tabel ...endtable;
CaracteristicileUDP:
RegulidefolosireaporturilornUDP:- OUDPpoateconinenumaioieire ipn la9intrri(UDPsecveniale)sau10intrri
(UDPcombinaionale);portuldeieiretrebuies fieprimulporturmatdeunasaumaimulteporturideintrare
- Toate porturile UDP sunt scalari; porturile vectori nu sunt permise; UDP nu pot aveaporturibidirecionale
- TerminaluldeieireauneiUDPsecvenialecereodeclaraiesuplimentar catipregistru- Este ilegal s se declare un registru pentru un terminal de ieire a unei UDP
combinaionale
Fiecare linie dintrtabel este o condiie; cnd o intrare se schimb, condiia de intrare estemarcat iieireaesteevaluat pentruareflectanouaschimbareaintrrii
UDPutilizeaz simbolurispecialepentruadescriefunciicafrontcrector,nuconteaz .a:Simbol Interpretare Explicaie
0sau1sauxsauX 0sau1sauxsauX 0,1saunecunoscutpeintraresauieire
? 0sau1saux Intrareapoatefi0sau1saux
bsauB 0sau1 Intrareapoatefi0sau1
fsauF (10) Frontdescresctorpeointrare
rsauR (01) Frontcresctorpeointrare
psauP (01)sau(0x)sau(x1)sau(1z)sau(z1) Frontpozitivincluzndxiz
nsauN (10)sau(1x)sau(x0)sau(0z)sau(z0) Frontnegativincluzndxiz
* (??) Toatetranziiileposibilepeintrri
NicioschimbareNicioschimbarelaieire(numaipentruUDPsecveniale)
48
5/22/2018 2 Tutorial Verilog Extins
23/54
UDPcombinaionaleIeireaestedeterminat caofunciedeintrareacurent.Oridecteoriointrareischimb valoarea,
UDP este evaluat i unul dintre rndurile tabelei de stare este marcat. Ieirea strii este setat la
valoareaindicat prinacelrnd.Acestlucruestesimilarconstruciilordecondiie:fiecareliniedintabel
esteocondiie.UDPcombinaionaleauuncmppentruintrri iunulpentruieire,caresuntseparate
prinsimbolul:.Fiecarerndaltabeleiesteterminatprinsimbolul;.Ordineaintrrilorndescrierea
tabeleidestaretrebuies corespund cuordineaintrrilordinlistadeporturidinantetuldedefinirea
UDP. Nu are legtur cu ordinea de declarare a intrrilor. Intrrile trebuie separate unele de altele
printrunspaiuliber.
Fiecare rnd din tabel definete ieirea pentru combinaie particular de stri de intrare. Dac toate
intrrilesuntspecificatecax,atunciieireatrebuiespecificat cax.Toatecombinaiilecarenusuntspecificateexplicitrezultnstareapredefinit deieirecax.
Esteilegalsaexisteaceeaicombinaiedeintrri,specificat pentrudiferiteieiri.
UDPsecvenialesenzitivepenivelComportarea este specificat la fel ca mai sus, cu excepia faptului c ieirea este declarat ca tip
registruiexist uncmpsuplimentarnfiecareintrareatabelei,carereprezint stareacurent aUDP.
Ieirea indic faptul c exist o stare intern I are aceeaI valoare cu ea. Cmpul suplimentar este
separatprinsimbolul:ntrecmpulpentruintrriicelpentruieire.
UDPsecvenialesenzitivepefrontDifer fa deceleanterioareprinfaptulc schimbrilelaieiresunteantionateprintranziiispecifice
ale intrrilor. Pentru fiecare intraren tabel, numai un singur semnal de poate avea poate avea
specificat otranziiepefront.Toatecelelaltesemnaledeintraretrebuies aib intrrintabel pentru
aacoperitranziiilesauUDPvafurnizaxlaieirecndtranziiaapare.Intrriledintabel senzitivepe
frontsuntmaipuinprioritaredectcelesenzitivepenivel.
2.2.5.TIPURIDEDATE;IRURI
Sintaxadedeclarareatipurilordedateesteurmtoarea:
49
5/22/2018 2 Tutorial Verilog Extins
24/54
Sintaxa
tip_registru[dimensiune]nume_variabil,nume_variabil,...;
tip_registru[dimensiune]nume_memorie[dimensiune_tablou];
tip_legtur[dimensiune]#(ntrziere)nume_legtur,nume_legtur,...;
tip_legtur(drive_strength)[dimensiune]#(ntrziere)nume_legtur=atribuire_continu;
trireg(capacitance_strength)[dimensiune]#(ntrziere,timp_decay)nume_legtur,nume_legtur,...;
parameternume_constant=valoare,nume_constant=valoare,...;
specparamnume_constant=valoare,nume_constant=valoare,...;
eventnume_eveniment,nume_eveniment,...;
unde:
ntrziere (opional) poate fi specificat numai pentru tipul legtur. Sintaxa este la fel ca laprimitive.
Dimensiuneaesteundomeniudeforma[msb:lsb].Valorile msb i lsb trebuie s fientregi, parametrintregi sau o expresie care se rezum la o
constant ntreag.Sepoatefolosiattconvenialittleendian(lsbestecelmaimicbit)ct i
conveniabigendian(lsbestecelmaimarebit).
Dimensiuneamaxim aunuivectorpoatefilimitat darnumaipuinde216bii.
Dimensiune_tablouestedeforma[prima_adres :ultima_adres].Cele dou valori trebuie s fientregi, parametrintregi sau o expresie care se rezum la o
constantntreag.Potfiutilizatesauordineacresctoaresauceadescresctoare.
Dimensiuneamaxim aunuitabloupoatefilimitat darnumaipuinde224bii.
Timp_decay(opional)specific volumuldetimpncareolegtur triregvamemoraoncrcaredup cetoatesurselesevoropri,naintedeajungerealavcaloarealogic X.
Sintaxa este (ntrziere_cresctoare,ntrziere_cztoare, timp_decay). Valoare de default a
timpuluiesteinfinit.
Verilogaredou tipuriprimarededate:
- Legturreprezint conexiunistructuralentrecomponente- Registrureprezint variabileutilizatepentruamemoradate
50
http://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.html5/22/2018 2 Tutorial Verilog Extins
25/54
Fiecaresemnalareuntipdedateasociatcuel,astfel:
- Prindeclarareexplicit:cuodeclaraiencodulVerilog- Prindeclarare implicit:fr declarare cndse conecteaz structuralblocurile constructivedin
cod;aceastaestentotdeaunaolegtur detipwireidedimensiuneunbit.
Tipurilegtur
Fieacre tip de legtur are o funcionalitate care este utilizat pentru a modela diferite tipuri de
hardware(cumarfiPMOS,NMOS,CMOS,etc).
Exist urmtoareletipuridelegturi:
Mnemonica Funcionalitatea
wiresautri Interconectaresimpl defire
worsautrior IeirilegateprinSAUcablat(modelECL)
wandsautriand IeirilegateprinIcablat(modelopencollector)
tri0 Legturalamas cutreistri(Pullsdowncutristated)
tri1 Legturalasurs cutreistri(Pullsupcutristated)
supply0 Constant logic 0(supplystrength)
supply1 Constant logic 1(supplystrength)
trireg Reineultimavaloarecndtrecentreistri(capacitancestrength)
TipulwireestecelmaifolositnproiecteleVerilog.
Exemple:
wora; sauwanda;
regb, c;
assigna = b;
assigna = c; //a = b | c saua = b & c si pleaca cu valoarea x
sau
tria; sautrirega;
regb, c;
assigna = (b) ? c : 1'bz; // a pleaca cu valoarea z si va prelua c sau z
// saua pleaca cu valoarea x si va prelua ultima
// valoare c
51
5/22/2018 2 Tutorial Verilog Extins
26/54
Legturiletransfer attvalorilogice,ctiputeri(strengths)logice.
Olegtur dedatetrebuieutilizat cnd:
- unsemnalestedatdectreieireaunuianumitdispozitiv- unsemnalestedeclaratcaportdeintraresaubidirecional- unsemnalestedeparteastng auneiatribuiricontinue
Tipuriregistru
Registrele memoreaz ultima valoare atribuit lor pn ce o alt atribuire le schimb valoarea. Ele
reprezint constructoridememorareadatelor.Sepotcreareelederegistrenumitememorii.Tipurile
dedate registrusunt utilizateca variabilenblocurile procedurale. Un astfel de tip estecerut dac un
semnalesteatribuituneivaloriprintrunblocprocedural(acesteblocurincepcuinitialsaualways).
Exist urmtoareletipurideregistre:
Mnemonica Funcionalitatea
reg Variabil fr semnpeoricedimensiunedebii
integer Variabil cusemnpe32bii
time Variabil fr semnpe64bii
realsaurealtime Variabilnvirgul mobil cudubl precizie
TipulregestecelmaifolositnproiecteleVerilog.Tipurilededateregistrusuntutilizatecavariabilen
blocurile procedurale. Ele memoreaz numai valori logice (nu strengths) i trebuie utilizate cnd
semnalulestepestngauneiatribuiriprocedurale.
iruri
Uniresteosecven decaracterencadratepringhilimeleitoateconinutentrosingur linie.irurile
utilizatecaoperanzinexpresiiiatribuirisunttratatecaosecven devaloareASCIIpe8bii,valoarece
reprezint uncaracter.Pentruadeclaraovariabil s memorezeun ir,sedeclar unregistrusuficient
demarepentruainenumrulmaximdecarcaterepecarevariabilalpstreaz;nVerilognusecerbii
suplimentari pentru a pstra o terminaie de caracter. irurile pot fi manipulate utiliznd operatori
standard. Cnd o variabil este mai mare dect este cerut s pstreze o valoaren timpul atribuirii,
Verilog umple coninutul la stnga cu zerouri dup atribuire. Acest fapt asigur consistenan timpul
atribuiriiunorvalorinonir.
52
5/22/2018 2 Tutorial Verilog Extins
27/54
Anumitecaracterepotfiutilizaten irurinumaicndsuntprecedatedeuncaracterintroductivnumit
caracterdescpare(escape).Acestecaracterespecialesunturmtoarele:
Caracter Descriere
\n Caracterlinienou
\t CaracterTab
\\ Caracterbackslash(\)
\ Caracterghilimele
\ddd Caracterspecificatn13digiioctali(0
5/22/2018 2 Tutorial Verilog Extins
28/54
2.3.OPERATORIDELIMBAJ
Operatoriiexecut ooperaiepeunulsaudoioperanzi:
Expresiiunare:operatoroperand Expresiibinare:operandoperatoroperand
Operanzii pot fi de tip legturi sau registru i pot fi scalar, vector sau o selecie de bii ai unui vector.
Operatorii carentorc un rezultat adevrat/fals vorntoarce o valoare pe 1 bit cu valoare 1 pentru
adevrat,0pentrufalsixpentrunedeterminat.
2.3.1.OPERATORIARITMETICI
Simbol Utilizare Descriere
+ m+n Adun nlam
m n Scadendinm
m Negatulluim(ncomplementfa de2)
* m*n nmuletemcun
/ m/n mpartemlan
% m%n Modululdem/n
mprireantreag trunchiaz orice parte fracional. Rezultatul operaiei modul ia semnul primului
operand.Daca oricarebitalunuioperand arevaloare x,atuncintregulrezultatestex. Tipurile de
date registru sunt utilizate ca valori fr semn (numerele negative sunt memorate n cod
complementar).
2.3.2.OPERATORILANIVELDEBIT
Simbol Utilizare Descriere
~ ~m Inverseaz (neag)fiecarebitalluim
& m&n Ilogicfiecarebitalluimcufiecarebitalluin
| m|n SAUlogicfiecarebitalluimcufiecarebitalluin
^ m^n SAUEXCLUSIVfiecarebitalluimcufiecarebitalluin
~^^~
m~^nm^~n
SAUNUEXCLUSIVfiecarebitalluimcufiecarebitalluin
54
5/22/2018 2 Tutorial Verilog Extins
29/54
Dac unoperandestemaiscurtdectaltul,elsevaextindelastngacuzerouripn cesepotriveteca
lungimecuoperandulmailung.Operaiileconsider ibiidevaloarex.
2.3.3.OPERATORIDEREDUCERE
Simbol Utilizare Descriere
& &m Ilogicmpreun petoibiiidinm(1 Adevrat/1 Fals)
~& ~&m INUlogicmpreun petoibiiidinm(1 Adevrat/1 Fals)
| |m SAUlogicmpreun petoibiiidinm(1 Adevrat/1 Fals)
~| ~|m SAUNUlogicmpreun petoibiiidinm(1 Adevrat/1 Fals)
^ ^m SAUEXCLUSIVmpreun petoibiiidinm(1 Adevrat/1 Fals)
~^
^~
~^m
^~m
SAUNUEXCLUSIVmpreun petoibiiidinm(1 Adevrat/1 Fals)
Operatoriidereduceresuntunariiproducrezultatpe1bit.Operaiiledereducereconsider ibiiide
valoarex.
2.3.4.OPERATORILOGICI
Simbol Utilizare Descriere
! !m m negat logic (1 Adevrat/1 Fals)
&& m && n m I logic n (1 Adevrat/1 Fals)
|| m || n m SAU logic n (1 Adevrat/1 Fals)
Expresiile conectate prin && sau || sunt evaluate de la stnga la dreapta. Rezultatul este x dac
oricareoperandconinebiidevaloarex.
2.3.5.OPERATORIDEEGALITATE
Simbol Utilizare Descriere
== m==n Estemegalcun?(1 Adevrat/1 Fals)
!= m!=n Estemneegal(diferit)cu(de)n?(1 Adevrat/1 Fals)
=== m===n Estemidenticcun?(1 Adevrat/1 Fals)
!== m!==n Estemneidentic(diferit)cu(de)n?(1 Adevrat/1 Fals)
55
5/22/2018 2 Tutorial Verilog Extins
30/54
Egalitatea este logic (rezultatul este x dac operatorii conin x sau z) iar identitatea este
cazuistic (includeicomparaiidexiz).
Operanzii sunt comparai bit cu bit, cu adugri de zerouri dac cei doi operanzi nu au aceeai
dimensiune.
2.3.6.OPERATORIRELAIONALI
Simbol Utilizare Descriere
n Estemmaimaredectn?(1 Adevrat/1 Fals)
=n Estemmaimaresauegal dectn?(1 Adevrat/1 Fals)
Dac oricaredintreoperanziestexsauz,atuncirezultatulesteconsideratfals.
2.3.7.ALIOPERATORI
Operatorideplasarelogic
Simbol Utilizare Descriere
n Deplasaremladreaptadenori
Poziiilevacantesuntumplutecuzerouri.
MiscellaneousOperators
Simbol Utilizare Descriere
?: sel?m:nOperatorcondiional:dac selesteadevrat,selecteaz m:altfelselecteaz n
{} {m,n} Concateneaz mlan,realizndunvector
maimare
{{}} {n{m}} Replic mdenori
> >mPoziioneaz unsemaforpeuntipdedateevent
56
5/22/2018 2 Tutorial Verilog Extins
31/54
Concatenarea nu permite numere constante fr semn. Se pot utiliza multiplicatori (constante) de
repetare(exemplu:>{5{b}}//echivalentcu{b,b,b,b,b}).
Sunt posibile operaii cu operatori de concatenare I replicarembricai (exemplu: > {a, {4{b, c}}} //
echivalentcu{a,b,c,b,c,b,c,b,c}).
2.3.8.PRECEDENAOPERATORILOR
Precedenaoperatorilor
! ~ + (unari)
* / %
+ (binari)
=
== != === !==
& ~&
^ ~^
| ~|
&&
||
?:
Ceamainalt preceden
Ceamaisczut preceden
Operatorii de pe aceeai linie au aceeai preceden i asociaz termenul din stnga celui din dreapta
ntroexpresie.
Parantezelesuntutilizatepentruamodificaprecedenasaupentruaclarificasituaia.
Pentruauuranelegerea,serecomanda utilizareaparantezelor.
57
5/22/2018 2 Tutorial Verilog Extins
32/54
2.4.CONSTRUCII/INSTRUCIUNIVERILOG
2.4.1.BLOCURIPROCEDURALE
Deregul codulcomportamentalVerilogexistninteriorulblocurilorprocedurale,darexist iexcepii
carevorfiprezentateulterior.
nVerilogexist dou tipurideblocuriprocedurale:
- initial:seexecut numaiodat,lamomentuldetimpzero(cndseporneteexecuia)- always: aceste bucle se execut mereu i mereu, adic, dup cum sugereaz i numele, se
executntotdeaunapnalaoprireasimulrii
Sintaxablocurilorproceduraleesteurmtoarea:
Sintaxa
tip_bloc@(list_senzitivitate)grup_instruciuni:nume_grupdeclaraii_variabile_localecontrol_sincronizareinstruciuni_procedurale
sfrit_grup_instruciuni
unde:
tip_bloc:esteunuldinceledou tipurideblocuriprocedurale list_senzitivitate:esteunevenimentdecontrolalsincronizriicarestabiletecndvorncepea
fi evaluate toate instruciunile din blocul procedural; lista este utilizat pentru a modela
comportarealogic combinaional isecvenial
structura grup_instruciuni sfrit_grup_instruciuni: este utilzat pentru a grupampreundou saumaimulteinstruciuniproceduraleicontroleaz ordineadeexecuie
- begin end grupeaz mpreun dou sau mai multe instruciunin mod secvenial,astfelnctinstruciuniles fieevaluatenordineancaresuntlistate;fiecarecontrolde
sincronizare este relativ la instruciunea precedent iar blocul se termin dup ultima
instruciunedinbloc
- forkjoin grupeaz mpreun dou sau mai multe instruciunin mod paralel, astfelnct toate instruciunile sunt evaluate concurent; fiecare control de sincronizare este
absolut lamomentulcndgrupulncepes seexecuteiarbloculsetermin cnddup
ultimainstruciune(instruciunilecuceamaimarentrzierepotfiprimeledinbloc)
58
http://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.html5/22/2018 2 Tutorial Verilog Extins
33/54
- Potexistaconstruciiforkjoinninterioruluneiconstruciibeginend- nume_grup (opional): creaz un scopn grupul de instruciuni; grupurile (blocurile)
denumitepotaveavariabilelocaleipotfidezactivateprinconstruciadisable
- declaraii_variabile_locale(opional):trebuies fieuntipdedateregistru- control_sincronizare:esteutilzatpentruacontrolaatuncicndseexecut instruciunile
dintrunblocprocedural;vafiprezentatulterior
- instruciuni_procedurale: sunt atribuiriprocedurale lao variabil registru(reg, integer,time) sau instruciuni program i vor fi prezentate ulterior; atribuirile procedurale pot
atribuivaloridetip legtur (wire),constante,unaltregistrusauo valoarespecific iar
instruciunile program pot fi instruciuni condiionale, de caz, de repetare sau
dezactivare
2.4.2.ATRIBUIRIPROCEDURALE
Potfiatribuiridetipblocantesaunonblocante.
Atribuirile blocante se execut n ordinean care au fost scrise, adic sunt secveniale.Ele au simbolul
=.Acesteatribuiriacioneaz cainlimbajeletradiionaledeprogramare:instruciuneaurmtoarenu
seexecut pnacentreagainstruciunecurent estecompletexecutat idoaratuncisetrececontrolul
execuieilainstruciuneaurmtoareceleicurente.
Sintaxauneiatribuiriblocanteesteurmtoarea:nume_tip_date_registru=expresie;
Atribuirilenonblocantesuntexecutatenparalel.Eleausimbolul
5/22/2018 2 Tutorial Verilog Extins
34/54
always@(posedge clk)
begin
a = a+1; //n acest moment a=2
a = a+2; //n acest moment a=4
end //rezultat final a=4
// testarea atribuirii nonblocante
always@(posedge clk)
begin
a
5/22/2018 2 Tutorial Verilog Extins
35/54
Sepotutilizantimpulsimulriilaniveldeporincazulproblemelordeconectivitatelareset.
Deasemenea,potfiutilizatepentruainseraunulsaudoibiideeroarelaocitirededatedelamemorie.
Sintaxaacestoraesteurmtoarea:
forcenume_tip_date_registrusaulegtur=expresie;
releasenume_tip_date_registrusaulegtur;
2.4.3.CONSTRUCII/INSTRUCIUNICONDIIONALE
Construciaifelsecontroleaz execuiaaltorinstruciuniipoateincludesincronizriprocedurale.
Cndmaimultdeoinstruciunenecesit afiexecutat pentruocondiieif,atuncisevorutilizabegini
endninteriorulconstruciei.
Sintaxainstruciunilorcondiionaleesteurmtoarea:
Sintaxa
Instruciuneif
if(expresie_condiie)//dac expresiaevaluat esteadevratinstruciunesaugrupdeinstruciuni//execut instruciuneasaugrupuldeinstruciuni
Instruciuneifelse
if(expresie_condiie)//dac expresiaevaluat esteadevratinstruciunesaugrupdeinstruciuni//execut instruciuneasaugrupuldeinstruciuni
else//altfeldac expresiaevaluat estefals saunecunoscut
instruciunesaugrupdeinstruciuni//execut instruciuneasaugrupuldeinstruciuni
Instruciunembricat ifelseif
if(expresie1_condiie)//dac expresiaevaluat esteadevratinstruciunesaugrupdeinstruciuni//execut instruciuneasaugrupuldeinstruciuni
elseif(expresie2_condiie)//altfeldac expresia1evaluat estefals saunecunoscut//idac expresia2evaluat esteadevrat
instruciunesaugrupdeinstruciuni//execut instruciuneasaugrupuldeinstruciuni
nmodnormalnuseincludeverificareaderesetnexpresia_condiie.Aac atuncicndestenecesar o
logic deprioriti,seutilizeaz construciaifelseif.
Pedealt partedac nusedoreteimplementareauneilogicideprioriti,tiindc numaiointrareeste
activ launmomentdat(adic toateintrrilesuntmutualexclusive),atuncisepoatescriecodulVerilog
allogiciintrunifparaleldeformaifelseifif.
61
5/22/2018 2 Tutorial Verilog Extins
36/54
2.4.4.CONSTRUCII/INSTRUCIUNIDECAZ
Construciile de caz compar o expresie cu o serie de cazuri i execut instruciunea sau grupul de
instruciuniasociatcuprimapotriviredecaz.ncazulgrupuluideinstruciunimultipleseutilizeaz begin
end.
Sintaxainstruciunilordecazesteurmtoarea:
Sintaxa
Instruciunecase
case(legtur_sau_registru_sau_simbolliteral) //compar legtura,registrulsaupotrivire_caz1:instruciunesaugrupdeinstruciuni//valoareasimboluluiliteralcufiecarecazipotrivire_caz2, //execut instruciuneasaugrupuldeinstruciuni
potrivire_caz3:instruciunesaugrupdeinstruciuni//asociatcuprimapotriviredecazdefault:instruciunesaugrupdeinstruciuni //execut predefinit(opional)dac
endcase //niciuncaznusepotrivete
Instruciunecasez
casez(legtur_sau_registru_sau_simbolliteral) //trateaz zcanuconteaz
Instruciunecasex
casex(legtur_sau_registru_sau_simbolliteral) //trateaz xizcanuconteaz
Cndnusefolosetedefaultatuncitrebuieprecizatetoatecazurile.
Dac lamaimultecazuriseexecut aceeaiinstruciunesaugrupdeinstruciuniatuncisepotspecifica
cazurilemultiplecaunsingurcaz,dup cumseprezintnexempluldemaijos:
modulemux_fara_default (a,b,c,d,sel,y);inputa, b, c, d;input[1:0] sel;outputy;
regy;
always@ (a orb orc ord orsel)case(sel)
0 : y = a;1 : y = b;2 : y = c;3 : y = d;2'bxx,2'bx0,2'bx1,2'b0x,2'b1x,2'bzz,2'bz0,2'bz1,2'b0z,2'b1z : $display("Eroare de selectie");
endcase
endmodule
62
5/22/2018 2 Tutorial Verilog Extins
37/54
2.4.5.CONSTRUCII/INSTRUCIUNIPENTRUREPETARE
Construciile de repetare apar numain interiorul blocurilor procedurale.Verilog are patru astfel de
construcii(forever,repeat,while,for)ivorfiprezentatencontinuare.
Forever
Bucla forever se execut continuu, ea nu se termin niciodat.n mod normal se utilizeaz aceast
instruciunenblocurileinitial.
Sintaxaesteurmtoarea:
foreverinstruciunesaugrupdeinstruciuni
Trebuieacordat oateniedeosebit lautilizareaacesteiinstruciuni:simulareasepoateagadacanu
esteprezentunconstructordesincronizare.
Repeat
Buclarepeatseexecut deunnumrfixatdeori.Numrulpoatefiunntreg,ovariabil sauoexpresie
(ovariabil sauoexpresieesteevaluat numaicndseintr primadatnbucl).
Sintaxaesteurmtoarea:
repeat(numr)instruciunesaugrupdeinstruciuni
Trebuielafelavut grij pentrusincronizareainstruciunilormultipledininteriorulbuclei.
While
Buclawhileseexecut atttimpctexpresiaesteevaluat caadevrat.
Sintaxaesteurmtoarea:
while(expresie)instruciunesaugrupdeinstruciuni
For
Sintaxaesteurmtoarea:
for(atribuire_iniial;expresie;atribuire_pas)instruciunesaugrupdeinstruciuni
Buclafor,lafelcanoricelimbajdeprogramare:
63
5/22/2018 2 Tutorial Verilog Extins
38/54
- Execut oatribuireiniial odat lastartulbuclei- Execut buclaatttimpctexpresiaesteevaluat caadevrat- Execut oatribuiredepaslasfritulfiecreitreceriprinbucl
Exemplu:...
for(i = 0; i < 256; i = i + 1)begin
...
Trebuielafelavut grij pentrusincronizareainstruciunilormultipledininteriorulbuclei.
2.4.6.CONSTRUCII/INSTRUCIUNIDEDEZACTIVARE
Sintaxaesteurmtoarea:
disablenume_grup;
ntrerupe execuia unui grup denumit de instruciuni. Simularea acestui grup sare la sfritul grupului
fr execuiaoricruievenimentprogramat.
2.4.7.ATRIBUIREACONTINU;PROPAGAREANTRZIERILOR
Construciile de atribuiri continue manipuleaz legturi (tipuri de date fire). Ele reprezint conexiuni
structurale.
Sintaxaesteurmtoarea:
Sintaxa
Atribuirecontinu explicit
tip_legtur [dimensiune]nume_legtur;assign(strength)#(ntrziere)nume_legtur=expresie;
Atribuirecontinu implicit
tip_legtur[dimensiune](strength)nume_legtur=expresie;
Atribuirilecontinueexplicitecerdou instruciuni:unapentruadeclaralegturaiunapentruaatribuicontinuuovaloarelaaceasta.
Atribuirile continue implicite combin declararea legturii i atribuirea continu ntro singurinstruciune.
64
http://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.html5/22/2018 2 Tutorial Verilog Extins
39/54
Tip_legtur poatefioricetipdedatelegtur cuexcepiatrireg. Strength (opional) poate fi specificat numai cnd atribuirea continu este combinat cu o
declararedelegtur.Valoareapredefinit pentrustrengtheste(strong1,strong0).
ntrzierea (opional) urmrete aceeai sintax ca la instanierea primitivelor. Valoareapredefinit estezero.
Expresiapoateincludeoricetipdedate,oriceoperatoriapelridefuncii. Atribuirile continue modeleaz tampoane (buffers) cu impedan nalt i pot modela logica
detipcombinaional.Defiecaredat cndunsemnalseschimb peparteadindreapt,partea
dreapt estereevaluat irezultatulesteatribuitlegturiidinparteastng.
Atribuirile continue sunt declarate n afara blocurilor procedurale i se extind peste oriceatribuiriprocedurale.Eledevinautomatactivelamomentulzero isuntevaluateconcurentcu
blocurileprocedurale,instanieriledemoduleideprimitive.
Exemple:
...
reg a, b;wiresuma, transport_out;
assign#5 { transport_out,suma} = a+b;
...sau
...
wire[0:31] (strong1, pull0) ual_out = functie_ual(cod_op,a,b);
...sau
...
regdate_in, activare;wiredate_out;
assigndate_out = (activare) ? date_in : 1'bz;
...sau
...
tri[0:15] #5 date_out = (activare) ? date_in : 16'bz;
...etc.
65
5/22/2018 2 Tutorial Verilog Extins
40/54
Propagareantrzierilor
Atribuirilecontinuepotaveaontrzierespecificat inumaipentrutoatetranziiile.Poatefispecificat
iundomeniudentrzieriminim:tipic:maxim.
Exemplu:
assign#(1:2:3) date_out = (activare) ? date_in : 1'bz;
2.4.8.CONTROLULBLOCURILORPROCEDURALE;BLOCURINUMITE
Blocurile procedurale devin active la momentul zero de simulare. Pentru a controla execuia unei
proceduriseutilizeaz evenimentesenzitivepenivel.Nusepoatecontrolaunbloccuovariabil creia
bloculiatribuie valorisaupecareellemanipuleaz.Dacninteriorulunuimodulexist blocurialways
multiple,atruncitoateblocurile (always i initial)vorncepes seexecutede lamomentulzero ivor
continuas seexecuteconcurent;deseoriacestlucrupoateconducelacondiiineprecizateiieirilenu
potfistabilite.
Controlulproceduralallogiciicombinaionale
Pentruamodelalogicadetipcombinaional,unblocproceduraltrebuies fiesenzitivlaoriceschimbare
a intrrilor. Daca se utilizeaz instruciunea condiional atunci este nevoie s se utilizeze i partea
else; lipsa acestei pri schimb logicantrun latch. Daca nu se dorete utilizarea else atunci
trebuies seiniializezetoatevariabileledinbloculcombinaionalchiardelanceput.
Controlulproceduralallogiciisecveniale
Pentruamodelalogicadetipcombinaional,unblocproceduraltrebuies fiesenzitivlafrontulpozitiv
sau negativ al semnalului de ceas. Dac se dorete o iniializare asincron atunci blocul trebuie s fie
senzitiv i la frontul semnalelor de reset, preset, clear, etc. Toate atribuirile la logica sevenial
trebuies fierealizateprinatribuiriproceduralenonblocante.Lasimularesepotutilizafronturimultiple
alevariabilelordarlasintez numaiunfrontalvariabileiconteaz nfuncionareareal;nuestebinelasintez s seutilizezesemnaluldeceaspentruaactivabistabile.
Blocurinumite
Blocurile pot fi numite prin adugarea construciei : nume_bloc dup begin. Blocurile numite pot fi
dezactivateprinutilizareainstruciuniidisableninteriorulblocului.
66
5/22/2018 2 Tutorial Verilog Extins
41/54
2.4.9.BLOCURISPECIFICE
Auurmtoareasintax:
Sintaxa
specifydeclaraii_specparamverificri_constrngeri_timingntrziere_cale_simpl_pinlapinntrziere_cale_frontsenzitiv_pinlapinntrziere_cale_staredependent_pinlapinendspecify
Declaraii_specparam
Ausintaxa:
specparamnume_parametru=valoare,nume_parametru=valoare,...;
Parametrii specifici sunt constant utilizate pentru a memorantrzieri, factori de calcul aintrzierii,
factoridesintez,etc.Valorilelorpotfintregi,realisauiruri.
Verificriconstrngeridetiming
Sunttaskurisistemcaremodeleaz restriciilelaschimbrilepeintrri,cumsunttimpiidesetupide
hold.
Ausintaxaurmtoare:
Sintaxa
$setup(eveniment_date,eveniment_referin,limit_setup,notificare);
$hold(eveniment_date,eveniment_referin,limit_hold,notificare);
$setuphold(eveniment_referin,eveniment_date,limit_setup,limit_hold,notificare);
$skew(eveniment_referin,eveniment_date,limit_skew,notificare);
$recovery(eveniment_referin,eveniment_date,limit,notificare);
$period(eveniment_referin,limit_period,notificare);
$width(eveniment_referin,width_limit,width_threshold,notificare);
67
http://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.html5/22/2018 2 Tutorial Verilog Extins
42/54
Caracteristici:
Verificriledetimingpotfiutilizatenumainblocurispecifice. Evenimentul de referin este un front al unui semnal de intrare care stabilete un punct de
referin pentru schimbrile unui eveniment de date. Evenimentul de date este semnalul de
intrarecareestemonitorizatpentruschimbri.Evenimentelededate idereferin trebuies
fieporturideintrare.
Limit ithresholdsuntvaloridentrzieri iutilizeaz aceeaisintax lantrzierilesingularedeprimitive.
Notificarea(opional)esteovariabil registruutilizat caunindicator.Cndapareoviolaredetiming, funcionalitatea modelului poate utiliza indicatorul de notificare pentru a modifica
ieirilemodelului.
ntrziericalepinlapin
ntrzierecalesimpl:(port_intrarepolaritate:indicator_caleport_ieire)=(ntrziere);
ntrzierecalesenzitiv pefront:(frontport_intrareindicator_cale(port_ieirepolaritate:surs))=(ntrziere);
- Front (opional) poate fiposedge sau negedge. Dca nu este specificat sunt utilizatetoatetranziiiledeintrare.
- Sursa(opional)esteportuldeintraresauvaloareadeieirecarevafiprimit.Sursaesteignorat de ctre majoritatea simulatoarelor logice, dar poate fi utilizat de ctre
analizoareledetiming.
ntrzierecaledependent destare:if(prima_condiie)ntrziere_cale_simpl_sau_frontsenzitiv
if(urmtoarea_condiie)ntrziere_cale_simpl_sau_frontsenzitiv
ifnonentrziere_cale_simpl- Permitentrzieridiferitepentruaceeaicalecareurmeaz afispecificat,pebazaaltor
condiiideintrare.
- Condiiapoatefibazat numaipeporturideintrare.
68
http://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.html5/22/2018 2 Tutorial Verilog Extins
43/54
- Cu condiii pot fi utilizai majoritatea operatorilor, dar trebuie sa se rezume laadevrat/fals(ovaloarelogic xsauzesteconsiderat adevrat;dacaocondiiese
rezum launvectoresteutilizatnumailsb).
- Fiecarentrziere dependent de stare pentru aceeai cale trebuie s aib o condiiediferit sauunfrontsenzitivdiferit.
- Condiia ifnone (opional) poate fi numai ontrziere de cale simpl i servete cavaloarepredefinit dac nuesteevaluat niciocondiiecaadevrat.
o Polaritatea (opional) este ori + sau P i indic dac intrarea va fi sau nu va fi inversat.Indicatorul de polaritate este ignorat de ctre majoritatea simulatoarelor logice, dar poate fi
utilizat dectreanalizoareledetiming.
o Indicatorul de cale este ori simbolul *> pentru conexiune complet sau simbolul => pentruconexiuneparalel.ntrziereadecalecompletconectat indic faptulc fiecarebitdeintrarepoateaveaocaledentrzierelafiecarebitdeieire.ntrziereadecaleconectat paralelindic
faptulc fiecarebitdeintrareesteconectatlabitulsucorespondentdeieire(bitul0labitul0,
bitul1labitul1,...).
o ntrziereareprezint faptulc potfispecificate1,2,3,6sau12tranziii.Fiecaretranziiepoateaveaontrzieresingular sauundomeniudentrziereminim:tipic:maxim.
ntrzieri Tranziiireprezentate(nordine)
1 Toatetranziiiledeieire
2Tranziiiledeieirecresctoareidescresctoare
3Tranziiiledeieirecresctoare,descresctoareiturnoff
6Tranziiicresctoare,descresctoare,0>Z,Z>1,1>Z,Z>0
12Tranziiicresctoare,descresctoare,0>Z,Z>1,1>Z,Z>0,
0>X,X>1,1>X,X>0,X>Z,Z>X
2.4.10.CONTROLULSINCRONIZRIINBLOCURILEPROCEDURALE
Controlulsincronizriisepoaterealizaprincontrolulntrzierii,princontrolulevenimentelorsenzitivepe
frontsauprincontrolulevenimentelorsenzitivepenivel.
69
5/22/2018 2 Tutorial Verilog Extins
44/54
Controlulntrzierii
Sintaxaesteurmtoarea:#ntrziere
ntrzie execuia unei construcii procedurale pentru o valoare specific de timp.ntrzierea poate fi
oricenumrliteral,ovariabil sauoexpresie.
Controlulevenimentelorsenzitivepefront
Aresintaxa:@(front_semnalsaufront_semnalsau...) instruciune;
trzie execuia pn ce apare o tranziie logic pe un semnal. Frontul (opional) poate fiposedge sau
negedge;dacanusespecific niciunfrontatunciesteutilizat oricetranziielogic.Semnalulpoatefi
scalarsauvectorideoricetipdedate.
Controlulevenimentelorsenzitivepenivelconstruciiwait
Sintaxaesteurmtoarea:wait(expresie)#ntrziereinstruciune;
ntrzieexecuiapn ceexpresiaesteevaluat caadevrat.
Altesincronizri
Sintaxeposibile:
control_ntrzierenume_tip_date_registru=expresie;
control_ntrzierenume_tip_date_registru
5/22/2018 2 Tutorial Verilog Extins
45/54
Sunt atribuiri nonblocantentrziate intern. Expresia este evaluat n fiecare pas de timpn care este
ntlnit instruciunea iesteatrbuit lasfritulpasuluidetimpspecificatprincontrolulsincronizrilor
anterioare.Sincronizareamodeleaz transportulntrzierii.
Controlul intern al atribuirilor evalueaz ntotdeauna expresia din partea dreapt i atribuie rezultatuldupntrzieresauevenimentdecontrol
Ori de cte ori un semnal se schimb n partea dreapt,ntreaga parte dreapt este reevaluat i
rezultatulesteatribuitnparteastng.
2.5.TASKURIIFUNCII
2.5.1.TASKURI
Taskurile sunt utilizate can toate limbajele de programare i sunt cunoscuten general ca procedurisausubrutine.Liniiledecodsuntdelimitatedecuvintelecheietask,lanceputiendtask,lasfrit.
Datelesunttrimisetask_uluicareleproceseaz irezultatulestereturnatlaterminareatask_ului.
Task_urilesuntapelatenmodspecific,cudatedeintrare ideieire isuntinclusecodulprogramului
Verilog.Elepotfiapelatedemulteori,evitndrepetareacodului.
Task_urile pot avea orice numr de intrri, ieiri sau inouturi i pot conine sincronizri de tip#,@
sauwait.
Taskurile sunt definiten modululn care sunt utilizate. Este posibil s se defineasc un taskntrun
fiier separat i s se utilizeze directiva de compilare include pentru a include taskuln fiierul care
instaniaz taskul.
Sintaxadedefinireaunuitaskesteurmtoarea:
Sintaxa
tasknume_task;declaraiiinput,output,iinoutdeclaraiivariabilelocaleconstrucii_proceduralesaugrup_instruciuni
endtask
71
5/22/2018 2 Tutorial Verilog Extins
46/54
Caracteristici:
Variabilelelocaledeclaratentruntasksuntlocaleaceluitask. Ordinea de declarare dintrun task definete cum sunt utilizate variabilele trimise taskului de
ctreapelani.
Cnd nu sunt utilizate variabile locale, taskurile pot manipula variabile globale (n aces cazvariabilele sunt declarate ca registre nainte de definirea taskului, n modulul n care se
definetetaskul).Cndseutilizeaz variabilelocale,ieireaesteasignat uneivariabileregidtru
numailasfritulexecuieitaskului.
Taskurilepotapelaaltetaskurisaufuncii. Taskurilepotfiutilizatepentruamodelaattlogicacombinaional,ctilogicasecvenial. Un task trebuie s fie apelat specificcu o instruciune. El nu poate fi utilizat cu o expresie aa
cumpoatefiutilizat ofuncie.
Exemplu:
Fieuntaskdefinitnfiierultaskul_meu.v:
moduledefinire_task;
taskcalculeaza; // definire taskinput [0:15] a_in, b_in;output[0:15] suma_out;
beginsu
endma_out = a_in + b_in;
endtask
endmodule
Apelareataskuluiserealizeaz astfel:
moduleapelare_task (a_in, b_in, c_in, suma_out);input [0:7] a_in, b_in, c_in;output [0:7] suma_out;
reg[0:7] suma_out;`include task-ul_meu.v
always@(c_in)begin
cend
alculeaza (a_in, b_in, suma_out); // apelare task
endmodule
72
5/22/2018 2 Tutorial Verilog Extins
47/54
2.5.2.FUNCII
OfuncieVerilogesteasemntoarecuuntask,cufoartepuinediferene,cumarfifaptulc funcianu
poatedectoieireinupoateconinentrzieri.Funciilerentorccaieirevaloareacareesteatribuit
numelui funciei. O funcie ncepe cu cuvntul cheie function i se termin cu cuvntul cheie
endfunction.
Funciile sunt definiten modululn care sunt utilizate. Este posibil s se defineasc funciin fiiere
separate i s se utilizeze directiva de compilare include pentru a include funcian fiierul care
instaniaz funcia.
Sintaxadedefinireauneifunciiesteurmtoarea:
Sintaxafunction[dimensiune_sau_tip]nume_funcie;
declaraiiinputdeclaraiivariabilelocaleconstrucii_proceduralesaugrup_instruciuni
endfunction
Caracteristici:
Funciiletrebuies aib celpuinointrareinupotaveaieirisauinouturi. Ele nu pot conine sincronizri de tip posedge,negedge,#,@ sauwait, ceea censeamn c
funciileseexecut cuntrziereazero.
Dimensiune_sau_tip(opional)estedomeniuldebiirentorsca[msb:lsb],saucuvntulcheieintegersaureal.
Variabileledeclaratentrofunciesuntlocaleaceleifuncii.Ordineadedeclararedintrofunciedefinetecumsuntutilizatevariabileletrimisefuncieidectreapelani.
Cnd nu sunt utilizate variabile locale, funciile pot manipula variabile globale (n aces cazvariabilelesuntdeclaratenaintededefinireafunciei,nmodululncaresedefinetefuncia).
Cnd se utilizeaz variabile locale, ieirea este asignat unei variabile fir (wire) numai la
sfritulexecuieifunciei.
Funciilepotapelaaltefuncii,nuns itaskuri. Funciilepotfiutilizatepentruamodeladoarlogicacombinaional.
73
http://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.htmlhttp://d/HDL_tools/Verilog_books_and_examples/vlog_ref_body.html5/22/2018 2 Tutorial Verilog Extins
48/54
Exemplu:
Fieofunciedefinitnfiierulfunctia_mea.v:
moduledefinire_functie;
function[15:0] functia_mea; // definire functieinput[7:0] a_in, b_in;
begin
functia_mea = a_in * b_in;end
endfunction
endmodule
Apelareataskuluiserealizeaz astfel:
moduleapelare_functie (a_in, b_in, c_in, produs);input [7:0] a_in, b_in;inputc_in;output [15:0] produs;wire[7:0] produs;`include functia_mea.v
assignprodus = (c_in)? functia_mea (a_in, b_in) :16b0; // apelare functie
endmodule
2.6.MODELAREAMEMORIILORIAMAINILORALGORITMICEDESTARE
Modelareamemoriilor
Pentruaajutalamodelareamemoriilor,Verilogfurnizeaz suportpentrutablouricudou dimensiuni.
Modelele comportamentale ale memoriilor sunt modelate prin declararea unui tablou de variabile
registru; orice cuvnt din tablou poate fi accesat utiliznd un indexn tablou. Este cerut o variabil
temporar pentruaaccesaunbitdincadrultabloului.
Sintaxaesteurmtoarea:
reg[msb_reg:0]nume_tablou[0:msb_tablou]
Exemplu:
reg[7:0]memoria_mea[0:1023]//memoriaconine1024locaii(adrese)decuvintede8bii,
//nordinelittleendian
Scrierea se face prin atribuirea memoria_mea[adres]= reg_in; iar citirea prin reg_out =
memoria_mea[adres];.
74
5/22/2018 2 Tutorial Verilog Extins
49/54
Citireaunuibitsefacedup citireacuvntuluiprinreg_out_bit_0=reg_out[0];.
IniializareamemoriilorUn tablou de memorie poate fi iniializ