Está en la página 1de 8

Diseo de Mquinas de Estados

LCSE
2
Sistemas secuenciales sncronos
Secuencial: las salidas dependen de entradas
actuales y previas memoria estado
Sncrono: el estado se actualiza al ritmo indicado por
una seal de reloj
Lgica
Combinacional
Registros
Entradas Salidas
Prximo
estado
Estado
actual
reloj
3
Ventajas de los sistemas sncronos
Las seales se muestrean en instantes de tiempo
conocidos y bien definidos
Inmunes a glitches si la frecuencia de reloj es
adecuada
Se evitan los problemas debidos a variacin de
retardos en los diferentes caminos de lgica
Estables frente a cambios de temperatura, tensin o
proceso de fabricacin
Interfaces sencillas entre distintas entidades
Gran disponibilidad de herramientas de sntesis y
simulacin
4
Mquinas de estados
Tres bloques tpicos:
Lgica de estado siguiente
Registro de estado actual
Lgica de salida
Registro
de estado
Lgica de
estado
siguiente
Lgica de
salida
Entradas
Salidas
5
Mquinas de estados
Lgica
Prx. estado
Registros
Entradas
Salidas
Lgica
salida
Lgica
Prx. estado
Registros
Entradas
Salidas
Lgica
salida
Mealy: las salidas son funcin del estado y entradas actuales
Moore: las salidas son funcin slo del estado actual
6
Mquinas de estados
Mealy/Moore combinadas
Lgica
Prx. estado
Registros
Entradas Salidas
Mealy
Lgica
salida
Lgica
salida
Salidas
Moore
Lgica
Prx. estado
Registros
Entradas
Salidas
registradas
Lgica
Prx. salida
Registro
salida
Con salidas registradas
7
Especificacin mediante VHDL
Partiendo del diagrama de estados:
1. Codificacin de estados creacin de un tipo
2. Registro para el vector estado actual
3. Realizacin de la lgica de prximo estado
4. Realizacin de la lgica de las salidas
8
Controlador de un semforo
calle principal
calle
secundaria
sensor
calle secundaria
sensor
calle principal
9
Diseo del control
Entradas, salidas, estados, transiciones
Para cada estado:
Cmo afectan las
entradas al cambio de
estado?
Qu salidas se
producen?
All Stop
Side Go
Main Go
Side_car = 1
Side_car = 0
Main_car = 1
Main_car = 0
10
Codificacin de estados
Es la forma en que se
asignan nmeros binarios
a los estados
En VHDL podemos utilizar
un tipo enumerado
(la herramienta de sntesis
decide la codificacin)
10000000 100 111
01000000 101 110
00100000 111 101
00010000 110 100
00001000 010 011
00000100 011 010
00000010 001 001
00000001 000 000
One hot Gray Binario
11
Tipo enumerado
Util para especificar los valores que toma el estado
architecture Enc1 of StateMachine is
type State is
( Idle, S1, S2, S3, S4, S5 );
signal PresentState, NextState : State;
begin
...
end architecture Enc1;
Se puede definir en un package
package estados is
type tipo_estado is (Q0,Q1,Q2,Q3);
end estados;
12
Mquinas de estados en VHDL
Process combinacional Process secuencial
Calcular
estado
siguiente
y salidas
Actualizar
registro de
estado
con
estado
siguiente
Reloj
Prx. estado
Estado actual
Salidas
Entradas
Architecture
13
Mquina de estados de Moore (I)
Next : process(A, B, CurrentState)
begin
case CurrentState is
when Idle =>
NextState <= S1;
when S1 =>
if A = '1' then
NextState <= S2;
else
NextState <= S1;
end if;
when S2 =>
if A = '0' and B = '1' then
NextState <= S3;
elsif A = '1' and B = '1' then
NextState <= S4;
elsif A = '1' and B = '0' then
NextState <= S5;
else
NextState <= S2;
end if;
when S3 =>
NextState <= S4;
when S4 =>
NextState <= Idle;
end case;
end process;
FFs : process(Clk, Reset)
begin
if Reset = '1' then
CurrentState <= Idle;
elsif Clkevent and Clk='1' then
CurrentState <= NextState;
end if;
end process;
Output : process(CurrentState)
begin
case CurrentState is
when Idle =>
Y <= "000";
when S1 =>
Y <= "101";
when S2 =>
Y <= "111";
when S3 =>
Y <= "011";
when S4 =>
Y <= "000";
end case;
end process;
CurrentState NextState
Lgica
Prx. estado
Registros
Entradas
Salidas
Lgica
salida
14
Lgica
Prx. estado
Registros
Lgica
salida
Mquina de estados de Moore (y II)
process(A, B, CurrentState)
begin
case CurrentState is
when Idle =>
NextState <= S1;
Y <= "000";
when S1 =>
if A = '1' then
NextState <= S2;
else
NextState <= S1;
end if;
Y <= "101";
when S2 =>
if A = '0' and B = '1' then
NextState <= S3;
elsif A = '1' and B = '1' then
NextState <= S4;
elsif A = '1' and B = '0' then
NextState <= S5;
else
NextState <= S2;
end if;
Y <= "111";
when S3 =>
NextState <= S4;
Y <= "011";
when S4 =>
NextState <= Idle;
Y <= "000";
end case;
end process;
FFs : process(Clk, Reset)
begin
if Reset = '1' then
CurrentState <= Idle;
elsif Clkevent and Clk='1' then
CurrentState <= NextState;
end if;
end process;
15
Mealy y Moore combinadas
process(Car, Timed, CurrentState)
begin
StartTimer <= '0'; -- Default output
case CurrentState is
when S1 =>
MajorGreen <= '1';
MinorGreen <= '0';
if Car = '1' then
StartTimer <= '1'; -- Mealy output
NextState <= S2;
else
NextState <= 1;
end if;
when S2 =>
MajorGreen <= '0';
MinorGreen <= '1';
if Timed = '1' then
NextState <= S1;
else
NextState <= S2;
end if;
end case;
end process;
Lgica
Prx. estado
Registros
Entradas Salidas
Mealy
Lgica
salida
Lgica
salida
Salidas
Moore
FFs : process(Clk, Reset)
begin
if Reset = '1' then
CurrentState <= Idle;
elsif Clkevent and Clk='1' then
CurrentState <= NextState;
end if;
end process;
16
Con salidas registradas
Output : process(Clk, Reset)
begin
if Reset = '1' then
Y <= "000";
elsif Clkevent and Clk= '1' then
case NextState is
when Idle =>
Y <= "000";
when S1 =>
Y <= "101";
when S2 =>
Y <= "111";
when S3 =>
Y <= "011";
when S4 =>
Y <= "000";
end case;
end if;
end process;
Lgica
Prx. estado
Registros
Entradas
Salidas
registradas
Lgica
Prx. salida
Registro
salida
FFs : process(Clk, Reset)
begin
if Reset = '1' then
CurrentState <= Idle;
elsif Clkevent and Clk='1' then
CurrentState <= NextState;
end if;
end process;
Next: process(A, B, CurrentState)
begin
case CurrentState is
when Idle =>
NextState <= S1;
when S1 =>
if A = '1' then
NextState <= S2;
else
NextState <= S1;
end if;
when S2 =>
if A = '0' and B = '1' then
NextState <= S3;
elsif A = '1' and B = '1' then
NextState <= S4;
elsif A = '1' and B = '0' then
NextState <= S5;
else
NextState <= S2;
end if;
when S3 =>
NextState <= S4;
when S4 =>
NextState <= Idle;
end case;
end process;

También podría gustarte