Sunteți pe pagina 1din 12

CircuiteLogiceProgramabile

LABORATOR3

DESCRIEREANVHDLACIRCUITELORCOMBINAIONALE,PROIECTAREA
IERARHIC,ANALIZAREAFIIERELORRAPORT

SCOPULLUCRRII

ObiectivulacesteilucrriestefamiliarizareaculimbajulVHDLntromanierctmai
practic i anume descriind circuite combinaionale simple, cu observaii asupra topicii i
structurii limbajului. De asemenea se va nva i maniera de proiectare ierarhic prin
reprezentarea modulelor VHDL ca i blocuri n editorul schematic. Se vor studia fiierele
raportgeneratenfiecarefazdeproiectare.

IINTRODUCERETEORETIC

Consideraiiteoretice.NoiunileintroductivelimbajuluiVHDL

Folosirealogiciisintetizateadevenitopracticindustrialnultimiiani.Doulimbaje
majore din acest punct de vedere sunt Verilogul i VHDLul (VHSIC Hardware Description
Language).Avantajelesuntnumeroase:
- Portabilitateaproiectelorpentrudiferitetehnologiincaresuntrealizatecipurile,ncare
urmeazssefacimplementarea;
- Maniera de descriere a proiectului sub form de cod i confer acestuia claritate mai
bundectdacarfifostdescrissubformdeschem;
- Timpdeproiectareredus;
- Opiunideoptimizareaproiectului,cumarficeledeariesau/ivitez.
- FolosireadiferitelorconstruciispecificeVHDLuluicumarfi:packageurileibibliotecile
(library),permitreutilizarealornalteproiectesaumprirealorntremembriigrupului
deproiectare.
PentruomaibunimagineasuprastructuriiunuicodVHDL,vezifigura1.

LimbajulVHDLarereputaiadeafiunulfoartecomplex,totuisubsetuldeinstruciuniVHDL
caresuntsintetizabileestemairedusiaceastaesteparteacareurmeazsfieabordat.Pe
parcursullucrriivommaintlniinoiuneadeinstruciunesintetizabilsaucodsintetizabil,
ce nseamn aceasta? Dup ce am scris codul VHDL al proiectului, acesta trebuie compilat
pentruadepistaeventualeeroridesintax,sepoatefacepeurmaoverificareaproiectului
(simulri funcionale sau n domeniu timp) iar una dintre fazele finale ale proiectrii este
sintetizarea proiectului, adic convertirea codului VHDL ntrun set de celule primitive sau
componente(CLBurincazulFPGAului)carepotfiasamblatentehnologiactrecareeste
direcionatproiectul.



Figura1Principalelepri(blocuri)carealctuiescunmodelVHDLcomplet


Iatctevaconstruciidebazpecarelevomfolosiipentrusintez:
- atribuiredesemnal:a<=b;
- atribuiredevariabil:a:=b;
- comparaii:=(egal),/=(diferit),<>(maimare,maimic),<=(maimaresauegal),>=(mai
micsauegal);
- operatorilogici:(and,xor,or,nand,nor,xnor,not);
- instruciuneaif: if(a=b)then...
- endif|elsif
- instruciuneafor(folositpentrubuclecndsedoretecreareamatricilordeelemente);
- alteconstruciisunt:whenelse,case,wait,deasemeneasioperatorul:=pentru
atribuiredevariabile.
Altedetaliidespresintaxvorfiintrodusepeparcurspemsurcevorfidescrisecircuitele
logice(pentruodescrieremaidetailatvezicursul).
GeneraliticuprivirelalimbajulVHDL:
- VHDLulnuestecasesensitive(nuinecontdeliteremicisaumajuscule);
- ;estefolositpentruaindicaterminareauneiinstruciuni;
- indicnceputulunuicomentariu;
- VHDLul este un limbaj foarte tipizat (numr mare de tipuri de operanzi), exist foarte
puine conversii automate ntre tipuri diferite de operanzi, majoritatea operaiilor
trebuiefcutecuoperanzideacelaitip.

n continuare se vor prezenta cteva exemple pentru a introduce subsetul de
instruciuniVHDLsintetizabile.Launeledintreexemplesevorprezentamaimultevariante
deimplementarepentruanelegemaibineversatilitatealimbajului.
Exemplelesunt:
- Multiplexor2intrrii1ieire;
- Codificatordeprioritatecu8intrri;
- Decodificator3intrrii8ieiri;
- Sumatorcutransportsuccesivpe8bii.
nfigura2seprezintcadruldeclarativncareseintegreazfiecareproiectdescrisn
VHDL.

