20
Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.) 1 Unidad 8 Diseño Basado en Máquinas de Estado Finitas (F.S.M.) [email protected] [email protected] Mayo 2003

Maquinas de Estados Mealy Vhdl

Embed Size (px)

Citation preview

Page 1: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅1⋅

TEMARIO

Unidad 8

Diseño Basado en

Máquinas de Estado Finitas (F.S.M.)

[email protected] [email protected]

Mayo 2003

Page 2: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅2⋅

CONTENIDO

Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.).

8.1. Introducción. 8.1.1. Concepto de estado. 8.1.2. Máquinas tipo Mealy y Moore. 8.1.3. Tablas y Diagramas de Estados.

8.2. Análisis de máquinas de estados. 8.2.1. Estructura de una máquina de estados. 8.2.2. Lógica de salida. 8.2.3. Ecuaciones características.

8.3. Diseño de Máquinas de Estados. 8.3.1. Asignación de estados. 8.3.2. Minimización de estados. 8.3.3. Ecuaciones de Transición. 8.3.4. Ecuaciones de Excitación.

8.4. Descripción VHDL de máquinas de estados. 8.5. Ejemplo de aplicación: Diseño del circuito de control de llenado

de un depósito de líquidos.

OBJETIVOS ESPECÍFICOS

• Repasar los conceptos de estado y variable de estado. • Distinguir entre comportamientos tipo Mealy y Moore. • Conocer la estructura de diseño de una máquina de estados. • Ser capaz de deducir las ecuaciones características de un sistema secuencial. • Poder minimizar un diagrama de estados. • Ser capaz de obtener un diagrama de estados partiendo de unas especificaciones

dadas. • Poder afrontar con éxito el diseño de una máquina de estados. • Aprender a modelar estos componentes en VHDL.

Page 3: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅3⋅

8.1 INTRODUCCIÓN

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 información. Un contador es un claro ejemplo de este tipo de circuitos, ya que es capaz de recordar su valor actual (estado actual) a fin 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 cómo 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 evolución de una situación a otra (o incluso a la misma). Cada una de estas situaciones será lo que se denominará un “estado” y el cambio de una situación a otra será lo que se denominará “transición”. Por ejemplo, si el contador actualmente presenta el valor de cuenta 5, en la próxima activación del reloj deberá incrementarse para pasar al estado 6. Este cambio del estado 5 al estado 6 es lo que se denomina transición. Como ya se ha comentado, el circuito secuencial ha de memorizar los posibles estados. Para ello usará biestables, los cuales constituyen los elementos mínimos de almacenamiento de información. Como un biestable puede codificar dos estados (‘1’ ó ‘0’), para codificar un sistema secuencial que presente E estados, se deberá usar un número de biestables (B) tal que 2B≥ E. En consecuencia:

Nº Biestables = log2(Nº estados) La forma en que se codifica cada posible situación (estado) según los posibles valores que presenten los biestables es lo que se denomina “asignación de estados”.

Q

CLK

Page 4: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅4⋅

Máquinas de Mealy y Moore. En una máquina de estados, cada estado siempre será función del estado anterior y de las entradas. Sin embargo, atendiendo a la forma en que se generan las salidas es posible hablar de dos tipos diferentes de máquinas de estado finitas:

Máquina de Moore. Máquina de Mealy Estado Siguiente = F(Estado Actual, Entrada) Salida = G(Estado Actual)

Estado Siguiente = F(Estado Actual, Entrada) Salida = G(Estado Actual, Entrada)

Tablas y Diagramas de estado. Para describir el funcionamiento de un circuito secuencial se utilizan las denominadas tablas de estados (o tablas de excitación) y unos dibujos denominados diagramas de estados. Supongamos el caso de un circuito secuencial que se comporte como un contador de tres bits, con una señal (Up) que controle si la cuenta se realiza de forma ascendente (Up=’1’) o descendente (Up=’0’). La tabla de estados consiste en una tabla en la que se muestra en función del estado actual y las combinaciones posibles de las entradas, el próximo estado al que se deberá acudir.

