Sunteți pe pagina 1din 13

CircuiteLogiceProgramabile

LABORATOR4

DESCRIEREANVHDLACIRCUITELORSECVENIALE.
DEFINIREACONSTRNGERILORDETIMP

SCOPULLUCRRII

Logica secvenial este termenul generic folosit pentru proiectele care conin
elemente de stocare, n special bistabile. Toate circuitele secveniale beneficiaz de un
semnaldesincronizarenumitsemnaldetactsauclock.

n aceast lucrare se vor extinde cunotinele de VHDL modelnd circuitele


secveniale de baz: bistabile , numrtoare , registre. Pe lng modelele VHDL
corespunztoarecircuitelorsecvenialenaceastlucrarevorfitratateiaspectelelegatede
generareanedoritalogicisecveniale,datoratmaniereigreitededescriereaproiectelor
nVHDL.Deasemeneavafiprezentatimodalitateadedefinireaconstrngerilordetimp:
frecvendelucru,timpdesetupimodalitateadevizualizareaafiierelorraportaferente
acestora.ModeleledescrisevorfiimplementatecuajutorulprogramuluiXilinxISE.

IINTRODUCERETEORETIC

Circuitele secveniale conin att logic combinaional ct i elemente de stocare, ca


urmare a acestui fapt toate circuitele secveniale pot fi descompuse n dou blocuri, unul
combinaionaliunuldestocare.nfigura1seprezintdiagramaunuisistemsecvenial.
n acest sistem secvenial elementul de stocare este circuitul bistabil. Fiecare model
secvenialsenscrientroschemdecodcaiceaprezentatnfigura2.
ncontinuaresevordezvoltactevamodeleVHDLalecircuitelorsecvenialedebaz:
- Latchuri
- Circuitebistabile
- Numrtoare
- Registre.

Figura1.Sistemsecvenial


librarydeclarareabibliotecilorfolosite

entitynume_modelis
port

(
listaintrriloriaieirilor
);
endnume_mode;
architecturebehaviorofnume_modelis
declararedesemnaleinterne
begin
procesulstatedefineteelementeledestocare

state:process(listasenzitivitilorclock,reset,next_stateinputs)
begin
instruciuniVHDL
endprocessstate;
procesulcombinaionalvadefiniilogicacombinaional

comb:process(listasensitivitilordeobiceiincludetoatesemnaleledeintrare)
begin
instruciuniVHDL
endprocesscomb;
endbehavior;

Figura2.ModeldedescriereacircuitelorsecvenialenVHDL

Latchicircuitebistabile
Rolul unui element secvenial de tip latch sau bistabil este de a pstra o valoare (a unui
semnal)oanumitperioaddetimp.naceastseciunevorfiprezentatectevaexemple
VHDL care modeleaz un astfel de comportament. Latchurile i bistabilele sunt de fapt
celuledememoriecarepotstocalaunmomentdat1bit.Diferenadintreeleestecalatch
ul comut pe nivel logic (0 sau 1), n timp ce bistabilul comut pe frontul semnalului
(cresctorsaudescresctor).

ModelVHDLpentruLatchdetipD
n figura 3 este prezentat modelul VHDL al latchului de tip D. Am ales acest tip pentru
exemplificare datorit frecventei lui utilizrii mai ales ca element de stocare a biilor de
control(ex.stocareabituluideflag).Gndindlatchulnacetitermeni,valoareaintrriiDse
varegsiilaieireoridecteoriintrareadecontrolCarevaloarea1,altfelieirilelatchului
rmnneschimbate.
Modeluldelatchdinfigura3esteunmodelcomportamental(behavioralmodel)caredup
cumsepoateobservaanecesitatpracticdouliniidecod(vezicoduldininteriorulblocului
proces).Compilatorul VHDL va asocia aceast descriere cu un latch deoarece n cod nu sa
specificatcesentmpldacsemnalulCnuarevaloarea1.Astfelcompilatorulvageneraun
latchpentruareinevaloarealuiQntredouinvocrialeprocesului.


n general compilatorul VHDL genereaz latchuri pentru semnalele din cadrul
instruciunilorifsaucase,ncazulncarenusainutcontdetoatecombinaiilesemnalelor
deintrare.
libraryIEEE;

