Sunteți pe pagina 1din 16

CircuiteLogiceProgramabile

LABORATOR78

PROIECTAREAUNUICONTROLERDETRAFIC.
CREAREAPROIECTELORMIXTE

SCOPULLUCRRII

n aceast lucrare se va proiecta un controler pentru un semafor care va


coordonacirculaiantrointersecie.Controlerulvafiproiectatcaiautomatdestri(FSM).
Pornind de la definiia problemei se va determina diagrama de strii dup care se va face
implementarea proiectului n FPGA. n aceast lucrare se va exersa crearea proiectelor
mixte:schematic,codVHDL,diagramedestare(FSM).Intervaleledetimpdintretranziiivor
ficontorizateiafiatepeafiajul7segmente.Vafiprezentatimodalitateadecomand
independentacaracterelorafiajului7segmente.

IINTRODUCERETEORETIC

Definireaproblemei
Specificaiilepentruproiectareacontroleruluidetraficsunt:
- Controlerulvacomandaunsemaforamplasatlainterseciadintreoautostrad(A)iun
drumsecundar(DS),vezifigura1;
- Senzorii S sesizeaz prezena unei maini care staioneaz pe drumul secundar. Atta
timpctniciomainnustaioneazpedrumulsecundarautostradaareprioritatetimp
de20sdupcareseverificstareasenzoruluiS.Dacnuesteprezentniciomainpe
drumulsecundarautostradaivamenineprioritateancontinuare,pentrualte20s.
- Semaforul va acorda prioritate (un anumit interval, 10s) drumului secundar dup o
anumitperioad,dinmomentulncaresenzorulSadetectatprezenauneimaini;
- Trecereadelaculoareaverdelacearoienusevafacedirect,citrecndprinculoarea
galben.Semaforulvapstraculoareagalbenpentruunintervaldetimp,5s.
Notaiifolositenfigura1:
Ssenzor;ASsemaforautostrad;DSSsemafordrumsecundar.
Algoritmuldefuncionareacontroleruluieste:
1. Verdepentruautostrad/Roupentrudrumulsecundar,timpde20s;
2. Severificdacexistmainistaionatepedrumulsecundar.
3. DacDAsetrecelafazaurmtoare;
4. DacNUsereiaprimulpas;
5. Galbenpentruautostrad/Roupentrudrumulsecundar,timpde5s;
6. Roupentruautostrad/Roupentrudrumulsecundar,timpde5s;
7. Roupentruautostrad/Verdepentrudrumulsecundar,timpde10s;
8. Roupentruautostrad/Galbenpentrudrumulsecundar,timpde5s;
9. Roupentruautostrad/Roupentrudrumulsecundar,timpde5s;
10.Mergilapasul1.


Figura1Configuraiaintersecieisemaforizate

Definireaintrrilor,ieiriloriastrilorintermediareiatranziiilorntrestri

n figura 2 este prezentat diagrama bloc a controlerului de trafic, cu intrrile i


ieirilespecifice.

R
CLK
SEN

DS_R
DS_G
DS_V

Controler
de Trafic

Num

A_R
A_G
A_V
En

Figura2IntrrileiieirileControloruluideTraficproiectatcaiFSM

IntrareaRSTaduceFSMulnstareiniial(autostradaAareprioritatetimpde20s).
Intrarea SEN detecteaz prezena unei maini care ateapt pe drumul secundar DS. Cele
aseieiri(DS_R,DS_G,DS_V,A_R,A_G,A_V)stabilescculorile(rou,galben,verde)pecare
levorafiaceledousemafoare(AS,DSS).Sevafolosiiunnumrtorextern,pentruastabilii
intervaleledetimp(TL=20s,TM=10siTS=5s).SemnalulStartactiveaznumrtorul,dup
fiecareschimbaredestareaFSMului.Numrtorulvaimplementaifunciadedivizarea
semnaluluidetactpentrucontroleruldetrafic,astfelnctfrecvenadelucruaacestuias
fie 1Hz. n aceste condiii pentru o perioad de 1s a tactului, numrtorul va lua valorile:
Num=20pentruTs=20s,Num=10pentruTM=10siNum=5pentruTS=5s.ntabelulT.1sunt
prezentate cele 14 strii ale controlerului precum i tranziiile ntre ele. n coloanele
tabeluluisepoturmriivalorilepecareleauieirilecontroleruluipentruanumitevaloriale
intrrilorcorespunztoreuneistri.Cele14strisuntdupcumurmeaz:
2

