Programarea HDL

Embed Size (px)

Citation preview

  • 8/13/2019 Programarea HDL

    1/166

  • 8/13/2019 Programarea HDL

    2/166

    PROGRAMAREA CU LIMBAJEDE DESCRIERE HARDWARE

    Aplicaii n limbajul VHDL

    Gabriel V. Iana, Gheorghe erbanLaureniu Ionescu, Petre Anghelescu

    UNIVERSITATEA DIN PITESTI

    2009

  • 8/13/2019 Programarea HDL

    3/166

  • 8/13/2019 Programarea HDL

    4/166

    -I-

    CUPRINS

    INTRODUCERE 1

    CAPITOLUL 1. Configurarea structurilor hardware reprogramabilede tip FPGA cu Xilinx ISE

    3

    CAPITOLUL 2. Programarea structurilor hardware reprogramabile

    prin descrieri concurente

    27

    CAPITOLUL 3. Programarea structurilor hardware reprogramabile

    prin descrieri cu specificaii secveniale

    45

    CAPITOLUL 4. Testarea modulelor digitale descrise n VHDL 65

    CAPITOLUL 5. Proiectarea automatelor secveniale

    cu limbajul VHDL

    89

    CAPITOLUL 6. Model de proiectare a unui modul digital

    n limbajul de descriere hardware VHDL

    115

    CAPITOLUL 7. Utilizarea subprogramelor i package-urilor

    n limbajul VHDL

    131

    BIBLIOGRAFIE 151

    ANEXA 1 153

    ANEXA 2 157

  • 8/13/2019 Programarea HDL

    5/166

    -II-

  • 8/13/2019 Programarea HDL

    6/166

    1

    INTRODUCERE

    VHDL este un limbaj de descriere hardware. Prin el se descrie

    comportamentul unor circuite electronice digitale sau sisteme care pot fi

    implementate fizic. Denumirea de VHDL vine de la VHSIC Hardware

    Description Language, VHSIC este nsi o abreviere de la Very High

    Speed Integrated Circuits. Acest limbaj reprezint o iniiativ finanat de

    ctre departamentul de aprare al Statelor Unite n anii 1980.

    VHDL este destinat pentru sinteza circuitelor, precum i simulareaacestora. Cu toate acestea, dei codul VHDL este pe deplin simulabil, nu

    toate construciile sunt sintetizabile. O motivaie fundamentalde a utiliza

    limbaje de descriere hardware cum ar fi VHDL sau Verilog (concurentul

    VHDL-ului) este faptul c sunt standardizate, nu depind de tehnologia

    circuitelor pe care se implementeaz codul, sunt portabile i reutilizabile.

    Doudin aplicaiile principale imediate ale limbajului VHDL se regsesc n

    domeniul dispozitivelor logice programabile - Programmable Logic Devices

    (inclusiv CPLDs-Complex Programmable Logic Devices i FPGA-Field

    Programmable Gate Arrays), precum i n domeniul circuitelor integrate

    dedicate pe aplicaie - ASICs (Application Specific Integrated Circuits).

    Dup ce este scris codul VHDL, acesta poate fi sintetizat iar pentrurealizarea fizic a circuitului dorit poate fi implementat ntr-o structur

    programabil (de la Altera, Xilinx, Atmel, etc) sau pot fi trimise pentru

    fabricarea unui circuit de tip ASIC. Este bine cunoscut faptul c, n prezent,

    multe circuite complexe (microprocesoare, de exemplu) pot fi concepute

    folosind o astfel de abordare. O altobservaie n ceea ce privete limbajul

    VHDL este c, spre deosebire de programele software care sunt executate

    secvenial, declaraiile sale sunt n mod inerent concomitente (paralele). Din

    acest motiv, limbajul VHDL este de obicei mai degrabmenionat ca un cod

    i nu ca un program.

    Cartea se adreseazn primul rnd studenilor din cadrul seciilor de

    Electronic, Calculatoare i Telecomunicaii care au n programproiectarea

    circuitelor logice utiliznd limbaje de descriere hardware. De asemenea,

    prin bogatul suport practic pe care l deine, cartea se adreseaz oricui

    dorete s se iniieze dar i s aprofundeze n domeniul proiectrii cu

    limbaje de descriere hardware.

    Lucrarea este structuratpe 7 capitole, urmate de dou anexe, prin

    care se realizeazo introducere treptatn complexitatea problematicii, de la

  • 8/13/2019 Programarea HDL

    7/166

    2

    abordarea mediilor de proiectare cu limbaje hardware (mediul Xilinx ISE lacapitolul 1) pn la realizarea propriilor pachete de funcii i de declaraii

    care pot fi utilizate n proiectare (capitolul 7). Fiecare capitol ncepe cu un

    breviar teoretic, n care sunt prezentate conceptele legate de tematica acelui

    capitol. Partea principal a capitolelor este constituitde aplicaii. Acestea

    sunt prezentate sub forma unor probleme urmate de soluiile propuse (uneori

    sunt prezentate i mai multe metode de rezolvare). Toate aplicaiile au fost

    destinate implementrii practice pe machete cu circuite FPGA Spartan 3

    XC3S400 existente n cadrul laboratoarelor de Calculatoare numerice, din

    cadrul Facultii de Electronic, Comunicaii i Calculatoare al Universitii

    din Piteti. Totui, dat fiind gradul de generalitate pe care l ofer limbajul

    de descriere hardware VHDL (utilizat n aceast carte), aplicaiile pot fiimplementate i pe alte sisteme cu alte tipuri de circuite reconfigurabile prin

    schimbarea corespunztoare a constrngerilor legate de distribuirea pinilor

    pe capsul. Fiecare capitol se termincu un set de exerciii propuse ce au ca

    scop stimularea iniiativei personale a studenilor.

  • 8/13/2019 Programarea HDL

    8/166

    -3-

    Capitolul I

    Configurarea structurilor hardware reprogramabile

    de tip FPGA cu XILINX ISE

    n acest capitol este prezentat metodologia relativ la implementareaprogramelor scrise prin limbajul VHDL, pe structura reprogramabilFPGA de tipSPARTAN 3, folosind pachetul software de dezvoltare XILINX ISE. Pe scurt, suntabordate urmtoarele etape: introducerea codului VHDL, simularea i vizualizarearezultatelor obinute, sinteza i implementarea surselor, iar n final programareastructurii reconfigurabile.

    1. Breviar teoretic

    1.1.Mediul de proiectare Xilinx ISE

    Mediul software de proiectare XILINX ISE (Integrated SoftwareEnvironment) este utilizat la realizarea i implementarea complet a unui proiect

    pentru structurile programabile de tip XILINX. Componenta software ISE ProjectNavigator faciliteazcrearea proiectului, organizndu-l pe urmtoarele etape:- Descriere proiect. Programatorul are posibilitatea s descrie proiectul prin

    introducerea de coduri surs HDL (Hardware Description Language) pentru

    limbajele VHDL, Verilog, Abel sau utiliznd schematice i diagrame cu strifinite;- Sinteza.n cadrul acestei etape fiierele de tip VHDL, Verilog sau schematice

    sunt transformate n fiiere de tip netlistcare sunt acceptate ca fiiere de intrarela etapa de implementare;

    - Implementarea. Dup sintez, la implementare, proiectul este adaptat itransformat din forma logicdigital n forma tehnologic implementabilpestructura reconfigurabilaleas;

    - Verificarea.Poate fi realizatn toate etapele de implementare ale proiectului.Utilizarea componentelor software de simulare conduce la verificareacomplet a funcionalitii proiectului sau a unor poriuni de proiect. Deasemenea, pot fi realizate i verificri directe pe circuit, dup programarea

    acestuia;- Configurarea. Dup generarea fiierelor de programare (bitstream file)proiectantul are posibilitatea programrii circuitului reconfigurabil. n timpulprocesului de configurare sunt programate interconexiunile structurii FPGAalese.

    n vederea exemplificrii modului de implementare a unui modul digital peo structurde tip FPGA, se prezinturmtorul model.

  • 8/13/2019 Programarea HDL

    9/166

    -4-

    1.2. Structura unui program VHDL

    Programul prin care se descrie un modul digital n limbajul VHDL con ine treipri:

    Entitatea descrie interfaa modulului digital cu semnalele din mediul exterior. Oentitate deja declaratpoate fi accesatde ctre alte entiti.

    Sintax: entitynume_entitate isgeneric(list_generic);

    port(list_de_porturi);]endentitynume_entitate;

    Prin specificaia entityse declarnumele modulului digital. n plus, pot fi declaraiparametrii generici i porturi care fac parte din aceastentitate. Porturile declaratentr-o entitate sunt vizibile n toate arhitecturile atribuite acesteia. Porturile pot fi deintrare, ieire, buffer sau bidirecionale (IN, OUT, BUFFER, INOUT)

    Arhitectura descrie relaia dintre intrrile i ieirile porturilor entitiicreia i este asociat. O arhitecturpoate avea asociatdoar o singurentitate, daro entitate poate avea asociate mai multe arhitecturi prin configuraie.

    Sintax:architecturenume_arhitecturof nume_entitate is-- declaraii n arhitectur

    begin

    --specificaii_concurenteend [ architecture] [ nume_arhitectur];

    Declaraiilibrrii

    Entitate

    Arhitectur

    - declararea librriilor care vor fiutilizate n proiect;

    - declararea entitii modulului ceurmeaza fi proiectat;

    - descrierea arhitecturii acestuia.

  • 8/13/2019 Programarea HDL

    10/166

    -5-

    Zona declarativ a unei arhitecturi poate conine declaraii de tipuri, semnale,constante, subprograme, componente i grupuri. Specificaiile concurente dincorpul arhitecturii definesc legturile dintre intrrile i ieirile modulului digital pecare-l reprezint.

    Sintaxa generala unui program n cod VHDL este urmtoarea:--Declararea librariilor prin clauza library si uselibrarynume_librarie;usenume_librarie.nume_pachet.all;

    --Declararea entitatii modulului digitalentitynume_entitateis

    generic(nume generice : type := valori_initiale);port(nume_porturi : directie tip port);

    end entitynume_entitate; --entity[93]

    --Corpul arhitecturiiarchitecturenume_arhitectura ofnume_entitate is

    declaratii arhitecturabegin

    specificatii concurenteend architecturenume_arhitectura;

    1.3. Operatori utilizai n limbajul VHDL

    Pentru implementarea circuitelor combinaionale, n limbajul VHDL, s-aupus la dispoziia programatorului operatori logici, aritmetici, de comparaie,deplasare i de concatenare.

    n tabelul de mai jos sunt prezentai, pe scurt, operatorii logici:Tipul operatorului Operatori Tipul datelorLogic NOT, AND, NAND,

    OR, NOR, XOR, XNORBIT, BIT_VECTOR,STD_LOGIC,STD_LOGIC_VECTORSTD_UNLOGIC,

    STD_UNLOGIC_VECTOR

    Aritmetic +, -, *, /, **(mod, rem, abs)

    INTEGER, SIGNED,UNSIGNED

    Comparaie =, /=, , = aproape toiDeplasare sll, srl, sla, sra, rol, ror BIT_VECTORConcatenare &, (, , ,) La fel ca la operatorii logici, plus

    SIGNED i UNSIGNED

  • 8/13/2019 Programarea HDL

    11/166

    -6-

    2. Aplicaie

    S se descrie etapele de implementare ale unui modul digital numrtorbinar pe 4 bii, n limbajul VHDL, pe sistemul reconfigurabil cu circuitul FPGASPARTAN3 din laborator.

    Porturile de intrare/ieire ale modulului digital sunt prezentate n figuraurmtoare:

    Verificarea modulului digital va fi realizat folosind schema electricdinfigura de mai jos. Aceast schem este doar o micparte din schema electric asistemului reconfigurabil de dezvoltare SPARTAN 3:

    Not: Se va consulta schema electriccompleta sistemului de dezvoltare i se voridentifica pe aceasta elementele de circuit.

    Pinii de interconectare ai structurii FPGA cu modulul digital descris nVHDL sunt marcai cu bold (Y6, Y17, C6, B8, E7i C5).

    modul_digitalclk y [7:0]

    l eduri [ 1]

    l eduri [ 3]

    l eduri [ 2]

    l eduri [ 5]

    l eduri [ 4]

    l eduri [ 6]

    AA12 l eduri [ 7]

    LED5

    GND

    GND

    R108 470

    LED6 R110 470

    w5

    y5

    l eduri [ 0]

    y2

    FPGA

    y3

    GND

    LED0 R117 470

    w4

    GND

    LED1 R118 470

    GND

    y1

    w2

    LED2 R119 470

    GND

    LED3 R120 470

    GND

    LED4 R121 470

    cl k

    GND

    LED7 R122 470w6

    Spartan 3

  • 8/13/2019 Programarea HDL

    12/166

    -7-

    2.1. Crearea proiectului

    Se lanseazprogramul XILINX ISE din mediul Windows.Primul pas n realizarea modulului digital constn crearea proiectului.Crearea unui proiect se face plecnd de la fereastra general, prin

    selectarea File -> New Project.Se deschide o fereastrde dialog care va fi completatdupcum urmeaz:

    Project Name se introduce numele proiectului (modul_digital);Project Location se selecteazdirectorul n care se dorete salvarea proiectului;Top-Level Module Type fixat ca fiind de tipul HDL.

    n acest caz, proiectul poartdenumirea modul_digital.Se selecteazbutonul Next,dupcare apare urmtoarea fereastr:

  • 8/13/2019 Programarea HDL

    13/166

    -8-

    n vederea completrii proprietilor ce apar n fereastr, se selecteazliniacorespunztoare acestora din zona Value i se completeaz din listele afiateurmtoarele valori:

    - Device Family: structura reconfigurabil utilizat n cadrul laboratoruluieste Spartan 3;

    - Device:va fi introdus codul circuitului utilizat. n acest caz este xc3s400;- Package: se indic tipul capsulei i numrul de pini; circuitul Spartan

    folosit are un package de tipulfg456;- Speed Grade:viteza de propagare a semnalului de ceas n FPGA este -4;- Syntesis Tool:XST[VHDL/Verilog];- Simulator: programul ales pentru simularea i verificarea modulului

    digital esteISE Simulator;

    - Generated Simulator Language:VHDL.

    Toate fiierele proiectului vor fi salvate automat ntr-un subdirector al acestuia.Un proiect poate avea dect un singur fiier HDL, de tip top-level (este practicmodulul principal, capul ierarhiei, care unete toate celelalte submodule). Moduleledigitale pot fi adugate secvenial la proiect pentru a forma o structurierarhicimodular.

    Se selecteazbutonul Next,dupcare apare urmtoarea fereastr:

    Se creeazun fiier sursnou prin selectarea butonului New Source.

    2.2. Crearea i introducerea unui fiier sursVHDL

    n cele ce urmeaz se va introduce n mediul Xilinx ISE un program nlimbajul VHDL. Se creeaz un fiier VHDL, cu extensia *.vhd ce va fi scrisutiliznd editorul programului XILINX.

    n figura de mai sus se selecteazbutonul New Sourcepentru a fi introdusun fiier nou. Dacnu se dorete acest lucru, ci doar adugarea unor fiiere dejaexistente, se selecteazbutonul Next.

  • 8/13/2019 Programarea HDL

    14/166

    -9-

    Va fi afiat ecranul:

    Dup cum se poate vedea n figura de mai sus, pot fi create mai multetipuri de fiiere ce pot fi adugate la proiectul nostru.

    n acest caz, se va selecta un fiier de tip VHDL Module, iar la zona deeditare File Name se va introduce modul_digital. Opiunea Add to projecttrebuie selectat permanent pentru ca fiierul creat sa fie ataat la proiect. ncontinuare se selecteazbutonul Next.

    n coloana cu numele Port Namesunt introduse numele tuturor pinilor cudirecia specificatn coloana Direction(direcia poate fi input, output, inout). ncazul n care porturile sunt vectori sau magistrale, pe coloanele MSB i LSB sespecificdimensiunea acestora.

    Porturile introduse sunt urmtoarele:

  • 8/13/2019 Programarea HDL

    15/166

    -10-

    clk inputy output 7 .. 0

    Dup completarea tuturor porturilor modulului digital, se selecteazbutonul Nexti apare fereastra New Source Information,n care sunt afiate toatedatele completate pnn prezent despre proiectul ce urmeaza fi implementat.

    Se selecteazbutonul Finish. Se revine n fereastra anterioar, dar care areadugat fiierul deja creat. n continuare se selecteaz butonul Next. Va apare ofereastr ce dposibilitatea utilizatorului s adauge proiecte noi. n final, dup onou selectare a butonului Next va fi afiat fereastra de mai jos, n care sunt

    prezentate toate specificaiile proiectului creat.

    Se selecteazbutonul Finish,iar fiierul VHDL va apare n zona Sourcesin Projectdin Project Navigator.

    2.3. Editarea fiierului VHDL

  • 8/13/2019 Programarea HDL

    16/166

    -11-

    Fiierul surspoate fi vizualizat n fereastra Project Navigator. Fereastran care este afiat fiierul surspoate fi utilizatca un editor n vederea completriisau modificrii programului VHDL. Este recomandat ca programul s fie salvat

    periodic prin comanda File Savedin meniul principal. Programele VHDL pot fieditate n orice editor de text i ataate la proiect prin comanda Add Copy Source.

    Programul VHDL va fi completat cu liniile urmtoare de cod surs:

    library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;

    use IEEE.STD_LOGIC_UNSIGNED.ALL;

    entity modul_digital isPort ( clk : in std_logic;

    y : out std_logic_vector(7 downto 0));end modul_digital;

    architecture Behavioral of modul_digital issignal temporar: std_logic_vector(2 downto 0):= (others => '0');

    beginprocess(clk)beginif (clk'event and clk = '1') then

    temporar y y y y y y y y '1');

    end case;end process;

    end Behavioral;

    Programul este format din doua blocuri. Primul bloc are funcia denumrtor pe 3 bii, iar cel de-al doilea este un decodor binar ntr-o formdefinitde proiectant.

  • 8/13/2019 Programarea HDL

    17/166

    -12-

    Legtura dintre blocuri este realizat prin doi regitri declarai n primaparte a modulului digital (y i temporar). Regitrii au avantajul c pot pstravalorile salvate pe o perioadnedeterminatde timp.

    n vederea determinriicorectitudinii codului sursdin fiier se vaverifica sintaxa acestuia.

    n cadrul ferestrei Process Viewse selecteaz Check Syntax. Dupverificare, dac nu exist nicio eroare vaapare semnul n dreptul acesteia.

    n caz contrar, erorile vor fi afiaten partea de jos a display-ului, n fereastraConsole.

    2.4. Simularea proiectului

    Simularea proiectului este necesar pentru verificarea corectitudiniifuncionale ale modulelor digitale create. n prima faz, simularea se face prinvizualizarea formelor de undale stimulilor de intrare i ale semnalelor rezultate laieirile modulelor digitale. n acest scop este necesar crearea unui fiier de tipTest Bench Waveform, urmrind paii de mai jos:

    - Se selecteaz fiierul surs modul_digital.vhd din fereastra Sources in

    Project;- Se creeazo sursnouselectnd Project New Source;- n fereastra New Source Windowse selecteazfiierul de tip Test Bench

    Waveformi i se alocnumele fisier_test;- Se selecteazbutonul Nextdupcare apare o fereastrSelect n care vor

    apare fiierele surs editate de utilizator pn n prezent. n cazul nostruapare doar fiierul modul_digital;

    - Se selecteazbutonul Nexti apoi butonul Finish.

    n final, apare fereastra Initialize timingi se fac urmtoarele setri:- n zona Clock Timing Informationse selecteazfrontul de ceas pozitiv

    Rising Edge, Clock Time High de 10ns, Clock Time Lowde 10ns, Input Setup

    Timede 5ns, Output setup timede 5ns, iar Initial Offsetde 200ns;- n zona Global Signalsse selecteaz GSR(FPGA)i semnalul de ceas,care iniial, va fi 1 logic pentru 100ns;

    - n zona Clock Information, se selecteaz un singur semnal de ceasSingle Clock i se introduce denumirea acestuia din programul VHDL (n cazulnostru semnalul clk);

    - n final, timpul de simulare Initial Length Test Bench va fi setat lavaloarea de 1000ns.

  • 8/13/2019 Programarea HDL

    18/166

    -13-

    Pentru finalizarea completrii acestui tabel se selecteazbutonul OK, dupcare apare n Project Navigatorfereastra ce cuprinde semnele de intrare, respectivde ieire cu formele respective de und.

    Aceast fereastr va fi salvat prin comanda File Save din meniu. nfereastra Sources in Projectva apare un fiier cu numelefisier_test.tbw.

    Dup selectarea acestui fiier, fereastra Process View va avea coninutuldin figura alturat.

    Prin selectarea procesului

    Generate Expected Simulation Resultsse realizeazsimularea funcionaln carenu se ine cont de timpii de propagare princircuit.

    n acest pas vor fi afiate formelede undale semnalelor de ieire, funcie decele ale semnalelor de intrare. Practic,fereastra de afiare prezintfuncia pe care

    programul urmeazso realizeze.

  • 8/13/2019 Programarea HDL

    19/166

    -14-

    Dupterminarea procesului de generare a rezultatelor simulrii, va fi afiaturmtorul grafic:

    Vizualizarea la nivel de bit a semnalului de ieire se realizeaz prinselectarea semnului +din dreptul acestuia.

    n mod similar se genereaz simularea comportamental (SimulateBehavioral Model) i simularea dup post procesare (Simulate Port-Place &Route Model).

    n vederea realizrii modelului final al modulului digital vor fi adugateurmtoarele linii de cod VHDL:

    - n zona declarativa arhitecturii se adauglinia signal semaf :std_logic;- se adaugurmtoarele procese:

    process(clk)variable cont_temp:std_logic_vector(23 downto 0);

    beginif (clk'event and clk = '1') then

    semaf

  • 8/13/2019 Programarea HDL

    20/166

    -15-

    Programul final este urmtorul:

    library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

    entity modul_digital isPort ( clk : in std_logic;

    y : out std_logic_vector(7 downto 0));end modul_digital;

    architecture Behavioral of modul_digital issignal temporar: std_logic_vector(2 downto 0):= (others => '0');

    signal semaf :std_logic;begin

    process(clk)variable cont_temp:std_logic_vector(23 downto 0);

    beginif (clk'event and clk = '1') then

    semaf

  • 8/13/2019 Programarea HDL

    21/166

    -16-

    2.5. Crearea i editarea constrngerilor

    n orice proiect este necesar utilizarea constrngerilor n vederearespectrii cerinelor referitoare la timpii de propagare, aria ocupat i atribuirea

    pinilor. n acest scop sunt posibile trei categorii de constrngeri.

    2.5.1. Constrngeri referitoare la domeniul timp

    Minimal, fiecrui proiect trebuie si se specifice constrngeri referitoare laperioada semnalului de ceas i a timpului de offset, n vederea respectrii vitezei delucru a circuitului. Paii de realizare a unui fiier de constrngeri sunt urmtorii:

    - se selecteazfiierul sursmodul_digitaldin fereastra Sources in Project;n fereastra Process for Sourcevor apare procesele corespunztoare;

    - se expandeazgrupul User Constraintsn fereastra Process for Sourceise selecteazprocesul Create Timing Constraints.

    Mediul de dezvoltare Xilinx ISE ruleaz automat procesul de sintez icreeazun fiier de tip UCF (User Constraints File). Dupapariia mesajului

    se va selecta butonul Yes,fapt ce permite ataarea fiierului UCF la proiect, iar nfinal, afiarea editorului de constrngeri.

    n fereastra Global a editorului de constrngeri se vor introduceurmtoarele valori:Period- 20ns, Pad to Setup- 10ns i Clock to Pad- 10ns.

  • 8/13/2019 Programarea HDL

    22/166

    -17-

    Se salveaz fiierul prin comanda File Save dup care se nchideeditorul de constrngeri.

    2.5.2. Constrngeri referitoare la atribuirea pinilor

    Prin aceste constrngeri sunt realizate asocierile dintre porturile modululuidigital declarate n entitate i pinii circuitului de tip FPGA utilizat.

    n cazul nostru vor fi introduse urmtoarele constrngeri:

    Crearea unui astfel de fiier se face prin selectarea procesului AssignPackage Pins n grupul User Constraints. Programul Xilinx Pinout and AreaConstraints Editor (PACE)se va deschide automat.

    clk aa12y[0] w2y[1] y1

    y[2] y2y[3] y3y[4] w4y[5] w5y[6] y5y[7] w6

  • 8/13/2019 Programarea HDL

    23/166

    -18-

    Dup completarea constrngerilor se selecteazFile Save. La apariiacasetei de atenionare se selecteazXST Default < >i apoi butonul OK. n finalse nchide editorul.

    2.6. Sinteza proiectului

    Dup ce proiectul a fost completat, verificat i s-au adugat fiierele deconstrngeri, acesta poate fi sintetizat i apoi implementat pentru a se face, n final,

    programarea structurii reconfigurabile.Sinteza se realizeazprin selectarea (dublu clic) a grupului Synthesize

    XST.Dacprocesul nu a generat erori poate fi vizualizat primul raport referitor

    la modulul digital. n acest scop, se selecteazgrupul Synthesize XST,dupcarese expandeazi se alege View Synthesis Report. n cadrul raportului, printre alteinformaii, se regsesc specificaii referitoare la gradul de ocupare al ariei i atimpului de propagare prin structura reconfigurabil.

    n cadrul aceluiai grup, dac se selecteaz View RTL Synthesis, sevizualizeazschema logicgeneratdupsinteza modulului digital.

    n cazul proiectului propus, schema logiceste urmtoarea:

    Selectarea (dublu clic) fiecrui bloc poate conduce la o descriere maidetaliatla nivel de schem.

    Tot n grupul Synthesize XST, dac se selecteaz View TechnologySchematicse vizualizeazschema tehnologica modulului digital.

    Practic structura digital este format din blocuri logice configurabilepredefinite. Acestea, la rndul lor, sunt formate din SLICE-uri, un SLICE avnd ncomponendougeneratoare de semnal.

    n final, un generator de semnal este format dintr-un LUT (Look UpTable), memorie, multiplexoare i bistabili. LUT-ul este elementul principal n

  • 8/13/2019 Programarea HDL

    24/166

  • 8/13/2019 Programarea HDL

    25/166

    -20-

    n acest scop, se selecteaz fiierul modul_digital. Se expandeaz grupulPlace&Route i se selecteaz (dublu clic) procesul View/Edit Placed Design(Floorplanner).

    Selectarea poriunii de circuit utilizat se realizeaz prin comanda ViewZoom Toolbox. n figura de mai jos se observprimitivele utilizate n proiectul

    propus. Dac se selecteaz una dintre acestea, apar automat interconexiunile cuvecintatea.

    2.9. Vizualizarea Resurselor Utilizate

    n fereastra Processes for Source se selecteaz procesul View DesignSummaryi deschide urmtoarea fereastr, n care se specificgradul de ocupareal structurii reconfigurabile.

    Vizualizarea interconectrii fizicen mod asemntor se selecteaz din grupul Place & Route procesul

    View/Edit Routed Design (FPGA). Se selecteaz icoana pentru a fi

  • 8/13/2019 Programarea HDL

    26/166

    -21-

    evideniate semnalele de rutare din interiorul structurii reconfigurabile. Pentru omai bunvizualizare se mrete zona de interes.

    Dacse intrsuficient de mult n detaliu se pot vedea rutrile n interiorulCLB-urilor i a SLICE-urilor.

    2.10. Configurarea circuitului FPGA

    n final, pentru generarea i implementarea fizic a fiierului binar nstructura hardware reconfigurabil, se apeleazprogramul IMPACT.

    n cadrul grupului Generate Programming File din fereastra Processesfor Sourcese selecteazprocesul Configure Device (iMPACT).

    n caseta de dialog Configure Devicesse selecteazopiunea Boundary-Scan Mode i apoi butonul Next. Dac apare mesajul identificrii circuitului seselecteazbutonul OK.

    Se continuprin apariia fereastrei de dialog Assign New Configuration

    File, n care se selecteaz fiierul binar corespunztor proiectului realizat, iarmesajul de atenionare ce poate saparnu va fi luat n considerare.n final, apare fereastra urmtoare, prin care se poate realiza programarea

    circuitului.

  • 8/13/2019 Programarea HDL

    27/166

    -22-

    Pentru a fi introdus fiierul binar de configurare a structurii reconfigurabile seselecteaz pictograma:

    Se ignormesajul de atenionare,dupcare se programeazcircuitul FPGA prin selectareacmpului Programdin figuraalturat.

    Urmeazapariia fereastrei ProgramOpions:

    Dupselectarea butonului OK sepornete procesul de descrcare a fiierului deconfigurare n circuit.

    La terminarea descrcrii, circuitul seconfigureazautomat, iar rezultateleimplementrii proiectului apar la nivelul

    platformei de dezvoltare.

  • 8/13/2019 Programarea HDL

    28/166

    -23-

    3. Exerciii

    1. Se citesc informaiile prezentate anterior i se exemplificpe calculatoareleexistente;

    2. Se va realiza i implementa un numrtor binar reversibil pe 4 bii cuporturile de intrare/ieire prezentate n figura de mai jos:

    Se va utiliza urmtorul cod sursVHDL al modulului digital:

    library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

    entity counter_UpDown isPort ( clk : in std_logic;

    direction : in std_logic;data_out : out std_logic_vector(3 downto 0));

    end counter_UpDown;

    architecture Behavioral of counter_UpDown isbegin

    process (clk)variable count_int: std_logic_vector(3 downto 0):= "0000";

    beginif (clk'event and clk = '1') then

    if (direction = '0') thencount_int := count_int + '1';

    elsecount_int := count_int - '1';

    end if;

    end if;data_out

  • 8/13/2019 Programarea HDL

    29/166

    -24-

    - crearea fiierului de constrngeri al pinilor dupschema de mai jos (framai utiliza constrngeri de timp);

    - realizarea sintezei acestuia;- vizualizarea schemelor logice, respectiv tehnologice;- simularea modelului comportamental rezultat dupsintez;- implementarea proiectului;- vizualizarea rulrii structurii fizice;- simularea Post-Place & Post Route a modelului;- configurarea circuitului fizic.

    Acest modul digital va fi inserat n urmtoarea schemelectric:

    3. Respectnd modelul de la punctul anterior, s se realizeze implementareahardware a funciilor logice corespunztoare pentru funcionarea urmtoarelorscheme:

    a)

    1 2

    D1

    LED0

    SW_USER0

    0

    VCC

    R1

    4k7

    0

    FPGA

    W2D1

    y( 0)

    y( 3)

    y( 2)

    y( 1)

    di r

    Y2

    SW11

    SW DIP-8

    Y3

    FPGA

    R116 270LED0

    GND

    LED1

    GND

    R123 270

    1

    23456789

    R11..1

    4K7

    GND

    Y6

    VCC

    W2

    GND

    LED2

    Y1

    R124 270

    GND

    LED 3 R 125 270

    R1264k7

    RESET1

    Y17

    VCC

    cl k

  • 8/13/2019 Programarea HDL

    30/166

    -25-

    b)

    c)

    4. Dupmodelul de la punctul 2 sse implementeze hardware ecuaiilebooleene ale urmtoarelor tabele de adevr, n forma directi forma canonic.a) Tabela de adevr pentru funcia care realizeazcodarea unui numrtor binar pe

    2 bii:

    a[0] a[1] y[0] y[1] y[2] y[3]0 0 0 0 0 10 1 0 0 1 11 0 0 1 1 11 1 1 1 1 1

    D1

    LED0

    SW_USER0

    0

    VCC

    R1

    4k7

    0

    FPGA

    W2

    D1

    SW_USER1

    VCC

    R2

    4k7

    0C1

    1

    2

    3

    D1

    LED0

    SW_USER0

    0VCC

    R1

    4k7

    0

    FPGA

    W2D1

    SW_USER1

    VCC

    R2

    4k7

    0

    C1

    1

    2

    3

    1

    2

    3

    D2

    LED1

    0Y1

    a[0]

    a[1]

    y[0]

    y[1]

    y[2]

    y[3]

    SW USER0

    SW USER1

    LED 0

    LED 1

    LED 2

    LED 3

  • 8/13/2019 Programarea HDL

    31/166

    -26-

    b). Tabela de adevr pentru funcia care verificparitatea impara unui numrbinar pe 4 bii:

    a[0] a[1] a[2] a[3] y0 0 0 0 00 0 0 1 10 0 1 0 10 0 1 1 00 1 0 0 10 1 0 1 00 1 1 0 00 1 1 1 11 0 0 0 11 0 0 1 01 0 1 0 01 0 1 1 11 1 0 0 01 1 0 1 11 1 1 0 11 1 1 1 0

    Se va realiza corespondena dintre porturile entitilor i pinilor circuituluiprogramabil, dupconfiguraiile din partea dreapta tabelelor de adevr de maisus.

    a[0]

    a[1]

    y[0]

    SW USER0

    SW USER1

    LED 0

    a[2]

    SW USER3

    SW USER2

    a[3]

  • 8/13/2019 Programarea HDL

    32/166

    -27-

    Capitolul 2

    Programarea structurilor hardware reprogramabile

    prin descrieri concurente

    n acest capitol sunt prezentate implementri cu HDLutiliznd descrieri cuspecificaii concurente. Aplicaiile propuse cuprind o parte din specificaiileconcurente ce pot fi sintetizate i implementate pe sistemul reconfigurabil dinlaborator, utiliznd descrieri de tip flux de date sau de tip structural.

    1. Breviar teoretic

    1.1.Descrierea cu specificaii concurente

    Prin intermediul limbajelor de descriere hardware pot fi proiectate moduledigitale independente, interconectate ntre ele prin semnale i care funcioneazn

    paralel.Limbajul de descriere hardware prezintmecanisme de descriere paralel

    cu specificaii concurente a modulelor digitale combinaionale.Logica combinaional este o structur digital n care ieirile depindnumai de intrri.

    n cadrul unui program scris n limbajul VHDL, zona de descriereconcurentse regsete ntre specificaiile begini endale unei arhitecturi.

    library IEEE;use IEEE.STD_LOGIC_1164.all;-- alte incluziuni de librrii i pachete;

    entity modul_digital isgeneric ( --declaraii de constante generice )port(

    intrri logice ieiri logiceCircuit logic

    combinaional

  • 8/13/2019 Programarea HDL

    33/166

    -28-

    - - -);

    end modul_digital;

    architecture descriere of modul_digital isbegin

    - - - zona de specificaii concurente

    end descriere;

    1.2. Atribuirea condiionala semnalelor

    Atribuirea semnalelor se face n interiorul arhitecturii sau a proceselor.Atribuirea simpla unui semnal este realizatprin operatorul

  • 8/13/2019 Programarea HDL

    34/166

    -29-

    Pentru eliminarea tuturor posibilitilor de selecie din expresiacondiional, la sfritul specificaiei de atribuire este obligatorie introducereaclauzei WHEN OTHERS.

    1.4. Descrierea structural

    Componenta reprezint o pereche entitate/arhitectur i specific unsusbsistem care poate fi introdus i interconectat (instaniat) n altarhitecturpe ometodologie ierarhic. Pentru a fi utilizat, componenta este declarat n zonadeclarativa arhitecturii, dupcare inserarea acesteia n alte module se realizeaz

    prin instaniere.

    Declararea unei componente

    Declaraia unei componente reprezintprimul pas n procesul de utilizareal acesteia ntr-un modul digital.

    Sintaxa:component component_name [ is ]

    generic (generic_list);port (port_list);

    end component component_name;

    Declaraia componentei (sintaxa de mai sus) definete interfaa virtual(soclul n care va fi introdus circuitul), dar nu indicdirect componenta.

    O component poate fi definit n package-uri, entiti, arhitecturi saudeclaraii de blocuri. n cazul n care, componenta este declaratntr-o arhitectur,aceasta trebuie sfie plasatn zona declarativnainte de clauza begin.

    Instanierea unei componente

    Al doilea pas n utilizarea componentei const n instanierea acesteia,adicrealizarea asocierilor de semnale i atribuirii de valori generice specifice, ncadrul arhitecturii modulului digital.

    Sintax:eticheta : [ component ] nume_componentageneric map ( lista_valori_generice )port map ( lista_porturi );

    eticheta : entity nume_entitate [(identificator_arhitectura)]generic map ( lista_valori_generice )port map ( lista_porturi );

  • 8/13/2019 Programarea HDL

    35/166

    -30-

    eticheta : configuration nume_configuratiegeneric map ( lista_valori_generice )port map ( lista_porturi );

    Instanierea unei componente permite pstrarea referinelor unitiiinstaniate i valorile actuale ale genericelor, respectiv porturilor acesteia.

    Numele componentei instaniate trebuie s fie acelai cu numelecomponentei declarate. Lista de asociere poate fi realizat dup nume sau

    poziionarea porturilor.n asocierea poziional, parametrii actuali sunt conectai n aceeai ordine

    cu cea a porturilor n care a fost declaratcomponenta.

    U1: poarta PORT MAP(a, b, c);

    Asocierea dupnumedposibilitatea porturilor i valorilor generice sfiepuse ntr-o ordine diferitde cea declaratn component. Asocierea porturilor sauvalorilor generice se face prin operatorul =>.

    U1: poarta PORT MAP(in1 =>a, in2 => b,iesire => c);

    Specificaia GENERATE

    Specificaia GENERATE reprezinto facilitate furnizatde VHDL pentrurealizarea iterativsau condiionala unor poriuni de program.

    Sintax:

    eticheta: for parametru in intervalgenerate[ { declaratii }begin]

    { specificatii concurente }end generate[ eticheta ] ;

    eticheta: ifconditie generate[ { declaratii }begin]

    { specificatii concurente }end generate[ eticheta ] ;

    Specificaia de tip generate este utilizat pentru simplificarea descrieriiunor poriuni de program repetitive. De obicei, este utilizatpentru interconectarea

    unui grup de componente identice folosind o singur component care estemultiplicat.

    O specificaie generateconstn:- generarea de scheme (for generate sau if generate);- parte declarativ (declaraii locale de subprograme, tipuri,

    semnale, constante, componente, atribute, configuraii, fiiere igrupuri);

    - specificaii concurente.

  • 8/13/2019 Programarea HDL

    36/166

    -31-

    Elementele limbajului VHDL prezentate n partea teoretica acestei lucrride laborator vor fi regsite n aplicaiile urmtoare.

    2. Aplicaii

    a) Descriei n limbajul VHDL un multiplexor de tipul 4:1 cu ajutorul specifica ieicondiionale concurente WHEN/ELSE.

    Soluie

    Programul VHDL este urmtorul:

    library IEEE;use IEEE.STD_LOGIC_1164.ALL;

    entity mux_a isPort ( a,b,c,d : in std_logic;

    s1,s2 : in std_logic;y : out std_logic);

    end mux_a;

    architecture Behavioral of mux_a issignal s_temp : std_logic_vector(1 downto 0);

    begins_temp

  • 8/13/2019 Programarea HDL

    37/166

    -32-

    end mux_b;

    architecture Behavioral of mux_b issignal s_temp : std_logic_vector(1 downto 0);

    beginWITH s_temp SELECT

    y

  • 8/13/2019 Programarea HDL

    38/166

    -33-

    Un numr binar este considerat ca avnd paritate impar, dacnumrul debii coninui cu valoarea 1 logic este impar .

    Determinarea paritii unui numr binar se realizeaz prin efectuareaoperaiei logice XOR ntre toi biii acestuia.

    n cazul exemplului nostru, relaia de determinare a paritii esteurmtoarea:

    ]0[]1[]2[]3[]4[]5[]6[ aXORaXORaXORaXORaXORaXORaparitate

    Dac se dorete ca informaia de ieire s aib paritate par, atunci lainformaia de intrare se ataeaz bitul de paritate corespunztor

    ;& aparitatey Dacse dorete paritate impar, la informaia de intrare se ataeazbitul de

    paritate obinut prin complementare ;&)( aparitatenoty

    Programul VHDL este urmtorul:

    library IEEE;use IEEE.STD_LOGIC_1164.ALL;

    entity Corect_Parit isPort ( a : in std_logic_vector(6 downto 0);

    sel_par : in std_logic;y : out std_logic_vector(7 downto 0));end Corect_Parit;

    architecture Behavioral of Corect_Parit issignal paritate : std_logic;begin

    paritate

  • 8/13/2019 Programarea HDL

    39/166

  • 8/13/2019 Programarea HDL

    40/166

    -35-

    library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

    entity UAL isPort ( x, y : in std_logic_vector(3 downto 0);

    sel_op : in std_logic_vector(2 downto 0);r : out std_logic_vector(3 downto 0);cy : out std_logic);

    end UAL;

    architecture Behavioral of UAL issignal t_arith : std_logic_vector(4 downto 0);signal t_logic : std_logic_vector(3 downto 0);

    begin

    --descrierea unitatii aritmeticewith sel_op(1 downto 0) select

    t_arith

  • 8/13/2019 Programarea HDL

    41/166

    -36-

    n unitatea aritmetic s-a lucrat cu operanzii pe 5 bii astfel nct s seobinrezultatul operaiei pe 4 bii i transport pe 1 bit. Operanzii au fost mrii cuun bit (de la 4 bii la 5 bii) prin operatorul de concatenare &.

    De exemplu, semnalul xeste reprezentat pe 3 bii, dar scriindu-l sub forma0 & xrezultun semnal pe 4 bii, bitul cel mai semnificativ fiind 0 logic.

    Bitul cy este extras numai atunci cnd are loc operaia aritmetic, adicsel_par[2]=1.

    e) Realizai implementarea n cod VHDL a unui modul digital care compardouvalori binare x, yreprezentate pe 4 bii i semnalizeazrelaia dintre acestea.

    Soluie

    Realizarea unui comparator direct pe mai muli bii utiliznd ecuaiibooleene este dificil. Pentru simplificarea soluiei, se folosete un comparatorgeneral pe un singur bit ce poate fi plasat n cascadcu alte module de acelai tip,formnd comparatorul pe mai muli bii. Comparaia se va face secvenial ncepndcu biii cei mai semnificativi.

    Etapa 1. Realizarea comparatorului pe un singur bit.Comparatorul pe un singur bit trebuie s poat semnaliza urmtoarele

    relaii dintre operatorii x i y : yx , y i y . n plus, comparatorul

    conine douporturi de intrare, cmii cei, care indicstarea modulului comparatoranterior (pentru biii cu grad mai mare de semnificaie). Dac 1mic atunci

    x , iar dac 1eic , ntre operatorii de intrare exist egalitate. Acest modulconine i dou porturi de ieire, cmo i ceo prin care se semnalizeaz relaiile deordine dintre operatorii de intrare ctre modulele de comparaie ulterioare (pentru

    biii cu grad mai mic de semnificaie). Modulul digital are urmtoarea schem:

    Ecuaiile booleene simplificaterezultate din tabelul de adevr sunt urmtoarele:

    yxccc eimimo

    yxcyxcccc eieieimie

    cmi cei x y relaie cmo ceo0 0 X X < 0 00 1 0 0 = 0 10 1 0 1 < 0 00 1 1 0 > 1 00 1 1 1 = 0 1

    1 0 X X > 1 01 1 X X invalid 1 1

    comparatorpe 1 bit

    x y

    cmi

    cei

    cmo

    ceo

  • 8/13/2019 Programarea HDL

    42/166

  • 8/13/2019 Programarea HDL

    43/166

  • 8/13/2019 Programarea HDL

    44/166

    -39-

    y : in STD_LOGIC_VECTOR(3 downto 0);cmo : out STD_LOGIC;ceo : out STD_LOGIC);

    end comp4;

    architecture comp4 of comp4 iscomponent comp1port(

    x : in STD_LOGIC;y : in STD_LOGIC;cmi : in STD_LOGIC;cei : in STD_LOGIC;

    cmo : out STD_LOGIC;ceo : out STD_LOGIC);

    end component;signal cm,ce:std_logic_vector(4 downto 0);

    begin

    cm(0)

  • 8/13/2019 Programarea HDL

    45/166

    -40-

    3. Exerciii

    1. Se citesc informaiile prezentate anterior i se exemplificpe calculatoareleexistente;

    2. Se vor implementa programele din exemplele a) e) folosind schemelehardware de mai jos (2.1 2.4). Implementarea se va realiza n urmtorii

    pai:- pentru fiecare aplicaie n parte se realizeazun proiect nou;- se introduc sursele VHDL;- se simuleazlogic proiectul;- se creeazfiierele de constrngeri ale pinilor dupschemele hardware

    de mai jos (2.1 2.4);

    - se realizeazsinteza acestora;- se vizualizeazschemele logice, respectiv tehnologice;- se simuleazmodulul rezultat dupsintez;- se implementeazproiectul;- se vizualizeazrutarea structurii fizice;- se realizeazsimularea Post-Place & Post Route a modulului;- se configureazcircuitul fizic.

    Not: Circuitul configurabil FPGA este de tipul 3s400fg456cu speed grade -4

    2.1. Multiplexor 4:1 (exemplele a i b)

    SW1

    D1

    LED0

    1

    23456789

    4K7

    GND

    GND

    SW_USER0

    SW_USER1

    4K7

    4K7

    VCC

    VCC

    SW_ DI P0

    GND

    SW_ DI P1SW_ DI P2SW_ DI P3

    V6

    Y6

    U7

    C1D1

    W2

    AA4

    FPGA

    c

    b

    a

    y

    d

  • 8/13/2019 Programarea HDL

    46/166

    -41-

    2.2. Corectorul de paritate (exemplul c)

    2.3. Comparatorul pe 4 bii (exemplul d)

    W6

    R79 270LED5

    GND

    GND

    LED6 R80 270

    W5

    GND

    LED7

    Y5

    R81 270

    y(1)

    y(2)

    y(3)

    y(4)

    sel _par

    a(0)

    a(4)

    a(5)a(6)

    y(5)

    y(7)

    y(6)

    y(0)

    AB5AA5

    AB4

    Y2

    AA6

    SW6

    SW DIP-8

    Y3

    FPGA

    R74 270LED0

    W4

    GND

    LED1

    GND

    R75 270

    1

    23456789

    R46

    4K7

    GND

    VCC

    V6

    Y6 W2

    AA4

    U7 Y1

    GND

    LED2 R76 270

    GND

    LED3 R77 270

    GND

    LED4 R78 270

    a(2)

    a(3)

    a(1)

    SW1

    SW DIP-8 OP2

    OP1

    FPGA

    0

    LED0R1

    470

    GND

    LED1R2

    470

    GND

    y(3)

    y(2)

    1

    23456789

    R3

    4K7

    y(1)

    y(0)

    x(3)x(2)

    x(1)

    x(0)

    cmo

    ceo

    GND

    AB4

    AA5

    VCC

    AB5

    Y6

    W2AA4U7

    V6

    Y1

    AA6

  • 8/13/2019 Programarea HDL

    47/166

    -42-

    2.4. Unitate aritmetico-logic(exemplul e)

    Legturile dintre pinii fizici ai structurii reconfigurabile i porturile dinentitile modulelor descrise n VHDL sunt specificate n schemele electriceanterioare.

    Componentele din schemele electrice (butoane, LED-uri, rezistene) sunt

    prezente n schema sistemului de dezvoltare. Entitatea modulului digital seregsete n chenarul notat: FPGA.

    a( 3)

    b(0)

    SW12

    R434k7

    VCC

    D1

    b(1)

    b(2)

    b(3)

    SW13

    R524k7

    VCC

    C1

    r ( 0 )

    r ( 1 )

    r ( 2 )

    r ( 3 )

    sel _op

    i mp

    SW14

    R534k7

    VCC

    B6

    AB5

    AA5

    AB4

    AA6

    Y2

    SW2

    SW DIP-8

    Y3

    OP1

    FPGA

    OP2

    LED0 R4 470

    W4

    GND

    LED1 R5 470

    GND

    1

    23456789

    R6

    4K7

    GND

    VCC

    V6

    Y6W2

    AA4

    U7 Y1

    LED2GND

    R7 470

    LED3

    GND

    R8 470

    LED4

    GND

    R9 470

    a( 0)

    a( 1)

    a( 2)

  • 8/13/2019 Programarea HDL

    48/166

    -43-

    3. S se realizeze un decodor pe 4 bii ce va permite afiarea valorii n formatzecimal a informaiei binare de intrare, sub forma numerelor de la 0 la 9, utilizndun digit cu apte segmente. Valorile binare de intrare sunt aplicate cu ajutorul

    butoanelor USER0, USER1, USER2, USER3 de pe sistemul de dezvoltare.

    Corespondena dintre liniile circuitului fpga isemnalele ce acioneaz cele 7 segmente esteurmtoarea:

    dpdot point

    Sse realizeze acest modul prin doumetode: descriere de tip flux de date,respectiv descriere structural.

    D7 D6 D5 D5 D3 D2 D1 D0

    dp g f e d c b a

    DI G0_ SEG1

    DI G0_ SEG0

    FPGA

    DI G0_ SEG4

    DI G0_ SEG3

    DI G0_ SEG2

    DI G0_ SEG6

    DI G0_ SEG5

    E7

    B8

    C6

    B5

    E6

    C5

    D1

    A4

    y[ 2]

    y[ 1]

    y[ 0]

    y[ 5]

    y[ 4]

    y[ 3]

    y[ 6]

    GND

    SW_USER5

    C1

    SW_USER6

    B6GND

    SW_USER7

    GND A15

    a[ 1]

    a[ 0]

    a[ 3]

    a[ 2]

    1

    23456789

    4K6

    VCC

    GND

    SW_USER4

    GNDGND

    GND

    GND

    GND

    GND

    GND

    b

    a

    d

    c

    f

    e

    g

  • 8/13/2019 Programarea HDL

    49/166

    -44-

    4. Sse realizeze n limbajul VHDL un buffer inversor pe 8 bii cu ieirile de tipthree-state (tree-state sau TS) utiliznd numai specificaii concurente.

    Numele de buffer three-state provine de la ieirea acestuia care poate luauna din cele trei stri posibile: 1 logic, 0 logic sau Z, aceasta fiind starea denaltimpedan- HiZ. n general buffer-ele de tip three-state sunt utilizate pentruconectarea unor module digitale la magistralele de date. Un etaj de ieire three-state permite cuplarea n paralel a mai multor ieiri. ntr-o astfel de configuraie,

    fiecare ieire poate fi activ la un moment dat (are acces la magistrala de ieirecomun), dar celelalte ieiri trebuie sfie n starea de naltimpedan.

    Tabelul de adevr i porturile de interconectare ale unui astfel de buffersunt date n figura de mai jos:

    5. Sse realizeze n limbaj VHDL un modul digital care afieaznumrul de biiaflai n starea 1 logic dintr-o informaie pe 7 bii ce se aplicla un port de intrare.

    Corelarea cu schema fizica porturilor de intrare/ieire se va face dupschema electrica sistemului reconfigurabil.

    Intern, modulul digital va fi realizat din doumodule descrise cuspecificaii concurente i interconectate prin descriere structural.

    e y0 Z1 d

    y[2]

    y[3]y[4]y[5]

    y[6]

    y[1]

    y[0]

    a[2]

    a[3]a[4]a[5]a[6]

    a[1]

    a[0]

    3Codor

    buton-binar

    Decodor

    binar 7 segmente

    Bufferthree-statee

    d[7..0] y[7..0]

  • 8/13/2019 Programarea HDL

    50/166

    -45-

    Capitolul 3

    Programarea structurilor hardware reprogramabile

    prin descrieri cu specificaii secveniale

    n acest capitol sunt prezentate implementri cu descrieri secveniale alemodulelor digitale ce conin logicsincronsau asincron. Sunt realizate mai multeaplicaii n care sunt cuprinse o parte din specificaiile secveniale ce vor fisintetizate i implementate pe sistemul reconfigurabil din cadrul laboratorului. nfinal sunt propuse probleme din aceeai categorie n vederea implementrii.

    1. Breviar teoretic

    1.1. Semnalele i variabilele n domeniul secvenial

    Transportul datelor n VHDL poate fi realizat prin semnale sau prinvariabile. n timp ce semnalele pot fi declarate n domeniul concurent, variabilele

    pot fi declarate numai n domeniul secvenial. Semnalul poate fi utilizat global, n

    domeniile concurente i secveniale, iar variabila este numai local domeniuluisecvenial. Domeniul secvenial poate fi descris prin procese, funcii, respectivproceduri.

    Un proces definete o listde specificaii secveniale prin care se descriecomportamental o anumitstructurdintr-un modul digital. ntr-un proces, dacnueste necesarutilizarea unui semnal, se poate utiliza o variabil. Semnalul nu poatefi declarat ntr-un proces. Valoarea unui semnal este afectatnumai la ieirea din

    proces de ultima atribuire, chiar dacasupra lui s-au fcut alte atribuiri n timpulprocesului.

    Declaraia unei variabile se poate face prin utilizarea urmtoarei sintaxe:variablenume_variabil: tip;variablenume_variabil: tip := valoare_iniial;

    Atribuirea unei variabile se realizeazdupsintaxa:variable_name := expression ;

  • 8/13/2019 Programarea HDL

    51/166

    -46-

    1.2. Introducerea unui proces

    Specificaiile secveniale pot fi introduse prin intermediul clauzeiPROCESS. Procesele sunt activate printr-o list de senzitiviti. Dac lista desenzitiviti lipsete, activarea procesului se realizeazprin specificaia WAIT.

    De menionat faptul cprocesele conin descrieri secveniale, dar ntre elesunt concurente.

    Sintax:[eticheta:] PROCESS (lista de senzitivitati)

    [VARIABILE nume: tip [dimensiune] [:= valoare_initiala;]]BEGIN

    (cod secvential)END PROCESS [eticheta];

    ntre clauzele process i begin se gsete zona declarativ n care pot fideclarate variabile, tipuri, subprograme, atribute, etc. Zona de descriere secvenialeste definitntre clauzele begini end.

    1. 3. Specificaii secveniale

    Specificaia IF

    Specificaia IF este utilizat n structuri condiionale i are urmtoareasintax:

    IFconditie THENspecificatii_secventiale;ELSIFconditie THENspecificatii_secventiale;..ELSEspecificatii_secventiale;END IF;

    Datorit influenei puternice a mediilor de programare software (deexemplu C++, PASCAL, etc.), tendina programatorilor este de a utiliza structurilecondiionale n descrierea comportamentului unui modul digital, fr a mai face

    recurs la descrierile de tip flux de date prin ecuaii booleene sau alte specificaiicare ocup o arie hardware mult mai mic. Totui, utilizarea specificaiei IF nuafecteaz, n principiu, structura hardware foarte mult. Explicaia este dat defaptul c n procesul de sintez se produce o optimizare a ecuaiilor logice ievitndu-se astfel mrirea complexitii hardware nejustificate. Totui, este indicatca imbricarea specificaiilor IFsnu se facpe prea multe nivele.

    IF este o specificaie secvenial care nu poate fi utilizat n zonaconcurent a unei arhitecturi i este diferit de specificaia IF GENERATE dindomeniul concurent.

  • 8/13/2019 Programarea HDL

    52/166

    -47-

    Exemplu de utilizare a unei structuri condiionale IFIF (reset = 1) THEN data_out 1)ELSIF (clk=1 AND clkevent) THEN data_out atribuire;WHENvalue => atribuire;

  • 8/13/2019 Programarea HDL

    53/166

  • 8/13/2019 Programarea HDL

    54/166

    -49-

    2. Aplicaii

    a)Folosind limbajul VHDL, sse realizeze un numrtor BCD ctre nainte avndporturile de intrare/ieire precizate n figura de mai jos:

    SoluieModulul digital conine doar un semnal de intrare clki la ieire un semnal

    pe patru bii denumit data_out. Exemplul realizat utilizeazspecificaia IF THEN.

    library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;

    entity numarator isport(

    clk : in STD_LOGIC;data_out : out STD_LOGIC_VECTOR(3 downto 0)

    );end numarator;

    architecture numarator of numarator isbegin

    PROCESS (clk)VARIABLE temp_num: STD_LOGIC_VECTOR(3 downto

    0):="0000";BEGIN

    IF (clk'event AND clk='1')THENtemp_num:=temp_num+1;IF (temp_num="1010") THEN

    temp_num:=(OTHERS => '0');

    END IF;END IF;

    data_out

  • 8/13/2019 Programarea HDL

    55/166

    -50-

    Descrierea numrtorului este de tip comportamental prin specificaiisecveniale n cadrul unui proces. Procesul este activat numai la apariia unuieveniment pe frontul pozitiv al semnalului clk, fiind plasat n lista de senzitiviti aacestuia. n zona declarativ a procesului este introdus variabila temp_num, cuvaloarea iniial0 i ce contorizeazstrile la numrare. Numrarea se efectueaz

    pe frontul cresctor a semnalului de ceas prin linia de cod:IF (clk'event AND clk='1')THEN

    Meninerea n domeniul zecimal a valorii variabileitemp_num (n gama de la 0 la9) se obine prin linia de cod:

    IF (temp_num="1010") THEN

    Cum semnalele se pot actualiza numai la ieirea din proces, atribuirea

    semnalului de ieire data_out cu variabila temp_num s-a fcut la sfritulprocesului.

    b) Folosind limbajul VHDL, sse realizeze un registru de deplasare n inel pe 8bii, de la dreapta la stnga, acionat pe frontul pozitiv al semnalului de ceas clk.Valoarea iniial a registrului este 00000001. La fiecare impuls de ceasdeplasarea se face cu un bit, iar bitul cel mai puin semnificativ rmne n starea 0logic.

    SoluieProgramul VHDL este urmtorul:

    library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

    entity process_shift is

    port(clk : in STD_LOGIC;data_out : out STD_LOGIC_VECTOR(7 downto 0));

    end process_shift;

    architecture process_shift of process_shift isbegin

    data_out[7..0] Registru dedeplasare

    clk

  • 8/13/2019 Programarea HDL

    56/166

    -51-

    PROCESSVARIABLE temporar:STD_LOGIC_VECTOR(7 downto

    0):="00000001";BEGIN

    WAIT UNTIL (clk'event AND clk='1');data_out

  • 8/13/2019 Programarea HDL

    57/166

    -52-

    Ledurile se aprind atunci cnd pe liniile de comandale display-ului pe 7 segmentese genereazvaloarea 1 logic.

    Soluia prezentat exemplific utilizarea specificaiei CASE. Entitateacorespunztoare structurii descrise are urmtoarea configuraie.

    Descrierea comportamental a numrtorului se realizeaz prin douprocese. n primul proces, numrtorul zecimal este descris printr-o logicsecvenial. Al doilea proces descrie decodorul binar - 7 segmente, n modsecvenial, printr-o logiccombinaionalcare respecttabela de adevr prezentatanterior.

    Programul VHDL este urmtorul:

    library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;

    entity num_7seg isport(

    clk : in STD_LOGIC;y : out STD_LOGIC_VECTOR(6 downto 0));

    end num_7seg;

    architecture num_7seg of num_7seg isSIGNAL semnal_temp:STD_LOGIC_VECTOR(3 downto 0);

    beginPROCESS (clk)VARIABLE temp_num: STD_LOGIC_VECTOR(3 downto 0):="0000";

    BEGIN

    y[2]

    y[3]

    y[4]y[5]

    y[6]

    y[1]

    y[0]clk

    3PROCESSNumrtor

    binar codatzecimal

    PROCESS

    Decodor

    binar 7 segmente

  • 8/13/2019 Programarea HDL

    58/166

    -53-

    IF (clk'event AND clk='1')THENtemp_num:=temp_num+1;IF (temp_num="1010") THEN

    temp_num:=(OTHERS => '0');END IF;

    END IF;semnal_temp iesire_temp:="0111111";WHEN "0001"=> iesire_temp:="0000110";WHEN "0010"=> iesire_temp:="1011011";WHEN "0011"=> iesire_temp:="1001111";WHEN "0100"=> iesire_temp:="1100100";WHEN "0101"=> iesire_temp:="1101101";WHEN "0110"=> iesire_temp:="1111101";WHEN "0111"=> iesire_temp:="0000111";WHEN "1000"=> iesire_temp:="1111111";WHEN "1001"=> iesire_temp:="1101111";WHEN OTHERS=> iesire_temp:="ZZZZZZZ";

    END CASE;y

  • 8/13/2019 Programarea HDL

    59/166

    -54-

    Soluien limbajul VHDL, un sumator se poate realiza prin mai multe metode.

    Una dintre metode (descriere stuctural) a fost utilizat la modulul comparatorpentru dounumere binare, reprezentate pe patru bii, din lucrarea de laborator 2.n acel exemplu s-au utilizat specificaii concurente. S-a realizat operaia decomparare pentru un singur bit, dup care a fost multiplicat de patru ori prininstanierea de componente.

    Soluia ce urmeaz prezint o alt metod de rezolvare (descrierecomportamental) ce utilizeaz specificaii secveniale. n acest caz nu mai estenecesarmultiplicarea sumatorului pe un singur bit (vezi cazul comparatorului), ciutilizarea repetitiv, ce are n vedere faptul c adunarea se realizeaz secvenial,rezultatul obinndu-se bit dup bit, cu folosirea transportului. Procedura de

    adunare utilizat este cunoscut sub denumirea Ripple Carry. Schema bloc amodului de implementare a sumatorului digital este prezentat n figura de mai

    jos:

    Ecuaiile booleene ale celulei de sumare pe un singur bit sunt urmtoarele:

    icbar

    bacbacio

    Se constatfaptul cieirea coa celulei k este conectatla intrarea cide la

    celula k+1 prin semnalul intern i(k+1).Aplicnd ecuaiile anterioare pentru fiecare celul a sumatorului se obinrelaiile recurente:

    kikbkakr kbkakikbkakic

    o 1

    pentru 3,0k

    SUMi(4) i(3) i(2) i(1) i(0)

    a(2) b(2) a(1) b(1) a(0) b(0)a(3) b(3)

    0

    CoSUM SUM SUM

    r(0)r(1)r(2)r(3)

  • 8/13/2019 Programarea HDL

    60/166

    -55-

    Implementarea relaiilor booleene de mai sus poate fi realizat cu specificaiaLOOP. Sumatorul pe 4 bii este descris prin urmtorul cod sursVHDL.

    library IEEE;use IEEE.STD_LOGIC_1164.all;

    entity sumator_loop isport(

    a : in STD_LOGIC_VECTOR(3 downto 0);b : in STD_LOGIC_VECTOR(3 downto 0);co : out STD_LOGIC;r : out STD_LOGIC_VECTOR(3 downto 0));

    end sumator_loop;

    architecture sumator_loop of sumator_loop isbegin

    process(a,b)variable i: STD_LOGIC_VECTOR(4 downto 0);variable rez: STD_LOGIC_VECTOR(3 downto 0);

    begin

    i(0):='0';for k in 0 to 3 loop

    rez(k):=a(k) xor b(k) xor i(k);i(k+1):=(a(k) and b(k)) or (i(k) and (a(k) xor b(k)));

    end loop;r

  • 8/13/2019 Programarea HDL

    61/166

    -56-

    SoluieIdeea de realizare a temporizatorului se bazeaz pe utilizarea unui

    numrtor digital. Semnalul de ceas al numrtorului este preluat de la un oscilatorcu cuarpe frecvena de 50MHz, existent pe sistemul de dezvoltare. Prin divizrirepetate se poate obine un semnal cu o frecvenstabilde 1Hz. Schema bloc deinterconectare este datn figura urmtoare.

    Numrtorul opereaz cu o constant dat de raportul dintre frecvenasemnalului de intrare clk i o frecven de dou ori mai mare a semnalului deieire, conform relaiei de mai jos:

    16106 17D78401025

    2

    50

    Hz

    MHz

    f

    fC

    out

    clkdiv

    Semnalul de ieire are frecvena de 1Hz i factor de umplere de 1/2, astfelnct 0.5s este 1 logic, iar 0.5s 0 logic. Perioada de 0.5s corespunde unuisemnal cu frecvena de 2Hz.

    n acest caz, constanta de divizare este:50MHz/2Hz = 25000000(10) = 17D7840(h), numr reprezentat pe 25 de bii.

    Programul sursVHDL este urmtorul:

    library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;

    entity temporizator isport(

    clk : in STD_LOGIC;out_led : buffer STD_LOGIC);

    Cod sursVHDL

    D1

    LED0

    0

    FPGA

    W2

    AA12clk

    0.5s 0.5s

    1s

  • 8/13/2019 Programarea HDL

    62/166

    -57-

    end temporizator;

    architecture temporizator of temporizator isbegin

    process (clk,out_led)variable Qint: STD_LOGIC_VECTOR (24 downto 0);

    variable temp: STD_LOGIC;begin

    temp := out_led;if (CLK'event and CLK='1') then

    Qint:=Qint+1;if (Qint=x"17D7840") THEN

    Qint:=(others=>'0');out_led

  • 8/13/2019 Programarea HDL

    63/166

    -58-

    reluarea testrii tastei apsate, dupscurgerea acestui interval de timp. n cazul ncare se detecteaz meninerea contactului la tast, decizia care se ia este tastapsat i se trateazca atare. n caz contrar, se consider c iniial a aprut unimpuls parazit la apsarea tastei (sau aceasta nu a fost apsat ferm), iar deciziacare se ia este tastneapsat. Procedura este similari pentru tratarea situaieide relaxare a respectivei taste cu diferena dat de faptul c dup trecereaintervalului de timp de ateptare menionat, se verific starea deschis acontactului.

    n condiiile problemei propuse vom putea detecta apsarea tastei aflate pelinia D1prin faptul cla apsare semnalul de intrare devine 0 logic. Pauza de 10ms o vom realiza prin introducerea unui modul temporizator comandat de unsemnal de ceas clkaflat pe pinul AA12 al circuitului SPARTAN3.

    library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity buton_paraziti is

    port(a : in STD_LOGIC;led : out STD_LOGIC;clk: in STD_LOGIC);

    end buton_paraziti;

    architecture buton_paraziti of buton_paraziti issignal tasta: STD_LOGIC:='1';

    beginprocess (clk)

    variable Qint: STD_LOGIC_VECTOR (19 downto0):=(others =>'0');

    variable val_veche: STD_LOGIC:='0';begin

    if (CLK'event and CLK='1') thenif (a xor val_veche)='1' then

    Qint:=(others=>'0');val_veche:=a;

    elseQint:=Qint+'1';if ((Qint="0011111111111111111111")

    and ((val_veche xor a)='0')) THENtasta

  • 8/13/2019 Programarea HDL

    64/166

    -59-

    variable temp: std_logic:='0';variable tasta_veche: std_logic:='1';

    beginif (CLK'event and CLK='1') then

    if ( tasta='0' and tasta_veche='1') thentemp:=not temp;

    end if;tasta_veche :=tasta;

    end if;led

  • 8/13/2019 Programarea HDL

    65/166

    -60-

    3. Exerciii

    1. Se citesc informaiile prezentate anterior i se exemplificpe calculatoareleexistente;

    2. Se vor implementa structurile propuse prin exemplele anterioare a) f).Implementarea se va realiza n urmtorii pai:- pentru fiecare aplicaie n parte se realizeazun proiect nou;- se introduc sursele VHDL;- se simuleazlogic proiectul;- se creeazfiierele de constrngeri ale pinilor dupschemele hardware

    corespunztoare;

    - se realizeazsinteza acestora;- se simuleazmodulul rezultat dupsintez;- se implementeazproiectul;- se realizeazsimularea Post-Place & Post Route a modulului;- se configureazcircuitul fizic.

    Not: Circuitul configurabil FPGA este de tipul 3s400fg456cu speed grade -4Folosindu-vde exemplele prezentate anterior sa se rezolve urmtoarele probleme:

    2. S se implementeze un registru cu deplasare serial stnga (ctre biii cu gradmai mare de semnificaie), n inel, avnd 8 ieiri paralele ce acioneaz leduri,conform schemei de mai jos. Starea iniial a registrului este 00000001,corespunztoare ledului de pe ieirea 0 aprins, celelalte fiind stinse. Schimbareastrii registrului se face la apsarea tastei SW1.

    dat a_out [ 6]

    W6dat a_out [ 7]

    dat a_out [ 5] LED5GND

    R16 470

    LED6

    GND

    R17 470

    GND

    W5

    Y5

    LED7 R18 470

    SW1

    R19R

    VCC

    cl k

    dat a_out [ 4]

    dat a_out [ 1]

    dat a_out [ 2]

    dat a_out [ 3]

    dat a_out [ 0]

    Y2

    Y3

    FPGA

    LED0 R10 470

    GND

    LED1

    W4

    GND

    R11 470Y1

    W2

    GND

    LED2 R13 470

    GND

    LED3 R14 470

    GND

    LED4 R15 470

    D1

  • 8/13/2019 Programarea HDL

    66/166

    -61-

    3. S se modifice modulul anterior prin adugarea unui semnal de intrare care sschimbe direcia de deplasare n inel, denumit dir. Dacdir=1, deplasarea se varealiza la stnga (ctre biii cu grad mai mare de semnificaie), iar pentru dir=0,deplasarea se va realiza la dreapta (ctre biii cu grad mai mic de semnificaie).Schema electriceste urmtoarea:

    4. Sse implementeze un numrtor zecimal cu afiarea strii pe un digit avnd 7segmente led n sistemul de dezvoltare dupschema urmtoare. Numrtorul va fiacionat de tasta SW1. Soluia cerutface abstracie de fenomenul de debouncing.

    Y[ 6]

    Y[ 5] DIG0_SEG5GND

    R16 470

    DIG0_SEG6

    GND

    R17 470

    B5

    A4

    SW1

    R194k7

    VCC

    D1 cl k

    Y[ 4]

    Y[ 1]

    Y[ 2]

    Y[ 3]

    Y[ 0]

    E7

    C5

    FPGA

    DIG0_SEG0 R10 470

    GND

    DIG0_SEG1

    E6

    GND

    R11 470B8

    C6

    GND

    DIG0_SEG2 R13 470

    GND

    DIG0_SEG3 R14 470

    GND

    DIG0_SEG4 R15 470

    D1

    SW0

    R524k7

    VCC

    S1

    Y6

    R534k7

    VCC

    data_out ( 2)

    data_out ( 1)

    data_out ( 0)

    data_out ( 3)

    data_out ( 4)

    Y2

    Y3

    R10 470

    FPGA

    LED0

    W4

    GND

    LED1

    GND

    R11 470

    GND

    Y1

    W2

    LED2 R13 470

    GND

    R14 470LED3

    GND

    LED4 R15 470

    di rdata_out ( 5)

    cl k

    data_out ( 7)

    data_out ( 6)

    W6

    Y5

    W5GND

    R16 470LED5

    GND

    LED6 R17 470

    GND

    LED7 R18 470

  • 8/13/2019 Programarea HDL

    67/166

    -62-

    5. Sse rezolve problema anterioarinnd seama de efectul de debouncing.

    6. S se realizeze un numrtor reversibil, zecimal, cu afiare pe doi digii, dupschema de mai jos. Numrarea ctre nainte se va realiza prin apsarea tastei SW2(UP), iar numrarea ctre napoi se va face prin apsarea tastei SW1 (DOWN). Laapsarea tastei SW3 (RST) se va realiza aducerea la 0 a numrtorului. Se va ineseama de efectul de debouncing introdus taste.

    DIG1_SEG5

    GND

    GND

    R26 470

    DIG1_SEG6 R27 470

    A10

    E9

    C10

    A9

    GNDDIG1_SEG0 R28 470

    B9

    GND

    DIG1_SEG1 R29 470

    GND

    A12

    B10

    DIG1_SEG2 R30 470

    GND

    DIG1_SEG3 R31 470

    GND

    DIG1_SEG4 R32 470

    B[ 5]

    B[ 6]

    B[ 1]

    B[ 4]

    B[ 0]

    B[ 3]

    B[ 2]SW1

    R334k7

    C1

    VCC

    SW2

    R344k7

    VCC

    B6

    UP

    DOWN

    A[ 6]

    DIG0_SEG5A[ 5]GND

    R18 470

    GND

    DIG0_SEG6 R20 470

    B5

    A4

    SW3

    R214k7

    VCC

    D1

    A[ 4]

    RST

    A[ 1]

    A[ 2]

    A[ 3]

    E7

    A[ 0]

    FPGA

    C5

    DIG0_SEG0

    GND

    R12 470

    E6

    DIG0_SEG1

    GND

    R22 470

    C6

    GND

    DIG0_SEG2B8

    R23 470

    GND

    DIG0_SEG3 R24 470

    GND

    DIG0_SEG4 R25 470

  • 8/13/2019 Programarea HDL

    68/166

    -63-

    7. Sse implementeze n limbaj VHDL un numrtor digital la nivel de secund.Referina de frecvenprovine de la oscilatorul local al platformei avnd 50MHz.Afiarea timpului se face pe doi digii (00 - 99). Dupatingerea strii finale 99 seva continua cu starea iniial00. Schema electrica circuitului este urmtoarea.

    AA12

    50MHz

    De l a osci l at or

    GND

    GND

    R35 470DIG1_SEG5

    DIG1_SEG6 R36 470

    A10

    E9

    C10

    A9

    GND

    DIG1_SEG0 R37 470

    GND

    B9

    DIG1_SEG1 R38 470

    GND

    A12

    B10

    DIG1_SEG2 R39 470

    GND

    DIG1_SEG3 R40 470

    GND

    DIG1_SEG4 R41 470

    B[ 5]

    B[ 6]

    B[ 1]

    B[ 4]

    B[ 0]

    B[ 3]

    B[ 2]

    A[ 6]

    DIG0_SEG5A[ 5]

    GND

    GND

    R44 470

    DIG0_SEG6 R45 470

    B5

    A4

    A[ 3]

    A[ 4]

    cl k

    A[ 1]

    A[ 2] E7

    A[ 0]

    FPGA

    C5

    GND

    DIG0_SEG0 R47 470

    E6

    GND

    DIG0_SEG1 R48 470

    C6

    GNDDIG0_SEG2

    B8

    R49 470

    GND

    DIG0_SEG3 R50 470

    GND

    DIG0_SEG4 R51 470

  • 8/13/2019 Programarea HDL

    69/166

  • 8/13/2019 Programarea HDL

    70/166

  • 8/13/2019 Programarea HDL

    71/166

    -66-

    Figura urmtoare prezintrezultatul simulrii funcionrii unei pori de tipAND, cu douintrri (a, b), respectiv o ieire (c). Se observefectul de ntrzieren propagarea semnalelor de la intrri ctre ieire.

    Modelul inerial

    Modelul inerial caracterizeazsemnale care parcurg module digitale realece presupun timpi de propagare a semnalelor. Semnalele cu o duratmai micfade perioada minimal specificat prin clauza after din modelul inerial nu se

    propagprin respectivul modul.

    library IEEE;use IEEE.STD_LOGIC_1164.all;

    entity model_inertial isport(

    a,b : in STD_LOGIC;

    c : out STD_LOGIC);

    end model_inertial;

    architecture descriere of model_inertial isbegin

    c

  • 8/13/2019 Programarea HDL

    72/166

    -67-

    Modelul reject

    Modelul reject este similar cu modelul inerial, cu diferena datde faptulc sunt permise doar semnale aflate n 1 logic, cu duratmai mare fade cea

    precizatn model.

    library IEEE;use IEEE.STD_LOGIC_1164.all;

    entity model_inertial isport(

    a,b : in STD_LOGIC;c : out STD_LOGIC

    );end model_inertial;

    architecture descriere of model_inertial isbegin

    c

  • 8/13/2019 Programarea HDL

    73/166

    -68-

    O specificaie de tip assert este alctuitdin trei elemente:

    Assert statement(verifico condiie Boolean); Report statement(definete un mesaj ce va fi afiat cnd o condiie este

    fals); Severity statement (informeaz utilizatorul despre nivelul de severitate

    al mesajelor).

    Sintax:ASSERT expresie_conditieREPORT afisare_text

    SEVERITY nivel_severitate;

    n momentul cnd este ndeplinit o condiie n specificaia ASSERT, seafieaz de ctre consol un text prin intermediul specificaiei REPORT.Suplimentar, textul afiat prezinto notificare datde specificaia SEVERITY, ce

    poate avea urmtoarele clauze: NOTE, WARNING, ERROR, FAILURE. Apariiaclauzei FAILURE conduce la oprirea simulatorului.

    1.3. Testarea modulelor digitale

    Testarea modulelor digitale descrise prin limbaje de tip HDL este permisla toate nivelele de proiectare. Testarea se poate face ncepnd cu faza decompilare, n care se verific circuitul numai din punct de vedere logic, pn lafaza de implementare. n faza de implementare testarea ine seama i de timpii de

    propagare.Verificarea sistemului digital se poate realiza n toate etapele de proiectare:

    - descriere n cod VHDL a modulului digital;- sintez;- implementare;- programarea structurii hardware.

    Metoda de testare i simulare n limbajul VHDL este denumit test-

    bench. Test-bench-ul este un fiier VHDL prin care modulul digital (unitateasupus testrii) este verificat, interpretnd semnalele de ieire ale acestuia, carspuns la semnalele de intrare (stimuli). Stimulii, la rndul lor, sunt genera i prinacelai fiier VHDL. Practic, test-bench-ul emuleazmediul n care va fi plasatmodulul digital, astfel nct spoatfi simulat i analizat comportamentul acestuia. Un proiect de tip test-bench este alctuit din urmtoarele elemente:

    - un socket pentru unitatea supustestrii;

  • 8/13/2019 Programarea HDL

    74/166

    -69-

    - un generator de stimuli (practic, un subsistem ce aplic stimuli launitatea supustestrii, fie generai intern, fie provenind de la un fiierextern);

    - submodule pentru monitorizarea rspunsurilor de ctre unitatea supustestrii la stimuli.

    Structura unui fiier de testare VHDL

    Fiierul de testare al unui modul digital este scris n cod VHDL, darfolosind alte specificaii, cu entitate i arhitecturproprii. ntotdeauna acesta are ostructurparticularcu urmtoarele elemente constructive:

    Entitatea de testareare o formparticular, creia i lipsesc porturile deintrare-ieire. Unitatea de testare nu comuniccu alte structuri exterioare.

    Sintaxa entitii de testare este urmtoarea:

    ENTITY mod_testare ISEND mod_testare;

    Declararea unitii supuse testrii se face prin introducerea uneicomponente corespunztoare acesteia n zona declarativ a arhitecturii. Prininstanierea componentei ce prezintUUT se fac interconexiunile ntre unitatea detest i unitatea supustestrii.

    Entitate de testare

    Declara ii stimuli

    Instanierea unitiisupustestrii

    Arhitectura de testare

    Corp arhitectur

    Definirea stimulilor

    Declararea unitiisupuse testrii

  • 8/13/2019 Programarea HDL

    75/166

    -70-

    Stimulii sunt semnale declarate intern n zona declarativa arhitecturii isunt folosii ca porturi de intrare pentru unitatea supus testrii. Stimulii suntdefinii ca forme de und n cadrul acestei arhitecturi prin descriericomportamentale. De asemenea, acetia pot fi citii din fiiere externe fiierului detestare.

    2. Aplicaii

    a) Folosind limbajul VHDL s se verifice funcional o poart logic SI prinutilizarea fiierelor de tip test-bench.

    Soluie:Este prezentat un exemplu foarte simplu n vederea verificrii unei pori

    logice de tip AND. n vederea nelegerii mecanismului de testare, n acest exemplusunt create doufiiere VHDL:

    - primul n care se face descrierea porii AND;- al doilea n care se realizeaztestarea porii logice create anterior.

    I. Crearea modulului digital AND

    n figura de mai sus este prezentatentitatea porii AND cu douintrri ceurmeaz a fi proiectat. Implementarea porii AND se realizeaz numai cuoperatori logici interconectai dupecuaia booleanrezultatdin tabelul de adevral acesteia.

    Se creeazproiectul testare_poarta_and;Se creeazfiierulpoart_and.vhdi se ataeazurmtorul cod surs:

    library IEEE;use IEEE.STD_LOGIC_1164.all;

    entity poarta_xnor isport(

    a : in STD_LOGIC;

    a b y0011

    0101

    0001bay =

    a

    bySI

    logic

  • 8/13/2019 Programarea HDL

    76/166

  • 8/13/2019 Programarea HDL

    77/166

    -72-

    y : OUT std_logic);

    END COMPONENT;

    --InputsSIGNAL a : std_logic := '0';SIGNAL b : std_logic := '0';

    --OutputsSIGNAL y : std_logic;

    BEGIN-- Instantiate the Unit Under Test (UUT)

    uut: poarta_xnor PORT MAP(a => a,b => b,y => y

    );

    tb : PROCESSBEGIN

    -- Wait 10 ns for global reset to finishwait for 10 ns;

    a

  • 8/13/2019 Programarea HDL

    78/166

  • 8/13/2019 Programarea HDL

    79/166

    -74-

    b) Sse realizeze un numrtor de tip BCD pe 8 bii, cu ncrcare a valorii iniialei antenionarea cazului n care se trece de la valoarea maxima (99) la valoareaminim(00).

    Soluie:Realizarea unui numrtor pe 8 bii este o aplicaie tipic n limbajul

    VHDL. Numrtorul prezint, un semnal load prin care se face iniializareaacesteia cu o valoare datpe portul data_in.

    Porturile de intrare/ieire ale numrtorului digital sunt date n figura demai jos:

    Modulul digital se incrementeaz dup semnalul de ceas clk pe frontulpozitiv;

    ncrcarea numrtorului se realizeazatunci cnd semnalul loadeste n 1logic;

    Dup trecerea semnalului load n 0 logic, incrementarea ncepe laurmtorul front pozitiv al semnalului de ceas;

    Semnalul ov(overflow) este n 0 logic att timp numrul incrementat nu aajuns la valoarea 0x99. Setarea acestuia n 0 logic se face pe urmtorul front deceas;

    n vederea testrii acestui modul digital vor fi parcuri urmtorii pai:Se creeazun proiect cu numele num_zec;

    Se creeazun fiier VHDL cu numele num_zec.vhd;

    Se introduce urmtorul program sursn VHDL care descrie funcionareamodulului digital.

    library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

    clk

    Numrtor pe 8 bii

    data_in[7..0]

    data out[7..0]

    loadov

  • 8/13/2019 Programarea HDL

    80/166

  • 8/13/2019 Programarea HDL

    81/166

    -76-

    Realizarea fiierului de test

    n acelai proiect se realizeaz un nou fiier VHDL cu numeletest_num_zec.vhdn care este plasat urmtorul program:

    LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;

    ENTITY test_num_zec_vhd ISGENERIC(perioada : time := 100ns);

    END test_num_zec_vhd;

    ARCHITECTURE behavior OF test_num_zec_vhd IS

    -- Component Declaration for the Unit Under Test (UUT)COMPONENT num_zecPORT(

    clk : IN std_logic;load : IN std_logic;data_in : IN std_logic_vector(7 downto 0);ov : OUT std_logic;data_out : OUT std_logic_vector(7 downto 0));

    END COMPONENT;

    --InputsSIGNAL clk : std_logic := '0';SIGNAL load : std_logic := '0';SIGNAL data_in : std_logic_vector(7 downto 0) := (others=>'0');

    --OutputsSIGNAL ov : std_logic;SIGNAL data_out : std_logic_vector(7 downto 0);

    BEGIN

    -- Instantiate the Unit Under Test (UUT)uut: num_zec PORT MAP(clk => clk,load => load,ov => ov,data_in => data_in,data_out => data_out

    );

  • 8/13/2019 Programarea HDL

    82/166

    -77-

    processvariable reg_ceas: STD_LOGIC:='1';

    beginclk

  • 8/13/2019 Programarea HDL

    83/166

    -78-

    n primul proces este generat semnalul de ceas cu o perioad de 100ns.Timpul pentru o perioadeste dat prin constantaperioada. Variabila reg_ceasesteutilizatpe post de registru pentru memorarea strii semnalului de ceas.

    n procesul al doilea este descris testul propriu-zis al numrtoruluizecimal. Acesta este iniilizat prin semnalul data_incu valoarea hexazecimal53.Dup 100ns se realizeaz iniializarea ncrcrii datei paralele prin setareavariabilei loadn 1 logic.

    n final se trece la generarea a mai multor perioade de ceas pentru testareamodulului digital.

    c) Sse realizeze un fisier de tip test-bench care testeazun modul digital de tip

    registru cu entitatea dat n figura de mai jos i care realizeaz operaiile dedeplasare stnga, dreapta n funcie de portul de selecie ca n tabelul alturat.

    sel[0] sela[1] sel[0] Operaie

    0 0 0 Nici una0 0 1 Deplasare logicla stnga0 1 0 Deplasare aritmeticla stnga0 1 1 Rotire la stnga1 0 0 Deplasare logicla dreapta1 0 1 Deplasare aritmeticla dreapta1 1 0 Rotire la dreapta

    1 1 1 Neutilizat

    Soluie:n primul rnd sunt date operaiile de deplasare din tabelul de mai sus

    aplicate de modulul digital asupra octetului preluat dupportul de intrare alacestuia.

    Octetul iniial dupportul a

    Deplasare logicla stnga:

    Deplasare aritmeticla stnga:

    Rotire la stnga:

    a[7..0]

    y[7:0]

    sel[2:0]

  • 8/13/2019 Programarea HDL

    84/166

    -79-

    Deplasare logicla dreapta:

    Deplasare aritmeticla dreapta:

    Rotire la dreapta:

    n cadru acestui elemplu, pentru o ntelegere mai bun, este creat n afara fiieruluide test si modulul de deplasare. Ordinea operaiilor este urmtoarea:

    Se creeazun proiect cu numele reg_depls;Se creeazun fiier VHDL cu numele reg_depls;Se introduce urmtorul program sursn VHDL care descrie funcionarea

    registrului reg_depls.

    library IEEE;use IEEE.STD_LOGIC_1164.all;

    entity reg_depls isport(

    a : in STD_LOGIC_VECTOR(7 downto 0);sel : in STD_LOGIC_VECTOR(2 downto 0);y : out STD_LOGIC_VECTOR(7 downto 0));

    end reg_depls;

    architecture reg_depls of reg_depls isbegin

    with sel selecty 'Z') when others;

    end reg_depls;

  • 8/13/2019 Programarea HDL

    85/166

    -80-

    Alegerea operaiei de deplasare ce se aplicasupra portului de intrare selse realizeazn cadrul programului VHDL prin specificaia de selecie concurentwith-select-when.

    Pentru simularea programului de mai sus se va utiliza o nou metod ncare formele de undale stimulilor se gsesc ntr-un fiier extern. Se dorete ca irezultatele obinute n urma simulrii sfie plasate ntr-un fiier de ieire.

    Fiierul de intrare care conine formele de und a stimulilor se va numidata_in.datiar fiierul de ieire se va numi data_out. dat.

    n acelai proiect n care a fost introdus reg_depls.vhd se realizeazun noufiier VHDL (fiierul de test) cu numele reg_depls_test.vhd coninnd urmtorul

    program surs:

    library IEEE;use IEEE.STD_LOGIC_1164.all;use STD.textio.all;

    entity reg_deplasare_test isend reg_deplasare_test;

    architecture reg_deplasare_test of reg_deplasare_test iscomponent reg_depls

    port(a : in STD_LOGIC_VECTOR(7 downto 0);sel : in STD_LOGIC_VECTOR(2 downto 0);y : out STD_LOGIC_VECTOR(7 downto 0));

    end component;

    signal a_tb : STD_LOGIC_VECTOR(7 downto 0);signal sel_tb : STD_LOGIC_VECTOR(2 downto 0);signal y_tb : STD_LOGIC_VECTOR(7 downto 0);

    begin

    U1: reg_depls port map(a_tb,sel_tb,y_tb);

    process

    file rd_fis: text open READ_MODE is "data_in.dat";file wr_fis: text open WRITE_MODE is "data_out.dat";

    procedure citeste_fis isvariable l1 : line;variable sel_var :bit_vector(2 downto 0);

  • 8/13/2019 Programarea HDL

    86/166

    -81-

    variable a_var : bit_vector(7 downto 0);begin

    if ((not (endfile(rd_fis)))) thenreadline(rd_fis, l1);read(l1,sel_var);sel_tb

  • 8/13/2019 Programarea HDL

    87/166

    -82-

    000 10101010001 11110000010 11001100011 01010101

    n procedura citete_fis sunt preluai stimulii sel_tb i a_tb pentru a fiutilizai ca date de intrare pentru modulul reg_depls. Din cauza faptului clibrriaSTD face parte din standardul 1173, acesta nu are definit tipul std_logic i estenecesaro funcie de conversie din tipul bitn tipulstd_logic. n cadrul procedurii,fiierul este citit linie cu linie (fiecare linie coninnd cte 11 bii). Primii trei biireprezint semnalul de selecie sel iar urmtorii 8 reprezint portul de intrare a.Citirea celor douvalori se face secvenial.

    Prin procedura scrie_fi se realizeazoperaia invers celei anterioare. nfiierul data_out.dateste scris doar semnalul de ieire y din modulul de deplasare.n acest caz este necesarconversia din tipulstd_logicn binar pentru ca datele s

    poatfi salvate n fiier.Corpul procedurii de simulare este format dintr-o specificaieforprin care

    sunt realizai 4 ciclii de simulare (reprezint numrul stimulilor din fiierul deintrare). n cadrul acestuia se face o citire a unui set de stimuli dup care seateapto perioadde 50ns i apoi se va salva rspunsul modulului de deplasare nfiierul de ieire.

    Pentru cazul n care nu este doritcitirea tuturor stimulilor din fiierul deintrare, de exemplu, n acest caz sfie citit din fiierul de intrare numai semnalul a

    iar semnalul sel s fie generat prin program se modific corpul arhitecturiianterioare dupcum este dat n urmtoarele linii de cod:

    process

    file rd_fis: text open READ_MODE is "data_in.dat";file wr_fis: text open WRITE_MODE is "data_out.dat";

    procedure citeste_fis isvariable l1 : line;variable sel_var :bit_vector(2 downto 0);

    variable a_var : bit_vector(7 downto 0);begin

    if ((not (endfile(rd_fis)))) thenreadline(rd_fis, l1);read(l1, a_var);a_tb

  • 8/13/2019 Programarea HDL

    88/166

  • 8/13/2019 Programarea HDL

    89/166

    -84-

    3. Exerciii

    1.Sse realizeze simulrile funcionale prin intermediul fiierelor de tip test-bencha exemplelor descrise n cadrul laboratorului;2. Realizai n limbajul VHDL un numrtor BCD pe 8 bii cu porturile date nfigura de mai jos:

    Dup crearea codului surs a modulului digital s se realizeze fiierul detest pentru acesta prin care sse verifice n totalitate funcionalitatea acestuia.

    n final s i se ataeze un modul de decodare binar 7 segmente pentruafiarea valorii numerice pe doi digii dupsistemul de laborator.

    Valoarea iniial (portul data_in)se va ncrca de la cu ajutorul switch-urilor iar restul semnalelor de intrare (porturile clk, load, up i down) vor fiatribuite butoanelor de pe machet.

    n pus, pentru porturileclk, load, up idownva fi atribuit cte un modulde tip debouncing.

    Schema electricde interconectare este datn figura urmtoare:

    clk

    Numrtor pe 8 bii

    data_in[7..0]

    data out[7..0]

    loadov

    up down

  • 8/13/2019 Programarea HDL

    90/166

    -85-

    dat a_i n[ 4]

    cl k

    SW2

    R96

    4k7

    VCC

    B6

    l oad

    GND

    GND

    DIG1_SEG5 R34 470

    DIG1_SEG6 R58 470

    A10

    E9

    C10

    GND

    A9

    DIG1_SEG0 R59 470

    GND

    B9

    DIG1_SEG1 R60 470

    B10

    GND

    dat a_i n[ 5]

    A12DIG1_SEG2 R61 470

    GND

    DIG1_SEG3 R62 470

    GND

    DIG1_SEG4 R63 470

    down

    seg2[ 5]

    seg2[ 6]

    seg2[ 2]

    seg2[ 1]

    seg2[ 4]

    seg2[ 0]

    seg2[ 3]

    seg1[ 6]

    DIG0_SEG5seg1[ 5]

    GND

    GND

    R64 470

    DIG0_SEG6 R65 470

    B5

    A4

    seg1[ 3]

    seg1[ 4]

    seg1[ 1]

    seg1[ 2] E7

    seg1[ 0]

    FPGA

    C5

    GND

    DIG0_SEG0 R67 470

    E6

    GND

    DIG0_SEG1 R68 470

    GND

    B8

    C6

    DIG0_SEG2 R69 470

    GND

    DIG0_SEG3 R70 470

    GND

    DIG0_SEG4

    SW3

    R71 470

    R98

    4k7

    VCC

    A15

    dat a_i n[ 6]

    S1

    SW DIP-8

    1

    23456789

    R97

    4K7

    seg2

    seg1

    seg0

    seg4

    seg3

    seg6

    seg5

    GND

    AB4

    AA5

    VCC

    Y6

    AB5

    AA4

    U7

    V6

    AA6 dat a_i n[7]

    SW1

    R66

    4k7

    VCC

    C1

    up

    dat a_i n[ 1]

    dat a_i n[ 0]

    dat a_i n[ 2]

    dat a_i n[ 3]

    SW0

    R95

    4k7

    VCC

    D1

  • 8/13/2019 Programarea HDL

    91/166

  • 8/13/2019 Programarea HDL

    92/166

    -87-

    GND

    GND

    DIG1_SEG5 R34 470

    DIG1_SEG6 R58 470

    A10

    E9

    C10

    GND

    A9

    DIG1_SEG0 R59 470

    GND

    B9

    DIG1_SEG1 R60 470

    B10

    GND

    A12DIG1_SEG2 R61 470

    GND

    DIG1_SEG3 R62 470

    GND

    DIG1_SEG4 R63 470

    seg2[ 5]

    seg2[ 6]

    seg2[ 2]

    seg2[ 1]

    seg2[ 4]

    seg2[ 0]

    seg2[ 3]

    seg1[ 6]

    DIG0_SEG5seg1[ 5]

    GND

    GND

    R64 470

    DIG0_SEG6 R65 470

    B5

    A4

    seg1[ 3]

    seg1[ 4]

    seg1[ 1]

    seg1[ 2] E7

    seg1[ 0]

    FPGA

    C5

    GND

    DIG0_SEG0 R67 470

    E6

    GND

    DIG0_SEG1 R68 470

    GND

    B8

    C6

    DIG0_SEG2 R69 470

    GND

    DIG0_SEG3 R70 470

    GND

    DIG0_SEG4 R71 470

    seg4[ 4]

    seg4[ 5]

    seg4[ 6]

    seg4[ 3]

    seg4[ 2]

    seg4[ 1]

    seg3[ 6]

    seg4[ 0]

    seg3[ 4]

    seg3[ 5]

    seg3[ 1]

    seg3[ 2]

    seg3[ 3]

    seg3[ 0]

    seg2

    seg1

    seg0

    seg4

    seg3

    seg6seg5

    seg0

    seg3

    seg2

    seg1seg6

    seg5

    seg4

    seg5

    seg4

    seg3

    seg2

    seg1

    seg0

    seg6

    SW0

    R66

    4k7

    VCC

    Y17 i ncr

    X

    GND

    GND

    DIG3_SEG5 R72 470

    DIG3_SEG6 R82 470E17

    C17

    GND

    B15

    A18

    DIG3_SEG0

    GND

    R83 470

    D17

    DIG3_SEG1 R84 470

    GND

    B18

    B17

    DIG3_SEG2

    GND

    R85 470

    DIG3_SEG3

    GND

    R86 470

    DIG3_SEG4 R87 470

    DIG2_SEG5

    GND

    GND

    R88 470

    DIG2_SEG6 R89 470E13

    B13

    A14

    GND

    D14

    DIG2_SEG0 R90 470

    GND

    D13

    DIG2_SEG1 R91 470

    E15

    GND

    DIG2_SEG2

    E16

    R92 470

    GND

    DIG2_SEG3 R93 470

    GND

    DIG2_SEG4 R94 470

    seg1

    seg0

    seg4

    seg3

    seg2

    seg6seg5

  • 8/13/2019 Programarea HDL

    93/166

    -88-

  • 8/13/2019 Programarea HDL

    94/166

    -89-

    Capitolul 5

    Proiectarea automatelor secveniale

    cu limbajul VHDL

    Acest capitol i propune sinteza i implementarea modulelor digitale nstructuri hardware de tip FPGA bazate pe automate cu stri finite descrise nlimbajul VHDL. Sunt prezentate aplicaii de proiectare a automatelor secvenialedupmodele standard recomandate n programarea cu limbajul VHDL. n finalullucrrii sunt propuse probleme spre rezolvare.

    1. Breviar teoretic

    Automatele cu stri finite constituie o tehnic particular n modelareacircuitelor cu logicsecvenial. n figura de mai jos este prezentatforma generala unui automat cu stri finite privit din punctul de vedere al descrierii cu un limbajde descriere hardware. Modulul logicsecvenial- realizeazlogica pentru stareacurent i este format, n general, din bistabili. Modulul logic combinaional-realizeaz logica pentru starea urmtoare, respectiv logica pentru semnalele de

    ieire care este format din elemente combinaionale.

    Porturile de intrare/ieire sunt conectate la blocul de logiccombinaional.n general, n proiectarea