useIEEE.std_logic_1164.all;

entitydlatchis
port(D,C:inSTD_LOGIC;
Q,QN:bufferSTD_LOGIC);
enddlatch;

architecturedlatchc_bofdlatchis
begin
process(C,D,Q)
begin
if(C='1')thenQ<=D;
QN<=notQ;
endif;
endprocess;

enddlatchc_b;
Figura3.CodVHDLidiagramablocpentrulatchuldetipD

nsecvenadecoddinfigura3semaipoateobservafolosireaunuinoutipdeport,buffer.
Acesttipesteasemntorcutipulout,cudeosebireacsemnaleledelaacestportpotfii
citite,adicncadruuneisecvenedecodsemnalulpoateapreanmembrulstngalunei
declaraiideatribuire.
ModeleVHDLpentrubistabilidetipD

Bistabilelemaisuntdeasemeneacunoscuteisubnumelederegistre(peunbit),ele
suntmodelatenVHDLncadrulblocurilorprocesfolosindinstruciunilewaitiif,deoarece
instruciuneawaitnuestesintetizabilnunevomocupadeea.
Deasemeneancadrulprocesuluimaiapariexpresiicarepermitdetectareatranziieiunui
semnal(nacestcazestevorbadesemnaluldetact).

nfigura4.a.seprezintcodulVHDLcaremodeleazcomportamentalunbistabilde
tipD.

Dupcumsepoateobservadinambelecoduri(figura4a.i4b.)pentruadescrieun
bistabil folosim atributul event, care este un atribut specific semnalelor. Dac SIG este un
numedesemnal,atunciconstruciaSIGeventvareturnavaloareabooleanadevrat
(adicprocesuldincarefacepartesemnalulSIGvafievaluat,sevorexecutainstruciunile
din acest bloc) ori de cte ori semnalul SIG tranziteaz dintro stare logic n alta, altfel
valoareareturnatestefals.ncadrulinstruciuniiifexpresiaCLKeventdeclaneazo
evaluareaprocesuluilafiecaretranziieasemnaluluiCLK,pentruaneasiguracvaloarea
semnalului D este atribuit ieirii Q numai la tranziiile semnalului CLK din 0 n 1 (front
cresctor)semaiimpuneicondiiaCLK=1.Aseobservacnlistasenzitivitiloreste
prezent numai semnalul CLK, tranziiile pe care le sufer semnalul D nu pot s declaneze
evalurialeprocesului.AcesttipdeprocesencareunfrontalsemnaluluiCLKsincronizeaz
toateatribuiriledesemnalesenumescprocesesincronecutactul(clockedprocess).


libraryIEEE;
useIEEE.std_logic_1164.all;

entitydffis
port(D,CLK:inSTD_LOGIC;
Q:outSTD_LOGIC);
enddff;

architecturedff_bofdffis
begin
process(CLK)
begin
if(CLKeventandCLK=1)
then
Q<=D;
endif;
endprocess;
enddff_b;

Figura4.a.CodulVHDLpentru
bistabiluldetip

LibraryIEEE;
useIEEE.std_logic_1164.all;

entitydff74is
port(
D,CLK,PR_L,CLR_L:inSTD_LOGIC;
Q,QN:outSTD_LOGIC);
enddff74;

architecturedff74_bofdff74is
signalPR,CLR:STD_LOGIC;
begin
process(CLR_L,CLR,PR_L,PR,CLK)
begin
PR<=notPR_L;CLR<=notCLR_L;
if(CLRandPR)=1then
Q<=0;QN<=0;
elsifCLR=1thenQ<=0;QN<=1;
elsifPR=1thenQ<=1;QN<=0;
elsif(CLKeventandCLK=1)then
Q<=D;QN<=notD;
endif;
endprocess;
enddff74_b;

Figura4.b.CodulVHDLidiagramablocpentrubistabiluldetipDcu
intrriasincrone