Valor Est. Actual Ent. Est. Sig. Cuenta Q2 Q1 Q0 U Q2* Q1* Q0*

0 0 0 0 1 1 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 2 0 1 0 1 0 1 1 0 1 1 0 0 1 0 3 0 1 1 1 1 0 0 1 0 0 0 0 1 1 4 1 0 0 1 1 0 1 1 0 1 0 1 0 0 5 1 0 1 1 1 1 0 1 1 0 0 1 0 1 6 1 1 0 1 1 1 1 1 1 1 0 1 1 0 7 1 1 1 1 0 0 0

Page 5: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅5⋅

Un diagrama de estados es un dibujo que muestra cada estado de la máquina y todas las posibles secuencias en las cuales un circuito puede cambiar de un estado a otro. Los estados se representan con círculos y las transiciones mediante flechas. Sobre las flechas se suele usar una notación del tipo In-1In-1…I0/Sm-1Sm-2…S0 para señalar los valores de las entradas (In-1In-1…I0) que producen la salida correspondiente (Sm-1Sm-2…S0).

En el caso de máquinas tipo Moore, en las que las salidas sólo dependen del estado es común representar la salida dentro del círculo que representa el estado y usar en las transiciones una notación del tipo: In-1In-1…I0.

Diagrama de estados del contador Up/Down de tres bits:

Ei

U

E1

E2

E3

E4

E5

E6

E7

E0 1

1

1

1 1

1

1

1

0 0

0

0

0 0

0

E

I2I1/S0

Notación Mealy

E

I2I1

S

Notación Moore

Page 6: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅6⋅

8.2 ANÁLISIS DE MÁQUINAS DE ESTADO

Estructura de una máquina de estados. De manera general, es posible considerar que una máquina de estados está formada por los siguientes bloques funcionales: 1.- Memoria de estados.

Se trata de un conjunto de n flip-flops que almacenan el estado actual de la máquina, y tiene 2n estados distintos. Lo normal es hablar de máquinas de estados síncronas, es decir aquéllas en las que todos los flip-flops se encuentran conectados a una señal de reloj común. Este tipo de máquinas será el que se aborda en la presente unidad.

2.- Lógica del estado siguiente.

Se trata de un bloque combinacional que, en función del estado y entradas actuales, genera una función (F) que alimentará a las entradas de los biestables y hará que estos evolucionen hacia el estado siguiente.

3.- Lógica de salida. Genera las funciones de salida del circuito secuencial.

Lógica de salida. Anteriormente se ha comentado que la diferencia entre los dos posibles modelos de máquinas de estado se encuentra en cómo son generadas las salidas. Máquina de Mealy: S=G(Entradas, Estado Actual)

LÓGICA DE

ESTADO SIGUIENTE

(F)

MEMORIA DE ESTADO

Entradas Salidas LÓGICA DE

SALIDA (G)

Excitación

Estado Actual

CLK

RESET

Page 7: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅7⋅

Máquina de Moore: S=G(Estado Actual) En el diseño de circuitos de alta velocidad, con frecuencia es necesario asegurar que las salidas de la máquina de estados se encuentren disponibles tan pronto como sea posible y que no cambien durante cada periodo de reloj. Una forma de conseguir este comportamiento es codificar el estado de forma que las mismas variables de estado sirvan como salida, lo que conduce a máquinas tipo Moore. En consecuencia, cuando se trabaja en diseños digitales de alta velocidad, las máquinas de Moore presentan mejores resultados. Sin embargo, las máquinas tipo Mealy suelen producir soluciones de menor área al presentar menos estados que sus equivalentes tipo Moore. En consecuencia, es tarea del diseñador elegir la mejor opción, en función de las necesidades de su diseño.

