2 Tutorial Verilog Extins

download 2 Tutorial Verilog Extins

of 54

description

Tutorial PDF -Romana

Transcript of 2 Tutorial Verilog Extins

  • 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.html
  • 5/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.html
  • 5/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.html
  • 5/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.html
  • 5/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.html
  • 5/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.html
  • 5/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.html
  • 5/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.html
  • 5/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.html
  • 5/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.html
  • 5/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