Está en la página 1de 12

VHDL Leccin 2.

9 Mquinas de Estados Finitos (FSM) 1


ndice
Introduccin
Niveles de abstraccin del modelado con HDL
Estilos descriptivos del modelado con HDL
Ventajas y limitaciones de los HDLs
El lenguaje VHDL
Objetos, tipos de datos y operadores
Unidades bsicas de diseo
Modelos del hardware para simulacin
Bancos de pruebas
Sentencias secuenciales
Sentencias concurrentes
Subprogramas
Conceptos avanzados en VHDL
Sntesis
Mquinas de estados finitos (FSM)
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 2
MQUINA DE ESTADOS (FSMs)
Define un circuito que pasa por varios estados de salida definidos por el usuario
en funcin de una seal CLK.
f: funcin de transicin
g: funcin de salida
X(t)={x
1
(t), x
2
(t), , x
n
(t)}: variables de entrada
Z(t)={z
1
(t), z
2
(t), , z
n
(t)}: variables de salida
Q(t)={q
1
(t), q
2
(t), , q
n
(t)}: estado de la mquina
Q(t+1)={q
1
(t+1), q
2
(t+1), , q
n
(t+1)}: prximo estado de la mquina
clk : reloj del sistema
EL LENGUAJE VHDL
SNTESIS VHDL
Circuito
combinacional
(f,g)
Memoria
(flip-flop)
clk
Q(t) Q(t+1)
X(t)
Z(t)
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 3
Mquinas de Mealy: las salidas del sistema dependen tanto de las entradas
del sistema como del estado actual.
Q(t+1)= f[X(t), Q(t)]
Z(t) = g[X(t), Q(t)]
Mquina de Moore: las salidas del sistema slo dependen del estado actual.
Q(t+1)= f[X(t), Q(t)]
Z(t) = g[Q(t)]
EL LENGUAJE VHDL
SNTESIS VHDL
Clculo del
prximo estado
(f)
Memoria Clculo de
las salidas
(g)
clk
Q(t+1) Q(t)
Slo tipo
Mealy
Lgica
combinacional
Lgica
secuencial
Lgica
combinacional
X(t)
Z(t)
Entradas asncronas
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 4
Cada uno de los bloques se modela como un proceso independiente.
En la parte declarativa de la arquitectura se definen dos seales para almacenar
el estado actual y el prximo estado.
El clculo del prximo estado se realiza mediante un proceso combinacional, en la
lista de sensibilidad se introducen las entradas de la mquina y el estado actual.
SNTESIS VHDL
Modelado tipo I (Mquinas de Mealy)
type estadosFSM is(estado0, estado1, , estadon);
signal estado, prox_estado: estadosFSM;
process (entradas, estado)
begin -- Clculo del prximo estado en funcin de las entradas
case estado is
when estado0 =>
if (entradas =valor) then
prox_estado<=; prox_estado<=;
else
prox_estado<=;
end if;
.
when estadon=>
if (entradas =valor) then
prox_estado<=;
else
prox_estado<=;
end if;
end case;
end process;
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 5
Un proceso secuencial almacena un elemento de memoria en el que se almacena el estado
actual.
El clculo de las salidas se modela mediante un proceso combinacional en cuya lista de
sensibilidades se debe incluir el estado actual y las entradas.
process (reloj, entradas_asncronas)
begin
if (evaluacin_entradas_asncronas) then
estado <=estado0; -- asignacin del estado inicial
elsif relojevent and reloj=1 then
estado <=prox_estado; -- asignacin del siguiente estado
end if;
end process;
process (entradas, estado)
begin -- Clculo de las salidas
case estado is
when estado0 =>
if (entradas =valor) then
salidas <=;
else
salidas <=;
end if;
.
when estadon=>
if (entradas =valor) then
salidas <=;
else
salidas <=;
end if;
end case;
end process;
SNTESIS VHDL
Modelado tipo I (Mquinas de Mealy)
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 6
Ejemplo:
entity FSM1is
port (
X, RST, CLK : in std_logic;
Z : out std_logic);
end FSM1;
q1
q0
q2
qi
1/1
0/0
1/0
1/0
0/1
0/0
X/Z
X
RST
CLK
Z
Esquema de
la mquina
Grafo de funcionamiento
SNTESIS VHDL
Modelado tipo I (Mquinas de Mealy)
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 7
architecture rtl of FSM1 is
type estadosFSM is (q0, q1, q2); signal estado, prox_estado: estadosFSM;
begin
process (X, estado)
begin
case estado is
when q0 =>
if (X='0') then prox_estado<=q0;
else prox_estado<=q1;
end if;
when q1 =>
if (X='0') then prox_estado<=q0;
else prox_estado<=q2;
end if;
when q2 =>
if (X='0') then prox_estado<=q0;
else prox_estado<=q2;
end if;
end case;
end process;
process (CLK, RST)
begin
if (RST='1') then
estado <=q0;
elsif CLK'event and CLK='1' then
estado <=prox_estado;
end if;
end process;
process (X, estado)
begin
case estado is
when q0 =>
if (X='0') then Z<='0'; else Z<='1';
end if;
when q1 =>Z<='0';
when q2 =>Z<=not X;
end case;
end process;
end rtl;
SNTESIS VHDL
Modelado tipo I (Mquinas de Mealy)
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 8
Se unen en un solo proceso el elemento de memoria que almacena el estado
actual y el que calcula el prximo estado.
Desaparece la seal que almacena el prximo estado.
El proceso para el clculo de las salidas es igual que el descrito para el tipo I.
process (reloj, entradas_asncronas)
begin
if (evaluacin_entradas_asncronas) then
estado <=estado0; -- asignacin del estado inicial
elsif relojevent and reloj=1 then
case estado is
when estado0 =>
if (entradas =valor) then
estado <=;
else
estado <=;
end if;
.
when estadon=>
if (entradas =valor) then
estado <=;
else
estado <=;
end if;
end case;
end if;
end process;
SNTESIS VHDL
Modelado tipo II (Mquinas de Mealy)
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 9
Ejemplo:
process (CLK, RST)
begin
if (RST='1') then
estado <=q0;
elsif CLK'event and CLK='1' then
case estado is
when q0 =>
if (X='0') then
estado <=q0;
else
estado <=q1;
end if;
when q1 =>
if (X='0') then
estado <=q0;
else
estado <=q2;
end if;
when q2 =>
if (X='0') then
estado <=q0;
else
estado <=q2;
end if;
end case;
end if;
end process;
SNTESIS VHDL
Modelado tipo II (Mquinas de Mealy)
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 10
Es vlida nicamente para el caso de mquinas de estados tipo Moore.
La mquina se describe como un nico proceso.
process (reloj, entradas_asncronas)
begin
if (evaluacin_entradas_asncronas) then
estado <=estado0;
salidas <=; -- asignacin de salidas para el estado0
elsif relojevent and reloj=1 then
-- clculo del estado en funcin de las entradas y asignacin del valor de salidas para el prximo estado
case estado is
when estado0 =>
salidas <=;
if (entradas =valor) then
estado <=;
else
estado <=;
end if;
.
when estadon=>
salidas <=;
if (entradas =valor) then
estado <=;
else
estado <=;
end if;
end case;
end if;
end process;
SNTESIS VHDL
Modelado tipo III (Mquina de Moore)
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 11
Ejemplo:
q1
0
q0
0
q2
1
qi
Z
1
0
1
1
0
0
process (CLK, RST)
begin
if (RST=1) then
estado <=q0; Z <=0;
elsif CLKevent and CLK=1 then
case estado is
when q0 =>
Z <=0;
if (X=1) then
estado <=q1;
else
estado <=q2;
end if;
when q1 =>
Z <=0;
if (X=1) then
estado <=q2;
else
estado <=q0;
end if;
when q2 =>
Z <=1;
if (X=1) then
estado <=q0;
else
estado <=q2;
end if;
end case;
end if;
end process;
X
RST
CLK
Z
SNTESIS VHDL
Modelado tipo III (Mquina de Moore)
VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 12
Binaria : no es ptima en trminos de retardo y rea cuando el nmero de estados es
elevado.
q0=000, q1=001, q2=010, q3=011
Gray: elimina los glitches que pudieran aparecer cuando se pasa de un estado al siguiente:
q0=000, q1=001, q2=011, q3=010
One Hot : reduce el nmero de recursos utilizados para mquinas con 8 o ms estados:
q0=0001, q1=0010, q2=0100, q3=1000
El tipo de codificacin se puede fijar mediante una opcin del sintetizador o bien mediante
atributos declarados en los paquetes que se suministran junto a la herramienta.
Leonardo Spectrum de Mentor
Synopsis
Para que haya coincidencia entre los resultados de sntesis y simulacin es necesario usar
una seal de inicializacin que lleve al sistema al estado inicial.
type estadosFSM is (q0, q1, q2);
attribute TYPE_ENCODING_STYLE of estadoFSM : type is
ONEHOT;
type estadosFSM is (q0, q1, q2);
attribute ENUM_ENCODING : STRING;
attribute ENUM_ENCODING of estadoFSM : type is 001 010 011;
SNTESIS VHDL
Codificacin de estados

También podría gustarte