libraryIEEE;
use numelebibliotecilor
ipackageurilorfolositen
model
entitynume_modelis
port
(
listaintrriloriieirilor
);
endnume_model;

architecturenume_arhitecturof
nume_modelis
begin
...
instruciuniVHDconcureniale
....
endarchitecture_name;

Figura2.

Multiplexor2intrrii1ieire

Figura3prezintdescriereVHDLfolosindinstruciuneawhenelseaunuimux.21,
cuintrriiieiridedatepe8bii.
Declaraia library se folosete pentru a face referire la un grup, uniti de proiect
anterior definite n VHDL (alte entiti sau proceduri/funcii sunt cele cunoscute i sub
numeledepackageuri).
Declaraia use specific ce entiti i packageuri sunt folosite din librria apelat.
Packageulstd_logic1164,estefoartefrecventapelatifacereferirelatipuldedatedefinit
nexemplulnostru.
LimbajulVHDLrecunoateimplicituntipdedatecaresuportdouvalori,1i0
care sunt insuficiente pentru modelarea i sintetizarea unor aplicaii. Standardul 1164
definete 9 valori logice, dar numai 4 dintre acestea fiind sintetizabile: 1, 0, Z (nalt
impedan),(stareindiferent).Peparcursulaplicaiilorvormaiapreatipurilestd_logic
pentru operanzii definii ca mrimi pe un singur bit i std_logic_vector pentru mrimile
definitecabusuridedate.
Declaraia entity definete interfaa extern a modelului, lista de porturi definete
semnalele externe. Caracteristicile unui semnal sunt: numele (s, zero,..), mod (in, out sau
inout)itip(std_logicsaustd_logic_vector).ncazultipurilorcaredefinescbusuridedatese
specificilimeabusului:
Ex.std_logic_vector(7downto0)ordinedescresctoare;std_logic_vector(0to7)ordine
cresctoare, ambele sunt semnale pe 8 bii. Ordinea de definire afecteaz declaraiile de
atribuire cum ar fi y <= 11110000; pentru ordine descresctoare y(7) este 1, pentru
ordinecresctoarey(0)=1.
Dacbloculentityalunuiproiectdefineteinterfaadintreproiectimediulextern,
blocularchitecturereprezintdescriereafuncionalaproiectului.Sepotdefiniimaimulte

arhitecturi pentru aceeai entitate, dar numai una poate fi simulat i sintetizat la un
moment dat. Directiva configuration se folosete pentru a stabili o pereche entitate
arhitectur.Numelearhitecturii(behaviorofmux2to1,veziTabelulT5.3.2)estespecificatde
utilizator.


libraryIEEE;
useIEEE.std_logic_1164.all;
entitymux2_1is
port(
s:instd_logic;
zero,one:instd_logic_vector(7downto0);
y:outstd_logic_vector(7downto0));
endmux2_1;

architecturebehaviorofmux2_1is
begin
y<=onewhen(s=1)elsezero;
endbehavior;
Figura 3. CodVHDLidiagramablocpentrumultiplexor21

Instruciunea whenelse este o instruciune de atribuire (de valori) condiional a


semnalelor. Aceast instruciune este cunoscut ca fiind una concurenial (concurrent
statement), n discuie mai intrnd i instruciunile secveniale (sequential statement),
deosebirilevorfidiscutatemaitrziu.
ncontinuaresevadefiniiunalttipdearhitecturpentrumux.21,vezifigura4.



architecturebehaviorof
mux2to1_8is

begin

comb:process(s,zero,one)

begin

y<=zero;

if(s=1)then

Figura4.Arhitecturmux.21utiliznddirectivaprocess

Arhitectura din Tabelul figura 4 folosete blocul (directiv) process pentru a descrie
funcionarea multiplexorului. Acest bloc poate fi asimilat ca fiind o instruciune
concurenial. n cadrul acestui bloc sunt permise numai instruciunile secveniale.

Atribuirile de valori semnalelor se desfoar secvenial, astfel c, dac se fac mai multe
atribuiri unui semnal n cadru unui astfel de bloc, doar ultima atribuire va fi luat n
considerare.
Ctevainstruciunisecvenialesunt:ifelse,case,forloop.Listasemnalelor
careurmeazcuvntuluicheieprocessesteaanumitalistasenzitivitilor(sensitivitylist),
rulareainstruciunilordinbloculprocesntimpuluneisimulri,vaavealocnumaicndunul
dintreacestesemnaleischimbvaloarea(nacestcazsespunecarelocuneveniment).

Codificatordeprioritatecu8intrri