Conformsecveneidecoddinfigura4.b.modeluldebistabilDpoatefiextinsdescriinduise
i intrri asincrone de preset, clear, precum i o ieire QN. Ieirea QN poate avea un
comportament necomplementar fa de Q dac se face o setare simultan a intrrilor de
preset i clear. n modelul din figura 4.b. semnalele de preset i clear sunt asincrone cu
tactul,dacnsexpresia(CLKeventandCLK=1)thenvafitrecutcaprimcondiien
cadru instruciunii if , atunci innd cont de faptul ca toate instruciunile din cadrul unui
proces sunt executate secvenial, atribuirea semnalelor de preset i clear se va desfura
sincroncutactulastfelobinembistabiluldetipDcupreseticlearsincron.

ModelVHDLpentruregistre

Ungrupdenbistabilecareausemnaldetactcomunformeazunregistrupenbii.
Cel mai adesea regitri sunt folosii pentru a stoca o colecie (grup) de bii nrudii, spre
exempluunbytededate.nfigura5esteprezentatcodulVHDLidiagramabloccuintrrile
iieirileunuiregistrupe8biicuncrcaresincroniresetasincron.


libraryieee;
useieee.std_logic_1164.all;
entityreg8bitis
port(clk,reset,ld:instd_logic;
din:instd_logic_vector(7downto0);
dout:outstd_(7downto0));
endreg8bit;

architecturebehaviorofreg8bitis
signaln_state:std_logic_vector(7downto0);
signalp_state:std_logic_vector(7downto0);
begin

process(clk,reset)
begin
if(reset=0)thenp_state<=(others=>0);
elsif(clkeventandclk=1)then
if(ld=1)thenn_state<=din;
elsenull;
endif;
p_state<=n_state;
endif;
endprocess;
dout<=p_state;

Resetasincron
ncrcareparalelsincron

othersfolositpentru
atribuireavalorii0tuturor
biilordinsemnalul
p_state

endbehavior;
Figura5.CodVHDLpentruregistrupe8biicuncrcaresincroniresetareasincron

Spredeosebiredebistabileundeinformaiastocatseschimblafiecaresemnaldetact,n
cazul registrului coninutul acestuia se va schimba numai pentru LD=1 (vezi procesul
combinaional) i n mod sincron cu tactul (vezi proces secvenial, expresia p_state <=
n_stateesteevaluatdupclkevent).
Din figura 5 se poate observa c modelul VHDL al registrului respect ntru totul

blocurileprocesprezentatenfigura1cafiindspecificeoricruisistemsincron.

Procesulstatedefineteelementuldestocarepe8bii,sincroncutactuliasincron
cu un semnal de reset activ pe zero. Semnalul de ieire a acestui proces este p_state.
Aciuneadestocareainformaieincadrulacestuiprocesestedatdefaptulcluip_statei
seatribuieovaloarenumaidacsemnalulreset=1sausemnaluldetactnuareotranziie
din0n1.
Alte forme de atribuire de valori semnalelor (pe lng cea din exemplu, care
folosete cuvntul cheie others) sunt: atribuirea poziional (ex. p_state <=
(s,s,s,s,s,s,s,s) i atribuire dup nume, ex. p_state <= (4=>s, 7=>s, 2=>s, 5=>s,
3=>s, 1=>s, 6=>s, 0=>s)), unde s este un semnal de tip std_logic care poate lua
valorile 0 sau 1.

ModelVHDLpentrunumrtorsincron

Numrtoarele sunt circuite secveniale care parcurg un anumit numr de stri.


Numrtoarelesuntfolositensistemeledigitalepentruacontorizaevenimentesaupentru

ageneraadresedememorie.Numrulstrilorprincaretreceunnumrtorpnajungedin
nou la starea din care a plecat (astfel avnd loc un ciclu de numrare) definete modulul
numrtorului.

Unnumrtorcumstrisenumetenumrtormodulomsaunumrtordivizorcu
m.Unnumrtorbinarpenbiiestealctuitdinnbistabileiare2n=mstri.
Unnumrtortrecedelavaloareacurentlaurmtoareavaloarecaurmarearspunsuluipe
careldlaunimpulsdenumrare(tactulsistemului).

