Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Maquinas de Estados Mealy VHDL PDF
Maquinas de Estados Mealy VHDL PDF
Unidad 8
Diseo Basado en
Mquinas de Estado Finitas (F.S.M.)
Andres.Iborra@upct.es
Juan.Suardiaz@upct.es
Mayo 2003
TEMARIO
CONTENIDO
Unidad 8. Diseo Basado en Mquinas de Estado Finitas (F.S.M.).
8.1. Introduccin.
8.1.1. Concepto de estado.
8.1.2. Mquinas tipo Mealy y Moore.
8.1.3. Tablas y Diagramas de Estados.
8.2. Anlisis de mquinas de estados.
8.2.1. Estructura de una mquina de estados.
8.2.2. Lgica de salida.
8.2.3. Ecuaciones caractersticas.
8.3. Diseo de Mquinas de Estados.
8.3.1. Asignacin de estados.
8.3.2. Minimizacin de estados.
8.3.3. Ecuaciones de Transicin.
8.3.4. Ecuaciones de Excitacin.
8.4. Descripcin VHDL de mquinas de estados.
8.5. Ejemplo de aplicacin: Diseo del circuito de control de llenado
de un depsito de lquidos.
OBJETIVOS ESPECFICOS
8.1 INTRODUCCIN
Concepto de estado.
En la unidad anterior se han definido los circuitos secuenciales como aquellos que
recuerdan lo que les ha sucedido en instantes de tiempo anteriores y son capaces de
alterar su comportamiento futuro en base a esta informacin.
Un contador es un claro ejemplo de este tipo de circuitos, ya
Q
que es capaz de recordar su valor actual (estado actual) a fin
CLK
de sumarle 1 para evolucionar al siguiente valor (estado). El
valor actual del contador se define como su estado actual, el
cual a su vez sirve para determinar cmo va evolucionar para llegar al estado
siguiente.
De forma general, se puede considerar que un circuito secuencial ha de memorizar una
serie de situaciones, de forma que su comportamiento puede considerarse como la
evolucin de una situacin a otra (o incluso a la misma). Cada una de estas situaciones
ser lo que se denominar un estado y el cambio de una situacin a otra ser lo que
se denominar transicin. Por ejemplo, si el contador actualmente presenta el valor
de cuenta 5, en la prxima activacin del reloj deber incrementarse para pasar al
estado 6. Este cambio del estado 5 al estado 6 es lo que se denomina transicin.
Como ya se ha comentado, el circuito secuencial ha de memorizar los posibles
estados. Para ello usar biestables, los cuales constituyen los elementos mnimos de
almacenamiento de informacin. Como un biestable puede codificar dos estados (1
0), para codificar un sistema secuencial que presente E estados, se deber usar un
nmero de biestables (B) tal que 2B E.
En consecuencia:
N Biestables = log2(N estados)
La forma en que se codifica cada posible situacin (estado) segn los posibles valores
que presenten los biestables es lo que se denomina asignacin de estados.
3
Mquina de Mealy
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
4
1
0
0
0
0
0
0
1
0
1
1
1
1
1
1
0
1
0
0
1
0
1
1
0
1
0
0
1
0
1
1
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
I2I1/S0
E
Notacin Mealy
E
S
Notacin Moore
U
Ei
E0
E7
1
E1
0
E6
E2
1
E5
1
E3
E4
Entradas
LGICA
DE
ESTADO
SIGUIENTE
(F)
Estado
Actual
MEMORIA
DE ESTADO
Excitacin
RESET
CLK
6
LGICA
DE
SALIDA
(G)
Salidas
LGICA
DE
ESTADO
SIGUIENTE
(F)
Estado
Actual
MEMORIA
DE ESTADO
LGICA
DE
SALIDA
(G)
Salidas
Excitacin
RESET
CLK
BIESTABLE D
BIESTABLE T
D
0
1
T
0
1
Q*
0
1
Q* = D
Con Enable (EN):
Q* = EN D + EN Q
Q* = T Q + T Q
BIESTABLE S-R
S
0
0
1
1
Q*
Q
R
0
1
0
1
BIESTABLE J-K
Q*
Q
0
1
No Valido
J
0
0
1
1
Q* = S + R Q
K
0
1
0
1
Q*
Q
0
1
Q
Q* = J Q + K Q
En conclusin, si se desea analizar un circuito del que se conoce que implementa una
mquina de estados, conviene seguir los siguientes pasos bsicos:
1. Determinar las funciones del estado siguiente (F) y salida (G) en base a los
elementos constitutivos que forman el circuito y sus conexiones.
2. Utilizar las funciones F y G para construir una tabla de estado/salida que
especifique completamente el estado siguiente y la salida del circuito para toda
posible combinacin de estado siguiente y salida.
3. Dibujar un diagrama de estado que presente la informacin de los pasos
anteriores de forma grfica.
El algoritmo para reducir los estados podra resumirse en los siguientes pasos:
1. En primer lugar se agrupan los estados que presentan las mismas salidas
(caso de mquinas de Moore) o las mismas salidas en las transiciones
(caso de mquinas de Mealy). Estos determinarn un conjunto de estados
potencialmente equivalentes, ya que los estados no pueden ser
equivalentes si sus salidas difieren.
2. A continuacin se examinan las transiciones, a fin de comprobar que para
cada posible combinacin conducen al mismo estado (o a dos estados que
tambin son equivalentes). En caso de ocurrir esto, ambos estados son
equivalentes y pueden reemplazarse por un nuevo estado que englobe a
ambos. Entonces se cambian todas las transiciones de forma que se
actualicen todas las evoluciones hacia este nuevo estado y se repite el
proceso hasta que no puedan unirse ms estados.
Ejemplo de minimizacin:
10
Asignacin de estados.
El nmero de puertas que se necesitarn para implementar una mquina de
estados se halla fuertemente relacionado con la manera en que se produce la
codificacin de sus estados.
a) Metodologa de asignacin heurstica.
Una estrategia heurstica habitual para la asignacin de estados es aquella
que trata de minimizar el nmero de bits que han de cambiar a lo largo de las
transiciones.
Consideremos una mquina de estados que presenta 5 estados (S0S4) y
se duda entre cualquiera de las siguientes codificacin de estados:
Estado
S0
S1
S2
S3
S4
Asignacin 1
Q2 Q1 Q0
0
0
0
1
0
1
1
1
1
0
1
0
0
1
1
Estado
S0
S1
S2
S3
S4
Asignacin 2
Q2 Q1 Q0
0
0
0
0
0
1
0
1
0
0
1
1
1
1
1
Transicin
S0 -> S1
S0 -> S2
S1 -> S3
S2 -> S3
S3 -> S4
S4 -> S1
11
Q0
1
0
0
0
Ecuaciones de transicin.
Permiten obtener la lgica combinacional de salida.
UP
CLK
Est. Actual
Est. Siguiente
Salidas
Q1
Q0
Up
Q1*
Q0*
S1
S0
0
0
0
1
1
0
0
0
0
0
1
0
1
0
0
0
1
0
0
0
0
1
1
0
1
1
1
0
0
1
1
0
0
0
1
1
0
2
1
0
1
1
1
1
0
1
1
0
1
0
1
1
3
1
1
1
0
0
1
1
Se minimizara por Karnaugh S1 = Q1 y S0 = Q0 (Mquina de Moore)
Cuenta
Ecuaciones de excitacin.
Generan la lgica combinacional del siguiente estado. Suponiendo biestables T:
Est. Actual
Est. Siguiente
Excitacin
Q1
Q0
Up
Q1*
Q0*
T1
T0
0
0
0
1
1
1
1
0
0
0
1
0
1
0
1
0
1
0
0
0
0
1
1
0
1
1
1
0
1
1
1
0
0
0
1
1
1
2
1
0
1
1
1
0
1
1
1
0
1
0
0
1
3
1
1
1
0
0
1
1
Minimizando por Karnaugh se obtendra: T0 = 1
T1 = QoUp + Qo Up = Qo xnor Up.
Cuenta
13
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MaquinaEstados IS
PORT ( sEntrada1, sEntrada2, sEntrada3: IN
std_logic; --Seales de entrada.
CLK: IN std_logic;
--Seal de reloj.
(No olvidar)
sResetL: IN std_logic; --Seal de inicializacin
sSalida1, sSalida2: OUT std_logic);
--Salidas
END MaquinaEstados;
ARCHITECTURE MaquinaEstadosArch OF
MaquinaEstados IS
--Declaracin del tipo asociado a los estados.
TYPE TipoEstados IS (EInicio, EDetect1, EAbort,
EDetect2, EFin);
--Seales auxiliares para la codificacin del
--estado actual y siguiente.
SIGNAL tEstadoActual, tEstadoSiguiente: TipoEstados;
BEGIN
-- Proceso dedicado a la lgica de estado:
LOGICA_ESTADO: PROCESS(tEstadoActual, sEntrada1,
sEntrada2, sEntrada3)
BEGIN
CASE (tEstadoActual) IS
WHEN EInicio =>
IF (sEntrada1 = 1) THEN tEstadoSiguiente <= EAbort;
ELSIF (sEntrada2 = 0 AND sEntrada3 = 1) THEN
tEstadoSiguiente <= EDetect2;
ELSE tEstadoSiguiente <= EInicio;
END IF;
WHEN EDetect1 =>
IF (sEntrada1 = 1) THEN tEstadoSiguiente <= EFin;
ELSE tEstadoSiguiente <= EDetect1;
END IF;
WHEN EAbort =>
15
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MaquinaEstados IS
PORT ( sEntrada: IN std_logic; --Seal de entrada.
CLK: IN std_logic;
--Seal de reloj.
sResetH: IN std_logic; --Seal de inicializacin
sSalida: OUT std_logic); --Salida
END MaquinaEstados;
ARCHITECTURE MaquinaEstadosArch OF
MaquinaEstados IS
--Declaracin del tipo asociado a los estados.
TYPE TipoEstados IS (E0, E1, E2, E3, E4);
--Seales auxiliares para la codificacin del
--estado actual y siguiente.
SIGNAL tEstadoActual, tEstadoSiguiente: TipoEstados;
BEGIN
-- Proceso dedicado a la lgica de estado:
LOGICA_ESTADO: PROCESS(tEstadoActual, sEntrada)
BEGIN
CASE (tEstadoActual) IS
WHEN E0 =>
IF (sEntrada = 1) THEN tEstadoSiguiente <= E1;
ELSE tEstadoSiguiente <= E4;
END IF;
WHEN E1 =>
IF (sEntrada = 1) THEN tEstadoSiguiente <= E2;
ELSE tEstadoSiguiente <= E4;
END IF;
16
WHEN E2 =>
IF (sEntrada = 1) THEN tEstadoSiguiente <= E3;
ELSE tEstadoSiguiente <= E4;
END IF;
WHEN E3 => tEstadoSiguiente <= E3;
WHEN E4 =>
IF (sEntrada = 1) THEN tEstadoSiguiente <= E1;
ELSE tEstadoSiguiente <= E4;
END IF;
END CASE;
END PROCESS LOGICA_ESTADO;
-- Proceso dedicado a la Memoria de Estado
MEM_ESTADO: PROCESS(CLK, sResetH,
tEstadoSiguiente)
BEGIN
--Inicializacin con RESET_H
IF (sResetH =1) THEN tEstadoSiguiente<=E0;
ELSIF(rising_edge(CLK)) THEN tEstadoActual <=
tEstadoSiguiente;
END IF;
END PROCESS MEM_ESTADO;
--Zona concurrente dedicada a modelar la
--lgica de salida.
sSalida <= 1 WHEN (tEstadoActual = E2 and
sEntrada = 1) ELSE
0;
-- sSalida = f(Estado, entrada) => Mquina de Mealy.
END MaquinaEstadosArch;
Vlvulas E y S:
1 Abierta
0 Cerrada
A
B
17
Desde el punto de vista de nuestro diseo, es posible considerarlo como una caja
negra que presentar el siguiente aspecto:
Entradas: Tres entradas asociadas para cada uno de los sensores de deteccin
de nivel ms una seal de reloj (CLK) y otra de inicializacin (ResetH),
asociadas a la parte secuencial.
Salidas: Dos (E y S), encargadas de controlar las vlvulas de llenado y vaciado.
A
B
C
CLK
MQUINA
DE
ESTADOS
ResetH
a) Diseo de Mquina de estados tipo MOORE:
ABC
E
ES
Equivalentes
18
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MaquinaEstadosMoore IS
PORT ( sA, sB, sC: IN std_logic; --Seal de entrada.
CLK: IN std_logic;
--Seal de reloj.
sResetH: IN std_logic; --Seal de inicializacin
sE, sS: OUT std_logic); --Salida
END MaquinaEstadosMoore;
ARCHITECTURE MaquinaEstadosMooreArch OF
MaquinaEstadosMoore IS
--Declaracin del tipo asociado a los estados.
TYPE TipoEstados IS (VACIO, NORMAL, LLENO,
ALARMA);
--Seales auxiliares para la codificacin del
--estado actual y siguiente.
SIGNAL tEstadoActual, tEstadoSiguiente: TipoEstados;
BEGIN
-- Proceso dedicado a la lgica de estado:
LOGICA_ESTADO: PROCESS(tEstadoActual, sEntrada)
BEGIN
CASE (tEstadoActual) IS
WHEN VACIO =>
IF (sA = 0 and sB=0 and sC = 0) THEN tEstadoSiguiente
<= VACIO;
ELSIF (sA = 0 and sB=0 and sC = 1) THEN
tEstadoSiguiente <= NORMAL;
ELSIF (sA = 0 and sB=1 and sC = 1) THEN
tEstadoSiguiente <= LLENO;
ELSIF (sA = 1 and sB=1 and sC = 1) THEN
tEstadoSiguiente <= ALARMA;
END IF;
WHEN NORMAL =>
IF (sA = 0 and sB=0 and sC = 0) THEN tEstadoSiguiente
<= VACIO;
ELSIF (sA = 0 and sB=0 and sC = 1) THEN
tEstadoSiguiente <= NORMAL;
19
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MaquinaEstadosMealy IS
PORT ( sA, sB, sC: IN std_logic; --Seal de entrada.
CLK: IN std_logic;
--Seal de reloj.
sResetH: IN std_logic; --Seal de inicializacin
sE, sS: OUT std_logic); --Salida
END MaquinaEstadosM ealy;
20