stareadeR,stabiletecondiiileiniialedincarevaporniicontrolerul;
starea Start1, lanseaz procesul de numrare n acest caz pn la 20 i totodat
activeazstareaNormaldefuncionareacontrolerului;
pe parcursul strii Normale de funcionare autostrada are prioritate timp de 20s,dup
careurmeaztranziianstareaurmtoare;
starea Verifica , decide dup scurgerea celor 20s dac tranziia va avea loc napoi la
stareaNormalancazulncareSen=0,adicnuesteprezentniciomainpedrumul
secundarsaunsprestareaS1;
strileStart1>Start6declaneaztranziiiledintrostarenaltaacelordousemafoare
(AS i DSS) i de asemenea declaneaz (pentru En=1) procesul de contorizare a
timpuluictsestaioneazntrostareS1>S6;
strileS1>S6definescefectivschimbriledeculoripentruceledousemafoare,starea
S3caredureaz10sestestareapeparcursulcreiadrumulsecundarareprioritatefa
deautostrad.

TabelulT.1StrileitranziiileControleruluideTrafic

Intrri

Stri
R

Sum

Sen

Ieiri

Cond.Tranz.

A_R A_G A_V DS_

DS_

DS_

En

Urmtoare

Reset

Start1

Normal

<19

N=19

Verific

Sen=0

Sen=1

S1

<4

N=19

Start2

S2

<4

N=4

Start3

S3

<9

N=9

Start4

S4

<4

N=4

Start5

S5

<4

N=4

Start6

Starea

Desfurarealucrrii

ParteaI

Pasul1:Creareaproiectului

Odatstabilitestrilecontrolerului,tranziiileivaloriledeieiredinfiecarestareputems
trecemladescriereaproiectuluinschematic,pentruaceastavorfiurmritectevaetape.

n directorul personal se va crea un subdirector cu numele lab7, aici vor fi salvate toate
proiectelecevorficreatencadrulacesteilucrri.Sevacreaunproiectcunumelesemafor,
atenieladirectoruldelucru.
Proiectul va avea modulul top de tip schematic, iar celelalte vor fi simboluri
schematicecreatedincodVHDL.
nprimafazsevaproiectatcontrolerul,caidiagramaFSM,sevageneracodVHDL,
sevacreauntestbenchisevatestaprinsimulare.
n faza a doua se va proiecta blocul de numrare, se va crea un testbench pentru
acestaisevaverificafuncionarea.
nfazaatreiasevaproiectamodulululdedivizare,sevacreauntestbenchpentrua
acestaisevaverificaprinsimulare.
nceadeapatrafaz,ultima,secreazosursnounschematicitoatesimbolurile
schematice corespunztoare ficrui modul vor fi aduse n aceast surs i interconectate,
dupcaresepoatefaceimplementareaproiectului.

Pasul2:Proiectareaierarhic,creareasimbolurilornschematic

Proiectul poate fi descompus ierarhic n trei blocuri: partea efectiv de comand


(Controler), partea de contorizare (Num), carecontorizeaztimpiidetranziie(vezitabelul
T1) dintro stare n alta i partea de divizare a semnalului de clock care furnizeaz tact cu
perioada de 1 s. n figura 3 este prezentat o posibil conectare a celor trei module i
porturiledeintrare/ieirenecesare.

Proiectareacontrolerului

ParteadecontrolestedescriscaiFSMrespectndstrileitranziiiledintabelulT1. Sedeschide

utilitarul StateCad, Start>Programs>Xilinx ISE>Accessories>StateCad i se va proiecta


