Está en la página 1de 18

Unidad I: Circuitos secuenciales básicos

10 de agosto
1. Conceptos fundamentales

Los circuitos digitales se clasifican en dos tipos: Combinacionales y Secuenciales.

Los circuitos lógicos combinacionales son aquellos en que sus salidas sólo dependen de sus
entradas actuales. El control de canales mediante una perilla en los televisores antiguos es un
ejemplo de funcionamiento combinacional (o el control de volumen con una perilla).

Los circuitos lógicos secuenciales son aquellos en que sus salidas no solamente dependen de
sus entradas actuales, sino también de una secuencia de entradas pasadas desde un tiempo
arbitrario anterior. El control de canales o de volumen a través de botones + y – es un ejemplo
de funcionamiento secuencial.

Realmente, los circuitos secuenciales nunca recuerdan la totalidad de eventos anteriores que
sucedieron en sus entradas. En su lugar, tratan de recordar lo más importante de esa
secuencia en alguna información breve. El control de volumen no necesita realmente recordar
las 1,000 entradas anteriores en el momento actual, lo único que necesita recordar es un
volumen (salida) actual. Ese dato clave, en estos circuitos se denomina “estado actual”.

“El estado de un circuito secuencial es una colección de variables de estado cuyos valores en
cualquier momento contienen toda la información, sobre el pasado, necesaria para determinar
el comportamiento futuro del circuito”

11 de agosto

La manera en que las variables de estado guardan el “estado” (la información clave necesaria)
puede variar de sistema a sistema. Por ejemplo en el caso de que el estado sea un valor de
volumen entre 0 y 100, podría almacenarse con un número binario sin signo de 7 bits. En este
caso las variables serían 7, los 7 bits que se están utilizando. En el ámbito digital es estado
siempre es una palabra binaria y las variables son los bits individuales. Sin embargo, en un
ejemplo alternativo, el volumen entre 0 y 100 podría almacenarse en tres dígitos BCD (cada
dígito decimal son cuatro bits). En este otro caso el estado tiene 12 bits (12 variables de
estado).

Debido a esta idea del uso de un estado interno en todos los circuitos secuenciales, es común
que se les llame “máquinas de estados”. Frecuentemente se usa también el término
“máquinas de estados finitos” (FSM – “finite state machine”). Los estados son finitos porque se
tienen que almacenar en una cantidad finita de variables. Por ejemplo, si se tienen 3 variables
de estado (3 bits), entonces hay posibilidad para almacenar hasta un máximo de 2 3 = 8
estados.

En los circuitos secuenciales (máquinas de estados) el cambio de estado, y por lo tanto, cambio
en las salidas comúnmente se especifica para que suceda en momentos específicos. Lo más
común es que esos momentos estén establecidos por una señal de reloj. Esta señal de reloj se
toma en cuenta, no en sus valores lógicos, sino en su transición; puede ser la transición de 0 a
1 que se denomina transición positiva (flanco positivo, transición de subida, flanco de subida,
“rising edge”) o puede ser la transición de 1 a 0 que se denomina transición negativa (flanco
negativo, transición de bajada, flanco de bajada, “falling edge”).

Muchos sistemas digitales definen su señal de reloj con un oscilador (dispositivo que genera
una señal periódica que cambia entre cero y uno a una tasa continua). Este tipo de señales
tienen una frecuencia definida (f : la cantidad de ciclos que tiene la señal sobre unidad de
tiempo – Hz). Tener frecuencia implica también que las señales tienen un periodo (T : el
tiempo que dura cada ciclo). La relación entre f y T es el inverso ( f = 1/T; T = 1/f ). Además, en
esta señales periódicas también se tiene un parámetro que se llama “ciclo de trabajo” (“duty
cycle”, ciclo efectivo, ciclo útil). Este ciclo de trabajo es el porcentaje de tiempo que la señal
está con el valor 1 al respecto del periodo completo.

Los circuitos secuenciales se pueden considerar de dos maneras diferentes: como circuitos
secuenciales retroalimentados (lo más importante es cómo se conectan las compuertas lógicas
en forma retroalimentada para realizar el funcionamiento secuencial); o como máquinas de
estados sincronizadas por reloj (lo más importante es el funcionamiento mediante estados y
cómo implementarlo con estructuras prefabricadas).

2. Latches (cerrojos) y flip-flops

Latches y flip-flops son los bloques básicos fundamentales para la construcción de circuitos
secuenciales (las versiones más pequeñas de circuitos secuenciales). Para construir circuitos
más elaborados se combinan estos circuitos básicos con compuertas combinacionales y es
posible diseñar cualquier funcionamiento secuencial que se requiera.

