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
3

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

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

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
8

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