Ecuación característica. El comportamiento funcional de un biestable puede describirse formalmente mediante una expresión booleana, denominada “ecuación característica”, que especifica el siguiente estado del biestable (Q*) como una función de su estado actual (Q) y de las entradas actuales. Es importante resaltar que la ecuación característica no describe el comportamiento de temporización detallado del dispositivo (activo por nivel, flanco…), sino solamente la respuesta funcional a las entradas de control.

LÓGICA DE

ESTADO SIGUIENTE

(F)

MEMORIA DE ESTADO

Entradas Salidas LÓGICA DE

SALIDA (G)

Excitación

Estado Actual

CLK

RESET

Page 8: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅8⋅

En conclusión, si se desea analizar un circuito del que se conoce que implementa una máquina de estados, conviene seguir los siguientes pasos básicos:

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 combinación de estado siguiente y salida.

3. Dibujar un diagrama de estado que presente la información de los pasos anteriores de forma gráfica.

D Q

Q

BIESTABLE D

D Q* 0 0 1 1

Q* = D

Con Enable (EN): Q* = EN · D + EN’ · Q

S

R

Q

Q

BIESTABLE S-R

S R Q* 0 0 Q 0 1 0 1 0 1 1 1 No Valido

Q* = S + R’ · Q

J

K

Q

Q

BIESTABLE J-K

J K Q* 0 0 Q 0 1 0 1 0 1 1 1 Q

Q* = J · Q’ + K’ · Q

T Q

Q

BIESTABLE T

T Q* 0 Q 1 Q

Q* = T · Q’ + T’ · Q

Page 9: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅9⋅

8.3 DISEÑO DE MÁQUINAS DE ESTADO. El proceso de diseño de una máquina de estados finita, a partir de una especificación o descripción en palabras puede resumirse en los siguientes pasos:

1. Construir una tabla de estado/salida que corresponde a la especificación, empleando nombres de mnemónicos para los estados. (También es posible comenzar con un diagrama de estados).

2. (Opcional) Minimizar el número de estados en la tabla de estado/salida o diagrama de estados.

3. Elegir un conjunto de variables de estado y asignar combinaciones de estado-variable a los estados nombrados (proceso de asignación de estados).

4. Crear la denominada tabla de transiciones. Esto es, sustituir las combinaciones de estado-variable en la tabla de estado/salida para crear una tabla de transición/salida que muestre la siguiente combinación variable-estado y salida para cada combinación de estado/entrada actual.

5. Elegir un tipo de flip-flop para la memoria de estado. 6. Construir una tabla de excitación, que muestre los valores de excitación

requeridos para obtener el siguiente estado deseado para cada combinación de estado/entradas.

7. Obtener las ecuaciones de excitación a partir de la tabla de excitación. 8. Obtener las ecuaciones de salida a partir de la tabla de transiciones. 9. Implementar de las ecuaciones en un circuito físico.

Minimización de estados. En ocasiones, la especificación conduce a un diagrama de estados inicial que presenta muchos estados. Bajo unas determinadas condiciones es posible efectuar una reducción de estados gracias a que ciertos caminos de la máquina de estados pueden eliminarse porque su comportamiento en función de las entradas y salidas se halla duplicado por algún otro camino equivalente. De forma general, es posible decir que dos estados tendrán un comportamiento equivalente (y por lo tanto podrán resumirse en uno sólo) si para todas sus combinaciones posibles de entradas, sus salidas son las mismas y evolucionan hacia los mismos estados o hacia estados que también son equivalentes.

Page 10: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅10⋅

El algoritmo para reducir los estados podría resumirse en los siguientes pasos:

1. En primer lugar se agrupan los estados que presentan las mismas salidas (caso de máquinas de Moore) o las mismas salidas en las transiciones (caso de máquinas de Mealy). Estos determinarán un conjunto de estados potencialmente equivalentes, ya que los estados no pueden ser equivalentes si sus salidas difieren.

2. A continuación se examinan las transiciones, a fin de comprobar que para