En ocasiones los términos latch y flip-flop se usan indistintamente. Es mejor y más práctico
visualizar que son circuitos con características diferentes. La característica más distintiva es
que los flip-flops tienen una entrada de reloj (“nos interesa su transición, no su valor”) y los
cerrojos no tienen una entrada de reloj (“nos interesan los valores de las entradas, no sus
transiciones”). En un flip-flop las entradas se revisan solamente en instantes específicos (según
la señal de reloj) y en esos casos es posible que cambien las salidas. En un cerrojo, las
entradas se revisan en todo momento y pueden cambiar las salidas con cualquier cambio en
ellas.

2.1. Latch (cerrojo) S-R

Es un circuito con entradas (S y R) que tiene un funcionamiento secuencial (tiene un estado


interno) y sus salidas dependen de las entradas pero también de su estado actual.
Comúnmente, debido a su construcción interna, se tienen dos salidas (Q y QN). S viene de la
palabra “SET” que en lógica digital significa “poner un 1”. R viene de la palabra “RESET” que en
lógica digital significa “poner un 0”. QN es una versión “negada”, casi todo el tiempo, de la Q

S Q

R QN
S R Q QN Función
(estado)
0 0 Qanterior QNanterior Estado
anterior
0 1 0 1 Reset
1 0 1 0 Set
1 1 0 0 inválido

12 de agosto

Esta tabla es el funcionamiento clásico del cerrojo S-R (cuando se implementa con
compuertas).

El caso inválido es un caso no deseado, que se supone no debe de ocurrir. Y en muchos se


procura que el hardware evite que suceda. Sin embargo, este caso sucede en la tabla de
funcionamiento debido a la construcción con compuertas que tiene el cerrojo S-R.

En general se usa para aplicaciones que requieren almacenar un estado (1- activado, 0-
desactivado) y además se requiere que entradas diferentes sean la que activa y la que
desactiva.

Ejemplos de aplicación:
Activar y desactivar una alarma con dos botones diferentes

Abrir y cerrar con dos botones diferentes

Control de encendido y apagado de un calentador con termostato (hay una


temperatura de activación y una temperatura diferente de desactivación)

Control de encendido y apagado de una bomba con el nivel de un tinaco (hay un nivel
de agua para la activación y un nivel diferente para desactivación)

El cerrojo S-R como todos los circuitos secuenciales puede ser implementado con compuertas
lógicas. Las compuertas lógicas por sí solas no tienen memoria. La memoria en este tipo de
implementación se realiza mediante conexiones de retroalimentación.
A B NOR
0 0 1
0 1 0
1 0 0
1 1 0
S 1 0 0 0 0 1

R 0 0 1 0 0 0

Q 1 0 0 1 1

QN 0 1 0 1 0

La explicación del análisis para completar este diagrama de tiempos quedó grabada en las
videosesiones del 12 y 13 de agosto.

Un ejemplo de cómo describir este circuito construido con compuertas NOR en VHDL sería:

17 de agosto
Si el circuito con compuertas NOR se simula utilizando las herramientas de Xilinx
ISE, el resultado es:
Puede verse que en la simulación no se observan los retrasos debidos al tiempo de
propagación que consumen las compuertas NOR. Esto se debe a que el simulador está
configurado para mostrar la respuesta ya estabilizada solamente. También se observa que en
el último momento, cuando se desactivan ambas entradas al mismo tiempo, el simulador indica
un ERROR y se detiene. Este funcionamiento se debe a que el simulador no logra encontrar
cuál es el valor estabilizado y, por lo tanto, no es capaz de dar respuesta a los valores de salida
en ese caso. En el análisis del diagrama de tiempos que se realizó manualmente también se
observó que en ese caso, las salidas comienzan a oscilar indicando que nunca se estabilizarán.

El análisis anterior que se hizo a manualmente se realizó directamente con las compuertas
NOR y considerando su retraso de propagación. Sin embargo, cuando ya se comprendió el
funcionamiento del cerrojo S-R, se puede analizar y predecir las salidas considerando
directamente la tabla de funcionamiento del cerrojo pero recordando también que está
construido con compuertas NOR aunque no se consideren los retrasos de propagación:

S 1 0 0 0 0 1

R 0 0 1 0 0 0

Q 1 0 1

QN 0 1 0

El cerrojo S-R construido con compuertas NOR nunca puede guardar el estado inválido. Puede
guardar el estado SET o guardar RESET solamente.

Por el contrario, cuando el cerrojo se implementa con VHDL es posible controlar el caso
inválido para que haga un funcionamiento establecido preferido por el diseñador. Y también es
posible indicar que sí queremos que se guarde el estado INVÁLIDO.

Los cerrojos S-R tienen muchas aplicaciones en sistemas en los que quieres controlar una
salida con “Botones” o “Entradas momentáneas”. Ejemplo: La activación de la alarma del
coche: set=activar la alarma, reset=desactivar la alarma. La activación de un calentador con
termostato: set=temperatura fría=encender el calentador, reset=temperatura caliente=apagar
el calentador. Algunas veces estas entradas quedarán a disposición del usuario y es
conveniente que los dispositivos estén diseñados para enfrentar casos no deseados.

