Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Mayo de 2003
Índice
Nomenclatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Autómata de Mealy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Autómata de Moore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1. Aspectos generales sobre circuitos secuenciales
En los circuitos combinacionales la salida en un determinado momento depende únicamente
de los valores de las señales de entrada en el mismo instante. Sin embargo, en el mundo real
la mayor parte de los sistemas con los que nos enfrentamos tienen una dimensión adicional:
el funcionamiento de los mismos depende no únicamente de sus entradas actuales, sino
también de la historia por la que han pasado. Así, los circuitos secuenciales surgen para
solucionar las limitaciones intrínsecas de los combinacionales.
Los circuitos secuenciales son sistemas que, además de entradas y salidas, también tienen
estados que recuerdan la historia pasada por el circuito. Utilizan la información del estado
conjuntamente con una combinación lógica de sus entradas de datos para determinar el futuro
estado del sistema y sus salidas. Por tanto, una de sus características es que las mismas
entradas en estados diferentes dan lugar a salidas distintas, ya que estas dependen también
del estado .
Muchos de los sistemas digitales prácticos se realizan siguiendo la filosofía de los circuitos
secuenciales (circuitos de control, sistemas de alarma y seguridad, relojes, etc.). Podemos
considerar como ejemplo una máquina expendedora (simplificada), que representaríamos como
se muestra en la figura 1.
Entrega Selección
Introducción producto
de moneda de producto
Figura 1. Representación de una máquina expendedora.
En la figura 1 pueden verse varios estados, en los que el sistema espera monedas o la
selección de productos, o entrega el producto. Estos estados memorizan la última acción del
usuario, de forma que el sistema puede responder a las nuevas acciones de forma diferente
dependiendo de la historia pasada: si seleccionamos producto, la salida no será la misma si
ya le hemos entregado el dinero o todavía no.
Este puede ser un ejemplo sencillo de máquina secuencial, y a partir de ahora formalizaremos
el concepto y estudiaremos la forma de analizar y diseñar este tipo de circuitos.
Como se puede observar en la figura 2, al circuito combinacional llegan dos tipos de datos:
las entradas de datos del circuito (X0(t), X1(t),... Xu-1(t)) y el estado actual , es decir, las salidas
de la memoria (Q0(t),... Qp-1(t)). Las salidas del circuito combinacional son las salidas de datos
(Z0(t), Z1(t),... Zv-1(t)) y las entradas de los elementos de memoria (E0(t),... Es-1(t)), (si bien en
ciertos casos algunas de estas variables pueden ser comunes). El hecho de que parte de la
información de salida del circuito combinacional se introduzca de nuevo a su entrada, previo
paso por la memoria, se conoce como realimentación.
Las salidas de un circuito secuencial asíncrono, ante un cambio en las señales de entrada de
datos, alcanzan sus niveles definitivos transcurrido un tiempo que será función de los tiempos
de propagación del circuito combinacional y de los elementos de memoria (las salidas de datos
-Zi- se estabilizarán cuando se estabilicen las salidas de los elementos de memoria, Qi(t)). Estos
tiempos pueden variar entre un valor mínimo y un máximo, y, por tanto, introducen un cierto
grado de incertidumbre en los tiempos que tardan en propagarse los cambios de las variables
Según esto, en los circuitos secuenciales asíncronos después de producirse un cambio en las
entradas hay que esperar un tiempo hasta que se estabilicen los valores de las salidas y sólo
después de que se alcance esta estabilización se podrá realizar otro cambio en sus entradas,
ya que en caso contrario no se verán reflejados estos cambios en las salidas. Evidentemente,
el tiempo mínimo entre dos cambios consecutivos en las entradas de datos es función de los
tiempos de propagación del circuito combinacional y de los elementos de memoria.
Los circuitos síncronos eliminan la incertidumbre producida por los tiempos de propagación
utilizando una señal de sincronismo o señal de reloj. Los cambios en las entradas y en los
estados internos sólo tienen efecto sobre el resto del sistema en instantes discretos de tiempo
a los que denominaremos t, t+1, t+2,.... Estos instantes suelen coincidir con los flancos de
subida o bajada de la señal de reloj. Así, si nos fijamos en el circuito de la figura 2, las salidas
que adopten los elementos “Mi” de memoria después de un flanco de reloj (CLK), serán función
únicamente de los valores que tenían sus entradas en el instante anterior al flanco de CLK,
aunque estas hayan variado varias veces desde el último flanco de reloj.
Finalmente queremos indicar que, si bien parece que los circuitos síncronos presentan ventajas
frente a los asíncronos, no siempre es así. De hecho, al realizar el diseño de un circuito VLSI
(Very Large Scale Integration), es necesario establecer una comparación rigurosa entre las
alternativas síncrona y asíncrona, a fin de valorar las limitaciones y restricciones de ambos
modos de operación. Actualmente existe un auge e interés por el diseño de circuitos VLSI
asíncronos o autotemporizados, ya que el aumento de la velocidad de operación y la
complejidad de los circuitos digitales conllevan grandes problemas para conseguir que las
señales de reloj que se propagan por caminos diferentes tengan idénticos tiempos de
propagación. Esto hace que la distribución de la señal de reloj dentro de los circuitos digitales
sea una tarea compleja, siendo una de las razones de esta complejidad los retrasos en dicha
señal (lo que se conoce como clock skew), además de los problemas de interferencias que
puede sufrir (cross-talk). No es, sin embargo, objeto de este capítulo el estudio de todos estos
detalles.
Si bien la palabra autómata puede tener diferentes significados (es frecuente relacionar este
término con las máquinas capaces de imitar los movimientos de los seres vivos, equipos
electrónicos de control industrial, etc.), en nuestro caso se utiliza para definir sistemas
electrónicos capaces de tratar información. Así, un autómata puede ser un dispositivo con unos
terminales de entrada y salida de datos (ver figura 1) y una señal de reloj (CLK), que transforma
los datos de entrada en otros datos de salida, en función de la historia pasada por él, de forma
sincronizada con la señal CLK. En este contexto, ejemplos de autómatas sencillos son:
contadores digitales, sumadores, registros, unidades de control, etc. Un ejemplo de autómata
más complejo sería un ordenador.
Finalmente queremos indicar que la realización física de los sistemas secuenciales síncronos
(autómatas) puede llevarse a cabo utilizando diferentes alternativas tecnológicas, si bien
actualmente lo más frecuente es utilizar Dispositivos Lógicos Programables (PLDs).
Con todo esto, si a una máquina de estados finitos, que denominaremos abreviadamente MEF,
se le introducen datos a lo largo del tiempo, la salida, z(t), de la MEF, en un instante t será
función de la entrada en ese instante, x(t) y de los estados internos q(t). Si la memoria tiene p
elementos (FF0.... FF P-1), siendo p un número finito, el número máximo de estados que se
pueden almacenar será 2p.
Observando la figura 2, se puede ver que las entradas de datos x(t), junto con las variables de
estado q(t), constituyen las entradas del circuito combinacional. La salida del circuito
combinacional está formada por las salidas de datos z(t) y por las excitaciones de los biestables
e(t), para que se produzca la transición al siguiente estado q(t+1) con el siguiente flanco de
reloj.
q(t+1)=h[f(x(t),q(t))]
z(t)=g[x(t),q(t)]
Además, también es necesario proporcionar el estado inicial a partir del cual empezará a
evolucionar el autómata. Si no se indica lo contrario, a partir de ahora consideraremos q0 como
estado inicial. En resumen una máquina de estados finitos se puede definir matemáticamente
como un conjunto de elementos:
siendo:
• x: Datos de entrada
• z: Datos de salida
• q: Estados internos (variables de estado)
• q0: Estado inicial
• f: Función de excitación de los biestables
• h: Función de los biestables
• g: Función de salida
2.2. Nomenclatura
La nomenclatura que se va a utilizar se muestra de forma resumida en la tabla 1:
Nombre de las Nº de
Nombre de la Símbolo Combinaciones Nº de
líneas físicas líneas
variable general de la variable combinacs.
en el circuito físicas
Entradas x(t) X0, X1, ..., Xu-1 u X={x0, x1, ..., xn-1} n#2u
Salidas z(t) Z0, Z1, ..., Zv-1 v Z={z0, z1, ..., zr-1} r#2v
Estados q(t) Q0, Q1, ..., Qp-1 p Q={q0, q1, ..., qm-1} m#2p
Excitación de
e(t) E0, E1, ..., Es-1 s E={e0, e1, ..., el-1} l=2s
los biestables
Por ejemplo, para implementar un autómata con 3 estados (m=3) se necesitan al menos 2
Cuando la información temporal sea necesaria, el instante de tiempo (t, t+1...) se indicará
indistintamente en forma de función, como en x(t), o de superíndice Q0t.
Como se puede ver, una tabla de estados o de transiciones no es más que una versión de tabla
de verdad de las funciones “estado siguiente” y “salida actual” en función de las variables
“estado actual” y “entrada del sistema”. También es posible separar la información del estado
siguiente y la salida, presentándolas en columnas diferentes, obteniendo de este modo una
“versión extendida” de la tabla de estados, como se puede observar en la tabla 3.
Ejemplo 1: Supongamos un circuito secuencial con dos entradas físicas X0, X1, lo que supone que puede
tener 4 posibles entradas x = {x0=00, x1 =01, x2 =10, x3 =11}, 2 estados internos q ={q0, q1} (que se pueden
representar con una variable Q0, Q0=0=>q0, y Q0=1=>q1) y una salida física, Z0, por tanto z puede adoptar
2 posibles valores: z={z0=0, z1=1}. De la definición del sistema se sabe que se debe cumplir:
Todo esto se puede representar en una tabla de estados como la tabla E1.1, donde denominamos al
estado actual q(t), al estado siguiente q(t+1), y a las entradas y salidas actuales x(t) y z(t)
respectivamente.
q(t+1)/z(t)
Estado siguiente/salida actual
q(t) Q0(t) 00 01 10 11 00 01 10 11
q0 0 0 0 0 1 0 1 1 0
q1 1 0 1 1 1 1 0 0 1
S Sobre cada arco se indica la entrada que condiciona dicha transición y la salida
para esa entrada y ese estado actual, con una barra inclinada entre ellas,
x(t)/z(t).
Figura 5. Ejemplo que refleja la forma general de representar los diagramas de estados o
grafos de los autómatas de Mealy.
Ejemplo 2: Supongamos un circuito secuencial con dos entradas físicas X0, X1, lo que supone un total
de 4 posibles entradas {00, 01, 10, 11}, 4 estados internos Q ={q0, q1, q2, q3} que se codifican con 2 líneas
de estado (Q0 y Q1) y una salida física, Z0, por lo que z puede adoptar 2 posibles valores, 0 y 1. Si de la
definición del sistema se sabe que debe cumplir:
En los grafos de los autómatas de Moore, los estados y las salidas que les corresponden se
muestran dentro de círculos. Las transiciones entre estados se indican con arcos que conectan
dos estados y sobre estos arcos se indican las entradas que condicionan las transiciones. En
la figura 6 se muestra la forma general de un diagrama de estados o grafo para el caso de un
autómata de Moore. Considérese la figura como una parte de un grafo mayor, de forma que las
transiciones que aparentemente llegan o van a “ningún” estado, realmente son transiciones al
resto del grafo.
Ejemplo 3. Análisis de un autómata de Mealy. Supóngase el circuito mostrado en la figura E3.1. Como
se puede observar, es un sistema con una sola entrada (X0) y salida (Z0), y dos flip-flops de tipo JK activos
en el flanco de subida. Además, se puede ver que la salida es función de la entrada (X0) y de las salidas
de los flip-flops (estado), por lo tanto, la realización de este circuito responde a una máquina de Mealy.
4.1. Obtener las ecuaciones lógicas de las señales que se están aplicando a las entradas de
los flip-flops (excitaciones de los biestables). Estas ecuaciones son las funciones lógicas de las
entradas de los flip-flops (RS -caso de flip-flops RS- JK -caso de flip-flops JK- D -caso de flip-
flops D- o T -caso de flip-flops T-) en función de las salidas de los propios flip-flops (estado
actual), y las entradas del sistema.
K 1t = Q 1t ⋅ X 0 t
J2 t = Q 1t ⋅ X 0 t ⋅ Q 2 t
K 2 t = Q 1t ⋅ X 0 t
En nuestro ejemplo, las ecuaciones lógicas de las entradas de los flip-flops son:
4.2. Obtener las ecuaciones lógicas del próximo estado: las próximas salidas de los flip-flops
[Q(t+1) ó /Q(t+1)]. Para ello se sustituirán las expresiones lógicas de las entradas (obtenidas
en el punto anterior) en las ecuaciones de la salida del tipo de biestable que se esté utilizando.
Recuérdese que las ecuaciones de los flip-flops son:
En este el ejemplo, al tratarse de flip-flops JK, las ecuaciones lógicas de los próximos estados
son
Q 1 (t + 1) = Q 1 (t)
Q 2 (t + 1) = Q 2 (t) + Q 1 (t) ⋅ X 0 (t) ⋅ Q 2 (t)
4.3. El tercer paso consiste en obtener las funciones lógicas que relacionan las variables de
salida del sistema con el estado actual (salidas de los flip-flops) y las entradas del sistema.
En el ejemplo solamente hay una salida (Z0), que coincide con K2:
Para este ejemplo, la tabla de transiciones codificada se muestra en la tabla E3.1, y, de forma resumida,
en el formato del autómata de Mealy, en la tabla E3.2.
0 0 11 11 1 1
0 1 10 10 1 0
1 0 01 01 1 1
1 1 00 10 1 0
0 0 11/1 11/1
0 1 10/1 10/0
1 0 01/1 01/1
1 1 00/1 10/0
Q2(t+1)Q1(t+1)/Z0(t)
Próximo estado/ Salida actual
4.5. Asignar un nombre (q0, q1, q2, etc.) a cada combinación binaria de las salidas de los flip-
flops y reescribir la tabla obtenida en el punto 4.4 como tabla de estados.
Para el ejemplo 3, haciendo la siguiente asignación de estados: q0 = 00, q1 = 01, q2=10, q3= 11, la tabla
de estados será (tabla E3.3):
q0 q3/1 q3/1
q1 q2/1 q2/0
q2 q1/1 q1/1
q3 q0/1 q2 /0
q(t+1)/z(t)
Próximo estado/Salida actual
El estado inicial es q0 porque los componentes conectados a las entradas asíncronas de los biestables
hacen que al conectar la alimentación se realice un reset, y ambos flip-flops comiencen con salida 0.
Ejemplo 4. Análisis de un autómata de Moore. Para este ejemplo vamos a utilizar el circuito de la figura
E4.1. Como se puede observar, es un circuito de una sola entrada, dos flip-flops de tipo D y una salida
que depende únicamente de las salidas de los biestables, por tanto, se trata de un autómata de Moore.
D 0 t = Q 0 t ⋅ X 0 t + Q 1t ⋅ X 0 t = (Q 0 t + Q 1t ) ⋅ X 0 t
Z0(t) = Q0(t).Q1(t)
00 00 01 0
01 00 10 0
10 00 11 0
11 00 11 1
Q1(t+1) Q0(t+1)
Próximos estados
5) Haciendo la siguiente asignación de estados: q0 = 00, q1 = 01, q2=10, q3= 11, la tabla de estados será
la tabla E4.2, y el grafo de comportamiento del sistema es el mostrado en la figura E4.2:
q0 q0 q1 0
q1 q0 q2 0
q2 q0 q3 0
q3 q0 q3 1
Próximo
estado q(t+1)
El estado inicial es q0 porque el circuito conectado a las entradas asíncronas de los biestables, que hacen
que al conectar la alimentación ambos biestables comiencen con salida 0.
En lo que sigue se describe, de forma general, cada uno de estos pasos, reforzando las
explicaciones con un ejemplo. Con el objetivo de conseguir mayor claridad en los puntos 4 y
5 (minimización y asignación de estados) se incluirán además otros ejemplos con tablas de
estados iniciales genéricas.
Ejemplo 5. Diseño de un autómata de Mealy: “Se quiere diseñar un circuito secuencial síncrono que
proporcione a su salida un nivel alto cada vez que en su línea de entrada se presente la secuencia 101".
Hemos de indicar que un mismo enunciado puede dar lugar a distintos grafos iniciales, todos
ellos válidos, pero que pueden ser muy diferentes y, por tanto, con mayor o menor complejidad
de implementación. Sin duda, el mejor grafo será aquel que tenga un menor número de
estados. De la habilidad, ingenio y experiencia del diseñador depende la calidad del grafo, sin
embargo, todas estas cualidades no garantizan que el grafo inicial obtenido sea el óptimo.
Los pasos a seguir para establecer un grafo a partir del enunciado podrían resumirse en:
3. Seleccionar un estado inicial, llamémosle q0, (este estado inicial, en muchos casos,
lo sugiere el propio enunciado). Partiendo de este estado inicial, y para cada una de
las posibles combinaciones de entrada, establecer la salida y el siguiente estado
(que puede ser otro o incluso el mismo).
4. Si se trata de una máquina de Mealy: sobre cada flecha que une dos estados indicar
la combinación de entrada que origina dicha transición entre estados y la salida
actual.
5. Si se trata de una máquina de Moore: indicar sobre cada flecha que une dos estados
la combinación de entrada (entrada actual) que origina dicha transición entre
estados. Las salidas correspondientes a cada estado se indican junto a él, dentro del
círculo.
Ejemplo 5: En este caso, el circuito dispone de una sola entrada, que llamaremos X0, y una salida, que
llamaremos Z0. En cuanto a los estados, se puede pensar inicialmente en los siguientes:
Ejemplo 5: Para este ejemplo, la tabla de estados es la indicada a continuación (tabla E5.1)
El método que se va utilizar para obtener la tabla mínima es el de Huffman (otro método es el
denominado de tablas de implicación).
Para minimizar la tabla de estados se averiguará qué estados son equivalentes y se eliminarán
todos menos uno de ellos. Dos estados qi y qj se dice que son equivalentes (qi / qj) si y sólo
si para cada combinación de entradas posibles se cumple:
q(t+1)/z(t)
Próximo estado/salida actual
1. Dividir la tabla de estados en grupos de estados actuales tales que todos los estados de
cada grupo tengan la misma salida ante la misma entrada (obsérvese que en la formación
de estos grupos no se tienen en cuenta los próximos estados). Cada grupo de estados se
puede nombrar con una letra o un número.
En la tabla 5 los estados actuales q0, q1, q2 y q6 tienen salidas 00, los estados actuales q3,
q4 y q5 tienen salidas 10 y el estado actual q7 tiene salidas 01. Por tanto, siguiendo el punto
1 y asignando a cada grupo una letra identificativa, se obtiene la siguiente división de la
tabla de estados (tabla 6), (en el siguiente punto se explicará cómo se rellena la última línea
de la tabla).
2. La última línea la constituyen los grupos a los que pertenecen los próximos estados de cada
estado actual. Así por ejemplo, los estados siguientes del estado q0 son q0 (que pertenece
Salidas 00 01 10
Grupos A B C
Grupos de los
A, A A, C A, B A, C C, C A, A A, A C, C
próximos estados
3. Si en esta última tabla hay algún “grupo” (casillas de la segunda fila) dentro del cual hay
algún “estado actual que forma parte del “grupo” que no tiene los mismos “grupos de los
próximos estados” (casillas de la última fila), esto significa que los “estados actuales” de
dicho “grupo” no son equivalentes entre sí. En este caso hay que dividir dicho “grupo” en
otros más pequeños que contengan estados actuales con los mismos “grupos de los
próximos estados”.
Siguiendo esta idea, en nuestro ejemplo, el grupo A hay que dividirlo en tres grupos, que
llamaremos A, D, E; el grupo C hay que dividirlo en dos grupos, que llamaremos C, F. Una
vez realizada esta división, hay que asignar los nuevos “grupos de los próximos estados”,
obteniéndose la tabla 7:
Tabla 7. Tabla 6 subdividiendo los estados en grupos con los mismos grupos de próximos estados.
Salidas 00 01 10
Grupos A D E B C F
4. Este proceso se repite hasta conseguir una tabla en la que los “estados actuales que
constituyen el grupo” de cada “grupo” tengan los mismos “grupos de los próximos estados”.
Dentro de esta tabla final los “estados actuales que constituyen el grupo” de cada “grupo”
son estados equivalentes entre sí, y se pueden sustituir por un único estado.
Según esto, la tabla 7 es ya la tabla final, ya que los “estados actuales que constituyen el
grupo” de cada “grupo” tienen los mismos “grupos de los próximos estados”. Por tanto q1
y q6 son estados equivalentes y también lo son q3 y q4. Es necesario asignar un nombre a
los nuevos estados, que son los grupos definitivos. Así, por ejemplo, se pueden identificar
los estados finales utilizando como subíndice la letra del grupo al que pertenecen. En
qa qa/0 qd/0
qb qc/0 qc/1
qc qa/1 qd/0
qd qd/0 qc/0
qe qe/0 qb/0
qf qc/1 qf/0
q(t+1)/z(t)
Próximo estado/salida actual
En el ejemplo 5 se puede ver (tabla E5.1) que los estados q1 y q3 son equivalentes, por ello
denominaremos a los nuevos estados qa =q0, qb =q1= q3, y qc=q2, resultando la siguiente tabla:
qa qa/0 qb/0
qb qc/0 qb/0
qc qa/0 qb/1
q(t+1)/z(t)
Próximo estado/salida actual
2m 2m!
N! = m
N (2 − N)!
1. Buscar en la tabla de estados, estados actuales (q(t)) que tengan idénticos próximos
estados para las mismas entradas. Esto es, buscar por filas estados actuales que
tengan dentro de cada columna (cada columna se corresponde con una entrada) de
estados próximos, estados próximos iguales. A los estados actuales que cumplan esta
condición les vamos a llamar actuales-uno, y a sus próximos estados, si son distintos,
los denominaremos próximos-uno. Para conseguir una realización “buena” del circuito,
se deben asignar códigos binarios adyacentes (que sólo se diferencien en un bit) a los
estados actuales-uno y también deberán ser adyacentes las asignaciones de los
próximos-uno (si son distintos).
2. Buscar en la tabla de estados, estados actuales (q(t)) que tengan idénticos próximos
estados, y en la misma cantidad, pero para entradas diferentes. Esto es, buscar
por filas estados actuales que tengan para diferentes columnas de estados próximos,
estados próximos iguales (y en la misma cantidad). A los estados actuales que
cumplan esta condición les vamos a llamar actuales-dos, y a sus próximos estados si
son distintos los denominaremos próximos-dos. Para conseguir una realización “buena”
del circuito, se deben asignar códigos binarios adyacentes a los estados actuales-dos
y también se debe hacer lo mismo con los estados próximos-dos.
3. Buscar en la tabla de estados, estados actuales (q(t)) que tengan idénticos próximos
estados para alguna de las entradas. Esto es, buscar por filas estados actuales que
tengan en algunas columnas estados próximos iguales. A los estados actuales que
cumplan esta condición les vamos a llamar actuales-tres. Para conseguir una
realización “buena” del circuito, se deben asignar códigos binarios adyacentes a los
estados actuales-tres, teniendo prioridad aquellos estados actuales-tres que tengan
mayor número de próximos estados iguales.
4. Otra regla práctica es asignar códigos adyacentes a los próximos estados de cada fila.
5. Y por último, para una realización “buena” del circuito, se deben asignar códigos
binarios adyacentes a cada estado actual con sus próximos estados.
Dado que no siempre se podrá conseguir aplicar todas estas reglas, el orden de prioridad de
aplicación es el mismo que el de su numeración en esta lista.
Un consejo práctico, para tener claros los códigos adyacentes, es utilizar mapas de Karnaugh
(con los que el alumno ya está familiarizado, y donde están presentes todas las posibilidades
de adyacencia) con tantas variables como flip-flops tenga el circuito a diseñar.
Con el fin de dar mayor claridad a la aplicación de estas reglas prácticas vamos a utilizar la
tabla de estados de la tabla 9. Lógicamente, si esta tabla se fuera a implementar habría que
minimizarla, pero para dar mayor claridad al proceso de asignación de estados se va a utilizar
como está:
q(t+1)/z(t)
Próximo estado/salida actual
Según esto, una posible asignación es la indicada en el mapa de Karnaugh de la tabla 10.
Una vez realizada la asignación de estados se obtiene la tabla de transiciones codificada (mera
traducción de la tabla de estados) tal como se hizo en el apartado de diseño. Es aconsejable
que en la tabla de transiciones codificada aparezcan en columnas diferentes los próximos
estados y las salidas actuales.
q(t) Q1(t)Q0(t) 0 1 0 1
q0 00 00 01 0 0
q1 01 10 01 0 0
q2 10 00 01 0 1
q3 11 XX XX X X
Ejemplo 5: Este caso tiene una sola entrada, X0t y dos líneas
de estado Q1t y Q0t. A partir de la tabla E5.3, y utilizando mapas Figura E5.2. Función de salida del
de Karnaugh, se obtiene la función de salida mostrada en la ejemplo 5.
figura E5.2.
1. Definir el tipo de flip-flop a utilizar (RS, JK, T, D). A modo de recordatorio, en la tabla 11 se
muestran las excitaciones necesarias a la entrada de cada tipo de biestable para obtener todas
las posibles transiciones. Se supone que las entradas son activas a nivel alto.
Q(t) Q(t+1) S R J K T D
0 0 0 X 0 X 0 0
0 1 1 0 1 X 1 1
1 0 0 1 X 1 1 0
1 1 X 0 X 0 0 1
Ejemplo 5. En este caso hay 3 estados, por tanto se necesitan 2 flip-flops. Utilizaremos flip-flops JK, y
denominaremos Q1 y Q0 a sus salidas y J1, K1 y J0, K0 a sus entradas, respectivamente. Si reescribimos
la tabla E5.3, considerando únicamente los estados actuales y próximos y los valores de J1, K1 y J0, K0,
obtendremos la tabla E5.4.
q(t) Q1(t)Q0(t) 0 1 0 1 0 1
qa 00 00 01 0X 0X 0X 1X
qb 01 10 01 1X 0X X1 X0
qc 10 00 01 X1 X1 0X 1X
11 XX XX XX XX XX XX
Los mapas de Karnaugh correspondientes a las entradas de los dos flip-flops se muestran en la figura
E5.3, junto a las funciones de entrada ya simplificadas.
J1t = Q 0 t X 0 t K 1t = 1
Figura E5.3. Funciones lógicas de las entradas de los flip-flops del ejemplo 5.
Ejemplo 5:
Ejemplo 5: En este caso debemos añadir los componentes necesarios para que el circuito al ser
alimentado comience en el estado q0=00.
En este caso, el circuito de control está conectado al CLR de los biestables, porque
deseábamos que al principio su salida fuera 0. Si necesitamos un 1 inicial, situaremos el circuito
de control en las entradas PR.
Si la entrada asíncrona a controlar fuera activa a nivel alto, sería necesario conectar un circuito
similar al anterior, pero cambiando la posición de los componentes de forma que inicialmente
haya 5V en el CLR (o el PR), y después 0V.
Ejemplo 5. En este ejemplo el estado inicial es q0=00, por lo que el pulsador ha sido conectado en el
circuito de forma que al ser activado realice un reset a ambos biestables.
Solución:
Como paso previo a la elaboración del grafo del autómata, comenzaremos planteando la tabla
de verdad del sumador de un bit con acarreo (Tabla E6.1). En ella hemos denominado X0 y X1
a los sumandos y S al resultado (suma).
Para ver los estados que se necesitan solamente hay que darse cuenta de que las dos
situaciones que se pueden presentar son que la suma se realice con y sin acarreo (si se genera
acarreo hay que almacenarlo y sumarlo con los dos bits X0 y X1 siguientes). Por tanto, para
recordar si ha habido acarreo o no, necesitamos 2 estados: si la suma no genera acarreo
estamos en el estado q0 y si lo genera en el q1. Estos estados han sido incluidos también en la
tabla E6.1.
Según la tabla E6.1, si estando en el estado q0 (acarreo anterior=0) los bits X0 y X1 toman
valores X0=0 y X1= 0, X0= 0 y X1= 1 ó X0=1 y X1=0 la suma es 0, 1, 1, respectivamente y el
acarreo generado es 0 en todos los casos, es decir, el estado siguiente es q0. Sin embargo, si
el dato es X0=1 y X1=1, la suma es S=0 y se produce acarreo, por tanto, el estado siguiente será
q1.
Por otra parte, si en q1 (acarreo anterior=1) los datos de entrada son X0=0 y X1=1, X0=1 y X1=0
ó X0=1 y X1=1 la suma es 0 (acarreo anterior (1) + 0 + 1 = 0), 0 (acarreo anterior (1) + 1 + 0 =
0), 1 (acarreo anterior (1) + 1 + 1 = 1), respectivamente, y en todos los casos el acarreo
generado es 1, lo que hace que permanezca en el estado q1. Por el contrario, si los datos son
X0=0 y X1=0, la suma es 1 y el acarreo generado es 0, y se pasa al estado q0. El estado inicial
será q0, porque el primer acarreo es 0.
Entrada actual
Estado actual
q(t) x0 x1 x2 x3
00 01 10 11
q0 q0/0 q0/1 q0/1 q1/0
q1 q0/1 q1/0 q1/0 q1/1
q(t+1)/z(t)
Estado siguiente/salida actual
Como hay 2 estados, será suficiente con 1 biestable. La asignación de estados puede ser: q0=
0, q1= 1 y la tabla de transiciones codificada es la mostrada a continuación (tabla E6.3). En ella,
Q0 es la salida física del flip-flop, las líneas de entrada del circuito son X0 y X1, y la salida física
Z0.
Una vez que tenemos ya las transiciones del autómata como cambios entre 0 y 1 de Q0(t),
debemos obtener la función de excitación del biestable para conseguir que se produzcan dichas
transiciones. Según la tabla 11, para un biestable JK, y denominando J0 y K0 a las entradas,
obtenemos la tabla E6.4.
Utilizando mapas de Karnaugh para obtener las funciones de entrada al flip-flop, se tienen los
resultados mostrados en la figura E6.2.
J0 t = X 0 t X 1 t K 0 t = X 0 t X 1t
A partir de este mapa de Karnaugh se obtiene como función de salida la siguiente expresión:
Por último, conectamos en las entradas asíncronas del biestable los componentes necesarios
para asegurar que empezará en el estado q0, es decir, que al conectar la alimentación Q0=0.
Como se puede observar, en este ejemplo las entradas asíncronas son activas a nivel alto. Se
desea que la salida inicial del biestable sea 0, por lo que el PR se ha conectado a nivel bajo,
para que permita actuar a las entradas síncronas, y el circuito de control del CLR se ha
diseñado de forma que proporcione un nivel alto al conectar la alimentación, realizando un
reset, y, transcurrido un tiempo (determinado por los valores de R y C), un nivel bajo, para que
el biestable funcione de forma síncrona. La función del diodo es la misma que la del diodo del
ejemplo 5.
Solución:
En este caso, de nuevo, el circuito dispone de una sola entrada, que llamaremos X0, y una
salida, Z0. En cuanto a los estados, se puede pensar inicialmente en los siguientes:
q0 q0 q1 0
q1 q0 q2 0
q2 q0 q3 0
q3 q0 q3 1
Próximo
estado q(t+1)
Figura E7.1. Grafo correspondiente al
ejemplo 7.
Figura E7.2. Funciones lógicas de las entradas de los flip-flops del ejemplo 7.
Z0t=Q0t.Q1t
Ahora ya tenemos todas las funciones necesarias para implementar el circuito, que se muestra
en la figura E7.3.
Por último, es necesario incluir el control de las entradas asíncronas de los biestables para
asegurar que el estado inicial sea q0, es decir, que la salida de ambos biestables sea cero al
conectar la alimentación. El circuito completo se muestra en la figura E7.4.
Solución:
En este caso, el circuito no tiene ninguna entrada de datos (solamente la entrada de reloj CLK),
y tiene cuatro líneas de salida (Z3, Z2, Z1, Z0). En cuanto a los estados, son necesarios tantos
como estados posibles tiene el contador: 10 (q0, q1, q2, q4, q5, q6, q7, q8, q9). La transición entre
estados, partiendo de un estado inicial (por ejemplo q0), se produce en cada pulso de reloj, y,
como no hay entradas, cada estado tiene un solo estado siguiente, por lo que en cada estado
siempre se produce la misma transición. En la figura E8.1 se muestra el grafo.
En este caso hay diez estados, por lo tanto se necesitan 4 flip-flops. Una posible asignación de
estados es la siguiente: q0= 0000, q1= 0001, q2= 0010, q3=0011,q4= 0100, q5= 0101, q6= 0110,
q7=0111, q8=1000, q9=1001, y sustituyendo los códigos en la tabla E8.1, obtenemos la tabla de
estados codificada, mostrada en la tabla E8.2. Los estados 1010, 1011, 1100, 1101, 1110 y
1111 nunca se presentan y, por tanto, a las salidas y próximos estados correspondientes se les
puede asignar cualquier valor, situación que se indica con la letra X.
0000 0001 0X 0X 0X 1X
0001 0010 0X 0X 1X X1
0010 0011 0X 0X X0 1X
0011 0100 0X 1X X1 X1
0100 0101 0X X0 0X 1X
0101 0110 0X X0 1X X1
0110 0111 0X X0 X0 1X
0111 1000 1X X1 X1 X1
1000 1001 X0 0X 0X 1X
1001 0000 X1 0X 0X X1
1010 XXXX XX XX XX XX
1011 XXXX XX XX XX XX
1100 XXXX XX XX XX XX
1101 XXXX XX XX XX XX
1110 XXXX XX XX XX XX
1111 XXXX XX XX XX XX
J1t = Q 0 t ⋅ Q 3 t K 1t = Q 0 t
J2 t = Q 0 t Q 1t K 2 t = Q 1t Q 0 t
J3 t = Q 2 t ⋅ Q 1t ⋅ Q 0 t K 3 t = Q0 t
Por último, debemos calcular las funciones lógicas de las cuatro salidas, Z3, Z2, Z1 y Z0. A partir
de la tabla E8.2, y utilizando mapas de Karnaugh para simplificar, se obtienen las funciones de
la figura E8.3.
Una vez obtenidas las funciones lógicas de las salidas del circuito y de las entradas de los
biestables, podemos implementar el circuito, como se muestra en la figura 8.4, y por último,
añadir en las entradas asíncronas las conexiones necesarias para que empiece a contar por el
0, obteniendo el circuito de la figura 8.5.
Z2t = Q2t Z3 t = Q3 t
Figura E8.3. Mapas de Karnaugh y expresiones lógicas de las salidas del autómata.
1. Diséñese un circuito secuencial síncrono tipo Moore que proporcione a su salida un nivel alto
cada vez que en su línea de entrada se presente la secuencia 010.
2. Diséñese un circuito detector de paridad para caracteres binarios de 4 bits, que se reciben
en serie por una línea X0. La salida Z0 debe ponerse a 1 si en el momento de llegar el cuarto bit
el número de 1's es par y permanecer en 0 en caso contrario. Después del cuarto bit el sistema
debe volver al estado inicial, quedando preparado para recibir el siguiente carácter.
El problema se expone en una carta dirigida a un amigo: “Querido amigo: Al poco tiempo de
comprar esta vieja mansión tuve la desagradable sorpresa de comprobar que está hechizada
con dos sonidos de ultratumba que la hacen prácticamente inhabitable: un canto picaresco y una
risa sardónica.
Sin embargo, aún conservo cierta esperanza, pues la experiencia me ha demostrado que su
comportamiento obedece a ciertas leyes, oscuras pero infalibles, y que puede modificarse
tocando el órgano y quemando incienso.
En cada minuto, cada sonido está presente o ausente. Lo que cada uno de ellos hará en el
minuto siguiente depende de lo que pasa en el minuto actual, de la siguiente manera:
El canto conservará el mismo estado (presente o ausente) salvo si durante el minuto actual no
se oye la risa y toco el órgano, en cuyo caso el canto toma el estado opuesto.
En cuanto a la risa, si no quemo incienso, se oirá o no según que el canto esté presente o
ausente (de modo que la risa imita al canto con un minuto de retardo). Ahora bien, si quemo
incienso la risa hará justamente lo contrario de lo que hacía el canto.
En el momento en que te escribo estoy oyendo a la vez la risa y el canto. Te quedaría muy
agradecido si me dices qué manipulaciones de órgano e incienso debo seguir para restablecer
definitivamente la calma”.