Escolar Documentos
Profissional Documentos
Cultura Documentos
________________________________________________________________________________
Los sistemas digitales secuenciales fueron presentados brevemente en el capítulo 1, cuya relectura se
recomienda llegados a este punto. En un sistema secuencial el valor de la salida en un cierto instante
de tiempo depende no solamente del valor de la entrada en dicho instante sino de los valores
anteriores que ésta ha tomado. Por ello es intuitivo pensar que el estudio y comprensión de los
sistemas secuenciales es, a priori, más complejo que el de los sistemas combinacionales.
Este capítulo presenta los conceptos fundamentales necesarios para abordar el análisis y diseño de
sistemas secuenciales. En primer lugar se presenta el concepto de estado y su utilización en la
especificación de sistemas secuenciales. A continuación se discute el problema de la sincronización,
es decir, cómo abordar la inclusión de la variable tiempo en el funcionamiento del sistema. Por último
se presentan los biestables, vistos como ejemplos sencillos de circuito secuencial y también como
elementos a utilizar en la implementación de circuitos secuenciales de mayor complejidad.
Así, se presenta el concepto de estado del sistema para describir la secuencia temporal de entradas, y
el uso de éste en la especificación de dicho sistema. El punto 6.1.4, referido a la minimización del
número de estados en la especificación de un sistema secuencial, aunque es de importancia,
constituye una pequeña disgresión dentro del esquema lógico seguido. Por este motivo su estudio
puede posponerse a una segunda lectura del capítulo, cuando los conceptos fundamentales sobre
sistemas secuenciales hayan sido asimilados.
© los autores, 1998; © Edicions UPC, 1998. Quedan rigurosamente prohibidas, sin la autorización escrita de los titulares del "copyright", bajo las sanciones
establecidas en las leyes, la reproducción total o parcial de esta obra por cualquier medio o procedimiento, comprendidos la reprografía y el tratamiento
informático, y la distribución de ejemplares de ella mediante alquiler o préstamo públicos, así como la exportación e importación de ejemplares para su
distribución y venta fuera del ámbito de la Unión Europea.
218 Diseño digital
________________________________________________________________________________
Como se ha dicho, en un sistema secuencial el valor de la salida en un instante z(t0) depende tanto del
valor de la entrada en ese instante, x(t0), como de valores anteriores, x(t<t0), luego podemos escribir
Es evidente que un sistema así necesita recordar un número en principio ilimitado de entradas para
generar cada salida, es decir, implica una capacidad de memorización infinita, cosa que impide su
realizabilidad a nivel práctico. Por este motivo introduciremos una restricción importante:
trabajaremos solamente con aquellos sistemas secuenciales en los cuales las posibles evoluciones
temporales de la entrada se puedan agrupar en un número finito de tipos, llamados "estados", y que,
desde el punto de vista funcional, todas las evoluciones de la entrada pertenecientes a un mismo
estado son equivalentes.
Con la finalidad de simplificar la notación, en adelante llamaremos por defecto sistemas secuenciales
a aquéllos cuyo funcionamiento puede describirse mediante un número finito de estados, que con
mayor rigor deberían ser denominados autómatas o máquinas de estados finitos.
Ejemplo 6.1
Sea un sistema digital como el de la figura 6.1, cuya entrada recibe una serie arbitraria de valores
enteros entre 0 y 3, tomando su salida el valor "a" cuando la suma de los valores recibidos a la
entrada sea múltiplo de 2, y el valor "b" cuando no lo sea. Es claro que este sistema es secuencial
puesto que el valor de la salida en un instante dado depende de todas las entradas recibidas hasta
ese instante y no sólo de la última de ellas.
Sistema x ∈ {0, 1, 2, 3}
x z
Digital z ∈ {a, b}
Veamos si es posible especificar el funcionamiento de este sistema como una máquina de estados
finitos. Para ello obsérvese que para generar la salida no es necesario que el sistema almacene o
"recuerde" la secuencia completa de entradas recibidas (que es en principio ilimitada), y que
tampoco es necesario que almacene el valor de la suma de las entradas (que puede hacerse
prácticamente infinito), sino que le basta con saber si esta suma es par (múltiplo de 2) o no.
Supongamos por ejemplo que la suma de los valores recibidos, excluyendo el último, sea par,
cosa que indicamos definiendo una variable de estado (s) y haciendo que ésta tome el valor "par";
si el último valor recibido es x=0, es evidente que la suma total de los valores recibidos sigue
siendo par, por lo que la salida será y=a. Lo mismo pasaría si el último valor recibido fuese x=2,
pero si este valor fuera x=1 o x=3 tendríamos una suma total impar, por lo que en ambos casos la
salida generada sería z=b.
Si por el contrario suponemos que la suma de entradas recibidas (excepto la última) es impar,
cosa que indicaremos haciendo s=impar, y se recibe como última entrada x=0 o x=2, la salida en
ambos casos será z=b (suma total impar). En cambio, si la última entrada recibida es x=1 o x=3,
la salida será z=b (suma total par).
Por otra parte, si la variable de estado recoge el efecto de las entradas anteriores sobre el
comportamiento del sistema, es evidente que el valor de esta variable se verá afectado por la
última entrada; por ejemplo, si se tiene s=par y x=1, la salida será z=b (suma impar) y el estado
"siguiente", es decir el que incluirá está última entrada, será s=impar. En consecuencia los valores
de la entrada (x) y del estado (s) determinan unívocamente tanto el valor de la salida (z) como el
valor del estado siguiente (llamémoslo s(t+∆t) o, simplemente, s+).
s x s+ z
a) b)
par 0 par a
par 1 impar b
tiempo
par 2 par a
x 0 3 2 1 3 ...
par 3 impar b
s par par impar impar par impar
impar 0 impar b
z a b b a b ...
impar 1 par a
impar 2 impar b
impar 3 par a
La figura 6.2.a ilustra el comportamiento del sistema en función del tiempo para una cierta
secuencia de entradas (0,3,2,1,3,..) a partir de un estado inicial s=par. La figura 6.2.b muestra por
su parte la tabla de verdad de la salida del sistema (z) y del estado futuro (s+) en función de la
entrada (x) y del estado (s) del sistema.
Ejercicio 6.1
Un sistema secuencial tiene dos posibles valores de entrada, A y B. Queremos que el sistema
detecte secuencias de tres entradas iguales. Decida los estados posibles, y describa el
funcionamiento del sistema a través de una tabla.
_________________________________________________________________________________
Ejemplo 6.2
El ejemplo 6.1 ilustra claramente cómo la utilización de una variable de estado es una valiosa
ayuda a la hora de especificar (describir) el funcionamiento de un sistema secuencial. En dicho
ejemplo la variable toma un número finito de valores (en concreto, dos); sin embargo, es fácil
imaginar sistemas cuya variable de estado tendría que tomar infinitos valores: sea un sistema
digital con una entrada y una salida en que ambas pueden tomar dos valores, "0" y "1". La salida
toma el valor "1" cuando la entrada haya tomado el mismo número de veces el valor "0" que el
valor "1", y "0" en los demás casos.
Sistema x ∈ {0, 1}
x z
Digital z ∈ {0, 1}
Si el sistema tiene que detectar cuándo la entrada ha tomado el mismo número de veces el valor
"0" que el valor "1" quiere decir implícitamente que debe contar cuántas veces más ha tomado un
valor que otro. Esto se podría hacer mediante una variable de estado, que por ejemplo podría
indicar cuántas veces más toma la entrada el valor "1" que el "0". Sin embargo, en ausencia de
otras restricciones el número de estados no está limitado: imaginemos por ejemplo que en la
entrada se recibe una secuencia indefinida de "1", necesitaríamos que la variable de estado
pudiera tomar un número ilimitado de valores. Diremos entonces que este sistema no es
realizable en forma de máquina de estados finitos.
_________________________________________________________________________________
Así la especificación de un sistema secuencial (entendido como máquina de estados finitos) puede
hacerse de forma sistemática si se conocen los conjuntos de posibles entradas, salidas y estados, más
las dos funciones que relacionan estos tres conjuntos entre sí: la función de salida y la función de
transición de estados. La figura 6.4 muestra este tipo de especificación utilizando un lenguaje más
formal.
Sistema
x Secuencial z
[s]
x ∈ X, s ∈ S, z ∈ Z
X= Conjunto finito de entradas
F: X, S Z S= Conjunto finito de estados
z = f(x, s) Z= Conjunto finito de salidas
F= Función de salida
G: X, S G= Función de transición de estados
S s+=g(x, s)
Las entradas son los datos que recibe el sistema del exterior, los estados pueden considerarse como
datos generados por el mismo sistema y utilizados internamente por éste (por tanto no accesibles
desde el exterior), y las salidas como los resultados transmitidos al exterior. Las funciones de salida y
de transición de estados se asocian con el tratamiento y generación de datos realizado por el sistema.
Ejemplo 6.3
Vamos a hacer la especificación de un sistema que indica si, en los sucesivos lanzamientos de una
moneda al aire, el número de veces que ha salido "cruz" es par o impar. Se trata obviamente de
un sistema secuencial, para el que se puede suponer que tanto el conjunto de entradas como el de
salidas constan de sólo dos elementos, por ejemplo
Parece razonable pensar que el sistema debe ser capaz de memorizar el resultado de los
lanzamientos efectuados (anteriores al último) en dos grupos o estados, el primero de los cuales
comprendería, por ejemplo, las evoluciones en que el número de veces que se ha recibido la
entrada "cruz" sea par, mientras que el otro grupo reuniría las secuencias que conducen a un
número impar de entradas "cruz". Luego tendremos dos estados posibles
S = {par, impar}
Para terminar de especificar el sistema es necesario indicar cuál es el valor de la salida para cada
posible valor de la entrada y del estado (función de salida) y cómo se actualiza el estado en
función de su valor anterior y del de la entrada (función de transición de estados). Si por ejemplo
asignamos la salida "1" cuando el número de cruces aparecidas sea impar, la tabla de verdad para
ambas funciones será la de la figura 6.5.a.
En la figura 6.5.b se muestra la misma información que en la 6.5.a utilizando una tabla de doble
entrada, de forma que en cada casilla especificamos el valor actualizado del estado y la salida;
así, por ejemplo, si el estado actual es "par" y la entrada es "cara", el estado próximo seguirá
siendo "par" y la salida "0". Dado su formato más compacto utilizaremos preferentemente este
segundo tipo de tabla en lo sucesivo.
_________________________________________________________________________________
Ejercicio 6.2
Especifique el sistema propuesto en el problema P1.2 usando los dos tipos de tablas presentadas
en el ejemplo anterior.
_________________________________________________________________________________
El diagrama de estados está compuesto por una serie de nodos y arcos. Cada nodo representa un
posible estado del sistema (por tanto hay tantos nodos en el diagrama como estados posibles),
mientras que los arcos unen los nodos entre sí de forma direccionada (suelen representarse mediante
flechas). Así la interpretación del esquema de la figura 6.6 es la siguiente: si el estado actual del
sistema es s=A y la entrada es x, la salida toma el valor z y el sistema pasará al estado s+=B. Nótese
que de cada nodo del diagrama salen tantos arcos como combinaciones de entrada diferentes sean
posibles.
x/z z = f ( A, x )
A B
B = g( A, x )
Ejemplo 6.4
Vamos a construir el diagrama de estados del sistema del ejemplo 6.3. Su generación a partir de
la tabla de verdad de la figura 6.5.b es inmediata: sólo hay que dibujar tantos nodos como estados
tiene el sistema (en este caso dos: par e impar) y tantos arcos partiendo de cada nodo
(transiciones y salidas) como entradas posibles tiene el sistema (en este caso también dos: cara o
cruz).
Cruz/1
Par Impar
Cara/0 Cara/1
Cruz/0
_________________________________________________________________________________
Ejercicio 6.3
_________________________________________________________________________________
Ejemplo 6.5
Obtener la tabla de verdad y el diagrama de estados de un sistema secuencial cuya entrada puede
tomar cinco valores distintos (X={a,b,c,d,e}), correspondientes a las cinco opciones entre las que
el usuario puede escoger pulsando un pequeño teclado, y cuya salida puede tener dos valores
(Z={s,n}), que permiten o no el acceso a una zona de seguridad. El funcionamiento del sistema es
tal que, si se pulsan consecutivamente las teclas "a","d" y "b", se habilita el acceso (z=s), mientras
que en cualquier otro caso éste permanece inhabilitado (z=n).
Parece claro que basta con saber hasta qué punto las entradas antepenúltima y penúltima se
parecen a la secuencia clave: esta información más la última entrada (tercer componente de la
secuencia) permite determinar qué salida se tiene que generar.
Estado Significado
S0 Se ha recibido una secuencia tipo "-, -", que en nada
coincide con la clave.
S1 Se ha recibido una secuencia tipo "-, a", que coincide
con el principio de la clave.
S2 Se ha recibido una secuencia "a, d", que coincide
con la clave.
Que a su vez permite confeccionar la tabla de verdad y/o el diagrama de estados del sistema (ver
figura 6.8).
a/n
S S
a b c d e 0 1
S0 S 1,n S 0,n S 0 ,n S 0 ,n S 0,n b,c,d,e/n b,c,e/n a/n
d/n
S1 S 1,n S 0,n S 0 ,n S 2 ,n S 0,n a/n
b/s
S2 S 1,n S 0,s S 0 ,n S 0 ,n S 0,n c,d,e/n
S
2
Figura 6.8 Tabla de verdad y diagrama de estados del sistema del ejemplo 6.5
Estado Significado
S0 Las últimas entradas recibidas componen la secuencia
"-, -, -", que en nada coincide con la clave.
S1 Las últimas entradas recibidas componen la secuencia
"-, -, a", que coincide con el principio de la clave.
S2 Las últimas entradas recibidas componen la secuencia
"-, a, d", que coincide con parte de la clave.
S3 Las últimas entradas recibidas componen la secuencia
"a, d, b", que coincide con la clave completa.
Podemos notar que con estos cuatro estados la función de salida es del tipo z=f(s), es decir, la
salida depende únicamente del estado y no directamente de la entrada. Esta situación permite
especificar el funcionamiento del sistema mediante una tabla de verdad algo más sencilla (ver
figura 6.9), donde podemos indicar la salida en una columna aparte. En el diagrama de estados
podemos indicar la salida en los nodos (ver figura 6.9).
b,c,d,e
S /n
x 0 a
s a b c d e z
b,c,d,e
S0 S1 S0 S0 S0 S0 n
S1 S1 S0 S0 S2 S0 n b,c,e
S /s a S /n
3 1
S2 S1 S3 S0 S0 S0 n
a
S3 S1 S0 S0 S0 S0 s a d
c,d,e
b S 2/n
Figura 6.9 Segunda tabla de verdad y diagrama de estados del sistema del ejemplo 6.5
El tipo de especificación mostrada en la figura 6.9 (con z=f(s)) se denomina máquina de Moore.
Una especificación como la dada en la figura 6.8 (con z=f(s,x)), se denomina máquina de Mealy.
Un comportamiento entrada-salida dado puede especificarse siempre de ambas maneras. Además,
como se verá más adelante, estas dos variantes de especificación conducen a realizaciones
circuitales características.
_________________________________________________________________________________
Ejercicio 6.4
Proponga un diagrama de estados de tipo Mealy para un sistema igual que el descrito en el
ejemplo 6.5, que detecte la secuencia de entrada de 4 carácteres "a,a,d,e". Repita el ejercicio para
la secuencia "b,a,b,d", con uno de Moore.
__________________________________________________________________________
Por tanto dado un sistema secuencial tiene su interés, si más no por sencillez, poder trabajar con la
especificación mínima de dicho sistema, entendiendo como tal aquélla que utiliza el menor número
posible de estados. En el capítulo 7 veremos que esto tiene implicaciones directas sobre la
complejidad de implementación del sistema.
Vamos, pues, a introducir un método sistemático que permite obtener la especificación mínima a
partir de otra cualquiera de un sistema secuencial. Este método se basa en eliminar sucesivamente los
estados que son redundantes o equivalentes entre sí.
Concretando más, diremos que dos estados son equivalentes cuando el sistema genera la misma
secuencia de salidas para cualquier secuencia de entradas dada, partiendo de cada uno de ellos, siendo
imposible distinguirlos entre sí. Diremos además que dos estados son n-equivalentes cuando,
tomándolos como iniciales, no es posible distinguirlos entre sí después de aplicar cualquier secuencia
de n entradas (es decir, cuando a partir de ellos se genera siempre la misma secuencia de n salidas al
aplicar la misma secuencia de n entradas).
función de transición de estados para cada grupo de p1; si para cada valor de la entrada el
estado futuro pertenece siempre a un mismo grupo no hace falta dividir el grupo: los estados
de dicho grupo son a la vez 1-equivalentes y 2-equivalentes. En caso contrario hay que generar
tantos grupos nuevos como comportamientos diferentes se observen.
III) Repetir el paso II para generar la partición pi+1 (grupos de estados i+1-
equivalentes) a partir de la pi (grupos de estados i-equivalentes) hasta obtener dos particiones
seguidas idénticas, momento en el que el proceso finaliza.
Aunque aparentemente se trata de un método complejo, en realidad su aplicación resulta ser muy
sencilla, como puede comprobarse en el ejemplo 6.6.
Ejemplo 6.6
Sea un sistema cuya entrada recibe una secuencia de bits y que genera la salida "1" únicamente
cuando la secuencia recibida es "1,1,0".
0/0
S 1/0
00
0/0
S S
0 1/0 01
0/0 0/0
S in 1/0 0/0
1/0
1/0
0/0
S1 S
10
1/0
S 11 0/1
1/0
Figura 6.10 Diagrama de estados inicial del sistema del ejemplo 6.6
Un posible diagrama de estados para este sistema es el de la figura 6.10, obtenido partiendo de un
estado inicial Sin desconocido, del cual se pasa a S0 o a S1 en función del valor recibido a la
entrada. Desde S0 y/o S1 este esquema se repite, de manera que, partiendo de Sin o de cualquier
otro estado, se llega a los estados Sij cuando los dos últimos valores de la entrada son "i" y "j"
respectivamente. La salida será "0" para todas las posibles transiciones, excepto cuando, siendo el
estado actual S11, se reciba la entrada "0", caso en que se habrá recibido la secuencia que produce
la salida "1".
s x=0 x=1
S in S 0 ,0 S 1 ,0
S0 S 00 ,0 S 01 ,0
S1 S 10 ,0 S 11 ,0
S 00 S 00 ,0 S 01 ,0
S 01 S 10 ,0 S 11 ,0
S 10 S 00 ,0 S 01 ,0
S 11 S 10 ,1 S 11 ,0
Figura 6.11 Tabla de verdad inicial del sistema del ejemplo 6.6
Si atendemos a los valores de la función de salida obtenemos una primera partición en dos grupos
de los siete estados iniciales: sólo a partir de S11 se generan unas salidas diferentes a las
generadas a partir del resto de estados; por tanto
Del estado S11 no hace falta ocuparse más puesto que ha quedado aislado y por tanto seguro que
no es equivalente a ningún otro. Ahora vamos a generar la segunda partición, para ello tomamos
la tabla de transición de estados para el primer grupo de p1
s x=0 x=1
S in S0 S1
S0 S 00 S 01
S1 S 10 S 11
S 00 S 00 S 01
S 01 S 10 S 11
S 10 S 00 S 01
Observando la tabla vemos que los estados futuros correspondientes a Sin, S0, S00 y S01
pertenecen siempre al mismo grupo de p1 (en concreto se llega a S0, S1, S00, y S01), tanto para
x=1, como para x=0. En cambio los estados futuros correspondientes a S1, y S01 pertenecen al
mismo grupo anterior para x=0 y al otro grupo (el formado únicamente por S11) para x=0. Luego
la segunda partición del conjunto de estados será
Ahora debemos reescribir la tabla de transición de estados para cada uno de los grupos de p2 con
el objetivo de analizar el comportamiento de sus estados futuros respecto de la nueva partición y
ver si se tiene que hacer o no divisiones adicionales.
s x=0 x=1
S in S0 S1 s x=0 x=1
S0 S 00 S 01 S1 S 10 S 11
S 00 S 00 S 01 S 01 S 10 S 11
S 10 S 00 S 01
En la tabla de la izquierda no es posible hacer más divisiones: sea cual sea el estado de partida
(Sin, S0 ,S00,ó S01) para x=0 el estado futuro pertenece al primer grupo de p2 y para x=1 el estado
futuro pertenece al segundo grupo de p2. Algo similar ocurre con la tabla de la derecha; por tanto,
la tercera partición del conjunto de estados será
Como las dos últimas particiones son iguales, el método ha finalizado y se puede especificar el
sistema inicial con solamente tres estados. Para ello basta con tomar un representante de cada
grupo de p3, por ejemplo A=Sin=S0=S00=S10, B=S1=S01 y C=S11, y reescribir en función de
estos tres estados la tabla del sistema y el diagrama de estados (figura 6.12).
1/0
s x=0 x=1
0/0 A B 1/0 C 1/0
A A, 0 B, 0
B A, 0 C, 0 0/0
C A, 1 C, 0
0/1
_________________________________________________________________________________
Ejercicio 6.5
Hasta aquí se ha mantenido, por omisión deliberada, una total ambigüedad respecto a los aspectos
temporales básicos de los circuitos secuenciales. En particular se podrían plantear las siguientes
preguntas: si el estado se actualiza en función del estado anterior y de la entrada, ¿en qué momento
concreto se lleva a cabo esta actualización? ¿A partir de cuándo el valor de la entrada, salida o estado
se considera que es el valor "siguiente"?
Es evidente que la respuesta a este tipo de preguntas no es trivial y que, llegados a este punto, es
necesario introducir los aspectos temporales y/o de sincronización.
Una primera clasificación de los sistemas secuenciales en función de su comportamiento temporal nos
llevará a dos grandes grupos o tipos: los sistemas síncronos y los asíncronos.
El segundo grupo lo consituyen los sistemas síncronos, los cuales incluyen un control temporal de
tipo restrictivo (sincronización) en su funcionamiento: el estado y la salida del sistema pueden
cambiar únicamente cuando lo permite una señal externa de referencia llamada reloj (CLOCK). La
forma ideal de la señal de reloj es un tren periódico de impulsos, que indican los instantes de tiempo
en los que es posible el cambio de estado y de salida.
a)
clock
x(t)
S(t)
z(t)
b)
clock
x(t)
S(t)
z(t)
Es evidente que, a priori, un sistema secuencial asíncrono es más rapido que uno síncrono; esto es así
porque en el sistema síncrono los cambios siempre tienen que esperar a producirse en los instantes en
que ésto está permitido, con las consiguientes demoras. A su vez el comportamiento de un sistema
asíncrono es muy sensible al retardo de sus componentes, problema que se agrava notablemente
cuando aumenta su tamaño o su complejidad, razón que hace que los sistemas asíncronos sean muy
poco utilizados en la práctica. En este texto centraremos nuestra atención casi exclusivamente en los
sistemas secuenciales síncronos.
0 1 2 3 ...
...
S(0) S(1) S(2) S(3)
...
z(0) z(1) z(2) z(3)
En estas condiciones es posible realizar una especificación del funcionamiento de este tipo de sistema
donde entradas, salidas y estados se interpretan como secuencias discretas de valores (ver figura
6.15).
Nótese que en este tipo de sistema se trata de un caso opuesto al de un sistema asíncrono en cuanto a
dependencia del factor tiempo, y que es viable prescindir de éste como variable contínua: en cada
período de reloj (i) el sistema recibe una entrada x(i) y se mantiene en un estado s(i), que determinan
unívocamente tanto la salida en este mismo período z(i) como el valor siguiente (en el siguiente
período de reloj) del estado s(i+1). En otras palabras, el comportamiento de este tipo de sistema
síncrono es más cercano al de los sistemas considerados al principio de este capítulo, en los que se
prescindía de los aspectos temporales.
Sistema
x(i) Secuencial z(i)
Síncrono
Ejemplo 6.7
Sea el sistema síncrono especificado en la figura 6.16. Queremos conocer su respuesta a la serie
de entradas x(0)=a, x(1)=b, x(2)=c, x(3)=a, suponiendo que en el instante inicial (i=0) el estado
es S2.
X = {a,b,c} Z = {0,1}
x(i) Sistema z(i)
S = {S 0 ,S 1,S ,S
2 3
}
i 0 1 2 3 4
x(i) a b c a
s(i) S2 S2 S3 S2 S2
z(i) 1 0 1 1
La especificación de la figura 6.16 contiene toda la información necesaria para obtener tanto la
secuencia de estados como de salidas resultantes a partir de la secuencia de entradas y el estado
inicial descritos en el enunciado. El resultado se recoge en la figura 6.17.
_________________________________________________________________________________
Ejercicio 6.6
Encuentre la secuencia de salida del sistema del ejercicio 6.5 entendido como un sistema
síncrono, a la secuencia de entrada periódica -1,0,1,0,-1,0,1,.. sabiendo que el estado inicial es S1.
¿En qué variaría la respuesta si el estado inicial fuera S0, S2 o S3?
_________________________________________________________________________________
x(i) z(i)
Red
Combinacional
s(i) s(i+1)
Registro de
estado
CLOCK Reset
Ha quedado dicho que el funcionamiento del circuito descrito es ambiguo si no se conoce su estado
inicial; para resolver esta dificultad el registro de estado suele disponer de una entrada adicional,
llamada de reinicialización o "reset", que de forma asíncrona (es decir no dependiente del reloj)
permite llevar al sistema a un estado inicial determinado.
Red Red
x(t) z(t) z(i)
Combinacional Combinacional f(s)
f(x,s), g(x,s)
Red
x(t) Combinacional g(s,x)
s(i) s+ (t) s+ (t)
Registro de s(i)
Registro de
estado
a) b) estado
Figura 6.19 Efectos de una entrada no síncrona a) en una máquina de Mealy, b) en una màquina de Moore
La red de la figura 6.19.a que realiza las funciones de salida y de transición de estados es
combinacional, donde el reloj no desempeña ningún papel. Luego si una de sus entradas tiene una
variación temporal x(t) no síncrona, sus salidas z(t) y s+(t) tampoco serán síncronas y únicamente la
variación del estado actual s(i) estará sincronizada. Nótese que este resultado implica que el sistema
no es síncrono.
Esta asincronía indeseada se debe a que la entrada del sistema influye directamente sobre su salida,
situación identificable con una máquina de Mealy, donde se tiene z=f(s,x). Ahora bien, tal como
muestra la figura 6.19.b, esto no ocurre en el caso de una máquina de Moore, donde la salida sí será
síncrona puesto que es una función del tipo z=f(s).
Como conclusión podemos decir que para asegurar que una máquina de Mealy se comporte de forma
síncrona es necesario que sus entradas hayan sido sincronizadas previamente, condición innecesaria
en el caso de una máquina de Moore. Por esta razón existe en la práctica una cierta preferencia a
trabajar con máquinas de este último tipo. El ejemplo 6.8 ilustra mediante un caso concreto esta
diferencia de comportamientos.
Ejemplo 6.8
Obtener el cronograma de las señales de estado y las salidas de los sistemas 1 y 2 de la figura
6.20.a cuando se aplica a ambos las señales de entrada y de reloj indicadas en la figura 6.20.b. De
acuerdo con las especificaciones dadas en la figura, los sistemas 1 y 2 son respectivamente
máquinas de Mealy y de Moore.
Sistema 1
a) z1(t)
Sistema 1 s x=0 x=1
z2(t)
x(t) 0 0,11 1,01
1 1,11 0,10
Sistema 2 z(t)
s +,z1 z2
CLK Sistema 2
b) s1 s2 x=0 x=1 z
00 01 00 0
CLK
01 10 01 1
10 11 10 1
x(t)
11 00 11 0
s1+s2 +
En el cronograma del sistema 1 (figura 6.21.a) puede observarse que, al no estar sincronizada la
entrada x(t), las salidas tampoco lo están, aunque sí el estado s(t). Esto no ocurre para el sistema 2
(figura 6.21.b), donde a pesar de que la entrada no es síncrona, tanto las señales de estado como
la salida sí lo son (nótese que el sistema sólo hace caso del valor de la entrada en los instantes de
tiempo coincidentes con los impulsos del reloj).
a) b)
CLK CLK
x(t) x(t)
s(t) s1(t)
z1(t) s2(t)
z2(t) z(t)
Figura 6.21 Cronogramas de l ejemplo 6.8 para el sistema 1 (a) y el sistema 2 (b)
_________________________________________________________________________________
Hasta ahora hemos considerado siempre la señal de reloj como un tren periódico de impulsos de
duración despreciable frente a cualquier otra característica temporal del sistema. En la realidad esto
no es así y las señales de reloj son similares a la mostrada en la figura 6.22, que está caracterizada por
dos magnitudes: el ancho del pulso tw y su periodo TCLK. Se denomina ciclo de trabajo al porcentaje
de tiempo que el reloj esta a "1" en cada periodo, es decir, a la relación (tw/TCLK)x100.
CLK(t)
tw TCLK
Las señales de reloj ideales (con impulsos de duración prácticamente nula) definen con precisión
instantes de tiempo en los cuales tienen lugar los cambios del sistema. En cambio, pulsos de reloj de
duración apreciable dificultan una correcta sincronización.
El ejemplo 6.9 ilustra la relación que debe existir entre los retardos y la frecuencia de reloj para
asegurar la correcta sincronización de un sistema secuencial canónico.
Ejemplo 6.9
x Red z
Combinacional
+
s s
Registro de
estado
CLOCK
Una secuenciación de estados correcta implica que el sistema tiene que hacer una única
actualización del estado en cada período de reloj. Esto supone cumplir dos condiciones:
1) Que dentro de un período de reloj haya suficiente tiempo para actualizar el estado, 2) Que no
se haga más de una actualización por período de reloj.
La primera condición se traduce en que el tiempo que tarda el sistema en responder sea inferior a
TCLK, es decir, si tC es el retardo de la red combinacional y tR el del registro:
tC + t R < T CLK
Es habitual en la práctica hacer que esta desigualdad se cumpla claramente, por lo que se escoge
un período de reloj que sea , por lo menos,un número entero de veces mayor que la suma de
retardos (hay varios criterios para fijar este número, habitualmente igual o superior a 3).
La segunda condición se traduce en que el tiempo que tarda el sistema en responder debe ser
superior la duración del intervalo en que se permiten los cambios, es decir
tC + t R > tw
Si esta condición no se cumpliera podría haber más de 1 cambio por período de reloj, con lo que
el sistema dejaría de estar controlado.
_________________________________________________________________________________
Los resultados del ejemplo 6.9 conducen a dos conclusiones importantes; por un lado la frecuencia
máxima a la que un sistema síncrono puede funcionar sin problemas depende de los retardos de éste,
y por otro el lapso de tiempo en que está permitido el cambio de estado debe ser lo más corto posible,
objetivo, en principio, difícil de compatibilizar con la forma real de la señal de reloj. Existen dos
estrategias diferentes de sincronización de los sistemas secuenciales con reloj real:
a) Sincronización por nivel (alto): el valor del estado puede actualizarse sólo cuando el reloj
toma el valor lógico "1", en caso contrario el estado permanece inalterado. Esta estrategia es la
considerada en el ejemplo 6.9. Simétricamente podriamos hablar de sincronización por nivel bajo.
b) Sincronización por flanco: el valor del estado puede actualizarse sólo cuando la señal de
reloj realiza una transición dada. En concreto, cuando este cambio es un paso de "0" a "1" se habla de
sincronización por flanco ascendente, mientras que se habla de sincronización por flanco descendente
cuando el instante de referencia es el paso de "1" a "0". Es evidente que, al ser los instantes de cambio
más breves, la sincronización por flanco supone una aproximación mayor al caso ideal.
CLOCK
b) c) d)
Clock Clock Clock
6.3 Biestables
La presencia del registro de estado implica que para poder diseñar sistemas secuenciales en forma
canónica son necesarios elementos capaces de almacenar información (en concreto el estado actual)
durante un cierto tiempo.
En concreto, para realizar en la práctica estos sistemas se tendrá que codificar previamente el estado
utilizando el número de bits necesarios en función del número de estados posibles (recuérdese que
con n bits se pueden codificar 2n estados). Por tanto, almacenar el valor del estado se traduce en
definitiva en almacenar un número fijo de bits. Podemos imaginar el registro de estado como una
agrupación de módulos iguales, almacenando cada uno de ellos un solo bit (ver figura 6.25).
s0 s 0+
Codificación Codificación
s1 s 1+ del estado
del estado . .
actual . . futuro
. . s+ (t)
s(t) sn s n+
Clock Reset
Los módulos utilizados para la memorización y/o actualización de cada bit se denominan biestables.
A continuación se especifica el funcionamiento de los biestables más comúnmente utilizados. Para
ello se supondrá que la señal de reloj es ideal (en forma de tren de impulsos), y se dejan para más
adelante cuestiones como la realización circuital de biestables y/o la sincronización cuando el reloj es
no ideal.
6.3.1 Biestable D
D D Q Q
Clock Q Q
Su funcionamiento es como sigue: en cada impulso de reloj la salida toma el valor de la entrada, con
lo que queda este valor invariante hasta que el reloj vuelva a permitir otro cambio. Se trata ,pues, de
un circuito secuencial y como tal puede ser descrito con las técnicas presentadas en este mismo
capítulo.
Tanto la entrada como la salida pueden tomar únicamente los valores "0" y "1". Parece razonable
asignar al sistema dos estados, uno correspondiente a las evoluciones de la entrada que hacen que la
salida valga "0" y otro que agrupa las evoluciones que hacen que la salida sea "1". El diagrama de
estados y la tabla de verdad correspondientes se muestran en la figura 6.27; nótese que se trata de una
màquina de Moore con una función de salida trivial (z=Q).
1 Q D=0 D=1
0/0 1/1 0 0,0 1,0 Q +,z
0 1
0 1 0,1 1,1
Otra forma de describir la funcionalidad del biestable es la tabla de excitación, figura 6.28, que
contiene la misma información que la figura 6.27. La interpretación es como sigue: si el estado actual
toma el valor dado en la columna Q y se desea que el estado siguiente sea Q+, la entrada actual debe
tomar el valor indicado en la columna D.
Q Q+ D
0 0 0
0 1 1
1 0 0
1 1 1
A partir de las figuras 6.27 o 6.28 es fácil escribir una expresión algebraica para la función de
+
transición de estados de este tipo de biestable: Q = D .
Ejemplo 6.10
Una aplicación adicional del biestable D es como retardador (el nombre D viene precisamente del
inglés delay). En este ejemplo se muestra un cronograma (ver figura 6.29) que pone en evidencia
este comportamiento.
CLK
D(t)
Q(t)
_________________________________________________________________________________
6.3.2 Biestable JK
J =0 J =0 J =1 J =1
Q K=0 K=1 K=0 K=1
J J Q Q
Clock 0 0,0 0,0 1,0 1,0 Q +,z
K K Q Q 1 1,1 0,1 1,1 0,1
Un biestable JK síncrono es un circuito secuencial elemental con dos entradas de datos (J y K), otra
de sincronización (reloj) y una salida (Q), donde el valor del estado coincide con el de la salida,
siendo su comportamiento el descrito en la tabla de la figura 6.30.
El diagrama de estados del biestable JK se muestra en la figura 6.31, junto con la expresión algebraica
de la función de transición de estados.
10,11
00,01 0/0 1/1 00,10 Q+ = Q J + QK
01,11
+
Q Q J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
Ejemplo 6.11
Realizar un biestable JK a partir de un D. Para ello basta con fijarnos en la ecuación característica
del biestable JK, y dado que en un biestable D el estado futuro es igual a la entrada, obtenemos
una posible implementación: Q + = D= JQ + QK
J
D Q Q
Clock
Ck Q Q
K
_________________________________________________________________________________
Ejercicio 6.7
6.3.3 Biestable T
Un biestable T (toggle) síncrono es un circuito secuencial elemental con una entrada de datos (T),
otra de sincronización (reloj) y una salida (Q), donde el valor del estado coincide con el de la salida,
siendo su comportamiento el descrito en la figura 6.34.
Q T=0 T=1
T T Q Q 0 0,0 1,0 Q +,z
Clock Q Q 1 1,1 0,1
La descripción del funcionamiento del biestable es la siguiente: si la entrada toma el valor T=1, el
estado se actualizará cambiando de valor, es decir, si el valor actual de la variable de estado es Q=0,
el valor siguiente será Q+=1, y viceversa. En caso contrario, es decir, si la entrada toma el valor "0",
la variable de estado no cambia de valor al actualizarse (Q+=Q).
Q Q+ T
1 0 0 0
+
0 0/0 1/1 0 Q = Q⊕ T 0 1 1
1 0 1
1 1 1 0
El diagrama de estados del biestable T se muestra en la figura 6.35, junto con la expresión algebraica
de la función de transición de estados y la tabla de excitaciones.
_________________________________________________________________________________
Para finalizar el capítulo vamos a presentar algunas implementaciones circuitales de biestables, ya sea
a base de puertas lógicas genéricas o bien mediante transistores MOS. Para ello estudiaremos en
primer lugar una estructura básica de referencia, a la que llamaremos biestable SR, a partir de la cual
es posible construir en forma de mejoras o ampliaciones otros tipos de biestable, incluyendo diversas
modalidades de sincronización.
Consideremos el circuito de la figura 6.36.a, compuesto simplemente por dos puertas NOR. El
análisis de este circuito requiere tomar algunas precauciones: los lazos de realimentación hacen que
los valores a la salida, QA y QB, sean a su vez entradas, lo que genera una serie de recurrencias que,
mezcladas con los retardos de las puertas, conviene tener en cuenta.
a) b)
R R qA
QA QA
QB QB
S S qB
Una forma de enfocar este análisis es la apuntada en la figura 6.36.b, donde se supone que la
respuesta de las puertas NOR es instantánea y que el retardo de dichas puertas se concentra en los
buffers puestos entre sus salidas y las del circuito. De esta manera podemos considerar qA y qB como
funciones lógicas de R, S, QA y QB, y que, después de un cierto retardo, qA y qB se convierten
respectivamente en los valores siguientes de QA y QB, que a su vez generan nuevos valores de qA y
qB, etc.
Si por ejemplo suponemos R=0, S=1 y aplicamos el tipo de análisis acabado de sugerir, llegaremos a
la conclusión de que, cualesquiera que fueran los valores iniciales de QA y QB, sus valores finales se
estabilizan en QA=1, QB=0. El resultado simétrico se obtiene para R=1, S=0: las salidas acaban
estabilizándose en los valores QA=0, QB=1. Asimismo, para R=S=1 las salidas se estabilizan en los
valores QA=QB=0.
La situación más curiosa se produce para la combinación de entrada R=S=0, que conduce al resultado
intermedio q A = QB , q B = QA , resultado nada conflictivo si los valores iniciales de QA y QB son
diferentes (en este caso estos valores iniciales permanecen inalterados), pero que lleva a que las
salidas del circuito oscilen indefinidamente entre "0" y "1" si los valores iniciales de QA y QB son
iguales.
Una consecuencia de lo anterior es que la aplicación de la combinación de entrada R=S=0 tras haber
aplicado R=S=1 conduce irremisiblemente al circuito a la inestabilidad. Por esta razón la
combinación de entrada R=S=1 debe ser evitada cuando se pretenda utilizarlo.
R
Q S R Q+
R 0 0 Q
R Q Q
0 1 0
S S Q Q 1 0 1
Q 1 1 -
S
Ejercicio 6.8
La figura 6.38 presenta una alternativa de realización de un biestable asíncrono, esta vez a nivel
de layout. Se pide obtener los esquemas equivalentes a nivel de transistores y a nivel de puertas.
Estudiar su comportamiento como biestable, a imagen del desarrollo hecho para el RS, en
función de las entradas A y B. ¿Existe alguna combinación que sea necesario prohibir? Compare
su funcionamiento con el de un biestable RS.
VDD
A B
Q Q
VSS
_________________________________________________________________________________
El biestable SR presentado en el apartado anterior es claramente un circuito asíncrono, puesto que una
variación en el valor de alguna de sus entradas provoca siempre la reacción de éste. Ahora bien, es
sencillo introducir una sincronización por nivel sin más que realizar el producto lógico de cada
entrada con una señal de reloj. El circuito resultante se muestra en la figura 6.39, donde resulta fácil
ver que cuando CLK=0, S ⋅ CLK = R ⋅ CLK = 0 , es decir, la estructura de puertas NOR tiene entradas
"0", por lo cual conserva el valor anterior de Q (memorización). En el caso contrario, es decir cuando
CLK=1, las entradas de la estructura NOR coinciden con S y R y el circuito actualizará sus salidas de
acuerdo con la tabla de la figura 6.37.
R Q
R R Q Q
CLK CLK
S S Q Q
S Q
Ejemplo 6.12
Obtener, a partir de la estructura de un biestable SR activo por nivel, otro de tipo D. Observando
la tabla de funcionamiento del biestable SR (figura 6.37), para obtener un biestable D a partir de
un SR sólo hay que forzar que los valores de las entradas sean siempre contrarios, cosa que puede
hacerse utilizando un inversor (ver figura 6.40).
R S R Q+
Q
0 0 Q D Q+
0 1 0 0 0
1 0 1 1 1
D Q 1 1 -
CLK S
Una aplicación habitual de este tipo de biestable D es "cazar" un bit (con CLK=1) y mantenerlo
después durante un tiempo arbitrario bloqueando el reloj (CLK=0), motivo por el que suele
denominársele latch (cerrojo).
_________________________________________________________________________________
Ejercicio 6.8
R
K Q
CLK
J Q
S
_________________________________________________________________________________
Es posible realizar con facilidad biestables utilizando transistores MOS. Así podemos traducir
directamente los logigramas presentados a puertas nMOS o CMOS; en la figura 6.42 se muestra un
ejemplo concreto de biestable D realizado con tecnología nMOS.
Q Q
CLK
D CLK
D
Otra posibilidad a contemplar en la realización de biestables, ésta de especial interés si se trabaja con
tecnología CMOS, es recurrir a estructuras hechas a base de puertas de transmisión e inversores. La
figura 6.43 muestra otro ejemplo de biestable sincronizado por nivel.
D Q
CLK Q
CLK
D
Q Clear
CLK D
Q
Q
Clear
Intervalos de
funcionamiento asíncrono
Figura 6.44 Biestable D con entrada asíncrona de puesta a "0" y reloj ideal
Ejercicio 6.9
Modifique la estructura de la figura 6.44 para añadir al biestable D una entrada asíncrona que
fuerce un "1" (preset) a la salida.
_________________________________________________________________________________
D D
Q S Q Q
D D Q Q
Q R Q Q
Clock Q Q
Clock
Nótese que cuando el reloj está a "1" el primer biestable (master) actualiza su contenido de acuerdo
con el valor de la entrada D, maniobra que no afecta al segundo biestable (slave) hasta que el reloj
pase a "0", momento en el que éste también se actualizará, de forma que globalmente el circuito se
actualiza de acuerdo con el valor de D sólo cuando el reloj ha pasado de "1" a "0", es decir, cuando se
produce un flanco descendente.
La figura 6.46 muestra el cronograma de funcionamiento del circuito de la figura 6.45 para una
posible evolución de la entrada D a partir de los valores iniciales R=1 y Q=S=0. Allí puede
observarse el efecto recién comentado: el primer biestable actúa de acuerdo con la entrada cuando
CLK=1 y se inhibe para CLK=0, mientras que el segundo biestable actúa de acuerdo con la salida del
primero para CLK=0 y se inhibe para CLK=1. El efecto global (observando únicamente las señales
CLK, D y Q) es claramente el de un biestable D (Q+=D) sincronizado por flanco descendente.
CLK
Cambiando el primer biestable sincronizado por nivel en la figura 6.45 por otro de un tipo distinto
(JK, T) podremos conseguir dicho biestable sincronizado por flanco de bajada. Si se desea
sincronismo por flanco de subida basta con invertir el reloj que controla ambos biestables.
Cuestiones
C6.1 Proponga ejemplos de máquinas secuenciales con un número infinito de estados posibles.
C6.2 Considere la siguiente afirmación: "Dos estados de un sistema secuencial son (i+1)-equivalentes
si son 1-equivalentes y sus estados futuros, para cualquier combinación de variables de entrada, son i-
equivalentes". Justifíquela y relaciónela con el método de minimización del número de estados
propuesto.
C6.3 Compare una descripción de Moore con una de Mealy para el mismo sistema secuencial. ¿Cuál
de las dos debe tener más estados y por qué? Sugerencia: analice un sistema particular (detector de
secuencia binaria) y luego generalice el resultado.
C6.5 Dibuje el cronograma de salida de los sistemas detectores de secuencia del ejemplo 6.5, cuando
la entrada es exactamente la secuencia a detectar. Relacione el hecho de que un sistema de Moore
"filtre" las variaciones de las entradas no síncronas con el reloj, con el retardo de un período de reloj
observado entre las salidas de ambos sistemas.
C6.6 Para que un registro de estado, en una implementación canónica de un sistema secuencial,
funcione correctamente, existen unas restricciones temporales, que se concretan en la necesidad de
mantener su entrada estable desde un cierto tiempo antes de la señal de reloj (tiempo de set-up) y
mantenerla estable durante un cierto tiempo depues de ésta (tiempo de hold), tal como se ve en la
figura.
Ck
t
S+
t
tSU tH
Discuta qué variaciones deberemos introducir en los razonamientos de temporización del ejemplo
6.9 para tener estos datos en cuenta.
C6.7 Implemente un biestable tipo T a partir de un JK y puertas lógicas. Repita la cuestión partiendo
de un biestable D.
C6.8 Implemente un biestable tipo JK a partir de un T y puertas lógicas. Repita la cuestión partiendo
de un biestable D.
C6.9 Imagine un biestable T asíncrono. Dibuje su respuesta temporal cuando la entrada T vale 1.
¿Sugiere esto alguna utilidad práctica?
D Q
Ck Ck
Ck Ck
Problemas
P6.1 Describa a través de su diagrama de estados y su tabla de transiciones un sistema secuencial con
dos entradas, X e Y, una salida, Z, y 8 estados posibles.
S ∈{0,1, 2, 3, 4, 5, 6,7} S + = (S + X (1 − 2Y ))
MOD8
1 si ( X = 1,Y = 0, S = 7) o (X = 1, Y = 1, S = 0)
X,Y , Z ∈ {0,1} Z =
0 en otro caso
P6.2 Proponga un diagrama de estados para un sistema secuencial síncrono detector de secuencias
binarias de longitud 4 palindrómicas (es decir, simétrica respecto al centro de la secuencia).
P6.3 Dada la descripción a nivel de tabla de transiciones del siguiente sistema secuencial síncrono,
encuentre otra descripción equivalente con el mínimo número de estados posibles.
S+, z(x1x0)
S 00 01 10 11
A G,a F,b C,c D,a
B E,a H,b C,c G,a
C F,b C,a A,b E,c
D F,c C,c D,c E,b
E B,c C,c G,c D,b
F G,a H,b C,c E,a
G F,c C,c G,c D,b
H D,a F,b D,c G,a
0/0
A 1/0
B 1/0 C
0/0
1/0
0/0
1/1 1/1
D 1/1 E
0/0
F
0/0 0/0
P6.5 Para el sistema del problema anterior, y supuesto un estado inicial E, encuentre la secuencia de
salidas cuando la de entrada es la indicada en el cronograma.
Ck
S+ (x1x0)
S 00 01 10 11 z
S0 S0 S3 S1 S2 0
S1 S0 S2 S0 S2 1
S2 S1 S2 S0 S0 1
S3 S2 S0 S3 S1 0
¿Se trata de una máquina de Mealy o de Moore?. Dibuje su diagrama de estados. Dibuje también
la respuesta temporal cuando las entradas son las del siguiente cronograma y el estado inicial es
S0.
Ck
x1
x0
P6.7 Encuentre la evolución temporal de los dos sistemas de la figura cuando su entrada CE vale 1,
interpretando su salida como un número codificado en binario (X=X2X1X0). Parta del estado en que
las salidas de los tres biestables valen 0. Suponga despreciables los retardos introducidos por los
propios biestables y las puertas. Repita el problema sin despreciar dichos retardos. Razone cuál de
ambos diseños es mejor. ¿Cuál es la evolución cuando CE=0? Dibuje un diagrama de estados para el
sistema.
V DD V DD
CE T T T CE T T T
Q Q Q Q Q Q
Q Q Q Ck Q Q Q
Ck
X0 X1 X2 X0 X1 X2
P6.8 Analice el siguiente layout. Obtenga su esquema equivalente a nivel de transistores y a nivel de
puertas lógicas. Compruebe que se trata de un biestable de tipo RS sincronizado por nivel.
Clock
VDD
R S
VSS
Q Q
J
Q
Ck
K Q
Asinc.
P6.10 Analice el funcionamiento del siguiente circuito como biestable. Obtenga un circuito
equivalente a nivel de puertas para CK=1 y después hágalo para CK=0. Identifique el tipo de
biestable así como el tipo de sincronización.
V DD
D Q
VSS
CK CK
A Q
B
CLK
Ck