Un ejemplo de código VHDL para describir el cerrojo S-R mediante su funcionamiento sería:
Tanto Q como QN se describen preguntando los casos específicos de la tabla de verdad. La
sintaxis usada en QN permite realizar menos preguntas agrupando dos casos en la primera
condición S=’1’. En esta descripción se evita el problema de la construcción con compuertas
que hace que el caso inválido no sea posible almacenarlo en memoria.

La simulación del cerrojo S-R sería:

Esta simulación revisa todos los casos posibles de salida cuando S=’0’ y R=’0’. Así podemos
comprobar que en todos ellos se guarda la información correctamente. Cuando el cerrojo se
cierra guarda el último valor que tenía en sus salidas.

2.2. Latch (cerrojo) D

D Q

La entrada C también es común llamarla G o Enable (EN).

C Q Función
0 Qanterior Estado
anterior
1 D Activar

Un cerrojo D (latch D) se puede construir con compuertas de la siguiente manera:

18 de agosto

Un ejemplo de código VHDL para este cerrojo D sería:

Nuevamente se usa una descripción del comportamiento mediante pregunta con la sintaxis
“when-else”. Y, otra vez, podemos ver que la manera correcta de indicar el caso en que el
cerrojo se cierra y mantiene su mismo valor de salida es omitiendo ese caso en la pregunta.

La simulación de este circuito sería:

Se observa que, cuando el cerrojo está abierto, la salida copia la entrada D. Esto sucede entre
1 us y 4 us y también entre 6 us y 7 us. También observamos que, cuando el cerrojo se cierra,
entonces la salida se queda con el último valor que copió de la D. Esto sucede entre 4 us y 6 us
y también al final de la simulación después de 7 us.
2.3. Flip-flop D

D Q

CLK

La entrada CLK representa el nombre “clock” (reloj). Lo significativo de esta entrada es el


flanco. Este flanco o transición importante puede ser positivo (cambio de 0 a 1) o negativo
(cambio de 1 a 0). En el dibujo anterior, el flanco que se utiliza es el positivo. Si se utilizara el
negativo entonces se debe dibujar una burbuja de inversión en la entrada CLK. El triángulo que
está dibujado en la entrada CLK se llama indicador de entrada dinámica y me indica que para la
entrada CLK nos interesa la transición positiva (flanco de subida).

CLK Q Función
D Activado
Copiar D
otro Qanterior Memoria
caso
(CLK=’0’
CLK=’1’
Flanco_negativo)

La sintaxis recomendada para describir un flip-flop D con VHDL es:

Q <= D when CLK’event and CLK=’1’;

O bien, si el flip-flop debe considerar el flanco negativo, el código sería

Q <= D when CLK’event and CLK=’0’;

NOTA: No es posible implementar flip-flop que tome ambos flancos debido a una restricción
de hardware que tienen los CPLD y las FPGA.

Existe una sintaxis más moderna y más recomendada en la actualidad para describir el caso de
los flancos (positivo o negativo)

Q <= D when rising_edge(CLK);

O bien, si quieres el flanco negativo

Q <= D when falling_edge(CLK);


Aunque esta sintaxis es recomendada por autores modernos en varios textos, la experiencia
previa de utilizarla con las herramientas de Xilinx que usamos en la UAA nos ha mostrado que
en ocasiones no funciona sin tener alguna razón lógica aparente.

19 de agosto

El código VHDL completo para un flip-flop D sería:

La simulación de este código sería:

En la simulación podemos observar que la salida solamente puede cambiar en los instantes en
que se realice una transición positiva en la señal de reloj CLK. Un caso especial sucede a los 9
us porque en el momento de la transición, la entrada D tiene el mismo valor que ya tenía la
salida Q y, por lo tanto, no cambia la salida.

Su construcción interna se basa en los cerrojos D. El diagrama para construir el flip-flop D sería:

Un diagrama de tiempos para explicar el funcionamiento del circuito con latch D sería así:
La explicación de este diagrama anterior quedó grabada en la videosesión de Teams.

Un concepto importante en los circuitos secuenciales, especialmente en los que usan flip-
flop D es el respeto a los tiempos de establecimiento y retención. El diagrama de tiempos
siguiente muestra las ventanas de tiempo que se deben respetar alrededor de la transición
de reloj. La explicación quedó grabada en la videosesión de Teams.

A continuación se hace otro diagrama de tiempos que muestra el funcionamiento del flip-
flop D. Sí se considera el respeto a los tiempos de establecimiento y de retención en las
entradas.

D 0 0 1 1 0 1

CLK

Q 0 0 1 1 0 1

QN