cada posible combinación conducen al mismo estado (o a dos estados que también 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 más estados.

Ejemplo de minimización:

Diagrama de estados original Diagrama de estados minimizado (E0 ⇔ E2)

Page 11: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅11⋅

Asignación de estados. El número de puertas que se necesitarán para implementar una máquina de estados se halla fuertemente relacionado con la manera en que se produce la codificación de sus estados. a) Metodología de asignación heurística.

Una estrategia heurística habitual para la asignación de estados es aquella que trata de minimizar el número de bits que han de cambiar a lo largo de las transiciones. Consideremos una máquina de estados que presenta 5 estados (S0…S4) y se duda entre cualquiera de las siguientes codificación de estados: En este caso, se analizarían todas las transiciones que presenta la máquina de estados y calcularíamos para cada una de ellas el número de bits que han de cambiar de un estado al siguiente. Supongamos que la máquina de estado disponible presenta las transiciones resumidas en la tabla adjunta:

Bits que cambian Transición Asignación 1 Asignación 2

S0 -> S1 2 1 S0 -> S2 3 1 S1 -> S3 3 1 S2 -> S3 2 1 S3 -> S4 1 1 S4 -> S1 2 2

13 bits 7 bits

Asignación 1 Estado Q2 Q1 Q0

S0 0 0 0 S1 1 0 1 S2 1 1 1 S3 0 1 0 S4 0 1 1

Asignación 2 Estado Q2 Q1 Q0

S0 0 0 0 S1 0 0 1 S2 0 1 0 S3 0 1 1 S4 1 1 1

Page 12: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅12⋅

En consecuencia, la asignación 2 es la óptima ya que minimiza el número de bits que cambiarán a lo largo de la evolución de los estados. El principal problema de este método es que hay que efectuar todas las combinaciones posibles y analizar cada una de ellas. Lo habitual es que los entornos de desarrollo presenten herramientas que realicen esta asignación de forma automática. Otro aspecto importante en la asignación de estados es la codificación de los estados iniciales. Conviene elegir una que sea posible implementar fácilmente en la inicialización de los biestables. La más habitual suele ser todo a ‘0’ (RESET) o todo a ‘1’ (SET).

b) Codificación “One-hot”. Este tipo de codificación suele presentar buenos resultados cuando se realizan diseños que deben trabajar a elevadas frecuencias de reloj. La idea fundamental consiste en realizar una asignación que en vez de usar N bits para codificar 2N estados, se usen tantos bits como estados presenta el diseño. De esta forma, una máquina con S estados, estará implementada usando S flip-flops y no el log2(S). Además cada estado tendrá una asignación en la que un único bit tendrá el valor de ‘1’ y el resto ‘0’. Así, una máquina de estados que presentara 4 posibles estados de funcionamiento presentaría la siguiente codificación:

La ventaja de la codificación “One-hot” radica en el hecho de conseguir simplificar la lógica de generación del estado siguiente y de las salidas, conduciendo a diseños que pueden trabajar a una frecuencia de funcionamiento superior.

Asignación Tradicional (2 flip-flops)

Estado Q2 Q1 S0 0 0 S1 0 1 S2 1 0 S3 1 1

Asignación “One hot” Estado Q3 Q2 Q1 Q0

S0 0 0 0 1 S1 0 0 1 0 S2 0 1 0 0 S3 1 0 0 0

Page 13: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅13⋅

Ecuaciones de transición. Permiten obtener la lógica combinacional de salida.

Est. Actual Est. Siguiente Salidas Cuenta 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 minimizaría por Karnaugh ⇒ S1 = Q1 y S0 = Q0 (Máquina de Moore)

Ecuaciones de excitación. Generan la lógica combinacional del siguiente estado. Suponiendo biestables T:

Est. Actual Est. Siguiente Excitación Cuenta 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 obtendría: T0 = ‘1’ T1 = Qo·Up + Qo’ · Up’ = Qo xnor Up.