bloculconforminstruciunilordinintroducereateoreticiutilizndproceduriledelucrucu
diagramedestare,dejadeprinsenlaboratorulanterior.
Dup construirea diagramei de stri a controlerului aceasta va fi sintetizat, iar din
codulVHDLrezultatsevacreaunsimbolnschematic.Simulareafuncionalacontrolerului
sevafaceconformlucrrianterioare.
Atenie, nainte de generarea codului VHDL verificai ca acesta s fie compatibil cu
unealta de sintez (XST) a mediului ISE Xilinx, , astfel verificai urmtoarea setare: click pe
icoanaOptmize,Next]ntoateferestrelepnseajungelafereastracaiceadinfigura4,aici
seselecteazXilinxXST,next.

nfigura5esteprezentatdiagramadestrispecificcontroleruluidetrafic.
nfigura6suntprezentateformeledeundrezultatenurmasimulrii.


Figura3Descriereanschematicacontroleruluidetraficiablocurilorauxiliare

Figura4.OpiuneadesintezacoduluiVHDL


N<19

Normal
A_R<='0';
A_G<='0';
A_V<='1';
DS_R<='1';
DS_G<='0';
DS_V<='0';
EN<='0';

SEN='0'
Verificare
A_R<='0';
A_G<='0';
A_V<='1';
DS_R<='1';
DS_G<='0';
DS_V<='0';
EN<='1';

SEN='1'

N<4

start6
A_R<='0';
A_G<='0';
A_V<='1';
DS_R<='1';
DS_G<='0';
DS_V<='0';
EN<='1';

N=19

S1
A_R<='0';
A_G<='1';
A_V<='0';
DS_R<='1';
DS_G<='0';
DS_V<='0';
EN<='0';

start1
A_R<='0';
A_G<='0';
A_V<='1';
DS_R<='1';
DS_G<='0';
DS_V<='0';
EN<='1';

N=4

N<4

S5
A_R<='0';
A_G<='1';
A_V<='0';
DS_R<='1';
DS_G<='0';
DS_V<='0';
EN<='0';

N=4

N<4

reset='0'

reset='1'

start2
A_R<='0';
A_G<='1';
A_V<='0';
DS_R<='1';
DS_G<='0';
DS_V<='0';
EN<='1';

R
A_R<='1';
A_G<='1';
A_V<='1';
DS_R<='1';
DS_G<='1';
DS_V<='1';
EN<='1';

S2
A_R<='1';
A_G<='0';
A_V<='0';
DS_R<='1';
DS_G<='0';
DS_V<='0';
EN<='0';

start5
A_R<='0';
A_G<='1';
A_V<='0';
DS_R<='1';
DS_G<='0';
DS_V<='0';
EN<='1';
N<4
N=4

N[4:0]

S4
A_R<='1';
A_G<='0';
A_V<='0';
DS_R<='0';
DS_G<='1';
DS_V<='0';
EN<='0';

N=4

start3
A_R<='1';
A_G<='0';
A_V<='0';
DS_R<='0';
DS_G<='0';
DS_V<='1';
EN<='1';

S3
A_R<='1';
A_G<='0';
A_V<='0';
DS_R<='0';
DS_G<='0';
DS_V<='1';
EN<='0';

N=9

start4
A_R<='1';
A_G<='0';
A_V<='0';
DS_R<='0';
DS_G<='1';
DS_V<='0';
EN<='1';

N<9

Figura5.DiagramadestriicorespunztoarepriidecomandaControleruluideTrafic

Figura 6. Formele de und de la ieirea controlerului de trafic

Proiectareacontorului
BloculdenumrareestedescrisnVHDL.Oposibildescrierepoateartacaiceadinfigura
7. La fiecare impuls de activare primit de la controler acest bloc se va reseta i va ncepe o nou
secvendenumrare.

Figura7.CodVHDLcorespunztorbloculuidecontorizare

Proiectareadivizorului
BloculdedivizareestedescrisnVHDL.Oposibildescrierepoateartacaiceadinfigura8.
Semnaluldeclockde50MHzestedivizatcuunfactorde50.000.000,astfelobinnduseunsemnal
cuperioadade1s.

libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entitydivis
Port(clock:inSTD_LOGIC;

ledg:outstd_logic;

reset:instd_logic;

clock_div_1hz:bufferSTD_LOGIC;

clock_div_1khz:bufferSTD_LOGIC);
enddiv;

architectureBehavioralofdivis

signaldiv2:integer;

begin
p2_1s:process(reset,clock,div2)

begin

ifreset='1'then

div2<=0;

clock_div_1Hz<='0';

elsifclock'eventandclock='1'then

div2<=div2+1;

endif;

ifdiv2=25000000then

clock_div_1hz<='1';

elsifdiv2=50000000then

clock_div_1hz<='0';

endif;

ifdiv2=50000000then

div2<=0;

endif;
endprocess;
ledg<='1';
endBehavioral;
Figura8.CodVHDLcorespunztorbloculuidedivizare

Pasul4:Implementareaitestareaproiectului

Se v urmrii pas cu pas desfurarea lucrrii, conform indicaiilor din paragrafele


anterioareisevaverificacatoatestrileicondiiiledescrisentabelulT1sfieatinse
deautomatuldestriproiectat.
Simulareamodulelorvafifcutseparatpentrufiecaremodulnparte,lafrecvenade
clock implicit a simulatorului. Numai n faz de implementare se va stabilii divizarea
realcu50x10*6,pentruaobineclockulcuperioadade1s.Obligatoriusevaefectua
simulareafuncionalafiecruimodulpentruaverificacorectitudineacodurilorVHDL.
LaimplementarepiniiFPGAuluivorfialeiastfelnct,pentrufiecareculoareacelor
dou semafoare s avem asociat un LED, pentru reset s avem asociat un buton, iar
pentrusenzoruncomutator,ovariantposibilarputeaartacaiceadinfigura9.

NET"clock"LOC="P182";
NET"reset"LOC="P3" ;#BTN1
NET"sen"LOC="P23";#SW1
NET"A_R"LOC="P111";#LED1
NET"A_G"LOC="P109";#LED2
NET"A_V"LOC="P102";#LED3
NET"DS_R"LOC="P100";#LED4
NET"DS_G"LOC="P98";#LED5
NET"DS_V"LOC="P96";#LED6
NET"clk_1s"LOC="P89";#LED7vizualiretact1s,
NET"ledg"LOC="P45";#ACTIVARELEDuri
Figura9.ConstrngeriaplicatepinilorcircuituluiFPGA

ParteaaIIa

naceastparte,funciileproiectuluivorfiextinse.Astfel,sedoretevizualizarepeafiajul7
segmenteaintervalelordetimpcontorizate,de5,10respectiv20s.Pentruaceastaproiectul
vasuferiictevamodificri.naceastparteestenecesarcaintervaluldetimpde20dess
fieafiatpedoucaractereseparatealeafiajului,aceastapresupunecontrolulseparatal
caracterelor.,detaliivorfioferitenurmtorulparagraf.

Prezentaremoddelucruafiaj7segmente

PlacaDIO4conineunafiaj7segmentepepatrucaractere,cuanodcomun.Ceiapteanozi
ai celor apte segmente care alctuiesc un caracter sunt conectai la un punct comun notat AN.
Conectnd la 0 sau 1 logic acest punct comun, fiecare caracter va putea fi activat n mod
independent. Catozii segmentelor similare de la toi cei patru digii ai afiajului sunt conectai
mpreun,avndastfelaptecircuiteindependente.Astfelfiecarecatodalcelorpatrudigiipoatefi
activat sau dezactivat independent. Prin aceast schem de conexiuni sa obinut un afiaj
multiplexat, n care comandnd succesiv semnalele comune anozilor i trimind n mod repetat
secvena corespunztoare catozilor fiecrui digit, se obine afiarea pe patru caractere. Schema de
conectareaanoziloricatozilor,precumisecvenadeactivareaaacestoraesteprezentatnfigura
10.Tiparulcareseapliccatozilorpentruafiarea7segmenteestecelcunoscut.
Pentru ca fiecare din cele patru caractere s fie iluminat n mod continuu i intensitatea
iluminriisfiecorespunztoare,secvenadedatetrebuieremprosptatlafiecare1pnla16ms,
vezifigura10.

