simularea unei intersectii semaforizate folosind vhdl

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

Upload: tudor-andrei-catalin

Post on 25-Jun-2015

1.456 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: 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”.

Page 2: Simularea unei intersectii semaforizate folosind 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.

Page 3: Simularea unei intersectii semaforizate folosind vhdl

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

Page 4: Simularea unei intersectii semaforizate folosind vhdl

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.

Page 5: Simularea unei intersectii semaforizate folosind vhdl

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

Page 6: Simularea unei intersectii semaforizate folosind vhdl

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

Page 7: Simularea unei intersectii semaforizate folosind vhdl

� Sunteti interogati daca doriti crearea unei surse noi pentru proiect. Intrucat fisierul sursa va

fi adaugat ulterior in proiect, veti alege optiunea Next.

Page 8: Simularea unei intersectii semaforizate folosind vhdl

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

Page 9: Simularea unei intersectii semaforizate folosind vhdl

� 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

Page 10: Simularea unei intersectii semaforizate folosind vhdl

� 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:

Page 11: Simularea unei intersectii semaforizate folosind vhdl

� 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 :

Page 12: Simularea unei intersectii semaforizate folosind vhdl

� 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:

Page 13: Simularea unei intersectii semaforizate folosind vhdl

� In mod analog, se completeaza liniile de cod generate automat, dupa cum urmeaza :

Intre liniile

se introduc :

Intre liniile de cod :

se introduc :

Page 14: Simularea unei intersectii semaforizate folosind vhdl

Intre liniile de cod :

se introduc :

Page 15: Simularea unei intersectii semaforizate folosind vhdl

� Fisierul sursa VHDL al masinii de stare ar trebui sa arate astfel :

Page 16: Simularea unei intersectii semaforizate folosind vhdl

� Se executa verificarea codului astfel : in tab-ul Processes se selecteaza Synthesize – XST

si apoi dublu click pe Check Syntax

Page 17: Simularea unei intersectii semaforizate folosind vhdl

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

Page 18: Simularea unei intersectii semaforizate folosind vhdl

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

Page 19: Simularea unei intersectii semaforizate folosind vhdl

� Setam apoi valorile pentru ceas, respectiv lungimea initiala a testului astfel :

Page 20: Simularea unei intersectii semaforizate folosind vhdl

� 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 :

Page 21: Simularea unei intersectii semaforizate folosind vhdl

� 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 :