nbloculentityalmodelului(vezifigura5)saudefinitporturiledeintrareideieire,
iar n blocul architecture prin intermediul declaraiei process sa definit funcionarea
modelului.
n cadrul procesului ordinea secvenial a instruciunilor afecteaz prioritatea
atribuirisemnalelor,astfelncadruldescrierinoastreintrareay1vaaveaprioritateaceamai
mare.
Remarcmncodliniaceconinevec<=B000,Bsereferlaformabinaravalorii
atribuiteoperandului.


libraryIEEE;
useIEEE.std_logic_1164.all;
entitypriorityis
port(

y1,y2,y3,y4,y5,y6,y7:instd_logic;

vec:outstd_logic_vector(2downto0));
endpriority;
Architecturebody
architecturebehaviorofpriorityis
begin
process(y1,y2,y3,y4,y5,y6,y7)
begin
if(y7=1)thenvec<=111;
elsif(y6=1)thenvec<=110;
elsif(y5=1)thenvec<=101;
elsif(y4=1)thenvec<=100;
elsif(y3=1)thenvec<=011;
elsif(y2=1)thenvec<=010;
elsif(y1=1)thenvec<=001;
elsevec<=B000;
endif;
endprocess;
endbehavior;

Figura5.CodVHDLidiagramablocpentrucodificatorprioritarcu8intrri

Decodificator3intrrii8ieiri

Unaltexempludemodelareauneiahitecturifolosindbloculprocessestecelcarese
refera la decodificatorul 38 (vezi figura 6.a). n cadrul acestui model procesul este descris
folosindinstruciuneasecvenialcasewhen.
n cazul n care vreuneia dintre ieiri nu i se atribuie nici o valoare, sintetizatorul va
presupunecaieirearespectivtrebuiesipstrezevaloareacurentiastfelsevagenera
un latch pentru ieirea respectiv, cea ce nseamn a irosi din resursele cipului n care
urmeazafiimplementatmodelulideasemeneantrzierinplus.
Figura6.bprezintoaltvariantdecodVHDLpentrudecodificator,dedataaceasta
sefolosescinstruciuniconcureniale,caredupcumsepoateobservasederuleaznafara
vreunuiblocproces.


libraryIEEE; libraryIEEE;
useIEEE.std_logic_1164.all; useIEEE.std_logic_1164.all;
entitydec3to8isport( entitydec3to8_altis
sel: in std_logic_vector (2 port(
downto0);selector sel:instd_logic_vector(2downto0);selector
en:instd_logic;enable en:instd_logic;enable
y: out std_logic_vector (7 y: out std_logic_vector(7 downto 0)); ieirile
downto 0)); ieirile sunt suntactivepezero
activepezero enddec3to8_alt;
enddec3to8; architecturebehaviorofdec3to8_altis
begin
architecturebehaviorofdec3to8is y(0)<=0when(en=1andsel=000)else1;
begin y(1)<=0when(en=1andsel=001)else1;
process(sel,en) y(2)<=0when(en=1andsel=010)else1;
begin y(3)<=0when(en=1andsel=011)else1;
y<=11111111; y(4)<=0when(en=1andsel=100)else1;
if(en=1)then y(5)<=0when(en=1andsel=101)else1;
caseselis y(6)<=0when(en=1andsel=110)else1;
when000=>y(0)<=0; y(7)<=0when(en=1andsel=111)else1;
when001=>y(1)<=0; endbehavior;
when010=>y(2)<=0;
when011=>y(3)<=0;
when100=>y(4)<=0;
when101=>y(5)<=0;
when110=>y(6)<=0;
when111=>y(7)<=0;
whenothers=>null;
endcase;
endif;
endprocess;
endbehavior;


Figura6.aInstruciunisecveniale Figura6.bInstruciuniconcureniale

Sumatorcutransportsuccesivpe8bii

n subcapitolul anterior am vzut cum se modeleaz un sumator, n mediul Xilinx


folosindeditorulschematic.nacestsubcapitolvomprezentacodulVHDLpentrusumatorul
cu transport succesiv pe 8bii. Codul din tabelul T5.3.6 introduce instruciunea loop cu
ajutorulcreiasegenereazlogicaspecificsumatorului.
ncodsedefineteunsemnaltemporarsignalc:std_logic_vector(7downto0);,pentrua
pstravaloareasemnaluluicarrycaresepropagintern.


