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

entitynume_modelis port
librarydeclarareabibliotecilorfolosite

( 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;

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;
intrriasincrone

Figura4.a.CodulVHDLpentru bistabiluldetip

Figura4.b.CodulVHDLidiagramablocpentrubistabiluldetipDcu

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.
4

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;
endbehavior;

Resetasincron ncrcareparalelsincron

othersfolositpentru atribuireavalorii0tuturor biilordinsemnalul p_state

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. 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.

Sevorimplementaconstrngeridetimpidelocpentrufiecareproiectisevoranaliza fiiereleraport.

13

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