Maquinas de estado finito

30
MÁQUINAS DE ESTADO ITLAC MÁQUINAS DE ESTADOS FINITOS (FSM) Las máquinas de estados finitos, cuyo nombre proviene del hecho de que el comportamiento funcional de estos circuitos puede representarse mediante un número finito de estados, son una clase general de circuitos en los que las salidas dependen de la conducta anterior del circuito, así como de los valores presentes en las entradas. También se denominan circuitos secuenciales. En la mayor parte de los casos se usa una señal de reloj para controlar la operación de un circuito secuencial; un circuito de este tipo se llama circuito secuencial síncrono. La alternativa, en la que no se emplea ninguna señal de reloj, se denomina circuito secuencial asíncrono. Es más fácil diseñar circuitos síncronos y se utilizan en la inmensa mayoría de las aplicaciones prácticas. Estos circuitos son el tema del presente trabajo. Los circuitos síncronos secuenciales se realizan usando la lógica combinacional y uno o más flip-flops. Su estructura general se muestra en la Figura 1.1. El circuito tiene una serie de entradas principales, W, y produce una serie de salidas, Z. Los valores de las salidas de los flip-flops se conocen como el estado, Q, del circuito. Bajo el control de la señal de reloj, las salidas de los flip-flops cambian su estado según lo determina la lógica combinacional que alimenta las DISEÑO DIGITAL CON VHDL | 1

Transcript of Maquinas de estado finito

Page 1: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

MÁQUINAS DE ESTADOS FINITOS (FSM)

Las máquinas de estados finitos, cuyo nombre proviene del hecho de que el comportamiento

funcional de estos circuitos puede representarse mediante un número finito de estados, son una

clase general de circuitos en los que las salidas dependen de la conducta anterior del circuito,

así como de los valores presentes en las entradas. También se denominan circuitos

secuenciales. En la mayor parte de los casos se usa una señal de reloj para controlar la

operación de un circuito secuencial; un circuito de este tipo se llama circuito secuencial

síncrono. La alternativa, en la que no se emplea ninguna señal de reloj, se denomina circuito

secuencial asíncrono. Es más fácil diseñar circuitos síncronos y se utilizan en la inmensa

mayoría de las aplicaciones prácticas. Estos circuitos son el tema del presente trabajo.

Los circuitos síncronos secuenciales se realizan usando la lógica combinacional y uno o más

flip-flops. Su estructura general se muestra en la Figura 1.1. El circuito tiene una serie de

entradas principales, W, y produce una serie de salidas, Z. Los valores de las salidas de los

flip-flops se conocen como el estado, Q, del circuito. Bajo el control de la señal de reloj, las

salidas de los flip-flops cambian su estado según lo determina la lógica combinacional que

alimenta las entradas de esos flip-flops. De esta manera el circuito pasa de un estado a otro.

Para asegurar que sólo hay una transición de un estado a otro durante un ciclo del reloj, los

flip-flops deben ser del tipo disparado por flanco.

D I S E Ñ O D I G I T A L C O N V H D L | 1

Figura 1.1. Forma general de un circuito secuencial.

Page 2: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

Pueden dispararse ya sea por el flanco positivo (transición de 0 a 1) o por el negativo

(transición de 1 a 0) del reloj. Se empleará el término flanco activo del reloj para referirnos al

flanco del reloj que produce el cambio de estado.

La lógica combinacional que proporciona las señales de entrada a los flip-flops deriva sus

entradas de dos fuentes: las entradas principales, W, y las salidas presentes (actuales) de los

flip-flops, Q. Por tanto, los cambios de estado dependen tanto del estado presente como de los

valores de las entradas principales.

En la Figura 1.1 se indica que las salidas del circuito secuencial se generan mediante otro

circuito combinacional, de tal forma que las salidas son una función del estado presente de los

flip-flops y de las entradas principales. Aun cuando las salidas siempre dependen del estado

presente, no necesariamente deben depender de manera directa de las entradas principales. Por

ende, la conexión mostrada en rojo en la figura podría existir o no. Para distinguir entre estas

dos posibilidades, se acostumbra decir que los circuitos secuenciales cuyas salidas dependen

sólo del estado del circuito son del tipo Moore, mientras que aquellas cuyas salidas dependen