n figura 6 se prezintmodelulVHDLisimbolulnumrtorului74x163,acestaeste
un numrtor sincron pe 4bii. Caracteristic numrtorului sincron este faptul c, toate
bistabilele din care este alctuit au semnal de tact comun, astfel nct toate ieirile i
schimb starea n acelai timp. Numrtorul descris n lucrarea de fa este alctuit din
bistabiledetipDpentruafacilitafunciiledencrcare(LD)ireset(CLR).
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_arith.all;

entitynum_sinis
port(
CLK,CLR_L,LD_L,ENP,ENT:inSTD_LOGIC;
D:inUNSIGNED(3downto0);
Q:outUNSIGNED(3downto0);
RCO:outSTD_LOGIC);
endnum_sin;

architecturenum_sin_archofnum_sinis
signalIQ:UNSIGNED(3downto0);
begin
process(CLK,ENT,IQ)
begin
ifCLK'eventandCLK='1'then
ifCLR_L='0'thenIQ<=(others=>'0');
elsifLD_L='0'thenIQ<=D;
elsif(ENTandENP)='1'thenIQ<=IQ+1;
endif;
endif;
if(IQ=15)and(ENT='1')thenRCO<='1';
elseRCO<='0';
endif;
Q<=IQ;
endprocess;
endnum_sin_arch;

Biblioteccareconinetipul

unsingnedioperatoriispecifici

acestuitip

IQsemnalintern,pstreazstarea

curentanumrtorului

Figura6.SimbolstandardicodVHDLpentrunumrtorsincronpe4biicuncrcareiresetaresincron

Observai c n codul din figura 6 sa introdus o nou bibliotec use


IEEE.std_logic_arith.all;,aceastbibliotecincludetipuriledevectoriunsignedisignedi
operatorispecificipentruacestetipuri.Celedoutipurisebazeazpetipulstd_logic,darun
vectordefinitunsignednupoatefiatribuitunuialtvectordefinitstd_logic,pentruacestgen

de atribuire se folosesc funcii de conversie. Avantajul folosirii tipului unsigned este ca


biblioteca creia i aparine include operatorii + i aceasta permind operaii de
adunareiscderedirectentrevectori.nprogramulnostruamdeclaratintrrileiieirile
de tipul unsigned i folosim operatorul + pentru a incrementa valoarea curent a
numrtorului.

nprogramsedefineteunsemnalinternIQpentruapstravaloareacurentanumrtorului.Amfi
putuutilizadirectsemnalulQdarnacestcaztrebuiasaldeclarmcaportdetipbuffer.

Desfurarealucrrii

Aceast parte a lucrrii const n implementarea cu programul Xilinx a codurilor VHDL


prezentate anterior. De asemenea se va prezenta i modalitatea de aplicare a
constrngerilor de timp. Se va pleca de la codul VHDL al numrtorului cu ncrcare
sincron i resetare asincron , vezi figura 6.

Pasul1:Creareaproiectului.

n directorul personal se va crea un subdirector cu numele lab4, aici vor fi salvate toate
proiectelecevorficreatencadrulacesteilucrri.
Sevacreaunproiectcunumelenum,atenieladirectoruldelucru.
SevaselectacaTopLevelSource...,HDL,vezilaborator2.
Dupceproiectulafostcreat,conformlaboratorului2,seadaugunfiiersursnou,Project
New Source, se alege un nume pentru fiierul surs num_sin i se alege s fie de tipul
VHDL, vezi laborator 1. Porturile pot fi adugate, conform codului din figura 6, utiliznd
wizardulsaudacsetrecepesteaceastetap,potfiadugatedirectncodulVHDLgenerat
la crearea fiierului. n aceast etap poate fi fcut o verificare a sintaxei, din fereastra
Processes,Synthesize,CheckSyntax.

Pasul2:VizualizareaconversieiRTLanumrtoruluidescrisnVHDL

