Simularea Unei Intersectii Semaforizate Folosind VHDL
Transcript of Simularea Unei Intersectii Semaforizate Folosind VHDL
Lab
Semafor (Traffic Light Controller)
30
Numele : _________________________ Grupa : ____________ Data : _______________
Obiective:
Dupa terminarea acestui exercitiu de laborator se dobandesc cunostintele necesare pentru a
proiecta, simula, si implementa un semafor de trafic folosind VHDL.
Referinte:
Dueck Robert K., „Digital Design with CPLD Applications and VHDL”.
Capitolul 10: Designul masinii algoritmice de stare
10.3 Masini algoritmice de stare cu semnale de control
10.6 Semaforul de trafic
Materiale necesare:
FPGA Spartan 3
Xilinx ISE
Modeltech ModelSim
Note experimentale:
Proiectarea masinii algoritmice de stare consta intr-un circuit secvential sincron a carui
stare progreseaza in functie de proiectul mostenit al masinii si posibil in conformitate cu starea
unui semnal de control.
O masina algoritmica de stare, comuna, este semaforul de trafic.O diagrama de stare si o
descriere a operarii acestei masini este data in sectiunea 10.6 a manualului „Digital Design with
CPLD Applications and VHDL”.
Procedeul experimental:
Un semafor de trafic simplu poate fi implementat cu ajutorul unei masini algoritmice de
stare care are o diagrama de stare asemanatoare celei din figura 30.1.
Circuitul detine control asupra drumului Nord-Sud si al celui Est-Vest. Luminile de la NS
sunt controlate cu ajutorul iesirilor nsr, nsy si nsg(NS rosu, NS galben, NS verde). Drumul EV este
controlat cu ajutorul iesirilor evr, evy si evg, intr-un mod similar.
Ciclul este controlat cu ajutorul unei intrari denumite TIMER(cronometru) care controleaza
lungimea a doua cicluri de verde (s0 reprezinta EV verde; s2 reprezinta NS verde). Cand
cronometrul TIMER=1, o translatie de la s0 la s1 sau de la s2 la s3 este posibila. Aceasta translatie
este acompaniata de o schimare a culorii semaforului de la verde la galben, pe drumul activ.
Figura 30.1 Schema de stare pentru un semafor de trafic
Semaforul de pe celalat drum ramane rosu. O translatie neconditionata urmeaza, schimband
lumina semaforului din galben in rosu pe un drum iar pe celalat lumina rosie devine verde.
Iesirile din diagrama de stare a figurei 30.1 sunt indicate ca fiind 0-logic-activ, care este
potrivit pentru placile Spartan 3.
Ciclul poate fi setat sa aiba orice durata prin schimbarea semnalului dat de intrarea TIMER-
ului. Lumina galbena a semaforului va fi aprinsa, indiferent de setari timp de un puls de ceas.
Pentru fiecare observatie vom folosi un ciclu de 10 implusuri de ceas pentru fiecare drum:
• 4 impulsuri verde
• 1 impuls galben
• 5 impulsuri rosu
Acesta poate fi realizat utilizand un numarator modulo-5, asa cum e aratat in figura 30.2.
Divizorul de ceas aduce frecventa oscilatorului intern in domeniul vizibil al observarii
pentru placa noastra CPLD. Un numarator pe 25 de biti este folosit pentru placa Altera UP-2, care
are un oscilator intern cu o frecventa de 25.175 Mhz. Un numarator pe 22 biti este protrivit pentru
placile RSR PLDT-2 sau DeVry eSOC, care fiecare in parte au cate un oscilator intern cu o
frecventa de 4 Mhz. Calculati frecventa ceasului masinii algoritmice de stare pentru prorpia place
CPLD.
f = ______________
Desenati diagrama de timp a numaratorului mod-5 in spatiul oferit :
CLK
Q0
Q1
Q2
Cum seteaza numaratorul durata luminii verzi pentru 4 impulsuri de ceas ?
___________________________________________________________________________
___________________________________________________________________________
Figura 30.2 Diagrama logica pentru un semafor de trafic
Crearea unui semafor de trafic in VHDL:
1. Se creaza un fisier VHDL pentru a implementa diagrama de stare a unui semafor de trafic
din figura 30.1, in combinatie cu numaratorul modulo-5, dar fara divizorul de ceas.
Modulele individuale si ierarhia de tip top-level se realizeaza in VHDL.
2. Creati o simulare in care sa aratati combinatia dintre controller-ul de iesire si ciclul de ceas.
Aratati graficile iesirii profesorului.
3. Adaugati un divizor de ceas fisierului VHDL pentru semaforul de trafic, asa cum este aratat
in diagrama logica din figura 30.2. Setati latimea divizorului de ceas la 22, respectiv 25.
Legati pinii designului astfel incat luminile EV sa corespunda LED-urilor de la 9 pana la
11. Legati un pin la ceasul masinii algoritmice de stare, pentru a putea fi observat direct, si
face-ti-l sa corespunda led-ului 16. Dezactivati toate celelalte leduri. Asigurati-va ca iesirile
controllerului sunt la nivelul activ corect pentru LED-urile de pe placa CPLD in cauza.
4. Descarcati fisierul in placa CPLD si demonstrati functionarea instructorului.
Introducere in VHDL:
VHDL (abrevierea VHSIC HDL) este acronimul folosit pentru Very High Speed Integrated
Circuit Hardware Description Language.
Este vorba despre un limbaj de descriere a hardware-lui (Hardware Description Language -
HDL), destinat descrierii comportamentului si/sau arhitecturii unui "modul" electronic logic, cu
alte cuvinte al unei functiuni logice combinatorii si/sau secventiale.
Alaturi de Verilog, este cel mai utilizat limbaj de proiectare a sistemelor electronice digitale. E
una din uneltele principale pentru proiectarea circuitelor integrate moderne, aplicat cu succes in
campul microprocesoarelor (DSP, acceleratoare grafice), in telecomunicatii (TV, celulare),
automobile (navigatie, sisteme de control al stabilitatii) si altele.
La fel ca in orice limbaj evoluat de programare, proiectarea ierarhizata a aplicatiilor in VHDL
prin utilizarea modulelor permite descrierea proiectului pe mai multe nivele, imbunatateste
lizibilitatea si permite reutilizarea unor module.
Un proiect ierarhizat este alcatuit din mai multe module. O aplicatie poate fi descrisa la nivelul
cel mai de sus (top) printr-o sursa VHDL. In aceasta sursa se definesc interfete corespunzatoare cu
alte module situate pe nivele inferioare, module care descriu parti componente ale aplicatiei. Nu
exista o limita a numarului de nivele ierarhice pe care un proiect poate sa-l contina. Principalul
avantaj al proiectarii ierarhizate a unei aplicatii este acela ca incurajeaza modularizarea. Alt avantaj
este ca permite organizarea proiectului pe nivele corespunzatoare de abstractizare si detaliu precum
si reutilizarea unor module.
Creearea fisierului sursa VHDL a semaforului :
� Mai intai se lanseaza in executie aplicatia Xilinx ISE :
Se executa dublu-click pe iconita Xilinx ISE de pe Desktop
� Dupa ce aplicatia a pornit, cream un nou proiect astfel :
Din meniul FILE, alegem New Project
� In fereastra nou aparuta pe ecran, se completeaza campurile in functie de datele proiectului:
- numele proiectului;
- locatia unde va fi salvat proiectul;
- tipul proiectului
apoi se da Next.
Atentie! In numele proiectului nu vor fi lasate spatii libere; cuvintele vor fi unite prin linii
sau underline-uri. In caz contrar, programul va ridica o eroare.
� Se ajunge la fereastra setarilor proiectului in functie de dispozitivul pentru care va fi creat.
Se va alege:
- produs tinta: Spartan 3;
- simulator: Modelsim-XE VHDL;
- limbaj de programare: VHDL,
apoi se apasa butonul Next.
� Sunteti interogati daca doriti crearea unei surse noi pentru proiect. Intrucat fisierul sursa va
fi adaugat ulterior in proiect, veti alege optiunea Next.
� In continuare sunteti interogati daca doriti adaugarea unei surse deja existente, insa si de
aceasta data dam click pe Next.
� Apare fereastra ce prezinta sumarul proiectului. Apasam Finish.
� In partea din stanga sus a ecranului din cadrul aplicatiei, in tab-ul Sources , selectam la
Sources for : Implementation, dupa care click dreapta si alegem New Source.
� In fereastra aparuta completam cu numele sursei care va defini numaratorul (counter),
alegem locatia dorita su setam tipul pe VHDL Module
� In continuare se solicita introducerea porturilor de intrare/iesire folosite. Intrucat acestea
vor fi definite ulterior manual, apasam Next.
� Fisierul sursa al numaratorului este astfel generat in mod automat. Acesta cuprinde niste
comentarii marcate cu - - la inceputul de linie, afisate cu verde si cateva secvente de cod:
� In continuare vom prelucra codul sursa al numaratorului astfel :
Intre liniile de cod generate in mod automat anterior
se introduc urmatoarele :
care reprezinta porturile de intrare/iesire ale numaratorului.
Intre liniile de cod
se introduce linia
Intre liniile
se introduc :
� Daca ati urmarit pasii prezentati, fisierul sursa VHDL ar trebui sa arate dupa cum urmeaza :
� Procedand analog crearii fisierului sursa pentru numarator, vom crea un nou fisier sursa ce
va ajuta la impementarea masinii de stare:
� In mod analog, se completeaza liniile de cod generate automat, dupa cum urmeaza :
Intre liniile
se introduc :
Intre liniile de cod :
se introduc :
Intre liniile de cod :
se introduc :
� Fisierul sursa VHDL al masinii de stare ar trebui sa arate astfel :
� Se executa verificarea codului astfel : in tab-ul Processes se selecteaza Synthesize – XST
si apoi dublu click pe Check Syntax
� Daca nu exista greseli de sintaxa, ar trebui sa se afiseze mesajul „Process Check Syntax
completed successfully”. In caz contrar verificati codul sursa.
� Urmatoare etapa consta in testarea proiectului cu ajutorul unui „Test Bench”. Pentru
aceasta, selectam din tab-ul Sources, la Sources for : Behavioral Simulation.
� Inseram un nou fisier sursa, insa de aceasta data de tip „Test Bench Waveform” :
� Selectam fisierul sursa care dorim sa-l testam si dam click pe Next, respectiv Finish.
� Setam apoi valorile pentru ceas, respectiv lungimea initiala a testului astfel :
� In fereastra aparuta de definesc parametrii de intrare pentru test. In cazul nostru parametrul
clock este definit in mod implicit ca semnal de ceas si nu ne ramane decat sa initializam
reset la primul semnal de ceas, printr-un click pe markerul albastru :
� Salvam intregul proiect din meniul File ���� Save All sau dam click pe iconita:
� Din tab-ul Sources, la Sources for : Behavioral Simulation, selectam testul creat mai sus :
� In tab-ul Processes, la meniul Xilinx ISE Simulator, dam dublu-click pe Simulate
Behavioral Model :
� Daca s-a lucrat corect, rezlutatul simularii ar trebui sa fie dupa cum urmeaza :