Q

CLK

UP

Page 14: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅14⋅

8.4 DESCRIPCIÓN VHDL DE MÁQUINAS DE ESTADOS.

VHDL permite realizar descripciones logarítmicas a alto nivel de máquinas de estado. De esta forma, el diseñador se evita tareas como generar la tabla de transición de estados, o la obtención de las ecuaciones de excitación, basadas en el tipo de biestable seleccionado. Una máquina de estados se puede describir en VHDL de varias formas.

1. En primer lugar, en la sección de declaraciones de la arquitectura, se define un tipo enumerado en el que se asignan identificadores a cada estado. Suele ser recomendable utilizar identificadores ilustrativos para los estados. La herramienta de síntesis será la encargada de codificar estos estados. Aquí también suele ser

-- Esto se colocaría en la zona de declaraciones de la arquitectura. TYPE TipoEstados IS (Esperar, E1, E2, E3); SIGNAL tEstadoActual, tEstadoSiguiente: TipoEstados;

2. En lo que se refiere a la descripción funcional de la máquina de estados, tanto

para las máquinas de Moore como para las de Mealy conviene separar la parte secuencial de la combinacional, de manera que las asignaciones de salida se efectúen con sentencias de asignación concurrente; la asignación del siguiente estado con un proceso y una sentencia case y finalmente modelar los biestables usados en otro proceso separado. En conclusión, dentro de la arquitectura que describe la máquina de estados conviene que aparezcan tres zonas claramente diferenciadas:

a) Una zona dedicada a un proceso, el cual modela la lógica combinacional

encargada de la generación del estado siguiente. b) Una zona dedicada a un proceso que modela la lógica secuencial

encargada de implementar la memoria de estado. c) Una zona concurrente en la que se modela la lógica combinacional

encargada de implementar las ecuaciones de salida.

a) b) c)

Page 15: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅15⋅

Ejemplo de descripción VHDL de una Máquina de estados:

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MaquinaEstados IS PORT ( sEntrada1, sEntrada2, sEntrada3: IN std_logic; --Señales de entrada. CLK: IN std_logic; --Señal de reloj. (No olvidar) sResetL: IN std_logic; --Señal de inicialización sSalida1, sSalida2: OUT std_logic); --Salidas END MaquinaEstados; ARCHITECTURE MaquinaEstadosArch OF MaquinaEstados IS --Declaración del tipo asociado a los estados. TYPE TipoEstados IS (EInicio, EDetect1, EAbort, EDetect2, EFin); --Señales auxiliares para la codificación del --estado actual y siguiente. SIGNAL tEstadoActual, tEstadoSiguiente: TipoEstados; BEGIN -- Proceso dedicado a la lógica 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 =>

IF (sEntrada2 = ‘1’) THEN tEstadoSiguiente <= Edetect2; ELSE tEstadoSiguiente <= EDetect1; END IF; WHEN EDetect2 => IF (sEntrada2 = ‘1’) THEN tEstadoSiguiente <= EFin; ELSE tEstadoSiguiente <= EAbort; END IF; WHEN EFin => IF (sEntrada1 = ‘0’ and sEntrada2 = ‘0’ and sEntrada3 = ‘0’) THEN tEstadoSiguiente <= EInicio; ELSE tEstadoSiguiente <= EFin; END IF; END CASE; END PROCESS LOGICA_ESTADO; -- Proceso dedicado a la Memoria de Estado MEM_ESTADO: PROCESS(CLK, sResetL, tEstadoSiguiente) BEGIN --Inicialización con RESET_L IF (sResetL =’0’) THEN tEstadoSiguiente<=Einicio; ELSIF(rising_edge(CLK)) THEN tEstadoActual <= tEstadoSiguiente; END IF; END PROCESS MEM_ESTADO; --Zona concurrente dedicada a modelar la --lógica de salida. --Si salidas = f(est actual, entradas)=> Máquina. MEALY --Si salidas = f(est actual)=> Máquina. MOORE sSalida1 <= ‘1’ WHEN tEstadoActual = EInicio ELSE ‘1’ WHEN tEstadoActual = EDetect1 ELSE ‘0’; sSalida2 <= ‘1’ WHEN tEstadoActual = EAbort ELSE ‘1’ WHEN tEstadoActual = EFin ELSE ‘0’; END MaquinaEstadosArch;