tanto del estado como de las entradas principales son del tipo Mealy. Estos nombres se

asignaron en honor a Edward Moore y George Mealy, quienes investigaron el comportamiento

de estos circuitos en la década de 1950.

PASOS BÁSICOS DE DISEÑO

Se presentan las técnicas para el diseño de circuitos secuenciales por medio de un ejemplo

sencillo. Supóngase que deseamos diseñar un circuito que cumpla con la especificación

siguiente:

1. El circuito tiene una entrada, w, y una salida, z.

2. Todos los cambios en el circuito deben ocurrir en el flanco positivo de una señal de reloj.

3. La salida z es igual a 1 si durante dos ciclos del reloj inmediatamente anteriores la entrada

w era igual 1. De lo contrario, el valor de z es igual a 0.

Por tanto, el circuito detecta si dos o más 1 consecutivos ocurren en su entrada w. Los

circuitos que detectan la ocurrencia de un patrón en particular en su(s) entrada(s) se conocen

D I S E Ñ O D I G I T A L C O N V H D L | 2

Page 3: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

como detectores de secuencia. A partir de esta especificación es evidente que la salida z no

puede depender únicamente del valor presente en w. Para ilustrar esto, considérese la

secuencia de valores de las señales w y z durante 11 ciclos del reloj, como se muestra en la

Tabla 1.1. Los valores de w se suponen arbitrariamente; los valores de z corresponden a

nuestra especificación. Estas secuencias de valores de entrada y salida indican que para un

valor de entrada, la salida puede ser 0 o 1. Por ejemplo, w=0 durante los ciclos del reloj t2 y t5,

pero z=0 durante t2 y z=1 durante t5. De modo similar, w=1 durante t1 y t8, pero z=0 durante t1

y z=1 durante t8. Esto significa que z no está determinada sólo por el valor presente en w, así

que debe haber diferentes estados en el circuito que determinen el valor de z.

DIAGRAMA DE ESTADO

El primer paso en el diseño de una máquina de estado finito consiste en determinar cuántos

estados se necesitan y cuáles transiciones son posibles de un estado a otro. No hay un

procedimiento determinado para esta tarea.

Ciclo de reloj t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10

w: 0 1 0 1 1 0 1 1 1 0 1

z: 0 0 0 0 0 1 0 0 1 1 0

El diseñador debe pensar detenidamente en lo que la máquina debe hacer. Una buena forma de

comenzar es elegir un estado en particular como estado inicial; éste es el estado en el que debe

entrar el circuito cuando se encienda por primera vez o cuando se le aplique una señal reset

(reinicio). Para nuestro ejemplo, supongamos que el estado inicial se llama estado A. Siempre

que la entrada w sea 0, el circuito no necesita hacer nada y, por tanto, cada flanco activo del

reloj debe dar como resultado que el circuito permanezca en el estado A. Cuando w se vuelve

igual a 1, la máquina debe reconocerlo y pasar a un estado distinto, al cual llamaremos estado

B. Esta transición se lleva a cabo en el siguiente flanco activo del reloj después que w se ha

vuelto igual a 1. En el estado B, igual que en el A, el circuito debe mantener el valor de la

salida z en 0, ya que aún no ha visto w=1 para dos ciclos del reloj consecutivos. Cuando se

D I S E Ñ O D I G I T A L C O N V H D L | 3

Tabla 1.1. Secuencias de señales de entrada y salida.

Page 4: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

halla en el estado B, si w es 0 en el siguiente flanco activo del reloj el circuito debe regresar al

estado A. Sin embargo, si w =1 cuando se encuentra en el estado B el circuito debe cambiar a

un tercer estado, llamado C, y luego debe generar una salida z=1. El circuito ha de permanecer

en el estado C siempre que w=1 y debe seguir manteniendo z=1. Cuando w se vuelve 0, la

máquina tiene que moverse de regreso al estado A. Como la descripción anterior maneja todos

los valores posibles de la entrada w que la máquina puede encontrar en sus distintos estados,

se puede concluir que se necesitan tres estados para implementar la máquina deseada. Ahora

que se han determinado de manera informal las posibles transiciones entre los estados, se

describirá un procedimiento más formal para diseñar el circuito secuencial correspondiente. El

