verilog hdl courses

Upload: toderean-alexandru

Post on 22-Feb-2018

281 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/24/2019 Verilog hdl courses

    1/271

    Dan Nicula Gheorghe Toacse

    ELECTRONICA DIGITALA

    VOL. II

    VERILOG HDL

    EDITURA TEHNICA - 2005

  • 7/24/2019 Verilog hdl courses

    2/271

    II

    Aceasta pagina va fi nlocuita . II

  • 7/24/2019 Verilog hdl courses

    3/271

    III

    Si aceasta pagina va fi nlocuita. III

  • 7/24/2019 Verilog hdl courses

    4/271

    Inca o pagina ce va fi nlocuita. IV

  • 7/24/2019 Verilog hdl courses

    5/271

    Prefat a

    VERILOG, VERY-LOGIC HDL (limbaj de descriere hardware foarte lo-gic): un nume extraordinar de bine ales pentru un limbaj care a devenit astazi fun-damental pentru proiectarea circuitelor integrate digitale.

    Acum 10 ani, n 1995, scriam n prefata unei carti: Limbajul VHDL permite oexprimare sintetica n electronica digitala atat la nivel inferior, de poarta logica, catsi la nivel superior, de sistem. Tehnicile de proiectare automata n electronic a nu potfi aplicate fara existenta unui astfel de limbaj.

    Acum 7 ani, n 1998, predam beneficiarului un proiect scris n VHDL. In faza

    de depanare, beneficiarul mi cere: Adauga un registru pe aceasta iesire. Nici oproblema, zic si ncep s a scriu urmatoarea portiune de cod VHDL:

    -- acesta este modelul VHDL al unui registru de 8 biti

    signal extraFf : std_logic_vector(7 downto 0);

    process(clk, reset)

    begin

    if (reset = 1) then

    extraFf 0);

    elsif (clkevent and (clk = 1)) then

    extraFf

  • 7/24/2019 Verilog hdl courses

    6/271

    VI Electronica digitala

    In prezent, Verilog este un limbaj folosit n toate etapele de proiectare a circuitelorintegrate digitale:

    specificatii;

    modelarea RTL;

    generare de vectori de test;

    mediu de simulare;

    module de monitorizare/verificare;

    netlist post-sinteza;

    biblioteci de componente specifice tehnologiei;

    model temporal cu parametrii actualizati conform implementarii;

    documentare.

    Pentru un utilizator care nvat a pentru prima oara un limbaj de descriere hard-ware, alegerea Verilog este foarte justificata. Simplitatea si apropierea acestuia dehardware permit utilizatorului ncepator atat concentrarea asupra proiectarii arhitec-turale, cat si satisfactia unei eficiente a proiectarii. Utilizatorii avansati gasesc nVerilog satisfactia unui limbaj matur, folosit n mod curent pentru proiectarea unorcircuite integrate reale.

    Pentru utilizatorii ncepatori, acest volum prezinta o pagina cu limbajul Verilogcondensat, pagina ce se doreste a fi o referint a rapida pentru proiectantul VerilogHDL.

    Utilizatorii avansati pot gasi n aceasta carte solutii eficiente, optimizate pentruimplementare hardware, la probleme ce par simple la nivel algoritmic. Modelareapentru sintetizabilitate si modelarea pentru obtinerea unui circuit care sa functionezela frecvent a maxima sunt doua idei pe care s-a concentrat acest volum.

    Toate portiunile de cod si mediile de testare asociate pot fi accesate pe situl cartii.La aceeasi adres a se gasesc indicatii pentru obtinerea unei licente de evaluare a unuisimulator Verilog. Situl web al acestei cartii este:

    http://vega.unitbv.ro/electronica_digitala

    Anexa din finalul acestui volum prezinta simularea unei porti inversoare n SPICE.Anexa este realizata cu contributia dl. Corneliu ZAHARIA.

    Acest volum este rodul anilor de predare a cursurilor de Limbaje de descrierehardware si Proiectarea circuitelor integrate, la specializarea Ingineria Calcula-toarelor de la Universitatea TRANSILVANIA din Brasov. Experienta contactului culumea reala a proiectantilor de circuite integrate digitale a fost asigurata prin partici-parea la activitatea de cercetare si dezvoltare a firmei eASIC (http://www.easic.com).Probleme practice avansate, prezentate n ultimul capitol al acestui volum, au fostnt alnite n activitatea curenta la aceasta firma.

    Brasov, Septembrie 2005. Autorii

  • 7/24/2019 Verilog hdl courses

    7/271

    Cuprins

    1 INTRODUCERE1.1 Ce este Verilog? 1

    1.2 De ce HDL? 31.3 Terminologia Verilog 6

    1.3.1 Aspectul temporal 61.3.2 Concurenta evenimentelor 71.3.3 Modulul 7

    1.4 Mediul de simulare a modelelor HDL 211.5 Comparatie Verilog-VHDL 21

    2 FUNDAMENTELE LIMBAJULUI VERILOG HDL2.1 Conventii lexicale 252.2 Structura codului Verilog 252.3 Setul de valori 26

    2.3.1 Numere ntregi 262.3.2 Numere reale 272.3.3 Siruri 28

    2.4 Tipuri de date si obiecte 282.5 Operatori 34

    2.5.1 Operatori aritmetici 342.5.2 Operatori relationali 382.5.3 Operatori de egalitate 382.5.4 Operatori logici 392.5.5 Operatori logici pe vectori 402.5.6 Operatori de reducere 412.5.7 Operatori de deplasare 42

    2.5.8 Operator conditional 432.5.9 Operatori de concatenare si replicare 432.6 Specificatii concurente 442.7 Specificatii secventiale 47

    2.7.1 Specificatii de atribuire secventiale 472.7.2 Specificatii conditionale 532.7.3 Specificatii de selectie 562.7.4 Specificatii de iteratii 572.7.5 Specificatii de control temporal 59

  • 7/24/2019 Verilog hdl courses

    8/271

    VIII Electronica digitala

    2.8 Directive de compilare 63

    2.8.1 define

    siundefine

    632.8.2 ifdef, ifndef, else, endif 652.8.3 include 662.8.4 timescale 66

    2.9 Stil si calitate 67

    3 MODELAREA CIRCUITELOR ELEMENTARE3.1 Circuite combinationale 79

    3.1.1 Modelarea circuitelor logice cuassign 793.1.2 Modelarea circuitelor logice cualways 80

    3.2 Circuite de multiplexare 813.3 Codificator/decodificator 813.4 Latch D 85

    3.5 Bistabil D/RS 863.6 Bistabil T/JK 883.7 Numaratoare sincrone 893.8 Automate secventiale sincrone 94

    3.8.1 Semi-automat descris cu o singura specificatie 943.8.2 Modelarea iesirilor automatelor 963.8.3 Modelarea automatelor ca registru de stare si circuit

    combinational 983.8.4 Automat cu stari codificate one-hot 100

    4 NOTIUNI AVANSATE DE VERILOG4.1 Task-uri si functii 103

    4.2 Modelarea memoriilor 1074.3 Generarea structurilor hardware 1094.4 Modelarea la nivel de poarta logica 113

    4.4.1 Porti cu intrari multiple 1134.4.2 Porti cu iesiri multiple 1134.4.3 Porti cu iesiri n trei stari 1144.4.4 Porti cu iesiri fixe 114

    4.5 Modelarea la nivel de tranzistor 1154.6 Task-uri si functii de sistem 118

    4.6.1 Task-uri de afisare 1194.6.2 Task-uri de accesare a fisierelor 1204.6.3 Task-uri pentru controlul simularii 122

    4.6.4 Task-uri pentru verificari temporale 1224.6.5 Functii referitoare la timpul simularii 1234.6.6 Functii pentru generarea numerelor aleatorii 123

    4.7 Primitive definite de utilizator 1244.8 Accesarea semnalelor n ierarhie 1264.9 Functii PLI 127

    4.9.1 Crearea unei aplicatii PLI 1284.9.2 Apelarea aplicatiei PLI 132

    4.10 Noutati introduse de standardul IEEE Verilog 1364-2001 133

  • 7/24/2019 Verilog hdl courses

    9/271

    Cuprins IX

    5 PROBLEME REZOLVATE

    5.1 Circuite de prelucrare a impulsurilor 1355.1.1 Circuite formatoare de impulsuri 1355.1.2 Generarea unui semnal n avans sau cu ntarziere 138

    5.2 Circuit secvential pentru recunoastere de pattern 1425.3 Verificator de protocol de comunicatie 1475.4 Generarea semnalului de transport al unui

    numarator sincron 1505.5 Modelarea registrelor 151

    5.5.1 Registrul paralel 1515.5.2 Registrul cu reactie, LFSR 152

    5.6 Sincronizarea semnalelor la trecerea ntre doua domenii de ceas1625.6.1 Sincronizarea unui semnal cu evolutie lenta la trecerea

    dintr-un domeniu de ceas de frecventa scazuta ntr-un

    domeniu de ceas de frecventa ridicata 1635.6.2 Sincronizarea unui puls la trecerea dintr-un domeniu de

    ceas de frecventa ridicata ntr-un domeniu de ceas defrecventa scazuta 165

    5.6.3 Sincronizarea unui puls la trecerea dintr-un domeniu deceas de frecventa scazuta ntr-un domeniu de ceas defrecventa ridicata 170

    5.6.4 Aplicatie la sincronizarea unui bus cu variatie lenta 1735.6.5 Aplicatie la sincronizarea unui bus cu variat ie rapida

    (FIFO) 1745.7 Interfatarea cu CPU 1815.8 Multiplicator secvential 197

    5.9 Modelarea si testarea memoriilor 2025.10 Modelarea multiplexoarelor 210

    5.10.1 Multiplexor modelat cu valori neprecizate 2105.10.2 Multiplexor n bucla cu bistabil 2125.10.3 Multiplexor pe bus 216

    5.11 Controller pentru memorie SDRAM 2175.11.1 Modelul Verilog al controllerului SDRAM 2175.11.2 Mediul de testare al controllerului SDRAM 229

    Anexa A MODELAREA SPICE A UNUI INVERSOR CMOSA.1 Modelul SPICE al tranzistoarelor MOS 239A.2 Ridicarea caracteristicii de sarcina IDS(VDS)

    pentru tranzistorul NMOS 240A.3 Modelul SPICE al inversorului CMOS 244A.4 Determinarea caracteristicii de transfer si a parametrilor in-

    versorului CMOS 245A.4.1 Nivelurile de tensiune 246A.4.2 Marginea de zgomot 247A.4.3 Timpul de propagare 247A.4.4 Consumul de putere 250A.4.5 Factorul de merit 251

  • 7/24/2019 Verilog hdl courses

    10/271

    X Electronica digitala

    Anexa B CUVINTE CHEIE REZERVATE ALE VERILOG HDL

    Anexa C MEMENTO LIMBAJ VERILOG

    Anexa D CONTINUT SIT CARTE

  • 7/24/2019 Verilog hdl courses

    11/271

    Capitolul 1

    INTRODUCERE

    Aceasta parte a cartii nu se doreste a fi un manual complet al limbajului VerilogHDL,ci o sursa de nvatare rapida si eficienta a descrierii circuitelor digitale. Cu bunastiinta, vor fi expuse doar acele caracteristici ale limbajului care sunt mai des folositela modelarea sistemelor digitale pentru sintetizabilitate.

    Pe parcursul acestei parti apar urmatoarele semne care marcheaza pasaje cudiferite particularitati:

    V

    cod sursa Verilog;

    S

    descrierea sintaxei unei specificatii Verilog;

    T

    paragraf care face referire la un modul de test existent pe situl de web al c artii.

    Paragrafele de cod Verilog si referirea la numele variabilelor HDL sau la cuvintecheie vor fi marcate evidentiat prin scrierea acestora cu caractere tiptypesetting. Deremarcat ca, n aceste paragrafe de cod sursa, cuvintele ce contin caractere specificelimbii romane (a, a, , s, t) au fost nlocuite cu caracterele de origine ale acestora (a,a, i, s, t). Motivul este acela ca Verilog nu suporta caracterele specific romanesti,nici macar sub forma de comentarii.

    1.1 Ce este Verilog?

    Un sistem digital se poate descrie fie schematic, fie textual. Datorita complexitatiisistemelor actuale, descrierea schematica nu mai permite gestionarea proiectelor mari.

    In schimb, descrierea textuala are nenumarate avantaje, cel mai important fiindusurinta prelucrarii acestei descrieri de catre programele de calculator.

    In prezent exista doua limbaje de descriere hardware (HDL = Hardware Descrip-tion Language) care acopera cea mai mare parte din proiectarea sistemelor digitale:

    1

  • 7/24/2019 Verilog hdl courses

    12/271

    2 CAPITOLUL 1. INTRODUCERE

    Verilog si VHDL.Verilog este un limbaj de descriere hardware a c arui denumire provine din con-

    catenarea cuvintelor din limba engleza Very-logic (foarte logic). VHDL este unlimbaj de descriere hardware a carui denumire provine din concatenarea literei V(initiala abrevierii VHSIC = Very High Speed Integrated Circuits) si HDL.

    VHDL nu este o abreviere pentru Verilog HDL. Verilog si VHDL sunt doualimbaje de descriere hardware diferite. Intre acestea exista multe asemanari dar existasi deosebiri.

    In continuare, prin HDL se va face referire la limbajele de descriere hardware ngeneral, incluzand atat Verilog, cat si VHDL.

    Un limbaj de descriere hardware este un limbaj utilizat pentru descrierea unuisistem digital, ca de exemplu un calculator sau o componenta a acestuia. HDL nu este

    un limbaj de programare pentru ca nu descrie programe rulate de un procesor. Codulsursa scris n HDL nu trebuie numit program (cu ntelesul implicit de programpentru calculator). Este recomandata denumirea codului sursa HDL ca model, cuntelesul de model al unui sistem hardware.

    Limbajele de descriere hardware ofera suportul pentru proiectarea circuitelor in-tegrate digitale. In HDL se poate descrie un sistem digital modelat la cel mai naltnivel, precizandu-se doar comportamentul abstract al acestuia. Mai detaliat, se poatedescrie n HDL structura de registre a unui sistem digital si ecuatiile transferuluide informatii dintre registre. Acest nivel de descriere este denumit RTL (RegisterTransfer Level) si este destul de detaliat pentru a fi acceptat ca intrare de catreprograme de calculator care fac trecerea de la model la realizare fizica (sinteza).Dupa sinteza, descrierea sistemului digital implementat ntr-o anumita tehnologie sepoate genera automat sub forma unui netlist HDL. Netlist (cuvant provenit din limbaengleza din concatenarea cuvintelor net=legatura/retea si list=lista) este denu-mirea unui model HDL particular: contine o descriere structurala a unor instantieride componente descrise ntr-o biblioteca de componente specifice tehnologiei de re-alizare a circuitului integrat. Netlist-ul este generat automat de catre software. HDLofera posibilitatea descrierii unui sistem digital la nivel de porti logice si bistabile.Proiectantii de tehnologie folosesc tot HDL pentru a modela componentele primitiveale tehnologiei la nivel de sarme, tranzistoare, rezistoare.

    Descrierea textuala a circuitelor electronice digitale n HDL este folosita atat laproiectarea, cat si la sinteza, la verificarea functionala sau la analiza temporala aacestora.

    Verilog este unul dintre cele doua cele mai folosite limbaje de descriere hardware.Parerile referitoare la avantajele si dezavantajele fiecaruia sunt foarte diverse. Se

    spune ca Verilog este mai usor de nvatat pentru ca este asa cum i spune numelevery logic.

    VHDL a fost standardizat n 1987 sub numarul IEEE-1076. Ulterior, lipsa unortipuri de date general acceptate a fost rezolvata prin aparitia standardului IEEE-1164. VHDL este un limbaj a carui sintaxa seamana cu sintaxa limbajului ADA.Promovarea limbajului ca standard a fost facuta de catre Departamenul de Aparareal Statelor Unite.

    Verilog HDL a avut o traiectorie diferita, el provenind din mediul industrial. Sin-taxa Verilog seamana cu sintaxa limbajului C.

    Verilog a fost dezvoltat ca un limbaj de descriere proprietar de catre firma ameri-

  • 7/24/2019 Verilog hdl courses

    13/271

    1.2. De ce HDL? 3

    cana Gateway Design System Corporation ntre 1983-1985.Succesul de care s-a bucurat simulatorul Verilog (Verilog-XL) produs de Gateway

    Design Automation a determinat o crestere rapida a acestei firme. Ca efect, n 1989,Cadence Design Systems (cea mai mare firma din domeniul productiei de softwarepentru suportul proiectarii de circuite integrate) a achizitionat atat firma GatewayDesign Automation, cat si limbajul Verilog HDL produs de catre aceasta.

    In 1990, Cadence Design Systems a decis deschiderea limbajului Verilog HDL catrepublic. In 1991, se formeaza organizatia OVI (Open Verilog International) cu scopulde a promova si standardiza limbajul Verilog.

    Verilog HDL este standardizat cu numarul IEEE-1364. In plus, acest standarddefineste o colectie de rutine software care permit interfatarea dintre Verilog si alteprograme (de obicei C). Colectia de rutine este cunoscuta sub numele de PLI (Pro-gramming Language Interface).

    Standardizarea Verilog a determinat aparitia unor mici companii care ofereau si-mulatoare Verilog. Exista simulatoare care accepta descrieri mixte Verilog si VHDL.

    1.2 De ce HDL?

    Se pot remarca doua scopuri ale modelarii unui sistem digital:

    Realizarea sistemului cu cost minim ntr-un timp scurt si

    Evitarea erorilor de proiectare.

    Primul motiv nu mai are nevoie de nici un fel de comentariu. Viteza de crestere

    extrem de mare pentru domeniul circuitelor integrate este unanim recunoscuta. Oricentarziere a aparitiei unui produs nou pe piata poate aduce companiei producatoarepierderi nsemnate.

    Al doilea motiv nu este foarte usor de acceptat de catre cei mai familiarizati cudezvoltarea de produse software. Mai n gluma, mai n serios, se poate spune ca:Hard-ul nu-i ca soft-ul. O greseala gasita tardiv n software, chiar dupa ce produsula fost livrat utilizatorului final poate fi usor remediata cu o noua versiune sau opeticire (patch, n limba engleza). Noua versiune se poate distribui dintr-un sitde web, fara costuri prea mari pentru producatorul de software.

    In general, n hardware, greseala costa mult mai mult decat n software. Pentru uncircuit dedicat pentru o aplicatie (ASIC = Application Specific Integrated Circuit),repararea unei greseli poate nsemna refacerea integrala a circuitului si suportareaintegrala a costurilor extrem de mari de productie.

    Versiunile alpha sau beta din productia de software sunt nlocuite cu mii deore de verificare automata n productia de hardware. Toate procedurile de verificareale circuitelor integrate contemporane se bazeaza pe existenta HDL si a modelelortextuale.

    Derularea unui proiect pornind de la descrierea sa schematica presupune uti-lizarea unei metodologii de proiectare de jos n sus (bottom-up, n limba engleza).Metodologia bottom-up presupune desenarea schemei modulelor elementare (cu sim-boluri de primitive existente ntr-o biblioteca de tehnologie) si ulterior conectarea aces-tora pentru a forma sistemul. Este de neconceput aceasta abordare pentru proiectareaunui sistem mare, cum ar fi un procesor.

  • 7/24/2019 Verilog hdl courses

    14/271

    4 CAPITOLUL 1. INTRODUCERE

    Metodologia de proiectare a sistemelor digitale actuale, de mari dimensiuni este ometodologie de sus n jos (top-down, n limba engleza). Metodologia top-downpresupune modelarea sistemului la nivel nalt (comportamental) nainte de a definidetaliile de implementare. Cateva din avantajele acestei metodologii sunt precizaten continuare:

    Sistemele digitale actuale nu mai pot fi stapanite prin descriere sche-matica. Limbajele HDL ofera suport pentru metodologia de proiectare top-down.

    Posibilitatea corectarii greselilor de conceptie n faze foarte timpurii.Avand un model al ntregului sistem, se poate evalua functionarea acestuia nconexiune cu alte circuite. De exemplu, se poate simula funct ionarea unui ntreg

    produs realizat sub forma de circuite integrate montate pe un cablaj imprimat,chiar daca unele componente nu sunt realizate.

    Multe sisteme actuale nu sunt exclusiv hardware, ci hardware - soft-ware. Existenta unui model de simulare al sistemului hardware nainte caacesta sa fie realizat fizic, permite munca n paralel a echipelor de dezvoltare desoftware si de hardware. Prin aceasta, dezvoltarea de software este suprapusa ntimp peste dezvoltarea de hardware. Mai mult, se pot testa programele softwarempreuna cu modelul de simulare hardware.

    Posibilitatea partajarii proiectarii si a lucrului n echipa. Fiecare echipase poate concentra pe implementarea modulului ce i-a fost atribuit, avand tot-odata la dispozitie un model de simulare, de referinta, a ntregului sistem.

    Independenta fata de tehnologia de implementare. De multe ori sedoreste conversia unui proiect dintr-o tehnologie n alta. Motivele sunt di-verse: realizarea unui prototip cu dispozitive programabile nainte de lansarea nproductie ca un circuit specific sau realizarea aceluiasi produs ntr-o tehnologiemai moderna sau mai ieftina. Conversia tehnologiei este posibila prin reuti-lizarea modelului HDL.

    Reutilizarea codului. Module cu o functie specifica pot fi utilizate de catreun proiectant n mai multe produse sau chiar pot fi vandute ca module separate.De exemplu, proiectantul unui circuit cu acces USB va putea decide preluareaunui controller USB produs de alta firma, concentrandu-se pe aspectele specificeale circuitul sau.

    In figura 1.1 este reprezentata grafic metodologia de proiectare top-down a cir-cuitelor integrate digitale. Se remarca faptul ca descrierea textuala n HDL esteprezenta n toate etapele de proiectare.

    Specificatii. Uneori se includ portiuni de cod HDL n specificatii pentru a seexemplifica functia unui modul.

    Modelarea RTL. Codul scris de proiectant se verifica prin simulare, iar ulteriorserveste ca intrare pentru programele de sinteza de hardware. Aceasta este etapaprincipala de proiectare a sistemului digital.

  • 7/24/2019 Verilog hdl courses

    15/271

    1.2. De ce HDL? 5

    Legenda:Specificatiide proiectare

    ModelHDLRTL

    Sintetizatorhardware

    Netlist HDLla nivel de

    poarta logica

    Implementare

    Bibiliotecade

    componente

    Bibliotecade

    tehnologie

    SimulatorHDL

    SimulatorHDL

    SimulatorHDL

    Model HDLtemporal

    Generatorde vectori

    de test+

    Monitorizare

    Document

    SoftwareEDA

    Fisiercod HDL

    Figura 1.1 Reprezentarea grafica a metodologiei de proiectare top-down a circuitelorintegrate digitale. Pozitia HDL n cadrul acestei metodologii.

    Generare de vectori de test. Modulul de proiectat trebuie testat n con-junctie cu modele ale mediului exterior. Modelele care genereaza stimuli sedescriu tot n HDL chiar daca nu ntotdeauna vor fi sintetizate. CapabilitatileHDL ajuta proiectantul la realizarea unor generatoare de stimuli guvernate deanumite reguli sau chiar stimuli aleatorii. In plus, producatorii de circuite oferamodelele HDL ale acestora pentru a putea fi integrate n simularea unor sistememari. Este cazul modelelor de memorie folosite la proiectarea controllerelor dememorie.

    Mediu de simulare. Testarea circuitului proiectat alaturi de modelele cir-cuitelor exterioare acestuia presupune crearea unui model HDL ce le include petoate acestea, cu precizarea conexiunilor. Forta unui mediu de simulare constasi n posibilitatea configurarii acestuia, conform cerintelor beneficiarului (nu aleproiectantului).

    Module de monitorizare/verificare. Verificarea automata presupune e-xistenta unor module HDL care monitorizeaza aparitia unor conditii logice silanseaza mesaje de atentionare sau de eroare catre proiectant.

  • 7/24/2019 Verilog hdl courses

    16/271

    6 CAPITOLUL 1. INTRODUCERE

    Netlist post-sinteza. Sintetizatorul converteste descrierea RTL ntr-o des-criere structurala cu instantieri de componente din biblioteca de tehnologie.Proiectantul are obligatia de a verifica faptul ca netlistul are acelasi comporta-ment ca modelul RTL, prin simularea netlistului n mediul de simulare n carea validat modelul RTL.

    Biblioteci de componente specifice tehnologiei. Simularea netlistului pre-supune existenta descrierii HDL a fiecarei componente instant iate. Modelelecomponentelor sunt realizate de catre proiectantii de tehnologii n diverse lim-baje de descriere hardware, suportate de metodologia aleasa de proiectant side catre programele EDA (EDA = Electronic Design Automation, totalitateaprogramelor ce ofera suport n proiectarea circuitelor electronice).

    Model temporal cu parametrii actualizati conform implementarii.Post-implementare, dupa ce sunt cunoscute toate detaliile implementarii (pla-sare, rutare), este necesara o noua verificare, nainte de a se transmite proiectulcatre fabricant. La acest nivel, este necesara cunoasterea ntarzierilor atat aportilor logice si bistabilelor, cat si a sarmelor de interconectare a acestora.

    Documentare. Realizarea unui proiect presupune scrierea unei documentatiicare sa nsoteasca produsul. La aceasta documentatie va face apel si proiec-tantul n cazul aparit iei unor defecte sau a lansarii n executie a unei versiunisuperioare. Codul HDL, ca documentare a proiectului, este o resursa valoroasapentru ca permite simularea unei situatii reale care nu a fost testata anterior.

    1.3 Terminologia VerilogVerilog, ca un limbaj de descriere hardware, are caracteristici conceptual diferite decele ale limbajelor de programare (software). Principalele caracteristici ale HDL suntaspectul temporal si concurenta evenimentelor.

    1.3.1 Aspectul temporal

    Orice componenta hardware are un timp de propagare. Transferul datelor ntrediferite componente hardware se face prin sarme de conexiune care au si ele o a-numita ntarziere. Valoarea si combinarea acestor ntarzieri determina functionareasau nu a circuitului modelat, la frecventa necesara.

    Variabilele (semnalele) Verilog modeleaza sarmele de interconexiune ale modulelor.Din acest motiv, specificatiile de atribuire de semnal pot modela si ntarzierile. InVerilog, unitatile de timp sunt relative, raportate la unitatea fizica de timp specificataprin directiva timescale.

    Circuitele logice combinationale pot fi modelate tinand cont de ntarzierile exis-tente. Ca exemplu, se prezinta modelul structurii interne a unui multiplexor, modelatcu porti logice cu ntarzieri asociate.

    // # = unitati de timp

    assign #1 s_n = ~s; // ~ simbolul operatorului logic NOT

    assign #2 w0 = i0 & s_n; // & simbolul operatorului logic AND

  • 7/24/2019 Verilog hdl courses

    17/271

    1.3. Terminologia Verilog 7

    assign #2 w1 = i1 & s;assign #2 y = w0 | w1; // | simbolul operatorului logic OR

    1.3.2 Concurenta evenimentelor

    Programele software sunt prin excelenta secventiale. Acest lucru este determinat defaptul ca procesoarele executa programe secventiale. Sistemele hardware sunt con-curente. Fiecare poarta logica si executa propria functie logica n mod independentde existenta altor porti logice.

    Un proiectant de software descrie n codul sursa un algoritm secvential, ceea ce vagenera, n final, un program secvential executat de un procesor.

    Un proiectant de hardware descrie un comportament al unui sistem digital ce va

    genera, n final, o structura de porti si bistabile interconectate. Limbajele de descrierehardware au facilitati de gestiune a evenimentelor concurente.

    Specificatiile existente n corpul modulelor (cod sursa) Verilog sunt concurente(se executa toate la acelasi moment al timpului de simulare, iar ordinea acestora ncodul sursa nu este relevanta).

    De exemplu, portiunea de cod ce urmeaza este echivalenta (si ca rezultat alsimularii si ca hardware generat prin sinteza) cu structura modelata anterior.

    assign #2 y = w0 | w1;

    assign #2 w0 = i0 & s_n;

    assign #1 s_n = ~s;

    assign #2 w1 = i1 & s;

    Pentru a usura munca proiectantului de hardware (care este tentat sa aiba ogandire algoritmica secventiala), limbajul Verilog prevede existenta unei specificatiiconcurente care nglobeaza specificatii secventiale. Specificatiaalwayseste o specifi-catie concurenta. Specificatiile ce apar n corpul acesteia sunt specificatii secventiale(ordinea n care apar acestea n codul sursa este relevanta). Executia specificatieialwaysconsta n executarea secventiala a tuturor specificatiilor continute de aceastapana la sfarsit sau pana la aparitia unei specificatii de ntarziere.

    1.3.3 Modulul

    Urmatorul paragraf prezinta traducerea capitolului 1, Prezentare generala a docu-mentului initial editat de OVI (Open Verilog International) sub titlul de manual de

    referinta al limbajului Verilog (LRM = Language Reference Manual), versiunea 1.0,noiembrie 1991.

    Verilog HDL descrie un proiect hardware sau o parte de proiect. Descrierile proiec-telor n Verilog HDL sunt modele Verilog. Verilog HDL este atat un limbaj comporta-mental, cat si structural. Modelele Verilog HDL pot descrie atat functia unui proiect,cat si componentele si conexiunile dintre componentele unui proiect. Modelele Verilogpot fi dezvoltate pe diferite nivele de abstractizare. Aceste nivele de abstractizare sitipurile de modele ce le corespund sunt urmatoarele:

  • 7/24/2019 Verilog hdl courses

    18/271

    8 CAPITOLUL 1. INTRODUCERE

    algoritmic: un model care implementeaza un algoritm al proiectului prin con-structii de nivel nalt ale limbajului;

    RTL: un model care descrie curgerea datelor ntre registre si modul de proce-sare a acestora;

    nivel de poarta: un model care descrie portile logice si conexiunile dintre portilogice ntr-un proiect;

    nivel de comutare: un model care descrie tranzistoarele si nodurile de stocare(a informatiei) dintr-un dispozitiv si conexiunile dintre ele.

    Blocul elementar de constructie n Verilog HDL este modulul. Formatul modululuifaciliteaza proiectarea top-down si bottom-up. Un modul contine modelul unui

    proiect sau a unei parti de proiect. Modulele pot ncorpora alte module pentru a formaun model ierarhic care descrie cum se includ componentele unui proiect n ansamblulproiectului. Constructiile Verilog HDL, asa cum sunt declaratiile si specificatiile, suntincluse n module. Limbajul Verilog HDL comportamental este un limbaj structuratsi procedural, la fel ca limbajul de programare C.

    Constructiile comportamentale ale limbajului sunt utilizate n cadrul modeleloralgoritmice si RTL. Limbajul comportamental are urmatoarele capabilitati:

    proceduri structurate pentru executie secventiala sau concurenta;

    controlul explicit al timpului la care se activeaza o procedura, specificat atat deexpresii ce desemneaza nt arzieri, cat si de schimbarile valorii care determinaevenimente;

    evenimente desemnate explicit sa determine activarea si dezactivarea actiunilorn cadrul altor proceduri;

    constructii procedurale pentru operatii conditionale, de decizie, de selectie saude iteratii;

    proceduri denumite task-uri care pot avea parametrii si durate non-zero;

    proceduri denumite functii care permit definirea unor noi operatori;

    operanzi aritmetici, logici, pe biti si de reducere pentru constructia de expresii.

    Constructiile structurale ale Verilog HDL sunt utilizate pentru modelele la nivel

    de poarta si la nivel de comutare. Limbajul structural are urmatoarele capabilitati: un set complet de primitive combinationale;

    primitive pentru poarta de transmisiune si dispozitive rezistive;

    abilitatea de a modela structuri MOS.

    In Verilog HDL, acuratetea modelarii structurale este mbunatatita de specificatiide nt arzieri prin primitive si precizari ale tariei porturilor de iesire. Valorile sem-nalelor pot avea diferite tarii si o gama completa de valori ambigue pentru a reducepesimismul conditiilor necunoscute.

  • 7/24/2019 Verilog hdl courses

    19/271

    1.3. Terminologia Verilog 9

    Definirea unui modul este inclusa ntre cuvintele cheiemodulesiendmodule. Iden-tificatorul ce urmeaza cuvantului cheiemodule reprezinta numele modulului. Se reco-manda utilizarea unor nume sugestive pentru comportamentul sau structura modu-lului. Optional, modulul poate contine o lista de porturi de intrare/iesire. Ordineaporturilor poate fi semnificativa la instantierea modulului. Din acest motiv, se reco-manda o asociere explicita ntre porturi si sarme n momentul instantierii unui modul.Identificatorii din lista de porturi trebuie declarat i ca intrari, iesiri sau bidirectionalin partea de definitii a modulului. Sintaxa completa a declaratiei unui modul esteprezentata n continuare:

    S

    ::= module ? ;

    *

    endmodule

    ::=

    ::=(*)

    ::=

    ||=||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    ||=

    este o lista de declaratii de nume de porturi despartite prinvirgula. Directia si dimensiunea porturilor este declarata ulterior n corpul modulului.

    In corpul modulului pot aparea urmatoarele articole:

  • 7/24/2019 Verilog hdl courses

    20/271

    10 CAPITOLUL 1. INTRODUCERE

    : Parametrul este o constanta de modul care poateavea o valoare implicita ce poate fi modificata n momentul instant ierii modu-lului. Doua instante ale aceluiasi modul pot avea valori diferite ale unui para-metru.

    Modificarea parametrului se poate face cusaucu .

    Exemple:

    //Modificarea parametrului prin

    sumator #(8) U1Sumator (...); // instanta de sumator pe 8 biti

    sumator #(4) U2Sumator (...); // instanta de sumator pe 4 biti

    //Modificarea parametrului prin defparam U2Sumator.width = 16;

    sumator U2Sumator (...); // instanta de sumator pe 16 biti

    , ,

    : Declaratiile directiei si ale dimensiunilorporturilor.

    Exemple:

    input cpuClk_i; // intrare pe 1 bit

    input reset_ni; // intrare pe 1 bit

    input[15:0] cpuAddr_i; // bus de intrare pe 16 biti

    inout[31:0] data_io; // bus de date bidirectional de 32 bitioutput rdy_o; // iesire pe 1 bit

    De remarcat ca denumirea porturilor a fost aleasa astfel ncat sa contina infor-matia referitoare la directia portului, informatie foarte utila la gestionarea unuicod de dimensiuni mari. Mai multe recomandari referitoare la scrierea coduluiVerilog se gasesc n sect iunea 2.9.

    , ,

    , , : Declaratii-le de variabile Verilog modeleaza atat sarme fizice sau abstracte, cat si obiectefolosite la modelarea comportamentala de nivel nalt (generatoare de vectori de

    test ce nu vor fi sintetizate). Descrierea tipurilor de date si a obiectelor Verilogeste prezentata n sectiunea 2.4.

    : Declarare de conditii (evenimente) care pot deter-mina o actiune. Evenimentele se declara prin cuvantul rezervat event.

    , , :

    Instantierea unei porti logice definite n limbaj, a unei primitive definite deutilizator sau a unui modul reprezinta mecanismul de descriere a structurii unuimodul. Sintaxa specificatiei de instantiere de modul este prezentata n continu-area acestei sectiuni.

  • 7/24/2019 Verilog hdl courses

    21/271

    1.3. Terminologia Verilog 11

    : Redefinirea explicita a unui parametru al unui mo-dul n momentul instant ierii acestuia se face folosind cuvantul cheie defparamurmat de numele instantei modulului, numele parametrului si valoarea acestuia.

    : Atribuirea continua este introdusa prin cuvantul cheieassign si este prezentata n sectiunea 2.6.

    : Timpii de propagare din interiorul unui modul pot fi declaratintr-un bloc dedicat, folosind grupul de cuvinte cheiespecify si endspecify.

    : Specificatia concurenta initial nu este sinteti-zabila. Ea este folosita pentru descrierea comportamentului modulelor caregenereaza vectori de test. Specificatiainitial este descrisa n sectiunile 2.6 si2.7.

    : Specificatia concurenta always implementeaza unmecanism de includere a uneia sau a mai multor specificat ii secventiale ntr-unbloc ce se executa concurent cu celalalte specificatii concurente. Specificatiaalwayseste descrisa n sectiunile 2.6 si 2.7.

    , : Un task este similar cu o procedura C: permite includereaunei sectiuni de cod n diferite locuri ale descrierii modulului. O functie estesimilara cu un task, dar spre deosebire de acesta, funct ia returneaza o singuravaloare, nu poate contine ntarzieri (se executa ntr-un timp nul) si nu poateapela task-uri. Task-urile si functiile Verilog sunt descrise n sectiunea 4.1.

    Instantierea modulului ntr-un alt modul permite crearea unei ierarhii n structura

    proiectului. Nu se pot defini module care sa se includa pe ele nsele (imbricate). Odefinire de modul nu poate contine o alta definire de modul ntre cuvintele sale cheiemodule si endmodule. Un modul include alt modul prin instantierea unei copii aacestuia. Procesul este similar cu plantarea unor capsule de circuite integrate pe oplaca. Acelasi tip de circuit poate fi plasat de mai multe ori pe un cablaj imprimat,eventual avand conectari diferite. Similar, un modul poate fi instantiat de mai multeori n unul sau mai multe module diferite, instantele putand avea parametrii diferiti.

    Specificatiacreeaza una sau mai multe instantieri (aparitii)ale modulului. De exemplu, un model de bistabil D se poate instantia de 16 ori pentrua genera un registru de 16 biti.

    Sintaxa specificatiei de instantiere de modul este prezentata n continuare:

    S

    ::= ?

    * ;

    ::=

    ::= # ( * )

  • 7/24/2019 Verilog hdl courses

    22/271

    12 CAPITOLUL 1. INTRODUCERE

    ::= ( ? )

    ::=

    ::= *

    ||= *

    ::=

    ||=

    ::= . ( )

    In continuare sunt prezentate cateva exemple de module Verilog care descriu cir-cuite digitale elementare.

    Modul vot majoritar cu trei intrari: descriere algoritmica a propagarii datelor.

    V

    module votMajoritar3Df (

    i1, // intrare de vot 1

    i2, // intrare de vot 2

    i3, // intrare de vot 3

    decizie // decizie in urma votului

    );

    input i1, i2, i3;

    output decizie;

    wire vot12;

    wire vot13;

    wire vot23;

    assign vot12 = (i1 & i2); // operator AND

    assign vot13 = (i1 & i3);

    assign vot23 = (i2 & i3);

    assign decizie = vot12 | vot13 | vot23; // operator OR

    endmodule

    Modul vot majoritar cu trei intrari: descriere cu porti logice definite n limbaj.

  • 7/24/2019 Verilog hdl courses

    23/271

    1.3. Terminologia Verilog 13

    V

    module votMajoritar3Gl (

    i1, // intrare de vot 1

    i2, // intrare de vot 2

    i3, // intrare de vot 3

    decizie // decizie in urma votului

    );

    input i1, i2, i3;

    output decizie;

    wire vot12;

    wire vot13;

    wire vot23;

    and (vot12, i1, i2); // vot12 = i1 and i2

    and (vot13, i1, i3);

    and (vot23, i2, i3);

    or (decizie, vot12, vot13, vot23);

    endmodule

    T

    La testarea celor doua modulevotMajoritar3DfsivotMajoritar3Gl, nmediul de testaretestVotMajoritar, se observa aparitia glitch-urilor de hazard

    combinational pe iesirile ambelor module testate. De remarcat si variatia vari-abilelor declarate pentru a monitoriza numarul de cazuri testate. Ca referinta,figura 1.2 prezinta formele de unda obtinute prin simulare.

    Figura 1.2 Vot majoritar: forme de unda rezultate n urma testarii.

    Numarator sincron reversibil cu presetare: descrierea comportamentala.

    V

    module upDnCounterPreset (

    clk, // intrare de ceas

    reset_n, // semnal de reset asincron

  • 7/24/2019 Verilog hdl courses

    24/271

    14 CAPITOLUL 1. INTRODUCERE

    upDn_n, // sens de numarare: 1=crescator, 0=descrescatorld, // semnal de presetare

    di, // valoare presetata

    en, // validarea numararii

    count // iesirea numaratorului

    );

    input clk;

    input reset_n;

    input upDn_n;

    input ld;

    input[3:0] di;

    input en;

    output[3:0] count;

    reg[3:0] count;

    // ld en upDn_n clk | count*

    // -------------------------------

    // 1 x x ^ | di

    // 0 1 1 ^ | count + 1

    // 0 1 0 ^ | count - 1

    // 0 0 x ^ | count

    always @(posedge clk or negedge reset_n) begin

    if (!reset_n) begin // reset asincron

    count

  • 7/24/2019 Verilog hdl courses

    25/271

    1.3. Terminologia Verilog 15

    T

    Ca referinta, figura 1.3 prezinta formele de unda obtinute prin simulare.

    Figura 1.3 Numarator: forme de unda rezultate n urma testarii.

    Sumator complet de 1 bit: descriere comportamentala cu operator aritmetic.

    V

    module add1C (

    a, // primul operand

    b, // al doilea operand

    ci, // transport de intrare

    s, // rezultatul

    co // transport de iesire

    );

    input a;

    input b;input ci;

    output s;

    output co;

    assign {co, s} = a + b + ci; // suma celor 3 intrari,

    // reprezentata pe 2 biti,

    // este atribuita

    // concatenarii bitilor co si s

    endmodule

    Sumator complet de 1 bit: descriere la nivel de port i logice.

    V

    module add1Gl (

    a, // primul operand

    b, // al doilea operand

    ci, // transport de intrare

    s, // rezultatul

    co // transport de iesire

  • 7/24/2019 Verilog hdl courses

    26/271

    16 CAPITOLUL 1. INTRODUCERE

    );

    input a;

    input b;

    input ci;

    output s;

    output co;

    wire c1;

    wire c2;

    wire c3;

    xor sum (s, a, b, cin); // s = a xor b xor cin

    and (c1, a, b); // c1 = a and b;

    and (c2, a, cin); // c2 = a and cin;

    and (c3, b, cin); // c3 = b and cin;

    or (co, c1, c2, c3); // co = c1 or c2 or c3;

    endmodule

    Sumator de 4 biti: descriere structurala cu instantieri de sumatoare de 1 bit.

    V

    module add4St (

    a, // primul operand

    b, // al doilea operand

    ci, // transport de intrare

    s, // rezultatul

    co // transport de iesire

    );

    input[3:0] a;

    input[3:0] b;

    input ci;

    output[3:0] s;

    output co;

    wire[2:0] cr; // transport intermediar intre biti

    // instanta bit 0

    add1Gl add1Gl_0 (

    .a (a[0] ),

    .b (b[0] ),

    .ci (ci ),

    .s (s[0] ),

  • 7/24/2019 Verilog hdl courses

    27/271

    1.3. Terminologia Verilog 17

    .co (cr[0] ));

    // instanta bit 1

    add1Gl i_add1Gl_1 (

    .a (a[1] ),

    .b (b[1] ),

    .ci (cr[0] ),

    .s (s[1] ),

    .co (cr[1] )

    );

    // instanta bit 2

    add1Gl i_add1Gl_2 (

    .a (a[2] ),

    .b (b[2] ),

    .ci (cr[1] ),

    .s (s[2] ),

    .co (cr[2] )

    );

    // instanta bit 3

    add1Gl i_add1Gl_3 (

    .a (a[3] ),

    .b (b[3] ),

    .ci (cr[2] ),

    .s (s[3] ),

    .co (co )

    );

    endmodule

    Sumator de dimensiuni generice: descriere comportamentala parametrizabila.

    V

    module addxC (

    a, // primul operand

    b, // al doilea operandci, // transport de intrare

    s, // rezultatul

    co // transport de iesire

    );

    parameter width = 8;

    // valoare implicita a parametrului

    // valoarea actuala poate fi schimbata la instantiere

  • 7/24/2019 Verilog hdl courses

    28/271

    18 CAPITOLUL 1. INTRODUCERE

    input[width-1:0] a;input[width-1:0] b;

    input ci;

    output[width-1:0] s;

    output co;

    assign {co, s} = a + b + ci;

    endmodule

    Multiplexor 2x1: descriere comportamentala.

    V

    module mux2x1C (

    i0, // intrare de date 0

    i1, // intrare de date 1

    s, // intrare de selectie

    y // iesire

    );

    input i0;

    input i1;

    input s;

    output y;

    assign y = s ? i1 : i0;

    endmodule

    Multiplexor 2x1: descriere cu porti logice definite n limbaj.

    V

    module mux2x1Gl (

    i0, // intrare de date 0

    i1, // intrare de date 1

    s, // intrare de selectiey // iesire

    );

    input i0;

    input i1;

    input s;

    output y;

    wire s_n;

  • 7/24/2019 Verilog hdl courses

    29/271

    1.3. Terminologia Verilog 19

    wire s0, s1;

    not (s_n, s);

    nand (s0, i0, s_n); // s0 = not(i0 and s_n)

    nand (s1, i1, s);

    nand (y, s0, s1);

    endmodule

    Multiplexor2x1: descriere cu primitive definite de utilizator.

    V

    module mux2x1tUdp (

    i0, // intrare de date 0

    i1, // intrare de date 1

    s, // intrare de selectie

    y // iesire

    );

    input i0;

    input i1;

    input s;

    output y;

    mux2x1 (y, i0, i1, s);

    endmodule

    primitive mux2x1 (y, i0, i1, s);

    output y; // primul port este iesirea

    input i0;

    input i1;

    input s;

    table

    // i0 i1 s : y aceasta linie este doar un comentariu

    0 ? 0 : 0;

    1 ? 0 : 1;

    ? 0 1 : 0;

    ? 1 1 : 1;

    0 0 x : 0;

    1 1 x : 1;

    endtable

    endprimitive

    Multiplexor 4x1: descriere structurala cu primitive mux2x1 definite de utiliza-tor.

  • 7/24/2019 Verilog hdl courses

    30/271

    20 CAPITOLUL 1. INTRODUCERE

    V

    module mux4x1tUdp (

    i0, // intrare de date 0

    i1, // intrare de date 1

    i2, // intrare de date 2

    i3, // intrare de date 3

    s, // intrare de selectie

    y // iesire

    );

    input i0;

    input i1;

    input i2;

    input i3;

    input[1:0] s;

    output y;

    wire mux1;

    wire mux0;

    mux2x1 (mux1, i2, i3, s[1]);

    mux2x1 (mux0, i0, i1, s[1]);

    mux2x1 (y, mux0, mux1, s[0]);

    endmodule

    Multiplexor: descriere cu poarta de transmisiune.

    V

    module mux2x1tTg (

    i0, // intrare de date 0

    i1, // intrare de date 1

    s, // intrare de selectie

    y // iesire

    );

    input i0;

    input i1;

    input s;

    output y;

    wire s_n;

    // not (iesire, intrare)

    not (s_n, s);

  • 7/24/2019 Verilog hdl courses

    31/271

    1.4. Mediul de simulare a modelelor HDL 21

    // cmos (iesire, intrare, controlN, comtrolP)cmos(y, i0, s_n, s);

    cmos(y, i1, s, s_n);

    endmodule

    1.4 Mediul de simulare a modelelor HDL

    Testarea unui model de sistem digital se face ntr-un mediu de simulare similar cu omasa de laborator.

    Ca exemplu, se considera studierea n laborator a comportamentului unei portilogice. Pe langa circuitul de studiat, pe masa de laborator exist a si aparate elec-

    tronice: sursa de alimentare, sursa de semnal, osciloscop. Conectarea aparatelor laporturile circutului de studiat se face cu sarme. Ansamblul circuit de studiat-aparateeste un sistem nchis (nu exista conectoare cu ceva din exteriorul mesei).

    Similar, ntr-un mediu de simulare sunt instantiate trei tipuri de module:

    modelul sistemului de studiat;

    modele de generatoare de stimuli (similare generatoarelor de semnal);

    modele de monitorizare si verificare (similare aparatelor de masura si control).

    Toate aceste module sunt instantiate (incluse) ntr-un modul fara porturi (similarmesei de lucru din laborator). Conexiunile se fac ntre porturile sistemului de studiat

    si porturile corespunzatoare ale generatoarelor de stimuli sau ntre porturile sistemuluide studiat si porturile monitoarelor/verificatoarelor de conditii.Figura 1.4 prezinta grafic structura unui mediu de simulare Verilog. Modelul

    dispozitivului de testat este stimulat prin semnale provenite de la generatorul devectori de test. Optional, acesta poate verifica iesirile sistemului si genera stimulin consecinta. Pentru verificari automate, se recomanda includerea unuia sau a maimultor module responsabile pentru verificarea datelor, a protocolului de comunicat iesau a altor conditii logice complexe. Monitoarele au numai porturi de intrare si ge-nereaza mesaje de eroare sau de atent ionare, fara a modifica starea ansamblului.

    Modulele generatoare de vectori de test pot prelua din fisiere diverse date folositepentru determinarea valorilor semnalelor generate. Modulele de monitorizare a sem-nalelor si de verificare pot scrie n fisiere externe date sub diferite formate. In plus,aceste module pot afisa sau scrie n fisiere mesaje informative, de atentionare sau deeroare.

    1.5 Comparatie Verilog-VHDL

    Exista nenumarate comparatii ntre Verilog si VHDL. In acest paragraf nu se faceo comparatie completa a celor doua limbaje de descriere hardware. In schimb, seprezinta doua sisteme digitale mici (o poarta si un bistabil) modelate n cele doualimbaje.

    Avantaje evidente ale Verilog HDL:

  • 7/24/2019 Verilog hdl courses

    32/271

    22 CAPITOLUL 1. INTRODUCERE

    Monitorizare

    verificare

    si

    de test

    Generator

    de vectoriModul

    sintetizabiltestat

    Mediu de testare

    Figura 1.4 Mediu de simulare: dispozitiv de testat, generator de vectori, monitor.

    tipuri de date simple si eficiente;

    porti logice definite n limbaj;

    cod mai concentrat.

    Avantaje evidente ale VHDL:

    suport puternic pentru descriere de vectori de test si lucru cu fisiere;

    posibilitatea modelarii sistemelor analogice sau de comanda si control (motoareelectrice, senzori).

    Exemplu: Bistabil DVHDL Verilogentity dff is module dff (d, clk, q);

    port (d, clk: in bit; q: out bit); input d, clk;

    end dff; output q;

    architecture basic of dff is

    begin

    process (clk) always @(posedge clk)

    begin

    if (rising_edge(clk)) then

    q

  • 7/24/2019 Verilog hdl courses

    33/271

    1.5. Comparatie Verilog-VHDL 23

    Exemplu: Poarta AND cu doua intrariVHDL Verilogentity and2 is module and2 (a, b, y);

    port (a, b: in bit; y: out bit); input a, b;

    end and2; output y;

    architecture basic2 of and2 is

    begin

    y

  • 7/24/2019 Verilog hdl courses

    34/271

  • 7/24/2019 Verilog hdl courses

    35/271

    Capitolul 2

    FUNDAMENTELE

    LIMBAJULUI VERILOGHDL

    2.1 Conventii lexicale

    Ca orice limbaj, Verilog are un numar de atomi lingvistici. Acesti atomi pot fi opera-tori, delimitatori, comentarii, numere, siruri, identificatori sau cuvinte cheie rezervate.Toate cuvintele cheie rezervate sunt scrise cu minuscule. Lista tuturor cuvintelor cheie

    este prezentata n anexa B. Limbajul Verilog (spre deosebire de VHDL) este un lim-baj case-sensitive: literele minuscule au semnificatie diferita de literele majusculecorespunzatoare.

    Delimitatorii de atomi lingvistici sunt caracterul spatiu, caracterul tabulatorsi caracterul linie noua. Cu exceptia prezentei acestora n siruri de caractere, acestecaractere sunt ignorate.

    Verilog suporta doua feluri de comentarii:

    Comentarii pe o singura linie. Comentariul se ntinde de la aparitia a douacaractere slash (//) si pana la sfarsitul liniei (marcat de caracterul linienoua).

    Comentarii pe mai multe linii. Comentariul se ntinde ntre marcherul de nceput/* si marcherul de sfarsit */. Comentariile pe linii multiple nu pot fi incluseunele n altele.

    2.2 Structura codului Verilog

    In Verilog exista o singura entitate lingvistica: modulul. In afara modulului nupot exista decat directive de compilare. In interiorul modulului pot aparea atatspecificatii, cat si directive de compilare. Includerea ntr-un cod sursa Verilog a co-dului Verilog existent ntr-un alt fisier se face prin directiva de compilare include.

    25

  • 7/24/2019 Verilog hdl courses

    36/271

    26 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    Includerea unui fisier n altul se face static, la compilare si este echivalenta cu copiereafisierului inclus n pozitia n care apare directiva de includere de fisiere.

    Modulul contine atat descrierea interfetei cu mediul exterior (alte module), cat sicomportamentul sau structura sa. Toate declaratiile facute ntr-un modul sunt localeacelui modul. Ca o consecinta, nu exista obiecte (semnale) globale ca ntr-un programsoftware. Semnalele declarate cu acelasi nume, dar n module diferite, sunt semnalediferite.

    Intr-un modul pot fi instantiate alte module pentru a crea o structura ierarhica.Spre deosebire de VHDL, n Verilog modulul nu are o declaratie explicita si nici

    nu contine regiuni explicite pentru declaratii. Semnalele trebuie declarate nainte deprima referire la acestea, dar declaratia poate fi facuta oriunde n corpul modulului.

    Exista doua tipuri de subprograme utilizate n mod similar cu procedurile sifunctiile C. Definirea subprogramelor are rolul de a condensa codul Verilog n cazulnecesitatii repetarii unor portiuni identice de cod. Exista doua tipuri de subprogramemarcate de cuvintele rezervate: task si function.

    2.3 Setul de valori

    Verilog are un set de valori simplu, definit n limbaj.

    0: valoare logica 0 sau conditie falsa;

    1: valoare logica 1 sau conditie adevarata;

    x: valoare logica necunoscuta;

    z: stare de nalta impedanta.Valoareazla intrarea unei porti logice este interpretata ca fiind x. Caracterele x

    si z pot fi minuscule sau majuscule.Exista trei tipuri de constante n Verilog:

    Numere ntregi;

    Numere reale;

    Siruri.

    Pentru a usura interpretarea acestora, se pot utiliza caractere de subliniere (_)pentru a desparti caracterele ce desemneaza constante. Caracterul de subliniere nupoate fi primul caracter.

    2.3.1 Numere ntregi

    Numerele ntregi pot fi scrise n forma implicita ca numere reprezentate n baza 10sau ca valori exprimate ntr-o baza de numeratie precizata explicit. Numerele ntregisunt echivalente cu scrierea acestora n binar. Numerele negative sunt reprezentatesub forma de complement fata de 2.

    Sintaxa reprezentarii numerelor ntregi este:

    S

  • 7/24/2019 Verilog hdl courses

    37/271

    2.3. Setul de valori 27

    [dimensiune]

    Un numar n format cu baza explicita este totdeauna considerat pozitiv. Dacadimensiunea nu este precizata se considera o valoare implicita dependenta de imple-mentarea simulatorului (de obicei 32 de biti).

    Bazele de numeratie acceptate sunt:

    baza 2: desemnata de litera b sau litera B;

    baza 8: desemnata de litera o sau litera O;

    baza 10: desemnata de litera d sau litera D;

    baza 16: desemnata de litera h sau litera H.

    Exemple:

    13 numarul 13 exprimat n baza 10 (n binar 1101)-13 numarul -13 exprimat n baza 10 (n binar, pe 4 biti1011,

    iar pe 5 biti10011)4b1010 numarul 10 exprimat n binar pe 4 biti12o327 numar exprimat pe 12 biti n baza 816hBEEF numar exprimat pe 16 biti n baza 168d-3 numar exprimat ilegal (valoarea nu poate fi negativa)-8d3 numar exprimat legal ca fiind complementul fata de 2 al numarului

    pozitiv 3, reprezentat pe 8 biti (echivalent cu 8b1111_1101)16 h DEAD forma legala cu spatii ntre dimensiune si caracterul

    si ntre baza de numeratie si valoare4 b0010 forma ilegala cu spatii ntre caracterul si baza de numeratiewidthb1010 forma ilegala, dimensiunea nu poate fi un parametru sau o expresieb1010 forma legala, dimensiunea poate lipsi (numarul este reprezentat

    pe numarul maxim de biti, n acest caz 4)hFF numar exprimat n baza 16, reprezentat pe 8 biti8b101 numar exprimat n baza 2, reprezentat pe 8 biti ca

    8b00000101

    8b0000_0101 numar echivalent cu forma anterioara (caracterele _ sunt ignorate)3b0110_0101 numar echivalent cu 3b101(caracterele din stanga sunt trunchiate

    daca valoarea are mai multi biti decat dimensiunea precizata explicit)8b0_11_0_0101 folosire legala a caracterului de subliniere pentru delimitare8b_0110_0101 folosire ilegala a caracterului de subliniere la nceputul valorii8d260 numar echivalent cu 4 n baza 10 (provenit din trunchierea

    caracterului cel mai semnificativ al reprezentarii n binar9b1_0000_0100.)

    8bx valoare nedefinita extinsa pe 8 bitixxxxxxxx4bz valoare z extinsa pe 4 bitizzzz

    2.3.2 Numere reale

    Numerele reale pot fi reprezentate sub doua forme:

  • 7/24/2019 Verilog hdl courses

    38/271

    28 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    Numere zecimale (cu virgula). Exemple: 3.14, -0.268, 11.1512

    Numere n format stiintific (cu exponent). Exemple: 3.1415E2(314,15),1.0E3(1000,0),5E-3(0,005),1_234.567_89(1234,56789),5.3E-3. Forma: 5.esteilegala deoarece dupa punctul zecimal trebuie sa apara cel putin o cifra.

    Numerele reale nu sunt sintetizabile. Numerele reale sunt automat convertite la nu-mere ntregi prin rotunjire.

    2.3.3 Siruri

    Un sir este format dintr-o secventa de caractere incluse ntre ghilimele ( ). Fiecarecaracter este reprezentat pe 8 biti si este tratat ca un ntreg pozitiv. De exemplu,pentru a stoca mesajul "WAIT" este necesara definirea unei variabile de 32 de biti.

    parameter nrChar = 4;

    reg[nrChar*8-1:0] mesaj;

    ...

    mesaj

  • 7/24/2019 Verilog hdl courses

    39/271

    2.4. Tipuri de date si obiecte 29

    wire outGate1; // declara un obiect de tip net (wire)reg outGate2; // declara un obiect de tip register (reg)

    assign outGate1 = a & b; // iesirea outGate1 este continuu evaluata

    // conform expresiei (a AND b)

    always @(a or b) // iesirea outGate2 este evaluata conform

    outGate2

  • 7/24/2019 Verilog hdl courses

    40/271

    30 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    In Verilog este posibila nedeclararea unei sarme de tipnet. In acest caz, declaratiaimplicita este de tip wire de 1 bit. Se recomanda neutilizarea acestei reguli Verilogsi declararea explicita a tuturor sarmelor.

    Datele de tip register pot fi declarate cu mai multe cuvinte cheie, n functie decomportamentul acestora:

    reg Tip folosit cel mai frecvent pentru declararea de sarme cu memorie.Este folosit pentru modelarea iesirilor de bistabile.

    integer Tip folosit exclusiv la modelarea la nivel nalt (nu pentru sinteza) fiindechivalent cu tipul regpe 32 de biti.

    time Tip folosit exclusiv la modelarea la nivel nalt pentru stocarea si

    manipularea valorilor ce semnifica timp.

    real Tip folosit exclusiv la modelarea la nivel nalt pentru stocarea simanipularea valorilor ce semnifica numere reale.

    realtime Tip identic n sintaxa si semantica cu tipul real.

    Atat sarmele de tipnet, cat si cele de tip regpot fi extinse pe una sau doua dimen-siuni. Extinderea pe o dimensiune modeleaza un bus. Extinderea pe doua dimensiunimodeleaza o matrice de date. Verilog nu ofera suport pentru structuri de date de maimult de doua dimensiuni. Dimensiunea vectorilor se precizeaza la declararea sarmeintre cuvantul cheie ce desemneaza tipul de sarma si numele acesteia.

    parameter width_p = 16;wire [7:0] dataBus; // bus de 8 biti

    reg[width_p-1:0] shReg; // bus de dimensiune parametrizabila

    assign dataBus = 8hAB; // atribuire catre tot bus-ul

    assign dataBus[0] = 1b0; // atribuire catre un membru al bus-ului

    assign dataBus[2:0] = 3b101; // atribuire catre o portiune din bus

    // registru de deplasare in inel de dimensiuni generice

    // valoarea viitoare se obtine din valoarea curenta

    // deplasata cu un bit la stanga si

    // transferul MSb pe pozitia LSb

    always @(posedge ck)shReg

  • 7/24/2019 Verilog hdl courses

    41/271

    2.4. Tipuri de date si obiecte 31

    reg[15:0] regFile[255:0];// declaratie de matrice bidimensionala

    // ce poate corespunde unui set de

    // 256 registre de cate 16 biti

    wire[15:0] reg178;

    wire zeroFlag;

    reg[width_p-1:0] mem[deep_p-1:0];

    // matrice de memorie bidimensionala

    // de dimensiuni parametrizabile

    wire[width_p-1:0] mem_0; // vector corespunzator locatiei

    // de la adresa 0

    assign mem_0 = mem[0]; // atribuirea unui membru al matricii

    // bidimensionale catre un vector

    assign reg178 = regFile[178]; // accesarea registrului de la

    // adresa 178

    assign zeroFlag = reg178[2]; // accesarea bitului 2 din registrul de

    // la adresa 178

    Exemplul urmator prezinta folosirea declaratiilor de tip wire si reg n cazulmodelarii structurale a unui bistabil T implementat cu un bistabil D si o poartaXOR.

    Prima versiune de modelare descrie bistabilul D cu o specificat iealways. Din acest

    motiv, sarma qt_o (asociata portului de iesire cu acelasi nume) a fost declarata detipreg. Comportamentul sarmeid (interna modulului) a fost descris cu o specificatiecontinua assign. Din acest motiv, sarmad a fost declarata de tip wire.

    V

    module tVer1 (

    reset_ni, // reset asincron activ in 0

    ck_i, // semnal de ceas

    t_i, // intrarea bistabilului T

    qt_o // iesirea bistabilului T

    );

    input reset_ni;input ck_i;

    input t_i;

    output qt_o;

    // iesire declarata ca reg

    reg qt_o;

    // sarma interioara declarata ca wire

    wire d;

  • 7/24/2019 Verilog hdl courses

    42/271

    32 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    assign d = t_i ^ qt_o; // operator XOR

    always @(posedge ck_i or negedge reset_ni) begin

    if (!reset_ni) begin

    qt_o

  • 7/24/2019 Verilog hdl courses

    43/271

    2.4. Tipuri de date si obiecte 33

    reset_ni, // reset asincron activ in 0ck_i, // semnal de ceas

    t_i, // intrarea bistabilului T

    qt_o // iesirea bistabilului T

    );

    input reset_ni;

    input ck_i;

    input t_i;

    output qt_o;

    // declararea sarmei d (interna modulului)

    wire d;

    assign d = t_i ^ qt_o;

    // instantierea bistabilului D

    dff i_dff(

    .reset_ni (reset_ni ),

    .ck_i (ck_i ),

    .d_i (d ), // asociere dintre portul de intrare d_i

    // si sarma d

    .qd_o (qt_o ) // asociere dintre portul de iesire qd_o

    // si sarma qt_o (conectata la iesirea

    // modulului tVer2)

    );

    endmodule

    A treia versiune de modelare ncapsuleaza toata descrierea ntr-o singura specifi-catiealways. Sarma conectata pe intrarea bistabilului nu mai este declarata explicit.Aceasta versiune este cea mai folosita la proiectarea RTL pentru modelarea unuibistabil T si are avantajul ca ascunde structura interna pentru a descrie doar com-portamentul.

    V

    module tVer3 (

    reset_ni, // reset asincron activ in 0ck_i, // semnal de ceas

    t_i, // intrarea bistabilului T

    qt_o // iesirea bistabilului T

    );

    input reset_ni;

    input ck_i;

    input t_i;

    output qt_o;

  • 7/24/2019 Verilog hdl courses

    44/271

    34 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    // declaratia iesiri de tip reg

    reg qt_o;

    always @(posedge ck_i or negedge reset_ni) begin

    if (!reset_ni) begin

    qt_o

  • 7/24/2019 Verilog hdl courses

    45/271

    2.5. Operatori 35

    Operator Descriere+ Operator unar pentru numar pozitiv- Operator unar pentru numar negativ! Operator unar pentru negare logica~ Operator unar pentru negare pe biti& Operator de reducere AND (aplicat unui vector produce un bit)~& Operator de reducere NAND^ Operator de reducere XOR

    ~^ Operator de reducere XNOR| Operator de reducere OR~| Operator de reducere NOR* Operator binar de multiplicare/ Operator binar de mpartire% Operator binar modulo+ Operator binar de adunare- Operator binar de scadere> Operator binar de deplasare dreapta< Operator binar de comparare mai mic Operator binar de comparare mai mare>= Operator binar de comparare mai mare sau egal== Operator binar de egalitate logica!= Operator binar de inegalitate logica=== Operator binar de egalitate cu selectie!== Operator binar de inegalitate cu selectie& Operator binar logica AND pe biti

    (aplicat unor operanzi vectori produce un vector)^ Operator binar logica XOR pe biti~^ Operator binar logica XNOR pe biti| Operator binar logica OR pe biti&& Operator binar AND logic

    (aplicat unor expresii, produce o valoare de adevar a unei conditii)|| Operator binar OR logic?: Operator ternar conditional

    Tabelul 2.1Operatorii Verilog n ordinea precedentei acestora.

  • 7/24/2019 Verilog hdl courses

    46/271

    36 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    Dimensiunea rezultatului operatiilor aritmetice depinde de dimensiunea celui maimare operand si de dimensiunea si tipul obiectului destinat ie. Daca se atribuie unuiobiect un rezultat pe mai putini biti, atunci rezultatul se extinde cu zerouri. In cazulobiectului destinatie de tip ntreg, rezultatul ezultatul se extinde si extinde bitul desemn (0pentru numere pozitive si 1 pentru numere negative). Daca se atribuie unuiobiect un rezultat pe mai multi biti atunci, rezultatul se trunchiaza la numarul debiti ai obiectului destinatie.

    Exemple:

    module testOpAritm();

    reg[3:0] opA, opB, opC;

    reg[4:0] opD;

    reg[5:0] opE;reg[7:0] opF;

    integer opG;

    reg[7:0] opH;

    initial begin

    opA = 4b1110; // 14

    opB = 4b1000; // 8

    opH = -9; // -9

    opC = opA + opB; // suma evaluata pe 4 biti

    $display("Binar: %b + %b = %b, Zecimal: %0d + %0d = %0d",

    opA, opB, opC, opA, opB, opC);

    opD = opA + opB; // suma evaluata pe 5 biti

    $display("Binar: %b + %b = %b, Zecimal: %0d + %0d = %0d",

    opA, opB, opD, opA, opB, opD);

    opE = opA + opB; // suma evaluata pe 6 biti

    $display("Binar: %b + %b = %b, Zecimal: %0d + %0d = %0d",

    opA, opB, opE, opA, opB, opE);

    opF = opA * opB; // multiplicare evaluata la 8 biti

    $display("Binar: %b * %b = %b, Zecimal: %0d * %0d = %0d",

    opA, opB, opF, opA, opB, opF);

    opC = opB - opA; // diferenta evaluata pe 4 biti

    $display("Binar: %b - %b = %b, Zecimal: %0d - %0d = %0d",

    opB, opA, opC, opB, opA, opC);

    opD = opB - opA; // diferenta evaluata pe 5 biti

    $display("Binar: %b - %b = %b, Zecimal: %0d - %0d = %0d",

    opB, opA, opD, opB, opA, opD);

    opE = opB - opA; // diferenta evaluata pe 6 biti

  • 7/24/2019 Verilog hdl courses

    47/271

    2.5. Operatori 37

    $display("Binar: %b - %b = %b, Zecimal: %0d - %0d = %0d",opB, opA, opE, opB, opA, opE);

    opG = opB - opA; // diferenta evaluata ca numere intregi

    $display("Binar: %b - %b = %b, Zecimal: %0d - %0d = %0d",

    opB, opA, opG, opB, opA, opG);

    opC = opA / opB; // impartire

    $display("Binar: %b / %b = %b, Zecimal: %0d / %0d = %0d",

    opA, opB, opC, opA, opB, opC);

    opC = opA % opB; // modulo

    $display("Binar: %b mod %b = %b, Zecimal: %0d mod %0d = %0d",

    opA, opB, opC, opA, opB, opC);

    $display("-9 reprezentat pe 8 biti. Binar: %b, Zecimal: %0d",

    opH, opH);

    opF = opB + opH; // scadere cu numere "negative".

    // Rezultat asteptat -1

    $display("Binar: %b - %b = %b, Zecimal: %0d - %0d = %0d",

    opB, opH, opF, opB, opH, opF);

    opH = opF + 3; // adunare cu numere "negative".

    // Rezultat asteptat +2

    $display("Binar: %b + %b = %b", opF, 3, opH);$display("Zecimal: %0d + %0d = %0d", opF, 3, opH);

    end

    endmodule

    In urma simularii, se obtine urmatorul text:

    # Binar: 1110 + 1000 = 0110, Zecimal: 14 + 8 = 6

    # Binar: 1110 + 1000 = 10110, Zecimal: 14 + 8 = 22

    # Binar: 1110 + 1000 = 010110, Zecimal: 14 + 8 = 22

    # Binar: 1110 * 1000 = 01110000, Zecimal: 14 * 8 = 112

    # Binar: 1000 - 1110 = 1010, Zecimal: 8 - 14 = 10# Binar: 1000 - 1110 = 11010, Zecimal: 8 - 14 = 26

    # Binar: 1000 - 1110 = 111010, Zecimal: 8 - 14 = 58

    # Binar: 1000 - 1110 = 11111111111111111111111111111010,

    Zecimal: 8 - 14 = -6

    # Binar: 1110 / 1000 = 0001, Zecimal: 14 / 8 = 1

    # Binar: 1110 mod 1000 = 0110, Zecimal: 14 mod 8 = 6

    # -9 reprezentat pe 8 biti. Binar: 11110111, Zecimal: 247

    # Binar: 1000 - 11110111 = 11111111, Zecimal: 8 - 247 = 255

    # Binar: 11111111 + 00000000000000000000000000000011 = 00000010

  • 7/24/2019 Verilog hdl courses

    48/271

    38 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    # Zecimal: 255 + 3 = 2

    In cadrul operatiilor aritmetice obiectele de tip net, obiectele de tip reg si nu-merele ntregi n format cu baza de numeratie sunt considerate numere pozitive farasemn. Sunt considerate numere ntregi cu semn obiectele de tip integer si numerentregi n format zecimal. Numerele negative sunt reprezentate n binar n complementfata de 2. Daca un bit al unui operand este x atunci rezultatul operatiei aritmeticeeste x.

    2.5.2 Operatori relationali

    Operatorii relationali sunt:

    > mai mare;

    < mai mic;

    >=mai mare sau egal;

    12 fals (0)

    15 > 8hx nedefinit (x)

    b1000 >= b011110 fals (0)

    3 > = 3 adevarat (1)

    2.5.3 Operatori de egalitate

    Operatorii de egalitate sunt:

    ==egalitate logica;

    != inegalitate logica;

    ===egalitate cu selectie;

    !== inegalitate cu selectie.

    Rezultatul unui operator de egalitate este adevarat (1) sau fals (0).

    Exemple:

  • 7/24/2019 Verilog hdl courses

    49/271

    2.5. Operatori 39

    opA = b10x0opB = b10x0

    opC = 16BExF

    opD = 16BEEF

    opA == opB fals (0)

    opA === opB adevarat (1)

    2b11 === 8b3 adevarat (1)

    opC != opD nedefinit (x)

    opC !== opD adevarat (1)

    2.5.4 Operatori logici

    Operatorii logici sunt:

    &&AND logic;

    ||OR logic;

    ! negarea unara.

    Rezultatul unui operator logic este reprezentat pe un bit: 0, 1 sau x (indecis). Oper-anzii vectori sunt evaluati ca 0 daca au toate valorile 0, altfel sunt evaluati ca 1.

    Exemple:

    sigA = 1b0

    sigB = 1b1

    busC = 4b1010 evaluat ca 1busD = 4b1001 evaluat ca 1busE = 4b0000 evaluat ca 0sigF = 1bx evaluat ca x

    sigA && sigB fals (0)

    sigA || sigB adevarat (1)

    !sigA adevarat (1)

    busC && busD adevarat (1)

    busC || busD adevarat (1)

    !busC fals (0)

  • 7/24/2019 Verilog hdl courses

    50/271

    40 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    !busE adevarat (1)

    !sigF indecis (x)

    2.5.5 Operatori logici pe vectori

    Operatorii logici pe vectori sunt:

    ~ negare bit cu bit;

    & AND pe biti; | OR pe biti;

    ^ XOR pe biti;

    ~^XNOR pe biti.

    Operatorii logici pe vectori opereaza bit cu bit. Rezultatul unui operator pe vectoreste tot un vector, avand dimensiunea operanzilor. Tabelele functiilor implementatede operatorii logici sunt prezentate n tabelul 2.2.

    & (and) 0 1 x z | (or) 0 1 x z0 0 0 0 0 0 0 1 x x

    1 0 1 x x 1 1 1 1 1x 0 x x x x x 1 x xz 0 x x x z x 1 x x

    ^ (xor) 0 1 x z ~^(xnor) 0 1 x z0 0 1 x x 0 1 0 x x1 1 0 x x 1 0 1 x xx x x x x x x x x xz x x x x z x x x x

    ~ (not) 0 1 x z1 0 x x

    Tabelul 2.2Tabelul functiilor implementate de operatorii logici.

    Exemple:

    sigA = 1b0

    sigB = 1b1

    busC = 4b1010

    busD = 4b1001

  • 7/24/2019 Verilog hdl courses

    51/271

    2.5. Operatori 41

    busE = 4b0000sigF = 1bx

    sigA & sigB 1b0

    sigA | sigB 1b1

    ~sigA 1b1

    busC & busD 4b1000

    busC | busD 4b1011

    ~busC 4b0101

    ~busE 4b1111

    ~sigF 1bx

    sigA & sigF 1b0

    sigB & sigF 1bx

    2.5.6 Operatori de reducere

    Operatorii de reducere sunt:

    & AND ntre toti bitii vectorului;

    ~&inversul operatorului &;

    | OR ntre tot i bitii vectorului;

    ~|inversul operatorului |;

    ^ XOR ntre tot i bitii vectorului;

    ~^inversul operatorului ^.

    Operatorii de reducere se aplica unui operand vector si produc rezultat pe un bit.Acesti operatori sunt foarte utili n exprimarea unor functii pe vectori de dimensiuneparametrizabila.

    Exemple:

    busA = 4b1010

    busB = 4b1011

    &busA evaluat ca 0

    |busA evaluat ca 1

  • 7/24/2019 Verilog hdl courses

    52/271

    42 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    ^busA evaluat ca 0

    ^busB evaluat ca 1

    Operatorul de reducere ^ poate fi folosit pentru a verifica daca un bit dintr-un busare valoare x:

    busC = 4b10x0

    ^busC evaluat ca x

    Aceasta observatie poate fi folosita n specificat ii de verificare a coerentei datelorde pe un bus:

    if (^busC === 1bx)

    $display("Valoare necunoscuta pe busC = %b", busC);

    O alta aplicatie a operatorilor de reducere consta n compararea valorii unui vec-tor cu valoarea ntreaga 0 (toti bitii egali cu 0) sau verificarea ajungerii la capatuldomeniului de reprezentare a numerelor pozitive (toti bitii egali cu 1).

    &busC 1daca toti bitii sunt egali cu 1

    ~|busC 1daca toti bitii sunt egali cu 0 (echivalent cu busC === b0)

    2.5.7 Operatori de deplasare

    Operatorii de deplasare sunt:

    deplasare dreapta.

    Operatorii de deplasare produc deplasarea bitilor operandului din stanga cu numarulde pozitii precizat n dreapta, n directia precizata de operator.

    Exemple:reg[7:0] busA;

    ...busA = 8b1001_1100

    ...busA >> 2 evaluat ca 8b0010_0111

    busA

  • 7/24/2019 Verilog hdl courses

    53/271

    2.5. Operatori 43

    Operatorii de deplasare sunt foarte folositi pentru a descrie operatii de nmultiresi mpartire cu numere puteri ale lui 2 sau descrierea exponent ierii n binar.

    1

  • 7/24/2019 Verilog hdl courses

    54/271

    44 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    // registrul cu deplasare in inel

    reg[31:0] inelReg;

    inelReg sign16 = 16b0000_0000_0001_1111

    // sign8 = 8b1001_1111 (negativ) => sign16 = 16b1111_1111_1001_1111

    Operatorii de concatenare au cateva limitari:

    In sirul de concatenare nu sunt admise constante cu dimensiuni neprecizate(ilegal {busA, 5}, dar legal {busA, 4d5})

    Numarul de repetari nu poate fi decat o constanta (ilegal {num{2b10}}, darlegal {3{2b10}}).

    2.6 Specificatii concurente

    Specificatiile concurente se executa n paralel, indiferent de pozitia n care apar ncodul sursa. Fiecare specificatie concurenta are semnificatia proprie, independent

    de celelalte specificatii concurente. Fiecare specificatie concurenta este executataasincron fata de celelalte specificatii concurente. Un task nu se poate apela ntr-ospecificatie concurenta.

    Exista trei tipuri de specificatii concurente:

    specificatiaassign (numita si specificatia de atribuire continua);

    specificatiainitial(constructie lexicala procedurala executata o singura data);

    specificatiaalways(constructie lexicala procedurala executata la infinit).

    Specificatiaassignse poate considera ca este forma cea mai simpla de a modelacircuite logice combinationale. Sintaxa specificatiei assigneste urmatoarea:

    S

    ::= assign ? ?

    ::= ( , )

    ||= ( , )

  • 7/24/2019 Verilog hdl courses

    55/271

    2.6. Specificatii concurente 45

    ::= # ||= #

    ||= # (??)

    ::= *

    ::= =

    ::= supply0 || strong0 || pull0 || weak0 || highz0

    ::= supply1 || strong1 || pull1 || weak1 || highz1

    ::=

    ||= : :

    Specificatia este introdusa de cuvantul rezervat assign. Precizarea tariei surseieste optionala si se face sub forma unui cuplu de cuvinte cheie ce precizeaza taria stariide 0 si a starii de 1. Precizarea ntazierii cu care se face atribuirea este optionala.

    Intarzierea este precedata de simbolul # si are valoarea absoluta determinata de di-rectiva timescale. Intarzierea poate fi un numar, un identificator care are asociatao valoare numerica sau un triplet de valori ale ntarzierii minime, tipice si maximedespartite prin caracterul doua puncte (:).

    Lista de atribuiri contine una sau mai multe atribuiri de semnale. O atribuire desemnal este formata din numele semnalului caruia i se atribuie o valoare, simbolul deatribuire = si o expresie din care, n urma evaluarii, rezulta o valoare similara cu ceaa semnalului atribuit.

    Exemple de atribuiri continue:

    assign (pull0, strong1) #2 dst = src;

    // atribuie semnalului dst valoarea src

    // cu intarziere de 2 unitati de timp,

    // taria semnalului dst fiind "pull0" in// stare 0 si "strong1" in stare 1

    assign #delay dst = src; // atribuie semnalului dst valoarea src

    // cu o intarziere precizata de variabila

    // delay

    assign #(1:2:3) dst = src; // atribuie semnalului dst valoarea src

    // cu intarzierea:

    // 1 unitate de timp (minim)

    // 2 unitate de timp (tipic)

    // 3 unitate de timp (maxim)

  • 7/24/2019 Verilog hdl courses

    56/271

    46 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    Specificatia initial este o specificatie concurenta care include una sau maimulte specificatii procedurale (secventiale). Specificatiainitialse executa o singuradata. Executia acesteia ncepe la timpul0. In cadrul specificatiilor procedurale se potinclude si specificatii de temporizare. Odata executata ultima specificatie secventiala,specificatia concurenta initial si nceteaza efectul. De mentionat ca, specificatiainitialnu este sintetizabila (nu poate descrie un comportament de hardware real),ea fiind ignorata de catre toate programele de sinteza. Specificatia initial estefolosita exclusiv pentru modelarea vectorilor de test. Sintaxa specificatiei initialeste urmatoarea:

    S

    ::=initial

    Specificatiaalwayseste o specificatie concurenta, care include una sau mai multespecificatii procedurale (secventiale), similar cu specificatiainitial. Diferenta dintreacestea consta n faptul ca specificatiaalwaysse executa la infinit. Executia acesteiancepe la timpul 0. Dupa executia ultimei specificatii secventiale se reia executiaacestora de la nceput, cu prima specificatie aflata dupa cuvantul cheie always. Incadrul specificatilor procedurale se pot include si specificatii de temporizare. In plus,specificatiaalwayscontine o conditie care determina reluarea executiei specificatiilor.Sintaxa specificatiei always este urmatoarea:

    S

    ::=always

    Prin natura sa, specificatiaalways este repetitiva. Din acest motiv, este obliga-torie controlarea temporizarii repetarii acesteia. Daca o specificatie always nu areprevazut un mecanism de temporizare, desi nu este eroare de sintaxa, simularea va fiblocata la timpul 0 datorita unei bucle infinite cu ntarziere nula.

    Codul urmator modeleaza un inversor ideal al carui iesire este conectata la intrare.Evident, acest circuit oscileaza pe frecventa infinit.

    always clk = ~clk;

    Precizarea unui timp dupa care se repeta specificatia conduce la un mod foarteuzual de modelare a unui generator de semnal periodic, de ceas:

    always #5 clk = ~clk;

    Semnalulclk va avea un comportament periodic similar cu cel al unui semnal deceas cu perioada 10ns (semnalul si complementeaza starea la fiecare 5ns).

    Detalierea specificatiilor secventiale ce pot aparea n campuleste facuta n sectiunea 2.7.

  • 7/24/2019 Verilog hdl courses

    57/271

    2.7. Specificatii secventiale 47

    2.7 Specificatii secventialeSpecificatiile secventiale (procedurale) sunt specificatii ce pot aparea doar n corpulspecificatiilor concurente initialsau always. Aceste specificatii se executa strict nordinea n care apar n codul sursa. Mai multe specificatii secventiale pot fi grupatentr-un bloc ce se comporta ca o singura specificatie prin delimitarea sa prin cuvintelecheie begin si end.

    Constructiile HDL concurente permit descrierea hardware la un nivel relativ de-taliat. Modelarea unui circuit digital la nivel de porti logice si atribuiri continue estefoarte apropiata de structura fizica a circuitului. In schimb, acest tip de constructiinu permit un nivel suficient de abstractizare necesar descrierii sistemelor complexe demari dimensiuni.

    Sintaxa specificatiilor secventiale este prezentata n continuare:

    S

    ::=;

    ||= ;

    ||= if ()

    ||= if ()

    else

    ||= case () + endcase

    ||= casez () + endcase

    ||= casex () + endcase

    ||= forever ||= repeat ()

    ||= while ()

    ||= for (; ; )

    ||=

    ||=

    ||= wait ()

    ||= -> ;

    ||=

    ||=

    ||=

    ||=

    ||= disable ;

    ||= disable ;

    ||= force ;

    ||= release ;

    2.7.1 Specificatii de atribuire secventiale

    Atribuirile secventiale se deosebesc de atribuirile continue prin modul lor de act iune.Atribuirile continue (realizate prin specificatiaassign) atribuie valori variabilelor

    de tip net similar modului n care iesirea unei port i logice determina valoarea logica

  • 7/24/2019 Verilog hdl courses

    58/271

    48 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    a sarmei asociate. Expresia din partea dreapta a simbolului de atribuire (=) poate fiinterpretata ca un circuit combinational sursa pentru semnal.

    In schimb, atribuirile secventiale nu modifica instantaneu valoarea unei variabileci programeaza modificarea valorii acesteia. Acest mecanism poate fi nteles caplasarea valorii ntr-un registru a carui iesire devine vizibila doar la momentul detimp planificat. Atribuirea n sine are durata zero, dar registrul mentine valoareapana la o noua modificare a acesteia, chiar daca sursa ce a generat valoarea estedezactivata.

    Atribuirile secventiale pot fi interpretate ca atribuiri declansate cu ntarziere.Evenimentul de declansare apare cand simularea executiei modelului HDL ajunge laacea specificatie. Momentul la care se evalueaza o atribuire secventiala poate fi con-trolat prin specificatii de control al evenimentelor, specificatii de control al timpului,specificatii conditionale (if, case) sau specificatii de iteratii.

    Exista doua tipuri de atribuiri secventiale:

    Atribuiri secventiale blocante (atriburi cu simbolul =) si

    Atribuiri secventiale neblocante (atriburi cu simbolul

  • 7/24/2019 Verilog hdl courses

    59/271

    2.7. Specificatii secventiale 49

    Campuleste optional si poate consta dintr-un control temporal(#2) sau control de eveniment (@(posedge clk)). In lipsa unui control temporalse considera conditia ndeplinita la momentul executarii atribuirii blocante.

    Operatorul =este similar cu cel folosit la atribuirile concurente.

    Atribuiri secventiale neblocante. O atribuire secventiala neblocanta aresintaxa prezentata n continuare. Se remarca simbolul de atribuire

  • 7/24/2019 Verilog hdl courses

    60/271

    50 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    begin// valori initiale

    a = 1b0;

    b = 1b0;

    c = 1b0;

    // modificari ale valorilor cu atribuiri blocante

    a = #10 1b1;

    b = #2 1b1;

    c = #4 1b1;

    #50

    a = #10 1b0;

    b = #2 1b0;

    c = #4 1b0;

    end

    initial

    begin

    // valori initiale

    d

  • 7/24/2019 Verilog hdl courses

    61/271

    2.7. Specificatii secventiale 51

    # blockingNonblocking 12 a=1, b=1, c=0, d=1, e=1, f=1# blockingNonblocking 16 a=1, b=1, c=1, d=1, e=1, f=1

    # blockingNonblocking 52 a=1, b=1, c=1, d=1, e=0, f=1

    # blockingNonblocking 54 a=1, b=1, c=1, d=1, e=0, f=0

    # blockingNonblocking 60 a=1, b=1, c=1, d=0, e=0, f=0

    # blockingNonblocking 76 a=0, b=1, c=1, d=0, e=0, f=0

    # blockingNonblocking 78 a=0, b=0, c=1, d=0, e=0, f=0

    # blockingNonblocking 82 a=0, b=0, c=0, d=0, e=0, f=0

    # blockingNonblocking 100 NOTA: Simularea s-a sfarsit.

    Formele de unda ale semnalelor sunt prezentate n figura 2.1. Se remarca faptulca semnalelec,d,e, care au fost atribuite cu specificatii neblocante, si modifica

    valorile la timpul 0ns (respectiv 50ns) plus ntarzierea planificata (10ns, 2nssi 4ns). In acest caz, ntarzierile sunt relative la acelasi moment de timp. Inschimb, semnalele care au fost atribuite cu specificatii neblocante, si modificavalorile la timpi ce trebuie nsumati. a si modifica valoarea la10nsdupa timpulcurent, b la 2ns dupa modificarea lui a, iar c la nca 4ns dupa schimbareasemnaluluib.

    Figura 2.1 Forme de unda pentru exemplificarea atribuirilor secventiale blocante si neblo-cante.

    In codul RTL, se recomanda evitarea folosirii specificatiilor de atribuire blocantesi folosirea exclusiva a celor neblocante. Unele sintetizatoare nu accepta specificatiialways n care apar ambele tipuri de specificatii, generand mesaje de atentionarereferitoare la posibilitatea comportamentului diferit al modelului la nivel de poartalogica generat fata de codul sursa RTL.

    Pentru exemplificarea acestei recomandari, este prezentat cazul a doua specificatiialways, una modeland specificatii de atribuire blocante, iar alta modeland specificatii

    de atribuire neblocante.Specificatiaalwayseste o specificatie concurenta. Din acest motiv, ordinea n care

    apar diverse specificatiialways n codul sursa nu ar trebui sa aiba vreo importanta.Totusi, datorita naturii secventiale a parcurgerii fisierului sursa, specificatiilealwayssunt evaluate secvential de catre simulator (chiar daca la acelasi timp de simulare).Utilizarea n acelasi modul a atribuirilor blocante si neblocante genereaza compor-tamente diferite ale unui cod sursa, n functie de ordinea specificatiilor concurente(always) n fisierul sursa. Comportamentul evidentiat depinde de simulator, dar esteevident ca nici un proiectant nu doreste scrierea unui cod care sa se comporte diferitn functie de simulatorul utilizat.

  • 7/24/2019 Verilog hdl courses

    62/271

    52 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    T

    // atribuire blocanta plasata inaintea celei neblocante

    always @(posedge clk) sigBloc_B1 = sigBloc_B1 + 1;

    always @(posedge clk) sigNebloc_B1

  • 7/24/2019 Verilog hdl courses

    63/271

    2.7. Specificatii secventiale 53

    // atribuire neblocanta plasata inaintea celei blocantealways @(posedge clk) sigNebloc_B2

  • 7/24/2019 Verilog hdl courses

    64/271

    54 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    Figura 2.3 Forme de unda la simularea comparativa RTL - netlist post-sinteza.

    S

    if () begin

    end

    [else begin

    end]

    Executia specificatiei if consta n evaluarea conditiei urmata de executarea unuigrup de specificatii, n funct ie de valoarea de adevar a acesteia. Un caz particu-lar, dar foarte ntalnit, este cel al specificatiei conditionale n care, indiferent devaloarea de adevar a conditiei, se atribuie valori aceluiasi semnal. In acest caz,specificatiaif modeleaza comportamentul unui multiplexor: conditia reprezinta cir-cuitul combinational de generare a intrarii de selectie. De exemplu, sintetizatorulproduce structura din figura 2.4 pornind de la codul sursa urmator:

    if (a_i && b_i) begin // selectia este AND intre doua intrari

    y_o

  • 7/24/2019 Verilog hdl courses

    65/271

    2.7. Specificatii secventiale 55

    Figura 2.4 Structura de multiplexor plus logica sintetizata din specificatia conditionala.

    Codul Verilog ce implementeaza aceasta functie prezinta specificatii conditionalemultiple, incluse unele n altele, unele cu alternativa else.

    always @(posedge clk_i or negedge reset_ni) begin

    if (!reset_ni) begin

    registru_o

  • 7/24/2019 Verilog hdl courses

    66/271

    56 CAPITOLUL 2. FUNDAMENTELE LIMBAJULUI VERILOG HDL

    endend // linia nr.2 ("if (enable_i)" nu are "else")

    end

    end

    2.7.3 Specificatii de selectie

    Specificatiile de selectie permit evaluarea unei expresii si deciderea pe baza valoriiacesteia a specificatiilor ce urmeaza a se executa. Sintaxa specificatiilor case esteurmatoarea:

    S

    case ()

    valoare{, valoare}:

    [default: ]

    endcase

    Specificatiile alternative casex si casez permit existenta valorilor x si z n ex-presiile valorilor. Acestea sunt cazuri care trebuie folosite cu grija deoarece ascundpotentiale pericole la sinteza.

    Executia specificatiei case ncepe cu evaluarea expresiei. Valoarea evaluata secompara secvential, ncepand cu prima valoare ce apare n lista. Daca se gasesteo identitate, se executa specificatiile secventiale ce i corespund si apoi se ncheieexecutia specificatiei case. Ca o consecinta, daca doua valori sunt egale, se executa

    grupul de specificatii asociat primei aparitii a acelei valori. Daca valoarea la care a fostevaluata expresia nu a fost gasita, se executa specificatiile care apar dupa cuvantulrezervat default. Folosirea default nu este obligatorie. Se recomanda folosireaacesteia pentru evitarea buclelor nedorite ce pot aparea n circuitele combinationalemodelate incorect.

    Ca exemplu, este prezentata modelarea unei unitati logico-aritmetice.

    // opcod-uri asociate operatiilor

    define ADD 3b000 // suma operanzilor

    define SUB 3b001 // diferenta operanzilor

    define XOR 3b010 // XOR pe biti intre operanzi

    define AND 3b011 // AND pe biti intre operanzi

    define PASS_L 3b100 // trece operand stanga

    define NEG_L 3b101 // trece operand stanga negat bit cu bit

    module caseEx (

    func_i, // functie

    leftOp_i, // operand stanga

    rightOp_i, // operand dreapta

    rez_o // rezultat

    );