10. Máquinas de Estado Finito

10. Máquinas de Estado Finito
Las máquinas de estado finito, llamadas también autómatas finitos son modelos matemáticos que constituyen una importante herramienta en el diseño de circuitos físicosecuenciales, en el estudio de los lenguajes formales y de compiladores e intérpretes de
varios lenguajes de programación.
Mientras que en un circuito combinacional la salida depende únicamente de la entrada
en ese instante, una máquina secuencial es un sistema que acepta unas entradas y genera
unas salidas en instantes de tiempo discretos. La salida en cada instante dependerá de la
condición interna (estado) de la máquina en ese instante y de la entrada actual al sistema.
Por otro lado, la entrada y el estado en cierto instante determinan el estado que la máquina
tendrá en el instante siguiente.
Todas las máquinas de estado finito tienen un conjunto de estados, un estado inicial, un
alfabeto fuente y una función de transición que a cada pareja de estado y dato de entrada le
asigna el estado siguiente. Los estados de la máquina le dan unas capacidades de memoria
limitadas. Algunas máquinas de estado finito producen un símbolo como dato de salida
para cada transición y pueden utilizarse para modelar gran variedad de máquinas, en las
que se incluyen las máquinas expendedoras, los semáforos, los sumadores binarios, y
los reconocedores de lenguaje. También estudiaremos máquinas de estado finito que no
generan datos de salida, pero tienen estados finales. Estas máquinas (autómatas) se utilizan
con gran frecuencia en el reconocimiento de lenguajes. Las cadenas que se reconocen son
aquellas que transforman el estado inicial en un estado final. Los conceptos de gramática y
máquina de estado finito pueden relacionarse entre sí. De hecho, los conjuntos que son
reconocidos por una máquina de estado finito son los conjuntos generados por cierto tipo
de gramática.
Capítulo 10. Máquinas de Estado Finito
28
10.1
Estados
Cada etapa que atraviesa un circuito secuencial se denomina estado. En cada estado, el
circuito almacena un recuerdo de su historia pasada, para saber qué hacer a continuación.
Un estado se distingue de otro por sus recuerdos almacenados. Parecerá que, a medida que
progresa el tiempo, es necesario añadir nuevos elementos a la memoria y, por consiguiente,
desarrollar una secuencia ilimitada de estados nuevos y diferentes. Sin embargo, parece
que ni toda la historia pasada es relevante, ni todos los estados por los que progresa el
sistema son diferentes entre sí y que el número total de estados es bastante limitado.
Ejemplo 10.1 — Máquina expendedora de dulces. Supongamos que una máquina
expendedora tiene dos tipos de productos A y B. El precio de cada producto es de 200
pesos. La máquina admite únicamente monedas de 100 y 200 pesos y devuelve el cambio
de necesario. Dispone de un botón rojo que expide el producto A y uno verde que hace
lo mismo con el producto B. Carlos quiso comprar el producto A y para ello introdujo
consecutivamente dos monedas de 100 pesos. Luego, apretó el botón rojo y obtuvo el
producto deseado. Representamos el proceso con la tabla 10.1, donde t0 es el instante
inicial cuando inserta su primera moneda y ti con i = 1, 2, 3 son los instantes posteriores.
�
t0
Estado Actual
Entrada
Salida
Próximo Estado
t1
t2
t3
s0
s1
s2
s0
$100 $100 Botón rojo
Nada Nada Producto A
s1
s2
s0
Cuadro 10.1: Proceso de la máquina expendedora de dulces
La máquina está en un estado de espera en el estado s0 : espera a que un cliente
comience a insertar monedas hasta un total de $200 pesos o más y oprima el botón para
obtener el producto deseado. Si en cualquier momento del proceso, el total de monedas
insertadas supera los $200 pesos, la máquina devuelve el cambio necesario antes de que el
cliente oprima el botón correspondiente.
Estando la dispensadora en el estado s0 , ocurre el instante t0 en el cual Carlos inserta
una moneda de $100 y no recibe nada. Ahora, la máquina pasa a un estado s1 el cual indica
que tiene almacenados 100 pesos y que está a la espera de otra moneda.
Luego ocurre el instante t1 : Carlos inserta otra moneda de $100 y otra vez, no recibe
nada. La máquina ha pasado al estado s2 que indica que tiene almacenados $200 pesos
pero todavía no sabe qué tipo de producto quiere Carlos.
Al oprimir el botón rojo en el instante t2 , la máquina expide el producto A y en el
siguiente instante se coloca de nuevo en el estado inicial s0 (ninguna moneda almacenada).
Las características de esta máquina son:
En un instante dado, la máquina sólo puede estar en un estado de un conjunto finito
de estados internos posibles.
La máquina sólo acepta un número finito de entradas (en el ejemplo, monedas de
100 y 200 pesos, botones rojo y verde).
Mediante cada combinación de entrada y estado interno, se produce una salida y un
estado siguiente. El conjunto de salidas, para nuestra máquina es nada, monedas de
100 y 200 pesos y productos A y B.
10.2 Máquinas de Estado Finito con Salida
29
Los procesos de la máquina son secuenciales y se producen en instantes distintos.
La máquina es determinista ya que la salida queda determinada por el estado y la
entrada.
�
10.2
Máquinas de Estado Finito con Salida
Definición 10.2.1 Una máquina de estado finito con salida, M = (S, I, O, f , g, s0 ), con-
siste en un conjunto finito de estados S, un alfabeto (conjunto finito no vacío) de entradas
I, un alfabeto de salidas O, un estado inicial s0 , una función de transición f : S × I −→ S
y una función de salida g : S × I −→ O.
Las máquinas de este tipo se llaman máquinas de Mealy porque fue G. H. Mealy, en
1955, el primero que las estudió. Hay otro tipo importante de máquina de estado finito con
salida, donde la salida está determinada sólo por el estado. Este tipo de máquina se llama
máquina de Moore en honor a E. F. Moore, quien la definió en 1956.
Una máquina M = (S, I, O, f , g, s0 ) puede describirse por una tabla de estados, que
indica los valores de las funciones f y g, o por un diagrama de estados, grafo dirigido
donde los vértices representan los estados de la máquina. El estado inicial se indica
mediante una flecha que no proviene de otro estado y existe una flecha, etiquetada por
“i,o”, del estado s al estado s� si f (s, i) = s� y g(s, i) = o, como se muestra en la figura 10.1.
Figura 10.1: Conexión entre dos estados
�
Ejemplo 10.2 La tabla 10.2 corresponde a la tabla de estados del ejemplo 10.1.
Estados
s0
s1
s2
Transición
Salida
$100
Entrada
$200 Rojo
Verde
$100
Entrada
$200 Rojo
s1
s2
s2
s2
s2
s2
s0
s1
s0
Nada
Nada
$100
Nada
$100
$200
s0
s1
s0
Verde
Nada Nada
Nada Nada
A
B
Cuadro 10.2: Tabla de estados de la máquina expendedora de dulces
El correspondiente diagrama de estados sería aquel mostrado en la figura 10.2.
�
�
Ejemplo 10.3 — Máquina generadora de retardo. Se quiere diseñar una máquina
de estado finito con una unidad de retardo que, dada una cadena de entrada x = x1 ...xk
devuelva 0x1 ...xk−1 .
La máquina inicia en un estado s0 . Este estado indica que la máquina está a la espera
de entradas. En este estado pueden llegar dos entradas: ‘0’ y ‘1’. Si llega un ‘1’, la máquina
30
Capítulo 10. Máquinas de Estado Finito
Figura 10.2: Diagrama de Estados de la máquina expendedora de dulces
pasará al estado s1 el cual indica que hay acumulado un ‘1’ al tiempo que arroja una
salida: ’0’. Si en cambio llegase un ‘0’, la máquina pasaría del estado s0 al estado s2 el cual
indica que hay acumulado un ’0’ al tiempo que arroja una salida: ‘0’. Hasta el momento la
máquina es la mostrada en la figura 10.3
Figura 10.3: Construcción del Generador de Retrardos
Ahora, estando en s1 , sin importar el valor de la entrada, la salida será el ‘1’ que estaba
acumulado en ese estado. De forma similar, estando en s2 , sin importar el valor de la
entrada, la salida será el ‘0’ que estaba acumulado en ese estado. Si la entrada es ‘1’ -desde
ambos estados-, esta deberá acumularse en el estado s1 y si la entrada es ‘0’ -desde ambos
estados-, deberá acumularse en el estado s2 .
El diagrama final del generador de retardo se presenta en la figura 10.4.
�
� Ejemplo 10.4 — Máquina generadora de dos unidades de retardo. Se quiere
diseñar una máquina de estado finito con dos unidades de retardo que, dada una cadena de
10.2 Máquinas de Estado Finito con Salida
31
Figura 10.4: Diagrama de Estados del Generador de Retrardos
entrada x = x1 ...xk devuelva 00x1 ...xk−2 .
Antes de comenzar. Recuerde que en la máquina de estados del ejemplo 10.3 se
acumulaba un solo dígito (‘0’ o ‘1’). Por esta razón, sólo se necesitaba un total de 3 estados:
2 estados de “tránsito” más un estado de inicio (al cual no se volvía, una vez comenzada la
secuencia). Pues, bueno, esta vez haremos algo similar. Como necesitamos acumular dos
dígitos (“00”, “01”, “10” o “11”) necesitamos un total de 5 estados: 4 estados de “tránsito”
más un estado inicial. El esqueleto del diagrama de estados se muestra en la figura 10.5.
Diseñemos la máquina de estados finitos a partir de una secuencia de entrenamiento
cualquiera como: “00001111011000010�� .
Figura 10.5: Esqueleto del Diagrama de Estados del Generador de dos unidades de Retrardos
Para ayudarnos un poco, en la tabla 10.3 se muestran los dígitos acumulados, los que
Capítulo 10. Máquinas de Estado Finito
32
vamos imprimiendo y los que van llegando.
Llegó
Acumulado
00
Impreso
Cuadro 10.3: Tabla de ayuda
Tenga en cuenta que antes de que comiencen a llegar dígitos a la máquina, esta ya tiene
dos ceros acumulados: “00”. Empecemos, pues, con la secuencia de entrenamiento:
El estado inicial de la máquina es s0 . Cuando llega el primer ‘0’, se imprime el primer
dígito acumulado que, en este caso, también es cero. Ahora, se tendrá acumulado de nuevo
un “00”. En la tabla 10.4 se muestra el estado actual del sistema.
Llegó
0
Acumulado
0✁ 00
Impreso
0
Cuadro 10.4: Tabla de ayuda
Cuando llega el siguiente ‘0’, se imprime el primer dígito acumulado (‘0’) y todavía se
tiene acumulado un “00”. Al sistema llegan otros dos ceros. Esto provoca que se impriman
dos nuevos ceros y que se acumulen dos ceros. En la tabla 10.5 se muestra el estado actual
del sistema.
Llegó
0000
Acumulado
✘✘
✘
000000
Impreso
0000
Cuadro 10.5: Tabla de ayuda
Ahora, cuando llega el primer ‘1’, se imprime el primer dígito acumulado (‘0’) y se
tendrá acumulado un “01”. Si llega otro ‘1’, se imprimirá el primer dígito acumulado (‘0’)
y quedará acumulado un “11”. En la tabla 10.6 se muestra el estado actual del sistema.
Llegó
000011
Acumulado
✘✘✘
00000011
✘
Impreso
000000
Cuadro 10.6: Tabla de ayuda
Se puede ver que cada estado indica los dígitos que hay acumulados. En la figura 10.6
se muestra el estado actual del diagrama de estados.
10.2 Máquinas de Estado Finito con Salida
33
Figura 10.6: Diagrama de Estados del generador de dos unidades de retardo
Al llegar un nuevo ‘1’, se imprimirá el primer dígito acumulado (‘1’) y quedará
acumulado nuevamente un “11”. Al sistema llegan otros dos unos. Esto provoca que se
impriman dos nuevos unos y que se acumulen dos unos. Al llegar un ‘0’, se imprimirá el
primer dígito acumulado (‘1’) y ahora quedará acumulado un “10”. En la tabla 10.7 se
muestra el estado actual del sistema y en la figura 10.7 se muestra el estado actual del
diagrama de estados.
Llegó
0000111110
Acumulado
✭
✭✭
✭✭✭
000000111110
✭
Impreso
0000001111
Cuadro 10.7: Tabla de ayuda
Figura 10.7: Diagrama de Estados del generador de dos unidades de retardo
Al llegar un ‘1’, se imprimirá el primer dígito acumulado (‘1’) y ahora quedará
acumulado un “01”.
Capítulo 10. Máquinas de Estado Finito
34
Se puede verificar que con el resto de la secuencia de entrenamiento se consigue el
diagrama de estados de la figura 10.8 y la tabla 10.8.
Llegó
00001111011000010
Acumulado
✭✭✭
00000011111011000010
✭✭✭✭
Impreso
000000111110110000
✭✭✭✭
Cuadro 10.8: Tabla de ayuda
Figura 10.8: Diagrama de Estados final del generador de dos unidades de retardo
El salto de s0 a s2 se consigue cuando al iniciar la secuencia se ingresa un ‘1’ en vez de
un ‘0’.
�
Ejercicio 10.1 — Generador de Retrasos Avanzado. Diseñe una máquina de estado
finito con tres unidades de retardo que, dada una cadena de entrada x = x1 ...xk devuelva
010x1 ...xk−3 .
�
10.3
Autómata finito
Un autómata finito (determinista) es un modelo matemático de una máquina que
permite saber si una cadena de símbolos pertenece o no a un lenguaje definido sobre cierto
alfabeto. Consiste en un conjunto finito de estados y un conjunto de transiciones entre
estos estados, que dependen de los símbolos de la cadena de entrada. El autómata acepta
una cadena de entrada si al terminar de leer todos los símbolos de esa cadena la máquina
está en alguno de los posibles estados finales; si el estado no es final, entonces la cadena
no pertenece al lenguaje que reconoce la máquina.
10.3 Autómata finito
35
Definición 10.3.1 Un autómata de estado finito M = (S, I, f , s0 , F) consiste en un
conjunto finito de estados S, un alfabeto de entradas I, un estado inicial s0 , una función
de transición f : S × I → S y un conjunto F de estados finales o de aceptación (F ⊆ S).
En el diagrama de transición de un autómata finito los estados finales están encerrados
en un círculo doble.
Cuando se usa un autómata para detectar secuencias, también se lo conoce con el
nombre de máquina de estado finito reconocedora o detectora de secuencia. Este tipo de
sistema suele tener una salida cuya única función es la de indicar que se ha alcanzado el
estado de éxito, de manera que un agente externo a la máquina podría reconocer que se ha
reconocido la secuencia, una vez se active la salida.
Las Máquinas de Estado Finito son útiles para reconocer contraseñas, códigos o la
validación de paquetes de datos en transmisión digital.
�
Ejemplo 10.5 — Máquina de Estado Finito detectora. Determine cuál es la secuencia
de cuatro dígitos que detecta la máquina de estados de la figura 10.9 sabiendo que las
entradas al sistema son números en base tres y que la salida se pone en ‘1’ sólo cuando se
ingresa la secuencia correcta.
Figura 10.9: Diagrama de Estados de una máquina detectora de secuencias
La máquina inicia en el estado de reposo s0 . Hay dos posibles rutas y dos posibles
estados finales s4 y s8 . Podríamos asumir que la ruta hacia el estado s4 es la ruta que detecta
la secuencia correcta pues la salida en la transición hacia ese estado es ‘1’ lo que haría de
la otra ruta, el desvío para la secuencia incorrecta.
Capítulo 10. Máquinas de Estado Finito
36
Analizando la ruta correcta se tiene que la secuencia que se busca detectar es “0112”.
Como la salida solo es ‘1’ en la transición hacia el estado final s4 y como la secuencia
detectada está en base 3, podemos asegurar que esta ruta es, ciertamente, la que detecta la
secuencia correcta.
�
La detección de secuencias se puede hacer de dos formas. Supongamos que queremos
detectar la secuencia binaria "101101"dentro de la secuencia "101011011011101101".
Podríamos analizar (dividir) el patrón por bloques de seis bits (dado que la longitud de la
clave “101101” es 6) y encontraríamos la clave una sola vez:
101011 − 011011 − 101101
Este análisis parece ser como una carga “paralela” (aunque no lo sea) pues parece que
hemos cargado bloques de 6 bits, para luego analizarlos. Si, en cambio, analizáramos el patrón “a medida que va llegando” (lo cual parecería ser una carga en “serie”) encontraríamos
dos veces la clave:
10 − 101101 − 101110 − 1101
El primer método se conoce como máquina de estado finito detectora sin solapamiento
mientras que el segundo método se conoce como máquina de estado finito detectora con
solapamiento.
Definición 10.3.2 — Solapamiento de secuencias. Una secuencia s0 = x1 x2 ...xr−1 xr ,
de longitud r, se solapa con otra secuencia s1 = y1 y2 ...y p−1 y p , de longitud p ≥ r, cuando
se puede formar una secuencia s2 = z1 z2 ...zk−1 zk = xr−k+l+1 xr−k+l+2 ...xr y1 y2 ...yl−1 yl ,
de longitud k, con los últimos k − l ≤ r elementos de s0 y los primeros l ≤ p elementos
de s1 .
10.3.1
Máquina de Estado Finito Detectora SIN Solapamiento
En ciertos casos, es necesario detectar que una secuencia se ha introducido de forma
errónea. Por ejemplo, supongamos el siguiente escenario:
El día de ayer me quedé sin dinero para salir con mi novia así que fui al cajero para
retirar solo el 10 % del saldo de mi cuenta. La clave de mi tarjeta débido es 1231. Introduje
mi tarjeta en el cajero, retiré mi dinero y me fui tranquilo. La persona que me seguía en la
cola también iba a retirar plata. La clave de la tarjeta débido de esta persona era 2314. A
simple vista se puede ver que ambas claves son distintas.
Por desgracia, el ingeniero que diseñó ese cajero, lo hizo con una máquina de estado
finito detectora con solapamiento y cuando yo metí mi clave, la máquina quedó con la
secuencia “1231” almacenada. Cuando quien me seguía introdujo la clave “2314”, este ya
tenía parte de la mía (1231), solapándose antes de que digitara el último dígito de la suya
(1231 − 2314).
Al escribir solamente 231 ya había conseguido acceso a mi cuenta bancaria y pudo
retirar, por desgracia, el 90 % de mi saldo restante.
Este es un ejemplo de los casos en que no es deseable tener una detectora con solapamiento. No obstante, esto no implica que en ningún caso se desee tener una máquina de
este tipo. Más adelante veremos las máquinas con solapamiento.
10.3 Autómata finito
37
Diseño de una Detectora SIN solapamiento
En el diseño una detectora sin solapamiento debemos tener por lo menos dos rutas con
estados finales que requieran reinicio: una que corresponda a la secuencia correcta y otra
que corresponda a cualquier posible secuencia errónea. Ya habíamos visto un ejemplo de
este tipo de detectoras en la figura 10.9.
Para diseñar la ruta “correcta”, crearemos un estado por cada uno de los dígitos de la
secuencia que se deba comprobar. En la transición hacia el último dígito (estado) se debe
indicar que la salida fue correcta, haciendo uso de las salidas de la máquina. En la figura
10.10 se muestra un ejemplo de esta construcción.
Figura 10.10: Detectora de secuencias sin solapamiento para la secuencia “101”
A la hora de diseñar la ruta “errónea” hay que distinguir el propósito de la máquina
detectora de secuencias, pues la máquina podría ser diseñada para optimizar cómputo o
bien para validar claves. Veremos un ejemplo de ambos casos:
�
Ejemplo 10.6 — Detectora sin solapamiento para optimizar código. Doña Juana,
la señora que vende tintos en Digita-landia, se siente desconsolada. Alguien cometió un
crimen gravísimo en contra de ella: le robó un cubo de azúcar. Doña Juana no sabe quién es
el culpable en una ciudad de 8 habitantes: solo tiene una gota de sangre que quedó en la caja
de azúcar. La Universidad de Antioquia encontró que la cadena de ADN del sospechoso es:
“101” así que basta con comparar esta cadena, con la de los 8 habitantes de Digita-landia.
Aunque parece ser una tarea muy fácil, sólo se dispone de un computador que efectúa una
operación por minuto, por lo que sería muy bueno si se pudiera disminuir el tiempo de
computo. Modele el sistema como una máquina de estados finito sin solapamiento.
Para empezar, es crucial saber que las secuencias no se pueden solapar porque si así
fuera, se incriminaría al sospechoso incorrecto. Ahora, vamos a diseñar la máquina de
manera que logremos identificar cuándo la secuencia deja de coincidir. La máquina de
estados tendrá tres posibles salidas: una para saber que la máquina está procesando, otra
para saber que el procesamiento terminó sin éxito y otra para saber que el procesamiento
terminó exitosamente. Las salidas serán: “00”, “01” y “10”, respectivamente.
38
Capítulo 10. Máquinas de Estado Finito
En la figura 10.11 se muestra la ruta “correcta” de la máquina.
Figura 10.11: Ruta correcta del identificador de ADN “101”
Si al sistema entra un dígito erróneo, deberá salir inmediatamente, para que se compare
una nueva secuencia lo más pronto posible. En la figura 10.12 se muestra el diagrama
completo.
Figura 10.12: Diagrama completo del identificador de ADN “101”
�
Ejercicio 10.2 Analice los tiempos de cómputo al comparar la secuencia “101” contra
todas las posibles secuencias de 3 bits, usando el diagrama de la figura 10.12 y el
10.3 Autómata finito
39
diagrama de la figura 10.13. ¿Cuál requiere menos tiempo para hacer los cálculos si
ambas máquinas efectúan una operación por minuto?
Figura 10.13: Diagrama del identificador de ADN “101” NO óptimo
�
Ejercicio 10.3 — Búsqueda de un criminal. Después de encontrar al ladrón de cubos
de azúcar, se lo acusa también de robar tres bolsitas de sal en la ciudad vecina de Digitalandia en el año de 1994. Su cédula es “1230567” y presuntamente debería encontrarse
en una lista de 107 personas (todas las cédulas tienen 7 dígitos). Diseñe una máquina de
estado finito sin solapamiento para hallar la cédula del criminal.
�
Ejemplo 10.7 — Detectora sin solapamiento para validar contraseñas. Para poder
retirar dinero de su cuenta bancaria, deberá proporcionar la clave “101” al cajero. Modele
el sistema como una máquina de estados finito sin solapamiento. Asuma que las salidas
de la máquina son “00”para indicar que la máquina está procesando, “01” para indicar
que el procesamiento terminó y la contraseña es incorrecta y “10” para indicar que el
procesamiento terminó exitosamente.
En este ejemplo no se puede diseñar una máquina que optimice el tiempo. Suponga el
siguiente escenario: Javier es un ladrón novato que se acabó de encontrar una tarjeta débito
al lado del cajero, cuya clave es “101”. El cajero tiene entrada binaria y fue diseñado como
una máquina de estados detectora sin solapamiento para optimizar código igual a aquella
de la figura 10.12. El cajero llama a la policía cuando la clave de una cuenta se ingresa 3
veces de forma incorrecta.
Javier entra a él y trata de descubrir la contraseña de la cuenta:
Primero ingresa un ‘0’. El cajero interrumpe inmediatamente la transacción (la salida
de la máquina fue “01”), por lo que Javier ya sabe que el primer dígito es ‘1’. Volverá a
intentarlo: esta vez, empieza ingresando un ‘1’ y luego ingresa otro ‘0’. Esta vez el cajero
no finalizó la transacción porque era justamente este dígito el que seguía en la secuencia.
�
40
Capítulo 10. Máquinas de Estado Finito
Ahora Javier va por el último: ingresa otro ‘0’ y el cajero detiene la transacción. Javier ya
sabe que la clave de la tarjeta es “101” y todavía no se ha activado la alarma.
En este tipo de escenarios NO se puede usar una detectora optimizadora de código. Se
debe hacer que la ruta “errónea” sea tan larga como la ruta “correcta” para que quien use la
máquina no se entere (con tanta facilidad) de la secuencia válida. La máquina que modela
el funcionamiento del cajero se muestra en la figura 10.14.
Figura 10.14: Diagrama del cajero que detecta la clave “101”
Analicemos la figura 10.14 en el mismo escenario anterior: Javier llega e introduce
un ‘0’. La máquina sigue por la ruta errónea pero no finaliza la transacción. Javier supone
que el primer dígito fue correcto así que introduce otro ‘0’. La máquina sigue por la ruta
errónea (aunque este segundo dígito sí sea correcto, una vez en s4 , no importa cuál sea
la entrada, la máquina continuará en la ruta errónea) y todavía no finaliza la transacción.
Finalmente, Javier introduce un último ‘0’ con lo que la máquina finaliza la transacción
(la salida fue “01”). Javier supone que el error estuvo en el último dígito así que vuelve
a intentar, pero con la secuencia “001”. La máquina finaliza nuevamente la transacción.
Javier, desconcertado, vuelve a intentar, pero ahora empieza con un ‘1’. La máquina pasa
al estado s1 que hace parte de la ruta correcta. Ahora Javier introduce otro ‘1’ (la máquina
salta a la ruta errónea) e ingresa un último ‘1’. Aunque el primer y último dígitos sean
correctos, la máquina solo finaliza la transacción después del último de ellos. Javier vuelve
a intentarlo, pero ya es demasiado tarde pues unos 20 policías del Cuerpo Policial de
Digita-landia lo tienen rodeado.
�
Con los ejemplos 10.6 y 10.7 se quiso mostrar los dos tipos de máquinas de estado finito
detectoras de secuencia sin solapamiento. Analice muy bien para qué tipo de escenario se
usa cada una de ellas.
10.3.2
Máquina de Estado Finito Detectora CON Solapamiento
Los ejemplos anteriores mostraban que existen casos en los que no es deseable tener
una detectora con solapamiento. No obstante, esto no implica que en ningún caso se desee
10.3 Autómata finito
41
tener una máquina de este tipo. Supongamos, ahora el siguiente escenario:
Recién han contratado a Gloria para que se encargue de la seguridad informática del
Banco de la República. Resulta que en los últimos días ha circulado por toda la internet un
nuevo virus con un identificador binario “11001110”. Su tarea es identificar los paquetes
que tengan dicho identificador.
Ella abrió su analizador de paquetes para inspeccionar todo el tráfico que entraba al
banco y recibió una cadena muy sospechosa: “111110001001110011101111”. Si usara
una detectora sin solapamiento debería separar la secuencia en grupos de 8 bits:
111110001001110011101111
11111000 − 10011100 − 11101111
Parecería que el identificador del virus no está presente en la secuencia, sin embargo,
si analizamos la secuencia con solapamiento tenemos que:
111110001001110011101111
111110001001 − 11001110 − 1111
Por lo que sí ha llegado el identificador del virus. El truco aquí consiste en reconocer
que, hasta donde se ha analizado la cadena, aunque no se haya encontrado la clave completa,
hay algunos dígitos que nos sirven para formarla. Primero, como ya debe ser costumbre,
se prepara la ruta “correcta”, la cual es mostrada en la figura 10.15.
Figura 10.15: Ruta correcta del diagrama con solapamiento para hallar la secuencia
“11001110”
42
Capítulo 10. Máquinas de Estado Finito
Para construir la ruta “incorrecta”, tenemos que analizar la secuencia acumulada a
medida que añadimos entradas incorrectas a ruta “correcta”. Veamos:
1. En s0 no tenemos valores acumulados de la secuencia “correcta” así que si llega un
‘0’, seguiremos sin tener valores acumulados de la secuencia. Por esta razón, estando
en s0 , si llega un ‘0’, seguiremos en s0 .
2. En s1 tenemos acumulada la secuencia “1” (un único dígito). Si llega un ‘0’, se
tendrá acumulada la secuencia “10” la cual no hace parte1 de la secuencia “correcta”.
De esta manera, estando en s1 , si llega un ‘0’, iremos a s0 .
3. En s2 tenemos acumulada la secuencia “11”. Si llega un ‘1’, tendremos acumulada
la secuencia “111”. De esta secuencia nos sirven los últimos dos dígitos: “11”. De
esta manera, estando en s2 , si llega un ‘1’, seguiremos en s2 .
4. En s3 tenemos acumulada la secuencia “110”. Si llega un ‘1’, tendremos acumulada
la secuencia “1101”. De esta secuencia no podemos formar parte de la secuencia
correcta. De esta manera, estando en s3 , si llega un ‘1’, iremos a s0 .
5. En s4 tenemos acumulada la secuencia “1100”. Si llega un ‘0’, tendremos acumulada
la secuencia “11000”. De esta secuencia no podemos formar parte de la secuencia
correcta. De esta manera, estando en s4 , si llega un ‘0’, iremos a s0 .
6. En s5 tenemos acumulada la secuencia “11001”. Si llega un ‘0’, tendremos acumulada la secuencia “110010”. De esta secuencia, tampoco podemos formar parte de la
secuencia correcta. De esta manera, estando en s5 , si llega un ‘0’, iremos a s0 .
7. En s6 tenemos acumulada la secuencia “110011”. Si llega un ‘0’, tendremos acumulada la secuencia “1100110”. De esta secuencia nos sirven los últimos tres dígitos:
“110”. De esta manera, estando en s6 , si llega un ‘0’, iremos a s3 que es en donde se
tiene acumulada la secuencia “110”.
8. En s7 tenemos acumulada la secuencia “1100111”. Si llega un ‘1’, tendremos
acumulada la secuencia “11001111”. De esta secuencia nos sirven los últimos
dos dígitos: “11”. De esta manera, estando en s7 , si llega un ‘1’, iremos a s2 que es
en donde se tiene acumulada la secuencia “11”.
9. s8 es un estado especial: aunque en este estado se tiene acumulada la secuencia
“11001110” debemos borrar lo que tenemos acumulado. Así, si llega un ‘0’, iremos a s0 (que es donde acumulamos ‘0’s) y si llega un ‘1’, iremos a s1 (que es donde
tenemos acumulado solo un ‘1’).
Supongamos que la secuencia que debíamos detectar hubiera sido “111001110” y que
no “borramos” lo que teníamos acumulado. Si en el estado final llegase un ‘0’ deberíamos
ir (aunque no sea correcto) al estado que tenga acumulado “11100”. Después de ingresar
la secuencia “1110” habríamos completado dos veces la clave (la salida se pondría dos
veces en alto) pero, ¿qué secuencia introdujimos hasta ahora? La secuencia que usamos
fue “111001110011100” y allí NO hay dos secuencias “111001110”. Por eso hay que tener
mucho cuidado de borrar lo que tenemos acumulado una vez alcanzamos el estado final.
En la figura 10.16 se muestra el diagrama de estados final para detectar la secuencia
111001110 con solapamiento.
1 En base a la definición 10.3.2 habrá solapamiento si en los últimos “n” dígitos de la secuencia acumulada,
tenemos los “n” primeros dígitos de la secuencia correcta
10.4 Máquina de Estados tipo Moore
43
Figura 10.16: Diagrama con solapamiento para hallar la secuencia “11001110”
Ejercicio 10.4 — Compilador de C. Cuando el compilador de C encuentra la se-
cuencia #include en un código, debe incluir la librería que se encuentre después del
identificador. Modele este escenario con una máquina de estados finitos teniendo en
cuenta que cada caracter imprimible se puede representar con un número decimal de la
tabla ASCII.
�
10.4
Máquina de Estados tipo Moore
Note que hasta el momento siempre hemos puesto la salida de la máquina de estado en
la transición de un estado s a un estado s� .
Cuando TODAS las transiciones hacia un estado s� tienen la misma salida o� , podríamos,
en vez de poner la salida en la transición, ponerla en el estado; así, en vez de dibujar las
transiciones de estado como en la figura 10.17 podríamos hacerlo como se muestra en la
figura 10.18.
Capítulo 10. Máquinas de Estado Finito
44
Figura 10.17: Conexión entre dos estados tipo Moore
Figura 10.18: Conexión entre dos estados tipo Moore
En la figura 10.18 no solo se puede ver que todas las transiciones hacia s� tienen la
salida o� sino, también, que todas las transiciones hacia s tienen la salida o. Cuando todos
los estados se pueden expresar con esta notación, se denomina a esta máquina como
Máquina de Estado Finito tipo Moore y se podrá usar la notación de la figura 10.18. Si al
menos un estado no se puede expresar de esta forma, se tendrán que poner las salidas en
todas las transiciones. A este tipo de máquina se la denomina Máquina de Estado Finito
tipo Mealy y se tendrá que usar la notación de la figura 10.17.
10.5
Eliminación de Estados Redundantes
Sección tomada del libro de Taub
Los estados de una Máquina de Estado Finito nos permiten memorizar información
relevante del sistema. Algunas veces, mientras diseñamos nuestra máquina, veremos que
nos harán falta estados para que funcione el sistema. Otras veces, añadiremos estados
irrelevantes pensando en que ha aparecido nueva información. Estos estados en los que no
se memoriza nueva información se denominan estados redundantes.
Puede ser que la máquina funcione a la perfección con los estados redundantes y puede
ser, también, que en el papel no haya problema en añadir tantos de estos estados como
queramos; pero, una cosa es el papel y otra cosa muy distinta es la vida real. Cuando
queremos llevar nuestro diseño a una implementación circuital discreta, necesitamos
reducir el número de estados al mínimo pues, de no hacerlo, incrementaríamos el tiempo
de funcionamiento de nuestra máquina, los costos del diseño, consumo de energía, espacio,
temperatura, entre muchos otros problemas más. Es por esto que debemos procurar tener
una máquina de estados con la menor cantidad de estados posibles.
Lo importante a tener en cuenta al tratar con estados redundantes es que un sistema
secuencial se construye con el único propósito de obtener una secuencia determinada
de niveles lógicos de la salida o salidas en respuesta a la secuencia o secuencias de
entrada(s). Así pues, supongamos dos sistemas secuenciales. Uno con 20 estados y otro
con 2 estados. Supongamos finalmente que ambos sistemas dan las mismas secuencias
de salida para las mismas secuencias arbitrarias de entrada. Entonces, en lo que nos
concierne, los dos sistemas son idénticos e indistinguibles. El sistema de 20 estados tiene
la potencialidad de suministrar salidas que el sistema de dos no puede. Sin embargo, hasta
que no aprovechemos la potencialidad, los sitemas serán indistinguibles. Por tanto, bajo
estas circunstancias consideramos reundantes 18 de los 20 estados del primer sistema.
10.5 Eliminación de Estados Redundantes
45
Existen varias técnicas para eliminar estados redundantes. Mencionaremos la eliminación por simple inspección y por partición. Existe otra técnica más, que funciona mejor que
las dos que trataremos a continuación, pero que para el alcance y problemas del curso no
es necesario que veamos. Aún así, si quiere revisarla, la podrá encontrar en los ejemplos de
los capítulos 7.17 y 7.18 del libro de Taub que aparece en las referencias de este capítulo.
10.5.1
Eliminación por Simple Inspección
Consideremos la situación representada en la tabla de estados de la tabla 10.9. Contemplamos un sistema Mealy con una sola entrada X y una única salida Z (el método
también es válido para un sistema Moore con n > 1 entradas y m > 1 salidas). No se
ha especificado la tabla completa de estados; pero prestaremos atención al hecho de que
en la tabla aparecen dos estados especiales p y q tales que si el estado presente es p o
q, independientemente del valor de X, las salidas son idénticas y los estados siguientes
también. Es decir, encontramos dos estados p y q en la columna estado actual cuya salida
actual Z y estados siguientes coinciden. Entonces, claramente se intuye que estos estados
son indistinguibles y uno de ellos puede despreciarse. Si el estado actual es p o q la salida
es la misma. También si, por ejemplo, X = 0, en ambos casos el siguiente estado es r y el
futuro del sistema dependerá de r y no si de que p o q precedían a r.
S
S+ /Z
X =0
X =1
...
p
...
q
...
...
r/0
...
r/0
...
...
s/1
...
s/1
...
Cuadro 10.9: Tabla de estados donde dos estados, p y q, tienen los mismos siguientes
estados y salidas para todos los valores de X. S: Estado actual. S+ : Estado siguiente.
�
Ejemplo 10.8 La tabla 10.10 tiene estados redundantes y los eliminaremos según el
método ya explicado.
S
S+ /Z
X =0
X =1
A
B
C
D
E
B/0
C/0
D/1
C/0
D/0
C/1
A/1
B/0
A/1
C/1
Cuadro 10.10: Tabla de estados donde dos estados, B y D coinciden.
Examinando sistemáticamente las filas de esta tabla, encontramos que los estados B y
D tienen iguales el estado siguiente y las salidas. Diremos, entonces, que uno de estos dos
Capítulo 10. Máquinas de Estado Finito
46
estados es innecesario puesto que son indistinguibles. Eliminemos entonces el estado B.
(También pudimos haber eliminado a D). La tabla 10.11 es la tabla de estados reducida.
S
S+ /Z
X =0
X =1
A
C
D
E
D/0
D/1
C/0
D/0
C/1
D/0
A/1
C/1
Cuadro 10.11: Tabla de estados reducida, luego de eliminar a B.
En esta tabla de estados reducida, se ha eliminado el estado B de todos los sitios donde
aparece y es sustituido por D. Como resultado de esta operación, encontramos ahora que
los estados A y E hacen visible su equivalencia. Eliminaremos, ahora, el estado A y la
nueva tabla de estados reducida aparece en la figura 10.12, donde no son posibles más
reducciones.
S
S+ /Z
X =0
X =1
C
D
E
D/1
C/0
D/0
D/0
E/1
C/1
Cuadro 10.12: Tabla de estados más reducida, luego de eliminar a A.
�
10.5.2
Eliminación por Partición
En la sección previa vimos que en una tabla de estados, dos estados cuyos estados
siguientes eran idénticos y sus salidas también lo eran, entonces estos dos eran realmente
estados idénticos; luego uno de los estados podía ser eliminado. Ahora veremos que
una tabla de estados puede tener estados redundantes aún cuando no aparezcan filas con
idénticas salidas y los mismos estados siguientes.
Para ilustrar este punto y ver cómo se determinan los estados redundantes, analicemos
el ejemplo 10.9.
�
Ejemplo 10.9 — El niño diferente. Debemos reducir los estados redundantes de la tabla
10.13.
10.5 Eliminación de Estados Redundantes
47
S
S+ /Z
X =0
X =1
A
B
C
D
E
F
G
H
B/0
D/0
G/0
H/0
G/1
G/0
D/0
H/0
C/0
F/0
F/0
E/0
A/0
A/0
C/0
A/0
Cuadro 10.13: Tabla de estados.
Un examen de la tabla revela que no hay filas con los mismos estados e idénticas
salidas. Teniendo en cuenta que la misión de un sistema secuencial es suministrar salidas
cuando se requieran, examinemos en la tabla las salidas. Encontramos que todas las salidas
son idénticas excepto para el estado E por lo que, de alguna forma, el estado E debe ser
diferente de los demás. E es el niño diferente del grupo. Los otros estados tienen Z = 0
cuando X = 0 mientras que E mantiene Z = 1 cuando X = 0. Como todos los estados
excepto E tienen la misma salida, entonces serán el mismo estado. Diviremos la tabla
10.13 en particiones según como lo indican los subíndices de la tabla 10.14. A todos los
estados, excepto al E, los pondremos en la partición 1 y al E lo pondremos en la 2.
S
S+ /Z
X =0
X =1
A1
B1
C1
D1
E2
F1
G1
H1
B/0
D/0
G/0
H/0
G/1
G/0
D/0
H/0
C/0
F/0
F/0
E/0
A/0
A/0
C/0
A/0
Cuadro 10.14: Bautizar las particiones iniciales.
Hasta que la hipótesis se haga insostenible, supondremos que todos los estados de la
misma partición realmente son el mismo estado (porque tienen las mismas salidas). Una
vez escrita la tabla 10.14, las salidas ya no nos proporcionan más información por lo que
no es necesario volverlas a escribir, por lo que la tabla 10.14 se puede convertir en la tabla
10.15.
Capítulo 10. Máquinas de Estado Finito
48
S
X =0
A1
B1
C1
D1
E2
F1
G1
H1
S+
B1
D1
G1
H1
G1
G1
D1
H1
X =1
C1
F1
F1
E2
A1
A1
C1
A1
Cuadro 10.15: Eliminar las salidas, pues estas ya no proporcionan información para la
reducción
Ahora, al analizar la tabla 10.15 encontramos que el estado D, que inicialmente estaba
en la partición 1, realmente no puede ser el mismo estado que los demás estados de la
partición 1 puesto que cuando X = 1, todos los demás estados de la partición 1 van a
estados de partición 1 mientras que D va al estado E, el cual pertenece a una partición
diferente. En principio, cuando dos estados cuyos estados siguientes en la columna de
estado siguiente no pertenecen a la misma partición deben ser estados diferentes, por
lo que D no puede pertenecer a la misma partición que A, B, C, F, G y H; así que lo
pondremos en la partición 3 como se muestra en la tabla 10.16. También hemos de corregir
los subíndices de los estados siguientes de B y G.
S
X =0
A1
B1
C1
D3
E2
F1
G1
H1
B1
D3
G1
H1
G1
G1
D3
H1
S+
X =1
C1
F1
F1
E2
A1
A1
C1
A1
Cuadro 10.16: Etapa 1 en la reducción de la tabla de estados.
Empleando el principio anterior, encontramos ahora en la tabla 10.16 que los estados B
y G no pueden permanecer en la partición 1. Estos dos estados van a estados en la columna
de estado siguiente que están en la misma partición. Es decir, cuando X = 0, tanto B como
G van a estados de la partición 3 y cuando X = 1, tanto B como G van a estados de la
partición 1. Es por esto que los retiraremos de la partición 1 y los colocaremos juntos en
una nueva partición (4) tal y como se indica en la figura 10.17.
10.5 Eliminación de Estados Redundantes
S
X =0
A1
B4
C1
D3
E2
F1
G4
H1
S+
B4
D3
G4
H1
G4
G4
D3
H1
49
X =1
C1
F1
F1
E2
A1
A1
C1
A1
Cuadro 10.17: Etapa 2 en la reducción de la tabla de estados.
En la tabla 10.17 encontramos que los estados A, C y F no pueden compartir la misma
partición con H, así que los pondremos juntos2 en una nueva partición (5) como se muestra
en la figura 10.18.
S
X =0
A5
B4
C5
D3
E2
F5
G4
H1
B4
D3
G4
H1
G4
G4
D3
H1
S+
X =1
C5
F5
F5
E2
A5
A5
C5
A1
Cuadro 10.18: Etapa 3 en la reducción de la tabla de estados.
Al comparar todos los estados, vemos que en la tabla 10.18 no son necesarias más
particiones. En este punto, todos los estados que están en la misma partición (A, C y F en
la partición 5 y B y G en la partición 4) tienen en cada columna de siguiente estado, una
transición hacia algún estado de una misma partición.
Cuando la partición es completa, todos los estados en la misma partición son el mismo
estado. Como tenemos 5 particiones, tendremos solo cinco estados. Usaremos letras
minúsculas para etiquetas estos estados: a = (A,C, F), b = (B, G), c = D, d = E y e = H.
En la tabla se muestra la tabla reducida.
2 Ya
vimos que pueden ir juntos pues dada la entrada X = 0 todos irán hacia algún estado de la misma
partición (4) y dada la entrada X = 1 todos irán hacia algún estado de la misma partición (1).
Capítulo 10. Máquinas de Estado Finito
50
S
S+ /Z
X =0
X =1
a
b
c
d
e
b/0
c/0
e/0
b/1
e/0
a/0
a/0
d/0
a/0
a/0
Cuadro 10.19: Tabla de estados reducida.
La tabla reducida la formamos en el orden que aparecen las letras a, b, c, d y e,
obviamente, en base a las transiciones de estado (particiones) de la tabla 10.18 y las salidas
de los estados de la tabla 10.13. Empecemos por a: cualquier estado de esta partición,
a = (A,C, F), cambiará a un estado de la partición b = (B, G) cuando X = 0 con una salida
Z = 0; mientras que, cuando X = 1, cambiará a un estado de la partición a = (A,C, F) con
salida Z = 0. Ahora, analicemos el estado b:cualquier estado de esta partición, b = (B, G),
cambiará a la partición c = D cuando X = 0 con una salida Z = 0; mientras que, cuando
X = 1, cambiará a un estado de la partición a = (A,C, F) con salida Z = 0. Se puede
comprobar fácilmente el resto de los estados.
�
10.6
Circuitos de Moore y de Mealy
Ya vimos toda la teoría sobre Máquinas de Estado Finito. Lo que resta, ahora, es
implementar las máquinas que ya sabemos diseñar con circuitos secuenciales.
En el capítulo 9 se estudió el proceso de diseño general de los circuitos secuenciales.
Así que, en principio, este método debería servirnos para la implementación de cualquier
Máquina de Estado Finito. No obstante, el procedimiento expuesto estaba enfocado al
diseño de contadores síncronos por lo que haremos algunas modificaciones a este método a
medida que diseñamos una Máquina de Estado Finito tipo Mealy que detecte la secuencia
sin solapamiento: 1011. Consideremos que la salida de la máquina es 00 mientras está
procesando la cadena, 01 si consigue un análisis exitoso y 10 si el análisis falla.
10.6.1
Diagrama de Estados
Nosotros ya somos capaces de crear el diagrama de estados para el sistema pedido.
Primero, diseñamos la ruta correcta como se muestra en la figura 10.19. En ella debe haber
cabida para cada uno de los bits que hacen parte de la secuencia clave.
10.6 Circuitos de Moore y de Mealy
51
Figura 10.19: Ruta correcta
Luego, asumiendo que se busca hacer una máquina para “optimizar cómputo” se añade
la ruta errónea al diagrama en la figura 10.20.
Figura 10.20: Diagrama de Estados Final
El diagrama de estados de la figura 10.20 es el de una máquina tipo Mealy. Bien podríamos hacerlo tipo Moore pero, por ahora, concentrémonos únicamente en las máquinas
tipo Mealy.
10.6.2
Tabla de Transición de Estados
El siguiente paso consiste en representar el diagrama de estados con una tabla de
transición de estados como se muestra en la tabla 10.20.
En esta tabla hemos puesto que, como S4 y S5 son estados finales, permanecerán allí
sin importar el valor de la entrada.
Capítulo 10. Máquinas de Estado Finito
52
Estado actual
S
Estado Siguiente
S+ /Z
X =0
X =1
S0
S1
S2
S3
S4
S5
S5 /10
S2 /00
S5 /10
S5 /10
S4 /00
S5 /00
S1 /00
S5 /10
S3 /00
S4 /01
S4 /00
S5 /00
Cuadro 10.20: Tabla de Transición de Estados para el detector de la secuencia 1011
10.6.3
Bautizar Estados en forma Digital
Como bien ya lo vimos en el capítulo 9, los estados serán representados con un conjunto
de Flip-Flops. Es por esta razón que necesitamos dar una notación binaria a cada estado
de la tabla 10.20. Puede ser cualquier notación. Por ejemplo, podríamos decir que S0 será
representado por la secuencia 000001, S1 por la secuencia 000010, S2 por la secuencia
000100, S3 por la secuencia 001000 y así sucesivamente. También podríamos representar
los estados como: S0 = 000, S1 = 001, S2 = 010, S3 = 011 y así sucesivamente. Existen
incontables maneras de representar los estados con una notación binaria, lo importante
es saber que se usará determinada notación binaria dependiendo de las condiciones del
sistema. Por ejemplo, si el sistema para el cual diseñamos la máquina de estados sólo
acepta entradas one-hot3 entonces usaríamos la primera representación mencionada. Si, en
cambio, estamos escasos de recursos usaríamos la segunda notación.
En este ejemplo, bautizaremos los estados buscando la mínima implementación. Es
de notar que este diagrama de estados tiene 6 estados. Si quisiéramos obtener la mínima
implementación tendríamos que considera que con 2 Flip-Flops solo podríamos representar
4 estados (22 combinaciones) mientras que con 3 Flip-Flops podríamos representar 8
estados (23 combinaciones) por lo que usaremos 3 Flip-Flops y convertiremos la tabla
10.20 en la tabla 10.21
Estado actual
Q2
Q1
Q0
Q2+
X =0
Q1+ Q0+
0
0
0
0
1
1
0
0
1
1
0
0
0
1
0
1
0
1
1
0
1
1
1
1
0
1
0
0
0
0
1
0
1
1
0
1
Estado Siguiente
Z
Q2+
X =1
Q1+ Q0+
Z
10
00
10
10
00
00
0
1
0
1
1
1
0
0
1
0
0
0
00
10
00
01
00
00
1
1
1
0
0
1
Cuadro 10.21: Tabla transición de estados digital.
3 La codificación one-hot consiste en tener una palabra de n bits donde sólo un bit puede estar en alto
mientras que los demás estarán en nivel bajo. Aquella codificación en que todos los bits son ‘1’ excepto uno
que será ‘0’ se denomina one-cold.
10.6 Circuitos de Moore y de Mealy
53
Para hacer el cambio de la tabla 10.20 a la tabla 10.21 hemos tomado S0 = 000,
S1 = 001, S2 = 010, S3 = 011, S4 = 100 y S5 = 101.
10.6.4
Tablas de Transición de los Flip-Flops
Después de determinar el número de flip-flops necesarios para llevar a cabo la implementación, necesitamos definir el tipo (o tipos) de flip-flop(s) que se usará, para luego
determinar las funciones lógicas combinaciones de sus respectivas entradas. Hay que tener
presente que se necesitarán tantos flip-flops como bits para representar los estados de la
máquina.
En este ejemplo tenemos estados de 3 bits por lo que se necesitarán 3 flip-flops.
Asumamos que este ejemplo se debe implementar únicamente con flip-flops tipo J − K.
Como necesitamos 3 flip-flops, tendremos que definir 8 funciones combinacionales para
todo el sistema (una por cada entrada de los 3 flip-flops J-K, más dos salidas). Para ello,
haremos las tablas de verdad para las entradas Ji y Ki (i = 0, 1, 2) en base a la tabla de
transiciones para un flip-flop J-K mostrada en la figura 10.22.
Transiciones de salida
Q Q+
Entradas del Flip-Flop
J K
0
0
1
1
0
1
X
X
0
1
0
1
X
X
1
0
Cuadro 10.22: Tabla de transiciones para un flip-flop J-K
Podemos convertir la tabla 10.21 la tabla 10.23.
10.6.5
Obtención de las expresiones lógicas
Mediante cualquier método de minimización de expresiones lógicas, obtendremos las
expresiones lógicas para Z0 y Z1 , J0 y K0 , J1 y K1 y J2 y K2 .
El procedimiento para hallar la expresiones lógicas ya es bien conocido y por eso
se omitirá. En caso de no entender el cómo, revise los capítulos 2 y 3. Las funciones
combinacionales que requerimos son:
Z0 = Xin · Q1 · Q0
(10.1)
Z1 = Xin · Q2 · Q1 + Xin · Q1 + Xin · Q2 · Q1 · Q0
(10.2)
J0 = Q2
(10.3)
K0 = Xin · Q2 · Q1 + Xin · Q1
(10.4)
K1 = Xin + Q2 · Q0
(10.6)
J1 = Xin · Q2 · Q0
(10.5)
J2 = Xin · Q0 + Xin · Q1 + Xin · Q0 = Xin ⊕ Q0 + Xin · Q1
K2 = 0
(10.7)
(10.8)
Capítulo 10. Máquinas de Estado Finito
54
Estado Actual
Xin Q2 Q1 Q0
Siguiente estado
Q2+ Q1+ Q0+
Salidas
Z1 Z0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
0
1
1
1
1
X
X
0
1
0
1
1
1
X
X
1
0
1
1
0
0
X
X
0
1
0
0
0
0
X
X
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
0
1
0
0
0
0
X
X
0
0
1
0
0
0
X
X
1
0
1
1
0
1
X
X
1
1
1
0
0
1
X
X
0
0
0
0
0
0
X
X
0
0
0
1
0
0
X
X
J2
Entradas Mínimas
K2
J1 K1
J0
K0
1
0
1
1
X
X
X
X
0
1
0
1
X
X
X
X
X
X
X
X
0
0
X
X
X
X
X
X
0
0
X
X
X
1
X
0
X
0
X
X
X
0
X
1
X
0
X
X
0
1
X
X
0
0
X
X
0
0
X
X
0
0
X
X
X
X
1
1
X
X
X
X
X
X
0
1
X
X
X
X
1
X
1
X
0
X
X
X
1
X
1
X
0
X
X
X
Cuadro 10.23: Tabla del siguiente estado de los flip-flops. Xin es la entrada de la MEF,
mientras que X es un estado irrelevante.
10.6.6
Implementación de la Máquina de Estados
El paso final consiste en implementar la lógica combinacional a partir de las expresiones
encontradas de las entradas J y K, y para la salida Z. El circuito final se presenta en las
figuras 10.21 y 10.22. Las dos figuras no aparecen integradas sólo para que fuera fácil
analizar el circuito.
Figura 10.21: Implementación circuital de la Máquina Detectora
Nota
Tenga muy en cuenta que la salida en este circuito puede cambiar en cualquier instante
de tiempo (no es síncrona). Por ejemplo, suponga que la máquina está en el estado S0
con entrada X = 0. En estas condiciones, la salida de la máquina será Z = 10. Si, antes
10.6 Circuitos de Moore y de Mealy
55
Figura 10.22: Salidas de la Máquina Detectora
de que cambie de estado, la entrada cambia a X = 1, la salida cambiará a Z = 00. Pero, si
justo antes de que cambie de estado, la entrada vuelve a ser X = 0, la salida volverá a ser
Z = 10.
Cuando durante el diseño de la máquina se estipuló que la salida estaba en la transición,
quiere decir que solo tomaremos la salida justo en el instante en que la máquina pasa de
un estado hacia otro. No obstante, en un diagrama de tiempos, tendríamos que dibujar la
salida asíncrona en todo momento.
Ejercicio 10.5 Diseñe una Máquina de Estado Finito tipo Moore que detecte la se-
cuencia sin solapamiento: 1011. Considere que la salida de la máquina es 00 mientras
está procesando la cadena, 01 si consigue un análisis exitoso y 10 si el análisis falla.
Compare el comportamiento de la salida de la máquina de estados tipo Moore con la
salida de la máquina tipo Mealy. ¿La máquina tipo Moore tiene salidas síncronas o
asíncronas?
�
Problemas
Problema 10.1 Diseñe un contador síncrono de 0 a 7, ascendente / descendente utilizando
FF tipo JK.
Problema 10.2 Realice el diagrama de estados, Moore y Mealy, para el detector de
secuencia 101 con solapamiento.
Problema 10.3 Repita el problema anterior, pero ahora detecte la secuencia sin solapamiento.
Problema 10.4 Realice el diagrama de estados, Moore y Mealy, para el detector de
secuencia 111 con solapamiento.
Problema 10.5 Repita el problema anterior, pero ahora detecte la secuencia sin solapamiento.
Problema 10.6 Realice el diagrama de estados, Moore y Mealy, para el detector de
secuencia 1101 sin solapamiento.
Problema 10.7 Repita el problema anterior, pero ahora detecte la secuencia sin solapamiento.
Capítulo 10. Máquinas de Estado Finito
56
Problema 10.8 Diseñe una máquina de estados que genere el complemento a uno de una
secuencia binaria cualquiera.
Problema 10.9 Añada una unidad de retraso al problema anterior.
Problema 10.10 Añada dos unidades de retraso al problema 10.8.
Problema 10.11 Diseñe un sumador en serie de dos bits.
Problema 10.12 Diseñe un sumador en serie de tres bits.
Problema 10.13 Modele el comportamiento de un ascensor como una máquina de estado
finito. Considere que el usuario solo puede manipular dos botones: arriba y abajo, que cada
movimieto es de solo un piso y que no hay llamados externos al ascensor.
Problema 10.14 Modele el comportamiento de un ascensor como una máquina de estado
finito. Considere el usuario puede ir tanto hacia arriba como hacia abajo, recorriendo varios
pisos en un solo viaje. Considere también que en el edificio en el cual funciona el ascensor
hay P pisos y que otros usuarios pueden hacer llamados externos al ascensor.
Problema 10.15 Modele el comportamiento de un semáforo como una máquina de estado
finito. El semáforo estará en rojo por 10 segundos, en amarillo por 2 segundos y en verde
por 16 segundos. De verde salta a rojo, pasando primero por amarillo. De rojo pasa a verde
sin pasar por amarillo. En cualquier momento un peatón puede pulsar un botón que le
permita cruzar la calle más rápidamente: si está en verde, permanecerá allí por 4 segundos
más y luego saltará a rojo, pasando por amarillo.
Problema 10.16 Cuando el compilador de C encuentra la secuencia #define en un código,
debe definir como constante, el valor que se encuentre después del identificador. Modele
este escenario con una máquina de estados finitos teniendo en cuenta que cada caracter
imprimible se puede representar con un número decimal de la tabla ASCII.
Problema 10.17 Modele la siguiente máquina contestadora con una Máquina de Estado
Finito tipo Mealy: Cuando llega una llamada, el teléfono suena. Si el teléfono no se levanta
en el tercer repique, la máquina contestadora se activa reproduciendo un saludo pregrabado
solicitando que la persona que llama deje un mensaje. Luego, graba 30 segundos del
mensaje de la persona que llama. Finalmente, cuelga. Si el teléfono se contesta antes del
tercer repique, la máquina contestadora no hace nada.
Referencias
Máquinas de estado finito y expresiones regulares. Matemática Discreta. Área de
Álgebra. Universidad de Coruña.
Taub, H. (1984). Circuitos digitales y microprocesadores. McGraw-Hill Interamericana de España.
Introducción a las Máquinas de Estado Finito. Álvarez, Raúl.
http://tecbolivia.com/index.php/articulos-y-tutoriales-microcontroladores/13introduccion-a-las-maquinas-de-estado-finito
Imágenes
Draw.io. https://www.draw.io/
Logicly. logic.ly/demo