Documente Academic
Documente Profesional
Documente Cultură
Lab3 PSD Semafor
Lab3 PSD Semafor
UniversitateaTehnica a Moldovei
FacultateaMicroelectronicasiIngineriaBiomedicala
Raport
Lucrare de laborator Nr.3
Disciplina :Prelucrareasemnalelordigitale
Tema: Proiectareaautomatelor finite
Chisinau 2014
Scopullucrarii:
1.Definirea unui automat.
2.Proiectarea deagramelor de stari.
3.Codificarea starilor.
4.Implimentarea automatelor in Verilog.
Sarcinalucrarii:
Sa se proiecteze un automat care varealizafunctionareaunuisemafor care
vaopritraficulautomobilelor in cazul in care un pietonvalansa o cerereprinapasareaunuibuton.
Dupa o perioadaprestabilitavatrece in stareaintermediaraverdepentru automobile.
Date teoretice:
Un automat finit (AF) sau o "mașină cu un numărfinit de stări" este un model de
comportamentcompus din stări, tranzițiișiacțiuni. O stare stocheazăinformațiidespretrecut,
adicăreflectăschimbărileintrării de la inițializareasistemuluipânăînmomentul de față. O
tranzițieindică o schimbare de stare șiestedescrisă de o condiție care estenevoiesă fie
îndeplinităpentru a declanșatranziția. O acțiuneeste o descriere a uneiactivitățiceurmează a fi
executată la un anumit moment. Existăcâtevatipuri de acțiuni:
Acțiune de intrare - executată la intrareaîntr-o stare
Acțiune de ieșire - executată la ieșireadintr-o stare
Acțiune de intrare de date - acțiuneexecutatăînfuncție de stareaprezentăși de datele de intrare
Acțiune de tranziție - acțiuneexecutatăînmomentuluneitranziții
AF poate fi reprezentatprintr-o diagramă de stări (saudiagramă de stărișitranziții) ca înfigura 1. În
plus, se folosescșitabele de tranziție. Ceamaicomunăreprezentareestedatămaijos:
combinațiastăriicurente (B) șicondiției (Y) dăstareaurmătoare (C). Informații complete
privindacțiunile pot fi adăugatedoar ca note de subsol.
yellow
red-yellow
green
Butonsi
red
green-
yellow
yellow
Stare R Y G RpGp
000 Y1 0 1 0 1 0
001 G 0 0 1 1 0
011 GY 0 1 1 1 0
010 Y2 0 1 0 1 0
110 R 1 0 0 0 1
100 RY 1 1 0 1 0
Modul de lucru:
1.Proiectarea dispozitivuluipropus
2.Rezolvare problemei cu referinta la notiuniteoretic
CodulSursa:
module Semafor_St(ck,rst,button,Red,Gr,Y,Rp,Gp);
input ck,rst; // semnalul de clock si de resetare
input button; // Butonul pentru schimbarea culorii
output Red,Gr,Y,Rp,Gp; // Variabile de iesire pentru diferite stari
reg Red,Gr,Y,Rp,Gp; // Initializarea registrului pentru culori
wire T_Out;
always@(negedge ck or posedge rst) //De fiecare data cind front negativ “ ck “ si pozitiv “ rst”
if (rst) //Daca este reset punem in starea intermediara Galben
begin
STATE<=Y1_STATE; //Atribuim registrului starea galbena intermediara
TIMER<=T_Y1; //Atribuim registrului timer timpul de retinere pentru galben
end
else if (T_Out) //Asteptam timpul T_Out si se seteaza a doua stare
case (STATE) //Daca starea este Y1 se face tot ce este dupa begin
Y1_STATE :
begin
STATE<=G_STATE; // Atribuim registrului stare galben intermediar
TIMER<=T_G; //Atribuim registrului timer timpul de retinere pentru galben
end
G_STATE : //Daca este stare Green se executa comenzile de mai jos
if(button) begin
STATE<=GY_STATE; //Atribuim registrului stare valoarea de trecere galben -verde
TIMER<=T_GY; //Atribuim registrului timer timpul de retinere pentru galben-verd
end
GY_STATE : //Daca este stare Geen Yellow se executa comenzile de mai jos
begin
STATE<=Y2_STATE; // Atribuim registrului stare valoarea culorii galben intermediar
TIMER<=T_Y2; // Atribuim registrului timer timpul de retinere Galben2
end
Y2_STATE : // Daca este stare Yellow2 se vor executa comenzile de mai jos
begin
STATE<=R_STATE; // Atribuim registrului stare valoarea culorii Rosu
TIMER<=T_R; // Atribuim registrului timer timpul de retinere Rosu
end
R_STATE : //Daca este stare Rosu se vor executa comenzile de mai jos
begin
STATE<=RY_STATE; //Atribuim registrului stare de trecere Rosu- Galben
TIMER<=T_RY; // Atribuim registrului time timpul de retinere ROsu Galben
end
default : // Daca nu este nici un caz se executa comenzile de mai jos
begin
STATE<=Y1_STATE; //Atribuim registrului de stare valoare culorii galben
TIMER<=T_Y1; //Atribuim registrului timer timpul de retinere Galben
end
endcase
else
TIMER<=TIMER-1; // Decrementarea Timerului
endmodule
Test Bench:
module Test_Semafor;
initial
ck=0; // Setez clock in “0”
always#5 ck=~ck; //Fac o asteptare de 5 tacte dupa schimb starea clock
initial begin
rst=1; //Atribui variabilei reset valoarea “1 “
#10 rst=0; // Fac o asteptare de 10 unitat de timp dupa atribui variabilei rst 0
#20 rst=1; //Fac o asteptare de 20 unitati de timp dupa atribuim variabliei rst 1
end
initial begin
button=0; //Atribuim butonului valoarea “ 0 “
#500 button=1; //Fac o asteptare de 500 unitati de timp dupa atribuim butonului “ 1”
#100 button=0; // Fac o asteptare de 100 unitati de timp dupa atribuim butonului “ 0”
end
Semafor_St S(ck,rst,button,Red,Gr,Y,Rp,Gp);
always
begin
#10 $monitor("Red=%b,Gr=%b,Y=%b,Rp=%b,Gp=%b",Red,Gr,Y,Rp,Gp); // Afisez rezultatul
// programului pe monitor
end
endmodule
Rezultatulsintetizarii in Leonardo Spectrum:
Concluzie:
In urmaefectuariiacesteilucrari de laborator am avutdreptscop de a construi un automat
finit, drept un automat finitnoi am luat un semafor. Pentru a proiectaacest automat noi am
fostnevoitisafacemdeagrama de stariapoi un tabel de stari in care in dependenta de stare
saaprindemculoareanecesara.
Am avutnevoiesi de un program de simulare cum este Leonardo pentru a
simulaprogramulpropriuzissi a vedeamarimeacircuitelor. In acest program am gasitnisteeroripe
care nu le-a gasitcalculatorul de asemenea am obtinutsicircuitul electric principial al
schemeinoastre.In final avind un rezultatpe care lam asteptat.