libraryIEEE;
useIEEE.std_logic_1164.all;
entityadder8isport(
a,b:instd_logic_vector(7downto0);semnaleledeintrare
cin:instd_logic; transportlaintrare
sum:outstd_logic_vector(8downto0);semnaledeieire
cout:outstd_logic); transportlaieire
endadder8;
architecturebehaviorofadder8is
signalc:std_logic_vector(8downto0);
begin
process(a,b,cin,c)
begin
c(0)<=cin;
foriin0to7loop
sum(i)<=a(i)xorb(i)xorc(i);
c(i+1)<=(a(i)andb(i))or(c(i)and(a(i)orb(i)));
endloop;
cout<=c(8);
endprocess;
endbehavior;

Figura7.CodVHDLpentrusumatorulcutransportsuccesivpe8bii

Pn la acest punct al lucrrii au fost examinate cteva exemple, prin intermediul
crora sa fcut i o introducere n limbajul VHDL. Sa putut observa c modelarea unui
circuit n VHDL se poate face n mai multe variante (se pot folosii att instruciuni
concureniale ct i/sau instruciuni secveniale), rmne la latitudinea proiectantului ce
variantdedescrierevafolosii.

Desfurarealucrrii

Cteodat este mai uor de vizualizat proiectele folosind o reprezentare n schematic a


acestora.OricemoduldescrisnVHDLpoateaveaioreprezentarenschematicsubforma
unuibloc.MaimultemoduledescrisenVHDLpotficonectatempreunfolosindsimbolurile
schematicecreate.

ncontinuare,plecnddelacodulVHDLalmultiplexoruluicudouintrridedatepe8biii
unadeselecie,vezifigura3,sevacreaunsimbolschematicalacestuia.
Folosindsimbolulschematiccreatsevaextindemagistraladedateintrareiieireastfelse
vaproiectaunmultiplexorcu2intrridedatepe16biiiointraredeselecie.Acestavafi
simulatiimplementat.nultimaetapsevoranalizafiiereleraport.

Pasul1:Creareaproiectului.

Sevacreaunproiectcunumelemux_sch,atenieladirectoruldelucru.
SevaselectacaTopLevelSourcemoduldelucruSchematic,vezilaborator2.
Dupceproiectulafostcreat,conformlaboratorului2,seadaugunfiiersursnou,Project
New Source, se alege un nume pentru fiierul surs mux2_1 i se alege s fie de tipul
VHDL,vezilaborator1.Porturilepotfiadugateutilizndwizardulsaudacsetrecepeste
aceast etap, pot fi adugate direct n codul VHDL generat la creearea fiierului. Codul
VHDL al multiplexorului cu dou intrri de date i una de selecie va fi cel din figura 3. n
acestmomentproiectultrebuiesaratecainfigura8.


Figura8

Pasul2:Proiectareaierarhic,creareasimbolurilornschematic

n fereastra Process, sub meniul Design Utilities se face dublu click pe Create Schematic
Symbol, aceasta va avea ca rezultat crearea unui simbol schematic i adugarea lui n
bibliotecadesimboluridineditorulschematic.
ncontinuaresevaadugaonousursproiectului,Project,NewSource,detipulschematic
iavndnumelemux_top.Odatadugatfiierulschematic,dubluclickpeacest,trebuies
se deschd editorul schematic iar n fereastra Sources Symbols trebuie s regsim
simbolulschematicalmodululuiVHDLmux2_1.
Aducem dou instane ale simbolului creat n pagina de editare, vezi laboratorul 2. Dup
care utiliznd cursorul pentru trasee, vezi bara cu unelete , se conecteaz ntre ele
moduleleleconformfigurii9.


Figura9

Editorulschematicrecunoateautomatcestevorbademagistralepe8biiiconecteaz
corespunztor componentele. Se poate observa c magistraelele de date intrare i ieire
suntconectatempreun.Dupdefinireatraseelorseinsereazpaduriledeintrareiieire
folosindnotaiileoneizeropentruintrarilededate,YpentruieireiSpentruintrareade
selecie, vezi figura 9. Atenie la stabilirea numelor padurilor de magistral se pstreaz
dimensiune(0:7),vezifigura10.
Fiecareinstanamultiplexoruluimux2_1,poatefiredenumit,dubluclickpeinstanin
cmpulInstNamesescrieMuxA,respectivMuxB.
nacestmomentsepoatefaceosalvareisepoateieiidineditorulschematic.


Figura10

n aceast etap n fereastra Sources se poate observa entitatea top de tip schematic mux_top.sch
subcareseaflinstaneleMuxA,MuxBalemultiplexoruluidescrisnVHDL.
Dac se selecteaz entitatea mux_top i se alege din nou opiune Create Schematic Symbol, se va