Alegnd opiunea View RTL Schematic (din Processes, Synthesize...),vezi figura 7, poate fi
vizualizat sub form schematic traducerea proiectului din descriere abstract (cod
VHDL) ntro descriere cu simboluri implementabile n hardware, aa numita descriere RTL
(RegisterTransferLevel),vezifigurile8,9,10.Cuclickdreaptapesimboluldinfigura8iprin
alegereaopiuniiPushIntoSelectedInstance,sepotvizualizablocurileierarhiceinferioare.
Seobservcsageneratunnumrtor,opoartIcu5intrriacesteasuntcomponente
primare i un bloc de cotrol. Prin acelai procedeu Push..., se poate observa c n urma
sintezeibloculdecontrolestealctuitdindouporilogice(I,SAUcuintrarenegat),vezi
figura10.Senchidefereastradeschematic.

Figura7.

Figura8.

Figura9.

Figura10.

Pasul3:Creareatestbenchuluiisimulareafuncionalaproiectului

Pentru crearea testbenchului la fel ca i n laboratorul 3, se selecteaz entitate Num_sin,


click dreapta New Source, se selecteaz tipul de surs Test Bench...i se alege numele
Num_sin_tb,Next,seselecteazentitateatoplacareseasociaztestbenchulNum_sin,Next,
Finish.
Dedataacestafiindvorbadesimulareauneicomponentesecvenialevatrebuisselectm:
frecvenasemnaluluidetact,timpuldesetupintrziereapentruvalidareaieirii.
Se va selecta o frecven de 25 MHz pentru semnalul de tact i urmtoarele valori pentru
parametriienunaianterior:
Clock High Time: 20 ns.
Clock Low Time: 20 ns.
Input Setup Time: 10 ns.
Output Valid Delay: 10 ns.
Offset: 0 ns.
Global Signals: GSR (FPGA)
Initial Length of Test Bench: 2000 ns.

Astfelsemnaleledelaintrarevorfivalidenaintecu10nsdefrontulcresctoralsemnalului
declockiarlaieirevorrmnevalide10nsdupfrontulcresctor.Duratasimulriivafide
2000ns.Setriletrebuiesfiecaiceledinfigura11.

Figura11.

nfigura12,semnaluldetergereCLR_L,pleacdin0,sefaceunreset,semnaleledevalidare
ENP, ENT, vor fi trecute n 1 pentru a permite numrarea, la intrarea de date D[3:0] se
stabilescvalorialeatorii(clickpe+pentruaexpandamagistrala),acesteavorficititedoarn
momentul n care intrarea LD_L trece n 0, n toate situaiile _L semnific faptul c
semnalulesteactivpe0.Dacsedclickdreaptapeoricaredintresemnalesepoatealege
baza numeric de reprezentare a semnalului , n situaia de fa se recomand Decimal
(unsigned).Sesalveazisenchideeditorul.

Figura12.

n fereastra Sources, Sources for se selecteaz Behavioral Simulation, Xilinx ISE Simulator,
SimulateBehavioralModel.
nfigura13,suntprezentaterezultatelesimulrii.

Figura13.

Se poate observa c numrtorul se incrementeaz, iar n momentul n care semnalul de


ncrcareld_leste0sencarcvaloareadelaintrareadedate(valoarea2)iincrementarea
continu de la aceasta. Urmrind codul VHDL verificai toate modurile de funcionare ale
numrtorului,modificndstareastimulilordelaintrare.
nchideisimularea.

10

Pasul4:Creareaconstrngerilordetimp

ncontinuaresevorspecificaconstrngeriledetimpcuprivirelafrecvenadelucrulacare
neateptmsfuncionezenumrtorulimplementatnFPGAideasemeneacuprivirela
ntrzierile de la pinii circuitului FPGA. Cu alte cuvinte se vor specifica momentele n care
circuitul FPGA este pregtit sprimeascdatelapiniicttimpspstrezedatevalidela
pini.
Se revine Sources for, Synthesis..., se selecteaz codul VHDL, iar n fereastra Processes se
alegeUserConstraints,CreateTimingConstraints.Vafirulatetapadetranslataredinfaza
deimplementareisevacreaautomatunfiierUCF,sedclickYespefereastracareapare.
FiierulUCFseadaugproiectuluiidevinevizibilnfereastracufiieresurs.
SevadeschideeditoruldeconstrngeriisedclickpetabulGlobal,seselecteazcmpul
Periodisedclickpesimbolul
dinbarademeniurisaudubluclickncmpulPeriod,se
specificperioada40ns(frecvenatactuluivafi25MHz)iselasfactoruldeumplere50%,
vezifigura14,clickOK.

