Prezentarea se încărcă. Vă rugăm să așteptați

Prezentarea se încărcă. Vă rugăm să așteptați

Modelarea in VHDL a automatelor secventiale

Prezentări similare


Prezentarea pe tema: "Modelarea in VHDL a automatelor secventiale"— Transcriere de prezentare:

1 Modelarea in VHDL a automatelor secventiale
Finite state machines Modelarea in VHDL a automatelor secventiale

2 Tipuri de automate Un automat secvential are Tipuri: Intrari
Stari (un numar finit de stari) Iesiri Tranzitii dintr-o stare in alta Tipuri: Moore: iesirile depind doar de starea in care se afla automatul Mealy: iesirile depind atat de stare, cat si de intrari

3 Implementare in VHDL Se poate face cu
Un proces Doua procese Trebuie sa ne definim un tip stari (de tip enumerare) TYPE stari IS (s0, s1, s2, s3); TYPE stari IS (init, add, shift); Trebuie sa avem: Fie stare prezenta (present_state) si stare urmatoare (next_state) de tip stari Fie doar stare (state) de tip stari Starile (present_state, next_state, state) pot fi semnale sau variabile, dependent de implementare (neaparat semnale la implementarea cu doua procese) Procesul principal determina starea urmatoare si iesirile Contine un CASE dupa starea prezenta, iar pe fiecare ramura de CASE contine instructriuni IF in functie de intrari

4 Implementare Cu doua procese: Cu un proces: Moore / Mealy:
Un proces avanseaza starea si e senzitiv la clock si face doar present_state<=next_state; Celalalt proces e senzitiv la present_state si la intrari Cu un proces: Procesul e senzitiv la clock Starea stare poate fi variabila Moore / Mealy: La Moore iesirile depind doar de stare, nu si de intrari La Mealy iesirile depind atit de stare, cit si de intrari Se recomanda lucrul pe frontul cazator al semnalului de clock, daca restul circuitelor secventiale (registre, bistabile) din schema lucreaza pe frontul crescator al semnalului de clock Iesirile FSM sint comenzi pentru celelalte circuite

5 Exemplu Moore x=‘0’ x=‘1’ stare = s0 z=“00” s0 s3 stare = s1 z=“01” s1

6 ENTITY FSM_Moore IS GENERIC(tp:TIME:=5ns); PORT(x: IN BIT; clock: IN BIT; z: OUT BIT_VECTOR(1 DOWNTO 0)); END ENTITY; ARCHITECTURE un_proces OF FSM_Moore IS TYPE stari IS (s0, s1, s2, s3); SIGNAL afisare_stare: stari; BEGIN PROCESS (clock) VARIABLE stare: stari:=s0; --VARIABLE count: integer:=0; IF clock='0' AND clock'EVENT THEN --afisare_stare<=stare; -- vizualizez starea prezenta CASE stare IS WHEN s0 => z<="00" after tp; --count:=0;--initializare count IF x='0' THEN stare:=s0; ELSE stare:=s3; END IF;

7 WHEN s1 => z<="01" after tp; --count:= count+1;-- incrementare count IF x='0' THEN stare:=s1; ELSE stare:=s0; END IF; WHEN s2 => z<="10" after tp; --IF count>=5 THEN -- testare count stare:=s2; WHEN s3 => z<="11" after tp; END CASE; afisare_stare<=stare;--vizualizez starea urmatoare END PROCESS; END ARCHITECTURE;

8 Exemplu Mealy x=‘0’ x=‘1’ present_state = s0 s0 / “00” s3 / “11”

9 ENTITY FSM_Mealy IS GENERIC(tp:TIME:=5ns); PORT(x: IN BIT; clock: IN BIT; z: OUT BIT_VECTOR(1 DOWNTO 0)); END ENTITY; ARCHITECTURE doua_procese OF FSM_Mealy IS TYPE stari IS (s0, s1, s2, s3); SIGNAL present_state, next_state: stari:=s0; BEGIN proc_clock: PROCESS(clock) IF clock='0' AND clock'EVENT THEN present_state <= next_state; END IF; END PROCESS proc_clock; avansare_stare: PROCESS (present_state, x) --VARIABLE count: integer:=0; CASE present_state IS WHEN s0 => --count:=0;--initializare count IF x='0' THEN next_state<=s0; z<="00" after tp; ELSE next_state<=s3; z<="11" after tp;

10 WHEN s1 => --count:= count+1;-- incrementare count IF x='0' THEN next_state<=s1; z<="01" after tp; ELSE next_state<=s0; z<="00" after tp; END IF; WHEN s2 => --IF count>=5 THEN -- testare count next_state<=s2; z<="10" after tp; WHEN s3 => END CASE; END PROCESS avansare_stare; END ARCHITECTURE;


Descărcați ppt "Modelarea in VHDL a automatelor secventiale"

Prezentări similare


Publicitate de la Google