comportamiento de un circuito secuencial puede describirse de varias formas. El método

conceptualmente más simple es utilizar una representación gráfica en forma de un diagrama de

estado, que es una gráfica que representa los estados del circuito como nodos (círculos) y las

transiciones entre estados como arcos con dirección. El diagrama de estado de la Figura 1.2

define el comportamiento que corresponde a nuestra especificación.

Los estados A, B y C aparecen como nodos en el diagrama. El nodo A representa el estado

inicial y también el estado en el que entrará el circuito después que se aplique una entrada

w=0. En este estado la salida z debe ser 0, lo cual se indica como A/z=0 en el nodo. El circuito

debe permanecer en el estado A siempre que w=0, lo que se indica por medio de un arco con

D I S E Ñ O D I G I T A L C O N V H D L | 4

Figura 1.2. Diagrama de estado de un circuito secuencial simple.

Page 5: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

una etiqueta w=0 que se origina y termina en este nodo. La primera ocurrencia de w=1

(después de la condición w=0) se registra al pasar del estado A al estado B. Esta transición se

indica en la gráfica por medio de un arco que se origina en A y termina en B. La etiqueta w=1

en este arco denota el valor de entrada que ocasiona la transición. En el estado B la salida

permanece en 0, lo cual se indica como B/z=0 en el nodo.

Cuando el circuito se halla en el estado B, cambiará al estado C si w aún es igual a 1 en el

siguiente flanco activo del reloj. En el estado C la salida z se vuelve igual a 1. Si w permanece

en 1 durante los ciclos subsiguientes del reloj, el circuito permanecerá en el estado C

manteniendo z=1. No obstante, si w se vuelve 0 cuando el circuito está ya sea en el estado B o

en el estado C, el siguiente flanco activo del reloj producirá una transición al estado A. En el

diagrama se indica que la entrada Reset se utiliza para forzar el circuito a entrar en el estado A,

lo cual es posible independientemente del estado en el que se encuentre el circuito.

Se podría tratar Reset simplemente como otra entrada al circuito y mostrar una transición de

cada estado al estado inicial A bajo el control de la entrada Reset. Esto complicaría el

diagrama de modo innecesario. Los estados de una máquina de estado fi nito se implementan

usando flip-flops. Como por lo general éstos tienen la capacidad reset, se puede suponer que la

entrada Reset se utiliza para establecer todos en 0 mediante tal capacidad. Se indicará esto

como se muestra en la Figura 1.2 para mantener los diagramas tan simples como sea posible.

TABLA DE ESTADO

Aun cuando el diagrama de estado brinda una descripción del comportamiento de un circuito

secuencial que es fácil de comprender, para proseguir con la implementación del circuito es

conveniente traducir la información contenida en el diagrama de estado en forma de tabla.

Esto se muestra la Tabla 1.2 la cual corresponde a la tabla de estado para el circuito

secuencial. Ahí se indican todas las transiciones de cada estado presente al estado siguiente

para los diferentes valores de la señal de entrada. Nótese que la salida z se especifica respecto

al estado presente, en concreto, el estado en el que se halla el circuito en el momento presente.

Obsérvese también que no se incluye la entrada Reset; en vez de ello se hizo la suposición

implícita de que el primer estado en la tabla es el estado inicial. Ahora se muestran los pasos

D I S E Ñ O D I G I T A L C O N V H D L | 5

Page 6: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

de diseño que producirán el circuito final. Para explicar los conceptos de diseño básicos,

primero se sigue un procedimiento tradicional de realizar manualmente cada paso de diseño.

Estado presente Estado siguiente Salidazw=0 w=1

A A B 0B A C 0C A C 1

Luego se presenta una explicación de las técnicas de diseño automatizadas que usan

herramientas de diseño asistido por computadora (CAD).

ASIGNACION DE ESTADOS

La Tabla 1.2 define los tres estados en términos de las letras A, B y C. Cuando se implementa

en un circuito lógico, cada estado se representa por medio de una valoración (combinación de

valores) en particular de las variables de estado. Cada variable de estado puede implementarse

en forma de un flip-flop. Como deben producirse tres estados, basta utilizar dos variables de

estado. Sean estas variables y1 y y2. Ahora se puede adaptar el diagrama de bloque general de