Figura10Schemadeconectareanozi,catoziisecvenadeactivareaacestora

Pasul5:Modificareaproiectului

Proiectareabloculuidedecodificare/multiplexare

Diagramanschematicdinfigura3vafimodificatprinadugareaunuinoubloc,vezifigura
11, care are rol de decodificare 7segmente i de multiplexare a semnalului pentru afiajul de pe
placadetestDIO4.

Figura11.Descriereanschematicacontroleruluidetraficiablocurilorauxiliare

CodulVHDLcorespunztorbloculuiBCD(binarcodificatzecimal)7segmente,esteprezentatnfigura
12.

modulVHDLdeconversieBCDintreg7_segmnentesiafisarepepatrucaractere
placaDigilentDIO4
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
useIEEE.NUMERIC_STD.ALL;
entitybcd_to_7segis

port(

clock:instd_logic;

reset:instd_logic;

c1:instd_logic_vector(3downto0);

c2:instd_logic_vector(3downto0);

c3:instd_logic_vector(3downto0);

c4:instd_logic_vector(3downto0);

an1:outstd_logic;

an2:outstd_logic;

an3:outstd_logic;

an4:outstd_logic;
10

dp:outstd_logic;

seg_out:outstd_logic_vector(6downto0)
);
endbcd_to_7seg;
architectureBehavioralofbcd_to_7segis

functiedeconversiedinbinarinintreg

functionvec2int(x:std_logic_vector)returnintegeris

variableresult:integer;

begin

result:=0;

foriinx'rangeloop

result:=result*2;

casex(i)is

when'0'=>null;

when'1'=>result:=result+1;

whenothers=>null;

endcase;

endloop;

returnresult;

endvec2int;

functiedeconversiedinintregin7segmente

functionint7seg(x:integer)returnstd_logic_vector is

variabledis7seg:std_logic_vector(6downto0);

begin

ifx=0thendis7seg:="0111111";

elsifx=1thendis7seg:="0000110";

elsifx=2thendis7seg:="1011011";

elsifx=3thendis7seg:="1001111";

elsifx=4thendis7seg:="1100110";

elsifx=5thendis7seg:="1101101";

elsifx=6thendis7seg:="1111101";

elsifx=7thendis7seg:="0000111";

elsifx=8thendis7seg:="1111111";

elsifx=9thendis7seg:="1101111";

elsedis7seg:="0001000";

endif;

returndis7seg;

end;

signalseg_out1:std_logic_vector(6downto0):="0000000";
signalseg_out2:std_logic_vector(6downto0):="0000000";
signalseg_out3:std_logic_vector(6downto0):="0000000";
signalseg_out4:std_logic_vector(6downto0):="0000000";
signalcount2:std_logic_vector(1downto0):="00";
begin

display:process(clock,reset)

begin

ifreset='1'then

an1<='0';an2<='0';an3<='0';an4<='0';dp<='0';
11

seg_out<=notint7seg(8);

count2<="00";

elsifclock='1'andclock'eventthen

count2<=count2+1;

seg_out4<=int7seg(vec2int(c4));
seconverteste7segmentefiecaredigitinparte

seg_out3<=int7seg(vec2int(c3));

seg_out2<=int7seg(vec2int(c2));

seg_out1<=int7seg(vec2int(c1));

ifcount2="00"thensemultiplexeazsemnalulpentrucele4caractere

seg_out<=notseg_out1;

an1<='0';an2<='1';an3<='1';an4<='1';dp<='1';

elsifcount2="01"then

seg_out<=notseg_out2;

an1<='1';an2<='0';an3<='1';an4<='1';dp<='0';

elsifcount2="10"then

seg_out<=notseg_out3;

an1<='1';an2<='1';an3<='0';an4<='1';dp<='1';

elsifcount2="11"then

seg_out<=notseg_out4;

an1<='1';an2<='1';an3<='1';an4<='0';dp<='1';

endif;

endif;

endprocess;
endBehavioral;

Figura12.ModulVHDLdeconversieBCDintreg7_segmnentesiafisarepepatrucaractere