obine simbolul , selectnd acest simbol i alegnd dinbaropiuneaPush

,sevamergepracticlaierahiainferioarreprezentatdeinstaneleMuxA,B.
EchivalentulnVHDLareprezentriischematiceamux_top.schsepoatevedeaalegndopiuneView
HDLFunctionalModel.AaarartaentitateanoastrTOPdacproiectularfifostdetipHDLinu
schematic.

Pasul3:Creareatestbenchuluiisimulareafuncionalaproiectului

PentrucreareatestbenchuluiseselecteazentitateTop,clickdreaptaNewSource,seselecteaztipul
de surs Test Bench...i se alege numele mux_top_tb, Next, se selecteaz entitatea top la care se
asociaztestbenchulmux_top,Next,Finish.nfereastranouaprutseselecteazCombinatoriali
InitialLength...2000ns,Finish.Lafelcainlucrarearanterioarseselecteazstareasemnalelorde
intrareconformmodeluluidinfigura11.Semnaluldeselecieprimetestrialternative0,1logic,iar
laintrrilededate,luiZeroiselasvaloare0,iarintrrinumiteOneisedvaloarea1fiecruibital
magistralei(clickpe+pentruaexpandamagistrala).Sesalveazisenchideeditorul.

10


Figura11

n fereastra Sources, Sources for se selecteaz Behavioral Simulation, Xilinx Ise Simulator, Simulate
BehavioralModel.
nfigura12,suntprezentaterezultatelesimulrii.


Figura12.

SepoateobservapentrustriledefinitencodulVHDL,0i1alesemnaluluideselecieS,ieireaeste
corespunztoareh0respectivh1.Senchidefereastradetestbench.

Pasul4:Implementareaitestareaproiectului

nSources,SourcesforserevinedinnoulaSynthesis/Implementation.
Implementareaserealizeazconformproceduriidinlaboratorul1.

Pasul5:Analizareafiierelorraport

n urma implementrii n fiecare etap se genereaz un fiier raport, acestea pot fi vizualizate fie
expandnd (click pe +) fiecare etap din fereastra Processes, fie rezumate n Design Sumary, vezi
fugura 13. Informaiile din figura 13 permit proiectantului s determine rapid resursele consumate
din circuitul FPGA n urma implementrii proiectului. Astfel, de interes sunt numrul de Sliceuri
consumate(acesteareprezentndblocuriledebazalecircuitelorFPGA),numruldeLUTuri(tabele
deadevr,cte2pentrufiecareslice),inumruldeblocurideintrare/ieireIOB,utilizate.
Pentruaaveaacceslainformaiimaidetailatesepotaccesarapidfiiereleraportgeneratenfiecare
etap,totdinDesignSumary,vezifigura14.

11


Figura13


Figura14

1.TranslateReportprezintoriceeroarelegatdeproiectaresaudeconstrngeri;
2. Map Report confirm resursele utilizate i ofer detalii despre logica redundant nlturat i
despeoptimizareaceleirmase.Prezintizonadindispozitivalocatmodulelorproiectului;
3. PostMap Static Timing Report prezint ntrzierile din circuit, rezultate n urma aplicrii
constrngerilordefinitedeutilizator.nacestraportntrzirileserefernumailaceleprinporinui
lacelecareaparnurmarutrii.
4. Place and Route Report prezint pas cu pas procesul de plasare i rutare. Se ine cont i de
constrngerileaplicatedeutilizator,dacacesteanupotfirespectateprocesulsetermincueroare.
5.AsynchronousDelayReportprezintunraportalntrzierilor,inndcontattdeceleprinpori
ctidecelederutare;
6.PadReportprezintplasareaporturiloristandardelesemnalelorcepotfiprezentelaporturi.

Activitisuplimentare

- SevacreaundirectorcunumeleLab.3,ipentrufiecaredincodurileVHDLdinfigurile3,5,6,7se
va crea un proiect n schematic, se va scrie codul cu editorul de cod HDL, se va face o analiz
sintacticafiecruicodscris,sesalveazcoduldupceafostverificatisegenereazunsimbol
schematic.Sevasimulafuncionalfiecaresimbolschematicdescris.
- Seimplementeaztoatecelepatruexemple,simulatelapunctulanteriorisestudiazfiierele
raport rezultate n urma implementrii, se ncarc n plac i se testeaz . La implementare se
scriuifiiereledecontrngericorespunztoareinndusecontdepiniasociaicomutatoarelor
iLEDurilordepeplacaDIO4,vezilaborator1.

12

S-ar putea să vă placă și