la Figura 1.1 a nuestro ejemplo, como se muestra en la Figura 1.3, para indicar la estructura

del circuito que implementa la máquina de estado finito buscada. Dos flip-flops representan

las variables de estado.

A partir de la especificación de la Figura 1.2 y la Tabla 1.2, la salida z está determinada sólo

por el estado presente del circuito. Por tanto, el diagrama de bloque de la Figura 1.3 muestra

que z es una función sólo de y1 y y2; este diseño es más del tipo Moore. Es necesario diseñar un

circuito combinacional que utilice y1 y y2 como señales de entrada y que genere una señal de

salida correcta z para todas las combinaciones posibles de estas entradas.

Las señales y1 y y2 también se alimentan de regreso en el circuito combinacional que determina

el siguiente estado de la FSM.

D I S E Ñ O D I G I T A L C O N V H D L | 6

Tabla 1.2. Tabla de estado para el circuito secuencial de la Figura 1.2

Page 7: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

Este circuito también utiliza la señal de entrada principal w. Sus salidas son las dos señales, Y1

y Y2, que se emplean para establecer el estado de los flip-flops. Cada flanco activo del reloj

hará que los flip-flops cambien su estado a los valores de Y1 y Y2en ese momento. Por

consiguiente, Y1 y Y2 se llaman variables del estado siguiente y y1 y y2 variables del estado

presente. Debemos diseñar un circuito combinacional con entradas w, y1 y y2 tales que, para

todas las combinaciones de estas entradas, las salidas Y1 y Y2 ocasionarán que la máquina pase

al estado siguiente que satisface la especificación. El paso siguiente en el proceso de diseño

consiste en crear una tabla de verdad que defina este circuito, así como el circuito que genera

z.

Para producir la tabla de verdad deseada, asignamos una combinación específica de las

variables y1 y y2 para cada estado. Una asignación posible se da en la Tabla 1.3, donde los

estados A, B y C se representan por medio de y1y2 =00, 01 y 10, respectivamente. La cuarta

combinación, y2 y1=11, no se necesita en este caso.

El tipo de tabla dado en la Tabla 1.3 suele llamarse tabla de asignación de estados. Esta tabla

puede servir directamente como una tabla de verdad para la salida z con las entradas y1 y y2.

Aun cuando para las funciones del estado siguiente Y1 y Y2 la tabla no posee la apariencia de

una tabla de verdad normal, porque hay dos columnas separadas en la tabla para cada valor de

D I S E Ñ O D I G I T A L C O N V H D L | 7

Figura 1.3. Un circuito secuencial general con la entrada w, la salida z y dos flip-flops

Page 8: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

w, es evidente que la tabla incluye toda la información que define las funciones del estado

siguiente en términos de las combinaciones de las entradas w, y1 y y2.

Estado presentey1 y y2

Estado siguiente Salida zw=0 w=1

Y2Y1 Y2Y1

ABC

00 00 01 001 00 10 010 00 10 111 dd dd d

ELECCIÓN DE FLIP-FLOPS Y DERIVACIÓN DE LAS EXPRESIONES DE ESTADO

SIGUIENTE Y DE SALIDA

A partir de la tabla de asignación de estados anterior se pueden derivar las expresiones lógicas

de las funciones del estado siguiente y de la salida. Pero primero se debe decidir el tipo de

flip-flops que se utilizarán en el circuito. La opción más sencilla es usar flip-flops tipo D, pues

en este caso los valores de Y1 y Y2 simplemente se registran en los flip-flops para que se

vuelvan los nuevos valores de y1 y y2. En otras palabras, si las entradas a los flip-flops se

llaman D1 y D2, entonces estas señales son las mismas que Y1 y Y2.

Las expresiones lógicas requeridas pueden deducirse usando mapas de Karnaugh, quedando de

la siguiente forma

Puesto que D1=Y1 y D2=Y2, el circuito lógico correspondiente a las expresiones anteriores se

implementa como se muestra en la Figura 1.4. Obsérvese que se incluye una señal de reloj y

D I S E Ñ O D I G I T A L C O N V H D L | 8

Tabla 1.3. Tabla de asignación de estados para el circuito secuencial de la Tabla 1.2

Page 9: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