nacestmodulsefaceodescriereadoufuncii.Primaestedeconversiedinbinarnvaloare
ntreag,iarceadeadouadescriedecodificatorul7segmentesubformadefuncie.Acestefuncii
vorfiaplelatesimultannarhitectur,vezizonacurou.Odatsefaceoconversienvaloarentreag
asemnaluluidelacelepatruintrribinareC14,funciavec2int,dupcaresefaceconversiancod7
segmente,funciaint7seg.Semnalelerezultateseg_out14,vorfiapoimultiplexate,conformfigurii
itrimiselaafiajul7segmente.

Potrivit celor menionate ntrun paragraf anterior acest bloc va avea nevoie s fac
multiplexare ntrun interval de minim 1ms i maxim 16 ms. Din figura 11 se poate observa c
intrareadeclockabloculuidedecodificare/multiplexareprovinedelaoadouaintrareabloculuide
divizarecareasigurunsemnalcuperioadade1ms,respectivfrecvenade1kHz.

CodulVHDLdinfigura12vafitestaprinsimularefuncional,sedescrieuntestbench,dup
caresevageneraunsimbolnschematic,simbolcevafiadugatladiagramadinfigura3.

Se poate observa c n aceast lucrare, doar dou dintre intrrile binare C3, C4 vor fi
conectatelabloculdenumrare,celelaltedouvorficonectatelamas,astfelcpecaracterele1i
2vafiafiatvaloarea0.
Atenie!!!CndseadaugsimbolurileGND(mas)seddubluclickpeacesteaincmpulvaluese
definesccafiindpe4bii,seadaug(3:0).

Dindiagrama3sepoateobservacauaprutporturinoiilacelelalteblocuri.

Modificaredivizorului

n figura 13 este prezentat codul VHDL modificat corespunztor blocului de divizare.


Modificrilesuntevideniatecu,culoareroie.Sepoateobservacafostadugatncunblocproces
12

carerealizeazdivizareasemnaluluideclockcuvaloareantreag50.000,astfelnctsevaobineun
semnaldeieirecufrecvenade1kHz.Acestsemnaldivizatvaconstituisemnaluldetactalblocului
dedivizare/multiplexare.

Odatcodulmodificat,acestavafiresintetizatisevacreadinnousimbolulnschematic.

libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entitydivis
Port(clock:inSTD_LOGIC;

ledg:outstd_logic;

reset:instd_logic;

clock_div_1hz:bufferSTD_LOGIC;

clock_div_1khz:bufferSTD_LOGIC);
enddiv;
architectureBehavioralofdivis

signaldiv1:integer;

signaldiv2:integer;

begin
p1_1ms:process(reset,clock,div1)

begin

ifreset='1'then

div1<=0;

clock_div_1kHz<='0';

elsifclock'eventandclock='1'then

div1<=div1+1;

endif;

ifdiv1=25000then

clock_div_1khz<='1';

elsifdiv1=50000then

clock_div_1khz<='0';

endif;

ifdiv1=50000then

div1<=0;

endif;
endprocess;
p2_1s:process(reset,clock,div2)

begin

ifreset='1'then

div2<=0;

clock_div_1Hz<='0';

elsifclock'eventandclock='1'then

div2<=div2+1;

endif;

ifdiv2=25000000then

clock_div_1hz<='1';

elsifdiv2=50000000then

clock_div_1hz<='0';

endif;

ifdiv2=50000000then

div2<=0;

endif;

endprocess;
ledg<='1';
endBehavioral;
Figura13.CodVHDLmodificat,corespunztorbloculuidedivizare,Div

13


Modificareacontorului

Dinfigura11sepoateobservacbloculdecontorizarenumaredouieirisuplimentarecare
sunt conectate ca i intrri la blocul de multiplexare/afiare. Codul VHDL modificat al blocului de
contorizareesteprezentatnfigura14.
Cu culoare roie sa evideniat codul introdus suplimentar. Pentru a nu fi necesar o conversie din
binarnBCDavaloriidatedenumrtorulcecontorizeazintervalele5,10,20s,saufcutuncontor
BCDnparalel,veziproceseleP1iP2.Aufostnecesaredouprocese,pentruvalorimaimaridect
9,astfelprimulprocesestepentrucifraunitilor,iarceldealdoileaestepentrucifrazecilor.Lafels
arputeaextindepentrucifrasuteloriamiilor,etc.