Page 16: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅16⋅

Ej1: Describa en VHDL el diagrama de estados de la figura adjunta:

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MaquinaEstados IS PORT ( sEntrada: IN std_logic; --Señal de entrada. CLK: IN std_logic; --Señal de reloj. sResetH: IN std_logic; --Señal de inicialización sSalida: OUT std_logic); --Salida END MaquinaEstados; ARCHITECTURE MaquinaEstadosArch OF MaquinaEstados IS --Declaración del tipo asociado a los estados. TYPE TipoEstados IS (E0, E1, E2, E3, E4); --Señales auxiliares para la codificación del --estado actual y siguiente. SIGNAL tEstadoActual, tEstadoSiguiente: TipoEstados; BEGIN -- Proceso dedicado a la lógica 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;

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 --Inicialización 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 --lógica de salida. sSalida <= ‘1’ WHEN (tEstadoActual = E2 and sEntrada = ‘1’) ELSE ‘0’; -- sSalida = f(Estado, entrada) => Máquina de Mealy. END MaquinaEstadosArch;

RESET

Page 17: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅17⋅

8.5 EJEMPLO DE APLICACIÓN: DISEÑO DEL CIRCUITO DE CONTROL

DE LLENADO DE UN DEPÓSITO DE LÍQUIDOS. Un tanque de agua abierto por la parte superior dispone de tres sensores de detección de llenado (A, B, C) que determinan 4 posibles niveles de llenado (VACIO, NORMAL, LLENO, ALARMA). El nivel del tanque se controla mediante dos válvulas (E, entrada y S, salida). Se pide diseñar un circuito de control que opere de la siguiente forma:

• En condiciones de llenado normal, las válvulas E y S se encuentran abiertas. • Si el líquido llega al nivel de vacío, se cierra la válvula de salida y se mantiene

abierta la de entrada. • Si el líquido llega al nivel de lleno, se cierra la válvula de entrada y se mantiene

abierta la de salida. • Si por cualquier circunstancia, por ejemplo lluvia, se llegara al nivel de alarma, se

deberá cerrar la válvula de entrada y abrir la de salida. Esta situación se mantendrá hasta que el tanque llegue al estado de vacio.

Datos adicionales:

El funcionamiento de los sensores digitales y las válvulas E y S se encuentra resumido en las tablas adjuntas:

Sensores de detección A B C Significado 0 0 0 VACIO 0 0 1 NORMAL 0 1 0 NO VÁLIDO 0 1 1 LLENO 1 0 0 NO VÁLIDO 1 0 1 NO VÁLIDO 1 1 0 NO VÁLIDO 1 1 1 ALARMA

Válvulas E y S: ‘1’ ⇒ Abierta ‘0’ ⇒ Cerrada

S

E

A

B

C

Page 18: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅18⋅

Desde el punto de vista de nuestro diseño, es posible considerarlo como una caja negra que presentará el siguiente aspecto:

• Entradas: Tres entradas asociadas para cada uno de los sensores de detección de nivel más una señal de reloj (CLK) y otra de inicialización (ResetH), asociadas a la parte secuencial.

• Salidas: Dos (E y S), encargadas de controlar las válvulas de llenado y vaciado.

a) Diseño de Máquina de estados tipo MOORE:

ResetH

CLK

A

B

C E

S

MÁQUINA DE

ESTADOS

Equivalentes

E

ABC

ES