que el circuito se proporciona con una capacidad reset activa en nivel bajo. Conectar la entrada

clear de los flip-flops a una señal Resetn externa, como se muestra en la figura, brinda una

forma sencilla de forzar a que el circuito entre en un estado conocido. Si aplicamos la señal

Resetn=0 al circuito, entonces los dos flip-flops se borrarán, poniendo la FSM en el estado

y2y1= 00.

DIAGRAMA DE TIEMPO

Para comprender cabalmente la operación del circuito consideremos su diagrama de tiempo

presentado en la Figura 1.5. En el diagrama se describen las formas de onda de las señales que

corresponden a las secuencias de valores de la Tabla 1.1.

Como estamos utilizando flip-flops disparados por el flanco positivo, todos los cambios en las

señales ocurren poco tiempo después del flanco positivo del reloj. La cantidad de demora del

flanco del reloj depende de los retrasos de propagación a través de los flip-flops. Obsérvese

que la señal de entrada w también se muestra para cambiar ligeramente después del flanco

activo del reloj. Esta suposición es buena porque en un sistema digital típico una entrada como

w sería sólo una salida de otro circuito sincronizado por el mismo reloj.

D I S E Ñ O D I G I T A L C O N V H D L | 9

Figura 1.4. Implementación final del circuito secuencial.

Page 10: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

Un aspecto clave que ha de notarse es que aun cuando w cambia poco tiempo después del

flanco activo del reloj y, por tanto, su valor es igual a 1 (o a 0) para casi todo el ciclo de reloj,

no ocurrirá ningún cambio en el circuito hasta el comienzo del siguiente ciclo de reloj cuando

el flanco positivo haga que los flip-flops cambien de estado. Por ende, el valor de w debe ser

igual a 1 para dos ciclos de reloj si el circuito va a alcanzar el estado C y a generar la salida

z=1.

MODELO DE ESTADO TIPO MEALY

El ejemplo introductorio fue un circuito secuencial en el que cada estado tenía valores

específicos de las señales de salida asociadas con él. Como se explicó al principio del presente

trabajo, se dice que estas máquinas de estado finito corresponden al tipo Moore. Ahora se

explorará el concepto de máquinas tipo Mealy en las que los valores de salida se generan con

base tanto en el estado del circuito como en los valores presentes en las entradas. Esto brinda

mayor flexibilidad en el diseño de circuitos secuenciales. Se presentaran las máquinas tipo

Mealy usando una versión un tanto modificada de un ejemplo anterior.

D I S E Ñ O D I G I T A L C O N V H D L | 10

Figura 1.5. Diagrama de tiempo para el circuito de la Figura 1.4.

Page 11: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

La esencia del primer circuito secuencial presentado es generar la salida z=1 siempre que una

segunda ocurrencia de la entrada w=1 se detecte en ciclos del reloj consecutivos. La

especificación indica que la salida z debe ser igual a 1 en el ciclo del reloj que sigue a la

detección de la segunda ocurrencia de w=1. Supóngase ahora que se elimina este requisito y se

especifica ahora que la salida z debe ser igual a 1 en el mismo ciclo del reloj cuando se detecta

la segunda ocurrencia de w=1. Por tanto, una secuencia de entrada-salida adecuada puede ser

como se muestra en la Tabla 1.4. Para ver cómo se puede producir el comportamiento dado en

esta tabla se comienza seleccionando un estado inicial, A. Siempre que w=0, la máquina debe

permanecer en el estado A, produciendo la salida z=0. Cuando w=1, la máquina debe pasar a

un estado nuevo, B, para registrar el hecho de que ha ocurrido una entrada igual a 1.

Ciclo de reloj t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10

w: 0 1 0 1 1 0 1 1 1 0 1

z: 0 0 0 0 1 0 0 1 1 0 0

Si w aún es igual a 1 cuando la máquina está en el estado B, lo cual ocurre si w=1 durante al

menos dos ciclos consecutivos de reloj, la máquina debe permanecer en el estado B y producir

una salida z=1. En cuanto w se vuelve 0, z debe volverse 0 de inmediato y la máquina debe

regresar al estado A en el siguiente flanco activo del reloj. Por ende, el comportamiento

especificado en la Tabla 1.4 puede lograrse con una máquina de dos estados, la cual tiene un