OdatfcutemodificrilencodulVHDL,acestapoatefisimulat,secreeazuntestbench,se
resintetizeazisecreeazdinnousimbolulnschematic.

libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entitynumis
Port(clock:inSTD_LOGIC;
reset:inSTD_LOGIC;
en:inSTD_LOGIC;

c1:outSTD_LOGIC_VECTOR(3downto0);

c2:outSTD_LOGIC_VECTOR(3downto0);
n:outSTD_LOGIC_VECTOR(4downto0));
endnum;
architectureBehavioralofnumis
signalcount:std_logic_vector(4downto0);
signalcount1_bcd:std_logic_vector(3downto0);
signalcount2_bcd:std_logic_vector(3downto0);

begin

p1_c1_bcd:process(clock,reset)
begin
ifreset='1'then

count1_bcd<=(others=>'0');
elsifclock='1'andclock'eventthen
ifen='1'then

count1_bcd<=(others=>'0');
else

count1_bcd<=count1_bcd+1;
endif;
ifcount1_bcd="1001"then

count1_bcd<="0000";
elsenull;
endif;
endif;
endprocess;

p2_c2_bcd:process(clock,reset)
begin
ifreset='1'then

count2_bcd<=(others=>'0');
elsifclock='1'andclock'eventthen

ifen='1'then

count2_bcd<=(others=>'0');

elsifcount1_bcd="1001"then

14

count2_bcd<=count2_bcd+1;

elsenull;

endif;

ifcount2_bcd="1001"then

count2_bcd<="0000";

elsenull;

endif;

endif;
endprocess;

p3_num_bin:process(clock,reset)
begin
ifreset='1'then
count<=(others=>'0');
elsifclock='1'andclock'eventthen

ifen='1'then
count<=(others=>'0');
else
count<=count+1;
endif;

endif;

endprocess;

n<=count;
c1<=count1_bcd;
c2<=count2_bcd;

endBehavioral;
Figura14.CodVHDLmodificat,corespunztorbloculuidecontorizare,Num

Pasul6:Reimplementareaitestareaproiectului

Sevurmriipascupasdesfurareaetapelorindicatenpasul5.
Simulareamodulelorvafifcutseparatpentrufiecaremodulnparte
La implementare se va modifica fiierul UCF, adugnduse constrngerile
corespunztoareafiajului7segmente,figura15.

NET"an1"LOC="P41";#activareprimulcaracter
NET"an2"LOC="P40";#activarealdoileacaracter
NET"an3"LOC="P36";#activarealtreileacaracter
NET"an4"LOC="P35";#activarepatruleacaracter
NET"seg(0)"LOC="P22";#segmentul"a"alafisajului7seg
NET"seg(1)"LOC="P20";#segmentul"b"alafisajului7seg
NET"seg(2)"LOC="P17";#segmentul"c"alafisajului7seg
NET"seg(3)"LOC="P15";#segmentul"d"alafisajului7seg
NET"seg(4)"LOC="P10";#segmentul"e"alafisajului7seg
NET"seg(5)"LOC="P8";#segmentul"f"alafisajului7seg
NET"seg(6)"LOC="P6";#segmentul"g"alafisajului7seg
NET"dp"LOC="P4";
#caracterulpunct
Figura15.ConstrngeriaplicatepinilorcircuituluiFPGA

15

Activitisuplimentare
- Sevormodificaintervaleledetimpdintretranziii;
- Sevorafiavalorialeatoarepeceledoucaracterenefolositealeafiajului,pentruaseverifica
controlulindependentalacestora;
- Sevamodificamodululdecontorizareastfelnctlatranziiadintrestrisfieafiatvaloarea
final(ex.5,10,20)aintervaluluidetimp,iaraceastassedecrementeze.Astfelnctssetie
anticipatctdureazintervaluldeateptaredintredoutranziii.

16

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