Download - Programarea HDL
-
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