diagrama de estado como el que aparece en la Figura 1.6. Sólo se requieren dos estados porque

hemos permitido que el valor de salida dependa del valor presente en la entrada así como del

estado presente de la máquina. El diagrama indica que si la máquina se halla en el estado A,

seguirá en él si w=0 y la salida será 0. Esto se señala mediante un arco con la etiqueta

w= 0/z=0. Cuando w se vuelve 1, la salida permanece en 0 hasta que la máquina pasa al estado

B en el siguiente flanco activo del reloj. Esto se denota por medio de un arco de A a B con la

etiqueta w=1/z=0. En el estado B la salida será 1 si w=1, y la máquina permanecerá en el

estado B, como se indica con la etiqueta w=1/z=1 en el arco correspondiente. Sin embargo, si

D I S E Ñ O D I G I T A L C O N V H D L | 11

Tabla 1.4. Secuencias de señales de entrada y salida (ejemplo 2).

Page 12: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

w=0 en el estado B, entonces la salida será 0 y una transición al estado A ocurrirá en el

siguiente flanco activo del reloj.

Un aspecto importante que debe comprenderse es que durante el ciclo de reloj actual el valor

de salida corresponde a la etiqueta en el arco que proviene del nodo del estado presente.

Podemos implementar la FSM de la Figura 1.6 usando los mismos pasos de diseño que en el

ejemplo anterior. La tabla de estado se muestra en la Tabla 1.5. En ella se indica que la salida z

depende del valor presente en la entrada w y no sólo del estado presente.

Estado presente Estado siguiente Salida z

w=0 w=1 w=0 w=1A A B 0 0B A B 0 1

La Tabla 1.6 proporciona la tabla de asignación de estados. Como sólo hay dos estados, es

suficiente utilizar una sola variable de estado, y. Si suponemos que y se produce con un flip-

flop D, las expresiones requeridas de estado siguiente y de salida son

D I S E Ñ O D I G I T A L C O N V H D L | 12

Figura 1.6. Diagrama de estado de una FSM que realiza la tarea de la Tabla 1.4.

Tabla 1.5. Secuencias de señales de entrada y salida (ejemplo 2).

Page 13: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

El circuito resultante se presenta en la Figura 1.7 junto con un diagrama de tiempo el cual se

presenta en la Figura 1.8. Este último corresponde a las secuencias de entrada-salida de la

Tabla 1.4.

Estado presente Estado siguiente Salida z

w=0 w=1 w=0 w=1y Y Y z z

AB

0 0 1 0 11 0 1 0 1

La mayor flexibilidad de las FSM tipo Mealy a menudo desemboca en la realización de un

circuito más simple.

D I S E Ñ O D I G I T A L C O N V H D L | 13

Tabla 1.6. Tabla de asignación de estados para la FSM de la Tabla 1.4

Figura 1.7. Implementación de la máquina de estado finito de la Tabla 1.5.

Page 14: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

DISEÑO DE MÁQUINAS DE ESTADO FINITO CON HERRAMIENTAS (CAD)

Se dispone de herramientas CAD muy modernas para el diseño de máquinas de estado fi nito y

las presentamos en esta sección. Una forma rudimentaria de emplear tales herramientas para el

diseño de una FSM podría ser como sigue: el diseñador usa las técnicas manuales descritas

antes para derivar un circuito con flip-flops y compuertas lógicas a partir de un diagrama de

estado. Este circuito se introduce en el sistema CAD trazando un diagrama esquemático o

escribiendo código estructural en lenguaje de descripción de hardware (HDL, Hardware

Description Language). El diseñador utiliza entonces el sistema CAD para simular el

comportamiento del circuito y las herramientas CAD para implementar en forma automática el

circuito en un chip, por ejemplo en un PLD.

Resulta tedioso sintetizar manualmente un circuito a partir de un diagrama de estado. Como

las herramientas CAD se diseñaron para evitar esa tarea, se han desarrollado formas más

atractivas de utilizarlas para el diseño de FSM. Un mejor enfoque consiste en introducir

directamente el diagrama de estado en el sistema CAD y realizar todo el proceso de síntesis de

forma automática.

Las herramientas CAD soportan este método en dos formas principales. Otro enfoque radica