En este diagrama se analizó el funcionamiento del flip-flop D sin preocuparnos por su


construcción interna pero sí señalando un retardo de propagación para realizar los cambios en
la salida en cada caso.
Los flip-flops D (esto aplica a otros tipos de flip-flops también) pueden tener entradas extra o
variaciones en sus entradas que modifican un poco su funcionamiento:

1) Transición negativa del reloj:

Cuando se tiene entrada negada de reloj se está esperando una transición negativa en lugar de
la transición positiva habitual. Podemos expresarlo con la tabla:

Un comentario importante es que no se usan flip-flops que identifiquen ambas transiciones.


Sólo deben identificar un tipo (o la positiva o la negativa)

2) Entradas asíncronas:

La entrada PR toma su nombre por la palabra PRESET y la entrada CLR toma su nombre
por la palabra CLEAR y funcionan de manera muy similar a cómo funcionan las
entradas S y R del cerrojo S-R.

//NOTA (24 de agosto) -----------------------------------------------------

Las entradas asíncronas pueden tener varios nombres similares:


PR, PRESET, SET, PRE (es la entrada que hace que la salida tome el valor 1);
CLR, CLEAR, RESET, R, RES, RST (es la entrada asíncrona que hace que la salida tome el
valor de 0).

El tema de entradas asíncronas se revisa en el vídeo del siguiente enlace hasta el tiempo 3:50:

https://www.coursera.org/lecture/sistemas-digitales/leccion-l5-3-2-2-componentes-
biestables-9QTde
Después de revisar el vídeo y comprender la explicación, se realiza el siguiente ejercicio:

Ejercicio: Dibuja el comportamiento de la salida en el siguiente diagrama de tiempos para un


flip-flop D con entradas asíncronas:

PR

CLR

CLK

Respuesta del ejercicio:

PR

CLR

CLK

------------------------------------------------------------------------------------------------------------------------------

2.4. Flip-flop D con habilitación

La entrada de habilitación (“enable”) básicamente es un control para activar o desactivar el


funcionamiento del flip-flop. Cuando la entrada de habilitación está en 1, el flip-flop se
comporta de manera natural. Cuando la entrada de habilitación está en 0, el flip-flop se
mantiene en estado de memoria (mantiene el estado anterior). Muy comúnmente se prefiere
que la habilitación sólo controle el funcionamiento sincrónico (las entradas asíncronas no
dependerían de la entrada de habilitación). Entonces es muy común decir que la habilitación
es una habilitación de reloj.

Este funcionamiento se expresa con la siguiente tabla:

La utilidad de la entrada de habilitación se presenta principalmente en el diseño de sistemas


sincrónico (sistema en que todos los componentes secuenciales tienen la misma señal de
reloj). Para evitar que todos los componentes dentro del sistema cambien sus salidas con la
misma transición de reloj, se deben controlar por separado mediante sus entradas de
habilitación. De esta manera el controlador de los componentes puede decidir en qué
momento cambian las salidas de cada uno de ellos.

Estas variaciones de entradas a los flip-flops (transición negativa, entradas asíncronas, entrada
de habilitación) no son excluyentes. Es decir, que pueden agregarse una o más de ellas al
mismo flip-flop.

Por ejemplo, veamos el diagrama de tiempos (sin retardos) para un flip-flop de transición
negativa y con entrada de habilitación.

D 1 1 1 1 1

EN

CLK_L

Q 1 1 1 1

2.5. Ejercicios
Tarea:

1)

2)

3)

Repetir los ejercicios 7.2 y 7.3 pero sin considerar los retardos de propagación de las
compuertas NOR pero sí considerando que el cerrojo se construyó con compuertas NOR. El
análisis se realiza con la tabla de funcionamiento del cerrojo.

4) Dibuja los valores para las salidas Q y QN en los siguientes diagramas de tiempo que
corresponden a un cerrojo D:
D

QN

QN

5) Dibuja la salida del diagrama de tiempos siguiente, para un Flip-flop D

6) Dibuja la salida de los diagramas de tiempos siguientes, para un Flip-flop D con transición
negativa:

a)

b)
7) Dibuja la salida del diagrama de tiempos siguiente, para un Flip-flop D con entradas
asíncronas:

CLK_L

Enable

Q
8) Dibuja la salida del diagrama de tiempos siguiente, para un Flip-flop D con entrada de reloj
tomando el flanco de bajada y con enable:

9) Dibuja la salida del diagrama de tiempos siguiente, considerando que se aplican las
entradas al circuito que está dibujado:
10) Dibuja la salida del diagrama de tiempos siguiente, para un flip-flop D:

Set

Reset

CLK

Enable

11) Dibuja ‘q’ y ‘r’ para el diagrama de tiempos siguiente, considerando que se aplican las
entradas al circuito que está dibujado:

También podría gustarte