Page 19: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅19⋅

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MaquinaEstadosMoore IS PORT ( sA, sB, sC: IN std_logic; --Señal de entrada. CLK: IN std_logic; --Señal de reloj. sResetH: IN std_logic; --Señal de inicialización sE, sS: OUT std_logic); --Salida END MaquinaEstadosMoore; ARCHITECTURE MaquinaEstadosMooreArch OF MaquinaEstadosMoore IS --Declaración del tipo asociado a los estados. TYPE TipoEstados IS (VACIO, NORMAL, LLENO, ALARMA); --Señales auxiliares para la codificación del --estado actual y siguiente. SIGNAL tEstadoActual, tEstadoSiguiente: TipoEstados; BEGIN -- Proceso dedicado a la lógica 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;

ELSIF (sA = ‘0’ and sB=’1’ and sC = ‘1’) THEN tEstadoSiguiente <= LLENO; END IF; WHEN LLENO => 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 ALARMA => IF (sA = ‘0’ and sB=’0’ and sC = ‘0’) THEN tEstadoSiguiente <= VACIO; ELSE tEstadoSiguiente <= ALARMA; END IF; END CASE; END PROCESS LOGICA_ESTADO; -- Proceso dedicado a la Memoria de Estado MEM_ESTADO: PROCESS(CLK, sResetH, tEstadoSiguiente) BEGIN --Inicialización 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 --lógica de salida. sS <= ‘0’ WHEN (tEstadoActual = VACIO) ELSE ‘1’; sE <= ‘1’ WHEN (tEstadoActual = NORMAL or tEstadoActual = VACIO) ELSE ‘0’; -- sSalida = f(Estado) => Máquina de M OORE. END MaquinaEstadosMooreArch;

Page 20: Maquinas de Estados Mealy Vhdl

Diseño de Sistemas Electrónicos-DB4 Unidad 8. Diseño Basado en Máquinas de Estado Finitas (F.S.M.)

⋅20⋅

b) Diseño de Máquina de estados tipo MEALY:

Diagrama Mealy original

Diagrama Mealy simplificado

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MaquinaEstadosMealy IS PORT ( sA, sB, sC: IN std_logic; --Señal de entrada. CLK: IN std_logic; --Señal de reloj. sResetH: IN std_logic; --Señal de inicialización sE, sS: OUT std_logic); --Salida END MaquinaEstadosM ealy; ARCHITECTURE MaquinaEstadosM ealyArch OF MaquinaEstadosMealy IS --Declaración del tipo asociado a los estados. TYPE TipoEstados IS (NO_ALARMA, ALARMA); --Señales auxiliares para la codificación del --estado actual y siguiente. SIGNAL tEstadoActual, tEstadoSiguiente: TipoEstados; BEGIN -- Proceso dedicado a la lógica de estado: LOGICA_ESTADO: PROCESS(tEstadoActual, sEntrada) BEGIN CASE (tEstadoActual) IS WHEN NO_ALARMA => IF (sA = ‘1’ and sB=’1’ and sC = ‘1’) THEN tEstadoSiguiente <= ALARMA; ELSE tEstadoSiguiente <= NO_ALARMA; END IF;

WHEN ALARMA => IF (sA = ‘0’ and sB=’0’ and sC = ‘0’) THEN tEstadoSiguiente <= NO_ALARMA; ELSE tEstadoSiguiente <= ALARMA; END IF; END CASE; END PROCESS LOGICA_ESTADO; -- Proceso dedicado a la Memoria de Estado MEM_ESTADO: PROCESS(CLK, sResetH, tEstadoSiguiente) BEGIN --Inicialización 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 --lógica de salida. sS <= ‘1’ WHEN (sC = ‘1’) ELSE ‘0’; sE <= ‘1’ WHEN (tEstadoActual = NO_ALARMA and sA = ‘0’ and sB = ‘0’) ELSE ‘0’; -- sSalida = f(Estado, Entradas) => Máquina de M EALY. END MaquinaEstadosM ealyArch;

Equivalentes E

ABC/ES