en permitir al diseñador trazar el diagrama de estado utilizando una herramienta gráfica

parecida a la herramienta de captura esquemática. El diseñador dibuja círculos para

D I S E Ñ O D I G I T A L C O N V H D L | 14

Figura 1.8. Diagrama de tiempo de la máquina de estado finito de la Figura 1.6.

Page 15: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

representar los estados y arcos para representar las transiciones de un estado a otro, e indica

las salidas que la máquina debe generar. El enfoque más popular consiste en utilizar HDL para

escribir código que represente el diagrama de estado, como se describe enseguida.

Muchos HDL proveen constructores que permiten al diseñador representar un diagrama de

estado. Para mostrar cómo se hace esto, se proporcionará el código de VHDL que representa

la máquina simple diseñada manualmente en el primer ejemplo.

CÓDIGO DE VHDL PARA FSM TIPO MOORE

VHDL no define una manera estándar de describir una máquina de estado finito. Por tanto,

cuanto nos apeguemos a la sintaxis de VDHL requerida, habrá más de una forma de describir

una FSM. En la Figura 1.9 se presenta un ejemplo de código de VHDL para la FSM de la

Figura 1.2. En aras de facilitar la explicación, las líneas de código están numeradas en el lado

izquierdo. En las líneas 21 a 26 se declara una entidad llamada simple, que tiene puertos de

entrada Clock, Resetn y w, y un puerto de salida, z. En la línea 27 se usa el nombre Behavior

para el cuerpo de arquitectura, pero desde luego en su lugar podría utilizarse cualquier nombre

válido en VHDL. En la línea 28 se introduce la palabra reservada TYPE, que es una función

de VHDL que nos permite crear un tipo de señal definido por el usuario. El nuevo tipo de

señal se llama State_type, y el código especifica que una señal de este tipo puede tener tres

valores posibles: A, B o C. En la línea 29 se define una señal llamada y que es del tipo

State_type. La señal y se usa en el cuerpo de arquitectura para representar las salidas de los

flip-flops que implementan los estados de la FSM. El código no especifica el número de bits

representado por y. En vez de ello, indica que y puede tener los tres valores simbólicos A, B y

C. Esto significa que no hemos especificado el número de flip-flops de estado que deben

utilizarse para la FSM. Como veremos enseguida, el compilador de VHDL elige de forma

automática un número apropiado de flip-flops de estado cuando se sintetiza un circuito para

implementar la máquina.

También elige la asignación de estado para los estados A, B y C. Algunos sistemas CAD,

como Quartus II, suponen que el primer estado enumerado en la instrucción TYPE (línea 28)

es el estado reset para la máquina. La asignación de estado que tiene todas las salidas de flip-

D I S E Ñ O D I G I T A L C O N V H D L | 15

Page 16: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

flop iguales a 0 se utiliza para este estado. Más adelante en esta sección mostraremos cómo es

posible especificar manualmente la codificación de estados en el código de VHDL si así se

desea.

Una vez definida una señal para representar los flip-flops de estado, el siguiente paso consiste

en especificar las transiciones entre estados. En la Figura 1.9 se presenta una forma de

describir el diagrama de estado; esto se representa por medio del proceso de las líneas 31 a 57.

D I S E Ñ O D I G I T A L C O N V H D L | 16

Figura 1.9. Código de VHDL para la FSM de la Figura 1.2.

Page 17: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

La instrucción PROCESS describe la máquina de estado fi nito como un circuito secuencial.

Las señales utilizadas por el proceso son Clock, Resetn, w y y, y la única señal modificada por

el proceso es y. Las señales de entrada que pueden hacer que el proceso cambie la señal y son

Clock y Resetn; por consiguiente, aparecen en la lista de sensibilidad. Nótese que w no está

incluida en esa lista, ya que un cambio en su valor no puede afectar a y hasta que ocurre un

cambio en la señal Clock.

En las líneas 33 y 34 se especifica que la máquina debe entrar en el estado A, el estado reset, si

Resetn=0. Puesto que la condición para la instrucción IF no depende de la señal de reloj, el

estado reset es asíncrono, razón por la que Resetn se incluye en la lista de sensibilidad en la

línea 31.