Figura14.

DubluclickncmpulPadtosetup,seintroducevaloarea10nsncmpulOFFSET,seseteaz
cucttimpnaintedeaaveaunfrontcresctordatelesfiestabile,vezifigura15,clickOK.
DubluclickncmpulClocktopad,seintroducevaloarea10nsncmpulOFFSET,seseteaz
cttimpdatelermnvalidelaieiredupunfrontcresctordetact,vezifigura16,clickOK.

Figura15.

Figura16.

11

Toateconstrngerilevorapreanfereastradinstngajosaeditoruluischematic,clickSave
inchideieditoruldeconstrngeri.

Pasul5:Implementareaproiectuluiiverificareaconstrngerilor

nSources,SourcesforserevinedinnoulaSynthesis/Implementation.
Implementareaserealizeazconformproceduriidinlaboratorul1.
Se identific Static Timing Report n fereastra Design Sumarry i se alege Timing Sumarry,
vezifigura17,sepoateobservacfrecvenamaximdelucrueste176MHz,constrngerea
delaintrare(4,59ns)esterespectatfiindmaimicde10ns,darlaieire(10,87ns)aceasta
este depit, astfel c pentru a finaliza implementarea cu succes aceasta va trebui
modificatlaovaloaremaimare.
Modificaiireimplementai.Deasemeneapentruavedeacesentmplsepoatecretei
constrngereadeclockla200MHz.

Figura17.

Pasul6:Definireaconstrngerilorlapini

Conform procedurilor din laboratoarele anterioare definii constrngerile la pini circuitului


FPGA,vezitabelulcupinidinlab1.
Sevaalegepinulcorespunztorpentrusemnaluldeclock,sevaalegeuncomutatorpentru
clear,unulpentruload,doupentruvalidriipatrupentrubiiidedate,vorfifolositeastfel
toatecele8comutatoare(SW7....SW0)).
PentruieiristabiliiconstrngerilapiniiconectailaLEDuriledepeplac,4pentrudate1
pentrutransport.
Nuuitaicpentruaafiacorectstarea,LEDurileaunevoieidesemnaluldevalidareLEDG,
vezidocumentaiaplciiDIO4!!!

12


Activitisuplimentare

- SevorrepetaoperaiuniledescriseanteriorpentrufiecaredincodurileVHDLdinfigurile
3,4, 5. Pentru fiecare cod n parte se va crea un proiect cu numele entitii, n
subdirectorulLAB4.
-

Sevorimplementaconstrngeridetimpidelocpentrufiecareproiectisevoranaliza
fiiereleraport.

Indicaie!!!

Datorit faptului c semnalul de clock din hardware este de 50 MHz, dac nu se face o
divizareaacestuia,laimplementareanhardwaresecvenadenumrare,pentrunumrtor
saudedeplasareabiilorncazulregistrelor,nuvaputeafiurmrit.
Se recomand divizarea semnalului de clock, secvena de cod corespunztoare, pentru
numrrtor este prezentat n figura18,similarseprocedeazipentrucelelelatecircuite
secveniale.

architecturenum_sin_archofnum_sinis
signalIQ:UNSIGNED(3downto0);
signaldiv:std_logic_vector(24downto0);
signalC:std_logic;
begin
sefacedivizareasemnaluluideclockcu2**25
p1:process(clk)

begin

ifCLK'eventandCLK='1'then

div<=div+1;

endif;

C<=div(24);

endprocess;
P2:process(C,ENT,IQ)

begin
ifC'eventandC='1'then
ifCLR_L='0'thenIQ<=(others=>'0');
elsifLD_L='0'thenIQ<=D;
elsif(ENTandENP)='1'thenIQ<=IQ+1;
endif;
endif;
if(IQ=15)and(ENT='1')thenRCO<='1';
elseRCO<='0';
endif;
Q<=IQ;
endprocess;

LEDG<='1';
endnum_sin_arch;
Figura18.

13

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