Sunteți pe pagina 1din 3

TC7 (ultima!

Termen limita: 23 aprilie 2008, 10pm

Problema 1: Se considera automatul finit asociat automatului cu stiva (push-down automaton) care, pornind din
starea initiala, recunoaste sirurile de forma: 0n1n, unde n>0 (siruri formate dintr-un numar oarecare de 0-uri urmate de
tot atatea 1-uri). Automatul are doua stari finale, una semnifica recunoasterea sirului si alta semnifica faptul ca sirul nu
este recunoscut.
Se cere:
1. sa se defineasca organigrama automatului finit de tip Mealy asociat automatului cu stiva
2. sa se descrie in Verilog automatul definit la punctul anterior.
Succes in continuare!

Problema 1:
1. Graficul pentru un automat Mealy ce recunoaste siruri de forma 0n1n,
unde n>0 (siruri formate dintr-un numar oarecare de 0-uri urmate de tot atatea 1-uri).
Automatul are 2 stari finale : “final” pentru cazul in care s-a recunoscut sirul cautat si “eroare” in caz ca
sirul nu este cel cautat .
Pe langa cele 2 stari finale se mai regasesc inca 3 si anume: starea initiala ce gaseste primul zero, starea
unu cu rolul de a inumara zerourile consecutive si starea doi ce inumara valorile de unu consecutive in functie de
numarul zerourilor consecutive prin decrementarea unui counter care are rol de indicator (asemanator indicatorului de
pozitie intr-o stiva).
Se observa ca pentru starea 2 (q2) avem doua valori de iesire: 1 sau 0 ( final sau eraoare )  automat
Mealy.

1
2. Descrierea in Verilog a automatului de la punctual 1:
module mealy_automaton (out ,in ,reset ,clock);
parameter o=1’b1;
zero=8’b00000000;
parameter init_state=3’b000;
one_state=3’b001;
sec_state=3’b010;
er_state=3’b111
final_state=3’b110;

parameter no=1’b0;
yes=1’b1;
input in ,reset ,clock;
output out
reg [2:0] state;
reg [7:0] count;
reg out;
always @(posedege clock)
if(reset) {
count=zero;
state <=init_state;}
else case(state)

init_state :
if(in==o) state<= init_state;
else state<= one_state;
one_state :
{count=count +1;
if(in==o) state<=sec_state;
else state<= one_state;
}
sec_state :
{ count=count -1;
if(count==zero) if (in==o) state<=er_state;
else state<=final_state ;
else if(in== o) state<= sec_state;
else state<=er_state;
}
er_state: state<=init_state;
final_state: state<=final_state;
default state<=3’bx;
endcase

always@(state or in) case (state)


init_state: out=no;
one_state: out=no;
sec_state:
er_state: out=no;
final_state: out=yes;
default out=1b’x;
endcase
endmodule

Descrierea Verilog cuprinde 5 stari definite ca parametrii :


 stare initiala

2
 starea unu in care s-a receptat primul 0 si in care se incrementeaza un registru cu rolul de a retine
numarul de zerouri consecutive ( reg count)
 starea doi in care s-a receptat primul 1, aici se decrementeaza registrul de contorizare al numarului de
zerouri .Daca registrul dupa decrementare contine o valoare nenula si se primeste pe intrare 0 inseamna
ca sirul nu respecta conditia sirului cautat de noi( nr egali de 0 si 1) ,iar starea sistemului trece in starea
de eroare (iesirea=0),la fel se intampla in cazul in care registru e nul si se primeste pe intra valoarea 1.In
cazul in care registru e nul si se primeste valoarea 0 sistemul recunoaste sirul cautat si trece in starea
finala( iesire =1) ,pentru cazul registrului ce contine o valoare nenula si primeste pe intrare valoarea 1
sistemul reia decrementarea counterului( registrului )- sistemul ramane in starea doi considerandu-se ca
nu s-au introdus suficienti biti cu valoarea 1
 starea de eroare ,pe iesire avem valoarea 0
 starea finala ,in care sirul cautat a fost gasit ,pe iesire avem valoarea unu

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