Cuando la señal reset no se válida, la instrucción ELSIF en la línea 35 especifica que el

circuito espera el flanco positivo de la señal de reloj (Clock). El comportamiento de y se

define por medio de la instrucción CASE de las líneas 36 a 55. Corresponde al diagrama de

estado de la Figura 1.2. Como la instrucción CASE está dentro de la instrucción ELSIF,

cualquier cambio en y sólo puede ocurrir como resultado de un flanco positivo del reloj. En

otras palabras, la condición ELSIF implica que y debe implementarse como la salida de uno o

más flip-flops. Cada cláusula WHEN en la instrucción CASE representa un estado de la

máquina. Por ejemplo, la cláusula WHEN en las líneas 37 a 42 describe el comportamiento de

la máquina cuando se halla en el estado A. Según el principio de la instrucción IF en la línea

38, cuando la FSM se encuentra en el estado A, si w=0 la máquina debe permanecer en el

estado A; pero si w=1, debe cambiar al estado B. Las cláusulas WHEN en la instrucción

CASE corresponden exactamente al diagrama de estado de la Figura 1.9. La parte final de la

descripción de la máquina de estado aparece en la línea 58. Especifica que si la máquina se

encuentra en el estado C, entonces la salida z debe ser 1; de lo contrario, z debe ser 0.

ESPECIFICACIÓN DE FSM TIPO MEALY CON VHDL

Una FSM tipo Mealy puede especificarse de una manera similar a una FSM tipo Moore. En la

Figura 1.10 se proporciona el código de VHDL completo para la FSM de la Figura 1.6. Las

transiciones de estado se describen de la misma forma que en nuestro ejemplo de VHDL

D I S E Ñ O D I G I T A L C O N V H D L | 17

Page 18: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

original de la Figura 1.9. La señal y representa los flip-flops de estado y State_type especifica

que y puede tener los valores A y B. Comparado con el código de la Figura 1.9, la principal

diferencia en el caso de una FSM tipo Mealy es el modo en que se escribe el código para la

salida.

D I S E Ñ O D I G I T A L C O N V H D L | 18

Figura 1.10. Código de VHDL para la FSM de la Figura 1.6.

Page 19: Maquinas de estado finito

M Á Q U I N A S D E E S T A D O I T L A C

En la Figura 1.10 la salida z se define con una instrucción CASE. Establece que cuando la

FSM se halla en el estado A, z debe ser 0, pero cuando se encuentra en el estado B, z debe

tomar el valor de w. Esta instrucción CASE describe de manera apropiada la lógica necesaria

para z, pero tal vez no sea evidente por qué se usa una segunda instrucción CASE en el código

en vez de especificar el valor de z dentro de la instrucción CASE que define las transiciones

de estado. La razón es que la instrucción CASE para las transiciones de estado está anidada

dentro de la instrucción IF que espera que ocurra un flanco del reloj. Por consiguiente, si

colocamos el código para z dentro de esta instrucción CASE, entonces el valor de z sólo

podría cambiar como resultado de un flanco del reloj. Esto no satisface los requisitos de la

FSM tipo Mealy, pues el valor de z debe depender no sólo del estado de la máquina sino

también de la entrada w.

CONCLUSIONES

En el siguiente texto se consiguió discernir entre las dos máquinas de estado a las que se

refiere este texto, se abstrajeron los conceptos de diagrama y tabla de estado un circuito

secuencial como una FSM, además de que se reafirmaron las bases para el diseño de circuitos

secuenciales(máquinas de estado).

BIBLOGRAFÍA:

Brown, Stephen y Vranesic, Zvonko Fundamentos de lógica digital con diseño VHDL,

segunda edición, editorial Mc Graw Hill.

Tocci, Ronald J. Sistemas digitales principios y aplicaciones, décima edición, Editorial

Prenctice Hall.

Pong P. Chu, “FPGA Prototyping by VHDL Examples: Xilinx Spartan 3-E”, primera edición,

Ed Wiley & Sons, 2008.

Floyd Thomas L; Fundamentos de sistemas digitales, novena edición, Editorial Pearson

Educación, México 2006.

Morris Mano, M., Diseño Digital, Tercera edición, Pearson Educación, México 2003.

D I S E Ñ O D I G I T A L C O N V H D L | 19