AnÁlisis y DiseÑo de Circuitos Secuenciales

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 32

AnÁlisis y DiseÑo de Circuitos Secuenciales

El Análisis y Diseño de Circuitos Secuenciales se encuentra estrechamente relacionado


con el control secuencial, denominado también control lógico o control binario. En los
sistemas de control secuencial las entradas y las salidas son de tipo binario y determinan
una serie de pasos para la operación de un proceso.
Las entradas por lo general son: pulsadores, interruptores, microinterruptores, fines de
carrera o detectores de proximidad. Las salidas pueden ser: Válvulas solenoides,
cilindros neumáticos, contactores para arranque y parada de motores, pilotos de
señalización, alarmas, etc.
Cuando el sistema de control secuencial es pequeño se realiza con circuitos digitales
combinatorios y secuenciales. Cuando es grande se realiza con PLC´s (Controladores
Lógicos Programables), microcomputadores, microprocesadores especiales para control
secuencial y por software en PC.
En este capitulo se mostraran las metodologías básicas para el Diseño de Circuitos
Secuenciales y su aplicabilidad en dispositivos secuenciales para funciones específicas.
Teoría de MÁquinas de Estado (FSM)
La teoría de máquinas de estado es el nombre con el que se conocen los métodos de
Análisis y Diseño de Circuitos Secuenciales Sincrónicos. Esta lección constituye una
introducción al tema del capítulo, donde se definirá lo que son las máquinas de estado y
los conceptos básicos para entender la metodología de Análisis y Diseño de Circuitos
Secuenciales.
Las máquinas de estado son circuitos secuenciales que se encuentran constituidos por
una etapa combinacional y una etapa de memoria, relacionadas de tal forma que
conforman un sistema secuencial para algún propósito especial. Los registros y
contadores con entradas asincrónicas son ejemplos de este tipo de sistemas secuenciales.
MÁquinas de Estado de Mealy y Moore
Los circuitos secuenciales se clasifican dentro de una categoría conocida como
máquinas de estado, de la cual se distinguen comúnmente dos tipos:
• Máquina de Mealy: En esta máquina de estados las salidas se encuentran
determinadas por el estado interno del sistema y por las entradas no
sincronizadas con el circuito. El diagrama de bloques representativo de esta
máquina se muestra en la figura 7.1.1. donde se observa que las salidas del
sistema son tanto sincrónicas como asincrónicas.

Figura 7.1.1. Maquina de estados de Mealy


• Máquina de Moore: Las salidas solo dependen del estado interno y de cualquier
entrada sincronizada con el circuito, como se observa en la figura 7.1.2. donde
las salidas del sistema son unicamente sincrónicas. Un ejemplo de este tipo de
máquinas de estado son los contadores (ver capítulo 6).

Figura 7.1.2. Maquina de estados de Moore


Los circuitos secuenciales se caracterizan por tener una etapa combinacional y otra de
memoria conformada por flip-flops. En la figura 7.1.3. se puede observar un ejemplo
particular de este tipo de circuitos, el cual corresponde a una Maquina de estado de
Mealy. Observe que hay salidas que dependen de la etapa de memoria y hay una salida
que depende directamente de la etapa combinatoria.

Figura 7.1.3. Circuito Secuencial de ejemplo


Con base en el circuito de la figura 7.1.3. se dará una descripción de las herramientas
básicas que son empleadas para el Análisis y Diseño de Circuitos Secuenciales. Entre
estas herramientas se encuentran las ecuaciones lógicas, las los diagramas de estado, las
tablas de estado, las tablas de transición y los mapas de Karnaugh.
Ecuaciones Lógicas
Las ecuaciones lógicas son funciones que definen la relación existente entre los estados
de entrada y los estados de salida del sistema. Para determinar las ecuaciones lógicas de
la máquina de estados de la figura 7.3.1. inicialmente se deben identificar los estados
siguientes. Estos estados corresponden a aquellos que ocurren después de una transición
en la señal de reloj de los flip-flops. Recuerde que para los flip-flops tipo D el estado
siguiente (Qi+1) es igual al estado de la entrada D. Teniendo en cuenta lo anterior las
ecuaciones lógicas para los flip-flops A y B del circuito de la figura 7.1.3 serían las
siguientes:
A = DA = A·X + B·X
B = DB= A’·X
La salida Y esta dada por:
Y = (A + B)·X’
Observando esta última ecuación se concluye que la salida (Y) es función del estado
presente del sistema (A y B) y de la entrada asincrónica (X).
Las ecuaciones lógicas en los circuitos secuenciales tienen una estructura formada por
dos clases de estados:
• Los estados siguientes, los cuales se agrupan al lado izquierdo de la expresión y
representan las variables dependientes del sistema. El estado de estas variables
cambia en el momento que ocurra un transición en la señal de reloj.
• Los estados actuales y entradas del sistema. Agrupados al lado derecho de la
exprexión, constituyen las variables inpendientes, las cuales pueden o no
cambiar en sincronía con el sistema.
Cuando las ecuaciones de estado contienen varios términos, se pueden simplificar
empleando metodologías de reducción de términos como Algebra de Boole, Mapas de
Karnaugh, o mediante el Algoritmo de Quine-McCluskey , las cuales fueron
presentadas en el Capitulo 2.
Tablas de Estado
Una tabla de estado es un listado que contiene la secuencia de los estados de entradas,
estados internos y salidas del sistema, considerando todas las posibles combinaciones de
estados actuales y entradas. Las tablas de estado por lo general se divididen en tres
partes: estados actuales, estados siguientes y salidas, tal como se muestra en la tabla
7.1.1.
Estados actuales Entrada Estados siguientes Salida
A B X A B Y
0 0 0 0 0 0
0 0 1 0 1 0
0 1 0 0 0 0
0 1 1 1 1 1
1 0 0 0 0 0
1 0 1 1 0 1
1 1 0 0 0 0
1 1 1 1 0 1
Tabla 7.1.1. Tabla de estado (circuito Figura 7.1.3)
La tabla de estado para un circuito secuencial con m flip-flops y n entradas tiene 2m+n
filas. El estado siguiente tiene m columnas, y el número de columnas depende del
número de salidas.
Existe una forma mas conveniente de organizar la información en la tabla de estado, la
cual se muestra en la Tabla 7.1.2, donde los estados se agrupan de tal modo que la tabla
se puede traducir a un diagrama de estados. Al igual que la tabla anterior esta tiene tres
secciones: estados actuales, estado siguientes y salidas, sin embargo los estados se
agrupan dependiendo del valor de las entradas. La sección de estados actuales agrupa
los estados que ocurren antes de una transición en la señal de reloj, la sección de estados
siguientes lista aquellos que ocurren después de la transición del reloj y la sección de
salidas reúne los estados que se dan en el mismo instante de los estados actuales.
Estado Siguiente Salida
Estado Actual
X=0 X=1 X=0 X=1
AB AB AB Y Y
00 00 01 0 0
01 00 11 1 0
10 00 10 1 0
11 00 10 1 0
Tabla 7.1.2. Tabla de estado (forma simplificada)
Haciendo un análisis de la operación del circuito de la figura 7.1.3. se puede observar lo
siguiente: Cuando la variable X=0 los estados actuales A y B cambian a 0 después de la
transición de reloj , y cuando X=1, los estados de las salidas se comportan tal como se
resume en la tabla 7.1.2. Se plantea como ejercicio verificar la información de la tabla.
Diagramas de Estado
Un diagrama de estados es una representación gráfica que indica la secuencia de los
estados que se presentan en un circuito secuencial, teniendo en cuenta las entradas y
salidas. El diagrama se forma con círculos y líneas. Los circulos representan los estados
del circuito secuencial y cada uno de ellos contiene un número que identifica su estado.
Las líneas indican las transiciones entre estados y se marcan con dos números separados
por un (/), estos dos números corresponden a la entrada y salida presentes antes de la
transición. A manera de ejemplo observe la línea que une los estados 00 y 01 en el
diagrama de estado de la figura 7.1.4. Esta línea marcada como 1/0 indica que el
circuito secuencial se encuentra en el estado 00 mientras la entrada X=0 y la salida Y=0,
y que después de que ocurra una transición en la señal de reloj el estado cambia a 01.

Figura 7.1.4. Diagrama de estados correspondiente a la Tabla 7.1.2


Las líneas que salen y regresan al mismo círculo indican que no hay cambio en el
estado, cuando se presentan la entrada y salida indicados.
Tablas de Transición de flip-flops
Las tablas de transición se usan en conjunto con las de estado y representan la tabla de
verdad de los flip-flops con los cuales se desea implementar el circuito secuencial. La
tabla contiene los estados actuales y siguientes según el estado de las entradas de los
flip-flops. La tabla 7.1.3 corresponde a la tabla de transición del flip-flop JK.
Transiciones de Salida Entradas al flip-flop
Qi Qi+1 J K
0 0 0 X
0 1 1 X
1 0 X 1
1 1 X 0
Tabla 7.1.3. Tabla de transición del flip-flop JK
En la tabla, Qi corresponde al estado actual y Qi+1 al estado siguiente, J y K son las
entradas de los flip-flops. La información sombreada en la tabla se interpreta de la
siguiente forma: cuando el estado presente de la salida Q=0 y las entradas J=1 y K=X
(X indica una condición de no importa, 1 o 0), después de un pulso de reloj en el flip-
flop la salida cambia al estado siguiente Q=1.
Mapas de Karnaugh
Generalmente la tablas de estado y de transición de los flip-flops se fusionan en una sola
para agrupar la información de tal forma que permitan construir los Mapas de
Karnaugh para simplificar las funciones lógicas. La tabla 7.1.4 corresponde a una tabla
de estado de un contador de tres bits con flip-flops JK. Observe que esta tabla incluye
las entradas J y K para cada una de la transiciones (estado actual a estado siguiente). Las
regiones sombreadas en la tabla indican que el estado Qi cambia estando presentes las
entradas Ji y Ki correspondientes después de una transición del reloj.
Estado Actual Estado Siguiente Entradas de los flip-flop
Q2 Q1 Q0 Q2 Q1 Q0 J2 K2 J1 K1 J0 K0
0 0 0 0 0 1 0 X 0 X 1 X
0 0 1 0 1 0 0 X 1 X X 1
0 1 0 0 1 1 0 X X 0 1 X
0 1 1 1 0 0 1 X X 1 X 1
1 0 0 1 0 1 X 0 0 X 1 X
1 0 1 1 1 0 X 0 1 X X 1
1 1 0 1 1 1 X 0 X 0 1 X
1 1 1 0 0 0 X 1 X 1 X 1
Tabla 7.1.4. Tabla de estado y transición de un contador de 3 bits
Los Mapas de Karnaugh se emplean para definir la lógica de las entradas de los flip-
flops y se debe hacer uno para cada una de las entradas. La figura 7.1.5 corresponde al
Mapa de karnaugh de la entrada J1. de la tabla de estado 7.1.4.

Figura 7.1.5. Mapa de Karnaugh para el estado J1


Observe que cada celda en el mapa representa uno de los estados actuales de la
secuencia en la tabla de estado. Una vez asignados todos los estados posibles a cada
celda en el Mapa de Karnaugh se procede a simplicar y deducir las exprexiones lógicas.
En la figura 7.1.5 se observa que la expresión correspondiente a la entrada J1 es:
J1 = Q0
Esta expresión indica que en el circuito lógico la salida Q0 debe ir conectada a la entrada
J1. En la siguiente lección se explicara de una forma detallada el procedimiento para el
Diseno de Circuitos Secuenciales.
AnÁlisis y DiseÑo de Circuitos Secuenciales SincrÓnicos
La gran mayoría de los circuitos digitales contienen flip-flops y compuertas para realizar
funciones específicas. El diseño de estos circuitos inicia a partir de las especificaciones
y finaliza con las funciones lógicas, de las cuales se obtiene el circuito lógico.
Inicialmente se debe crear una tabla de estado o representación equivalente, para
identificar la secuencia de estados que deseada. Luego de seleccionar el número y tipo
de flip-flops con los cuales se desea hacer el diseño, se deduce la lógica combinatoria
necesaria para generar la secuencia de estados.
Los circuitos secuenciales se pueden analizar y diseñar siguiendo un procedimiento
claramente definido que consiste en los siguientes pasos:
1. Asignación de estados
2. Construcción del diagrama de transición
3. Elaboración de la tabla de estados
4. Obtención de ecuaciones o funciones lógicas
5. Realización de circuitos lógicos
Para explicar este método se desarrollará un ejemplo aplicado a un diseño particular.
Ejemplo
Diseñar el circuito secuencial del proceso que se cumple de acuerdo al diagrama de
estados de la figura 7.2.1.
Paso 1. Asignación de estados
Este proceso tiene cuatro estados, una entrada y no tiene salidas (se pueden considerar
como salidas las de los flip-flops). Para representar los cuatro estados se usarán dos flip-
flops identificados como A y B de tipo JK. y la entrada será identificada como X.

Figura 7.2.1. Diagrama de estados


Paso 2. Contrucción del diagrama del transición o de estado
La figura 7.2.1 corresponde al diagrama de transición. Analizando este diagrama se
observa que el estado 10 se mantiene mientras X=0 y en el momento que X=1 pasa al
estado 11, después al estado 00 y finalmente al estado 01, hasta el momento que
nuevamente X=0, volviendo de esta forma al estado AB=10. Adicionalmente observe
que los estados 00 10 y 11, se mantienen cuando X=0 y el estado 01 se mantiene cuando
X=1.
Paso 3. Elaboración de la tabla de estados
A partir del diagrama de estados y de la tabla de transción del flip-flop JK se puede
contruir la tabla de estados (ver tabla 7.2.1).
Entrada Estado Actual Estado Siguiente Excitaciones
X A B A B JA KA JB KB
0 0 0 0 0 0 X 0 X
1 0 0 0 1 0 X 1 X
0 0 1 1 0 1 X X 1
1 0 1 0 1 0 X X 0
0 1 0 1 0 X 0 0 X
1 1 0 1 1 X 0 1 X
0 1 1 1 1 X 0 X 0
1 1 1 0 0 X 1 X 1
Tabla 7.2.1. Tabla de estado
Para la simplificación de los circuitos combinatorios es conveniente que se presenten
condiciones de"no importa", ya que estas permiten simplicar las funciones lógicas y por
tanto el tamaño del circuito lógico.
Paso 4. Obtención de ecuaciones o funciones lógicas.
En este paso se obtienen las funciones lógicas para las entradas de los flip-flops (JA, KA,
JB y KB) y el objetivo es deducir la lógica combinatoria de estado siguiente, mediante el
uso de Mapas de Karnaugh. A continuación en la figura 7.2.2. se muestran los Mapas
de Karnaugh y las funciones lógicas correspondientes.

Figura 7.2.2. Mapas de Karnaugh para las entradas JA , JB, KA y KB


Paso 5. Realización de circuitos lógicos
Este es el ultimo paso del diseño, y consiste en implementar la lógica combinacional a
partir de las ecuaciones lógicas obtenidas en el paso anterior para las entradas J y K de
los flip-flops. Las conexiones correspondientes, se efectúan mediante el uso de
compuertas e inversores y en la figura 7.2.3. se muestra el diseño final del circuito
lógico.
Figura 7.2.3. Circuito Lógico del Diseño
Diseño de Circuitos Secuenciales con flip-flops D
El diseño del circuito de la figura 7.2.3 se hizo con flip-flops JK. En esta sección
veremos como se realiza el diseño de circuitos secuenciales mediante el uso de flip-
flops tipo D.
A diferencia de las entradas de los flip-flops JK, las entradas en los flip-flops D
corresponden exactamente a los estados siguientes. Por esta razón en la tabla de estado
no se requiere una columna independiente para las excitaciones. En el siguiente ejemplo
se verá como realizar el diseño de circuitos secuenciales con flip-flops D.
Ejemplo
Realizar el diseño del circuito lógico correspondiente a la tabla de estado 7.2.2. Observe
que esta tabla es la misma del ejemplo anterior, pero adicionamente se agregó una salida
(Y).
Entrada Estado actual Estado siguiente Salida
X A B A(DA) B(DB) Y
0 0 0 0 0 0
1 0 0 0 1 1
0 0 1 1 0 0
1 0 1 0 1 0
0 1 0 1 0 0
1 1 0 1 1 1
0 1 1 1 1 0
1 1 1 0 0 0
Tabla 7.2.2. Tabla de estado
Paso 1. Asignación de estados
Este proceso al igual que el ejemplo anterior tiene cuatro estados de dos bits (AB), una
entrada (X) y una salida (Y). Para representar los cuatro estados se usarán dos flip-flops
D identificados como A y B.
Paso 2. Construcción del diagrama del transición o de estado
El diagrama de transición es el mismo del ejemplo anterior, excepto que ahora se tiene
en cuenta la salida (Y). En la figura 7.2.4 se observa el diagrama de estado.
Figura 7.2.4. Diagrama de estados - Ejemplo 2
Paso 3. Elaboración de la tabla de estado.
Para este ejemplo inicialmente se dió la tabla de estados, la cual se observa en la tabla
7.2.2.
Paso 4. Obtención de ecuaciones o funciones lógicas.
En este paso se deben obtener las funciones lógicas para las entradas de los flip-flops
(DA, DB) y la salida (Y). En la figura 7.2.5 se muestran los Mapas de Karnaugh y las
funciones lógicas correspondientes.

Figura 7.2.5. Mapas de Karnaugh para las entradas DA , DB, y Y


Paso 5. Realización de circuitos lógicos
Con las ecuaciones lógicas obtenidas en el paso anterior se puede implementar el
circuito lógico. Las conexiones correspondientes, se efectúan mediante el uso de
compuertas e inversores y en la figura 7.2.6 se muestra el diseño del circuito.
Figura 7.2.6. Circuito Lógico
Estados no usados
Durante el diseño de los circuitos secuenciales para simplificar las representaciones
lógicas, es conveniente emplear los estados no usados como condiciones que no
importa. Estos estados se identifican con una (X) en los Mapas de Karnaugh.
Para ilustrar como emplear estos estados, observe la tabla 7.2.3. Teniendo en cuenta
todas las posibles combinaciones de las variables A, B, C y X, Note que en esta tabla hay
seis estados que no están presentes (0000, 0001, 1100, 1101, 1110 y 1111) . Las seis
filas de la tabla correspondientes a estos estados se identifican como estados X (1 o 0) o
condiciones de "No importa"
Estado actual Entrada Estado siguiente Excitaciones Salida
A B C X A B C JA KA JB KB JC KC Y
0 0 1 0 0 0 1 0 X 0 X X 0 0
0 0 1 1 0 1 0 0 X 1 X X 1 0
0 1 0 0 0 1 1 0 X X 0 1 X 0
0 1 0 1 1 0 0 1 X X 1 0 X 0
0 1 1 0 0 0 1 0 X X 1 X 0 0
0 1 1 1 1 0 0 1 X X 1 X 1 0
1 0 0 0 1 0 1 X 0 0 X 1 X 0
1 0 0 1 1 0 0 X 0 0 X 0 X 1
1 0 1 0 0 0 1 X 1 0 X X 0 0
1 0 1 1 1 0 0 X 0 0 X X 1 1
, al momento de elaborar los Mapas de Karnaugh.
Tabla 7.2.3. Tabla de estado - Condiciones de "no importa"
Los mapas de karnaugh correspondientes a las entradas de cada flip-flop (JA, KA, JB, KB,
JC y KC) y la salida (Y), se muestran en la figura 7.2.7. Observe que en cada mapa los
estados resaltados en rojo corresponden a los estados no usados, los cuales se han
incluido como condiciones "no importa" para simplificar la mayor cantidad de variables
en las expresiones.

Figura 7.2.7. Mapas de Karnaugh para las entradas a los flip-flops


Como conclusión sobre esta sección, podemos decir que es recomendable incluir los
estados no usados en el diseño de los circuitos secuenciales. Esto implica una reducción
en las expresiones lógicas y por consiguiente en el tamaño del circuito, que en otros
términos representará obviamente un menor tiempo de desarrollo y costo de
implementación.
Se plantea como ejercicio hacer el diagrama lógico correspondiente a las ecuaciones
halladas a partir de los mapas de Karnaugh de la figura 7.2.7 y hacer el diseño del
circuito secuencial sin tener en cuenta los estados no usados para comparar los dos
casos y notar las diferencias.
Para mas información sobre simplificación de funciones lógicas ver la Lección 4.
Mapas de Karnaugh.
AnÁlisis de Circuitos Secuenciales AsincrÓnicos
El análisis de Circuitos Asincronicos es similar al analisis de los circuitos sincrónicos,
sin embargo estos circuitos requieren un tratamiento particular, debido a que no existen
pulsos de reloj, como referencia de tiempo para controlar los cambios de estado.
En los Circuitos Cecuenciales Asincrónicos las variables de entrada actuan directamente
sobre el sistema, es decir que un cambio en tales variables produce un cambio sobre el
estado interno. Los Circuitos Secuenciales Asincrónicos se clasifican dependiendo del
tipo de entradas o del cambio en el tiempo de las estas, en dos grupos: los Circuitos
Asincrónicos en Modo Fundamental y los Circuitos Asincrónicos en Modo Pulso.
Circuitos Asincronicos Activados por Nivel (Modo Fundamental)
Los circuitos asincrónicos operando de esta forma fueron los primeros que se
implementaron en los inicios del análisis de los sistemas secuenciales en Electrónica
Digital y se encuentran constituidos por un sistema combinacional, donde algunas de
sus salidas se unen a las entradas formando lazos de realimentación. En la figura 7.3.1
se observa un diagrama de bloques descriptivo de este tipo de sistemas secuenciales.

Figura 7.3.1. Diagrama de bloques de un Circuito Asincrónico Activado por Nivel


Veamos la descripción y características de este esquema.
• La variable t representa el tiempo de retardo mínimo para que ocurra una
transición y corresponde al retardo que ocurre cuando una señal viaja a través de
una o más compuertas del circuito secuencial.
• En este tipo de sistemas secuenciales no se permiten cambios en forma
simultánea en las variables de entrada, debido a la posible ocurrencia de estados
indeterminados en las salidas.
• Se pueden presentar estados estables e inestables. Los estables son aquellos en
los que el valor de estado presente es igual al estado siguiente, y los inestables
son aquellos en los que el valor del estado presente es diferente al estado
siguiente.
• Las variables en minúscula (yn) corresponden a las variables secundarias en el
instante t (Yt), y las variables en mayúscula corresponden a las variables
secundarias en el instante t+1 (Yt+1).
Para observar los fenómenos que pueden ocurrir en este tipo de sistemas, a continuación
se describe un procedimiento para analizar los estados lógicos, el cual se desarrolla en
los siguientes pasos:
1. Hallar las ecuaciones lógicas para las variables de excitación y salida del
circuito.
2. Elaborar los mapas de Karnaugh para los estados de las variables de excitación
y salida a partir de las ecuaciones halladas. Los mapas de Karnaugh contienen
los estados secundarios versus los estados de salida.
3. Localizar e identificar todos los estados estables e inestables en el mapa de
Karnaugh de las variables de excitación. Los estados estables ocurren cuando yt
= Yt, y los estados inestables cuando yt≠ Yt.
4. Asignar un nombre (pueder ser un caracter) a cada fila de la tabla.
5. Elaborar una tabla de flujo, reemplazando cada estado estable de excitación con
el mismo nombre que tiene asignado el estado secundario, así como el de los
estados inestables. Para analizar la tabla de flujo, deberán considerarse
movimientos horizontales, cuando ocurran cambios en las entrada, y
movimientos verticales cuando se dén transiciones de estados inestables a
estados estables, sin cambio en las entradas.
Para ilustrar el proceso de análisis se desarrollará un ejemplo basado en el circuito de la
figura 7.3.2.

Figura 7.3.2. Circuito Secuencial Asincrónico de ejemplo


Este circuito tiene dos variables de entrada (x1, x2), una variable de estado interno o
secundaria (y) y una variable de salida o exitación (Y=z).
• Obtención de las ecuaciones lógicas del circuito. Según la lógica del circuito se
deducen las siguientes expresiones para los estados de excitación y salida.
Comparando este circuito con el de la figura 7.3.1, se observa que la variable de
excitación corresponde a la variable de salida, por esta razón las expresiones son
las mismas.
Y = x1·x2' + x2·y
z = x1·x2' + x2·y
• Elaboración de Mapas de Karnaugh para las variables de excitación y salida.
Partiendo de las expresiones lógicas anteriores y teniendo encuenta todas las
posibles combinaciones de las variables x1, x2 y y se puede llegar al mapa de
Karnaugh de la figura 7.3.3, el cual es el mismo para Y como para z.

Figura 7.3.3. Mapa de Karnaugh para estados de excitación y salida


Esta tabla indica los cambios en el estado de la varible Y después de un cambio en las
entradas x1 y x2. A manera de ejemplo, observe el estado sombreado (1) en la figura
7.3.3, el cual indica que el estado actual Y=0 cambia a Y=1 cuando las entradas son
x1=x2=1.
• Localización de estados estables e inestables. De la figura 7.3.3 se pueden
deducir las estados estables e inestables, basta observar si los estados actuales
cambian al alterar las entradas. Teniendo en cuenta lo anterior se puede concluir
que los estados inestables son aquellos que estan sombreados y los demás son
estables, debido a que no hay cambios en el estado siguiente.
• Asignación de nombres a cada fila de la tabla de excitación. Las filas de la tabla
seán identificadas como a y b para identicar los estados 0 y 1 de la variable Y.
• Tabla de flujo o transición de estados lógicos. Teniendo en cuenta que los
estados de las entradas no deben tener cambios simultaneamente, en la figura
7.3.4 se muestra la tabla de flujo, donde se observa la transición de estados a y b
según el estado de las entradas.

Figura 7.3.4. Flujo de estados


Circuitos Asincronicos Activados por Pulso (Modo Pulso)
Los circuitos asincrónicos operando de este modo son similares a aquellos que operan
en modo fundamental, excepto que las señales de entrada corresponden a pulsos que se
ocuren de forma asíncrónica. en la figura 7.3.5 se observa un diagrama de bloques
ilustrativo sobre este tipo de sistemas.

Figura 7.3.5. Circuito Asincrónico Activado por Pulsos


Un circuito secuencial activado por pulsos, se caracteriza por cumplir las siguientes
condiciones:
• Como mínimo, una de las entradas debe ser un pulso.
• Los cambios en los estados internos ocurren únicamente por la presencia de un
pulso en las terminales de entrada.
• Cada estado de entrada, desencadena únicamente un cambio en el estado interno
del circuito.
• No se permiten dos o más pulsos en forma simultánea en las señales de entrada.
En caso de incumplirse esta condición la única forma de analizar el circuito es
con un diagrama de tiempos.
• Existen dos tipos de circuitos en esta modalidad de funcionamiento: La máquina
de estados de Mealy y Moore (Ver Lección 1. Teoría de máquinas de estado
(FSM))
Para entender el funcionamiento de este tipo de circuitos, se desarrollará un ejemplo con
base en el circuito de la figura 7.3.6.

Figura 7.3.6. Circuito Asincrónico de Ejemplo


Para comenzar el análisis considere que los pulsos de entrada ocurren en la secuencia
que se observa en la figura 7.3.7. Note que los estados de las entradas son
complementarios y las transiciones ocurren en instantes de tiempo diferentes, lo cual es
una característica particular de las entradas de estos sistemas secuenciales.

Figura 7.3.7. Secuencia de pulsos para x1 y x2


Para analizar el estado de las variables del circuito se deben deducir las expresiones
lógicas para S, R y z. De la figura 7.3.6, se tiene:
S = x1·y'
R = x2·y
z = x1·y
A partir de las expresiones lógicas se puede construir el diagrama de tiempos para las
variables del circuito. En la figura 7.3.8 se observan las transiciones de los estados
correspondientes a la secuencia de las señales de entrada.
Figura 7.3.8. Diagrama de tiempo del circuito de la figura 7.3.6
La figura 7.3.9 muestra los estados siguientes y los estados de salida de la forma
"estado siguiente/estado salida" (y/z).

Figura 7.3.9. Estados de Excitación y Salida


En la tabla no se tuvo en cuenta la columna correspondiente a la entrada x1x2=11,
debido a que los circuitos secuenciales asincrónicos no admiten entradas activas de
forma simultanea. Esta tabla de estados se puede simplificar aun mas debido a que el
estado 00 no implica ningún cambio en los estados del circuito, así que la columna
correspondiente se puede suprimir, sin alterar el análisis. Teniendo presente esta
condición, la figura 7.3.9 se reduce a la figura 7.3.10. Observe que los estados de las
entradas son complementarios, lo cual es característico de una señal pulsada.

Figura 7.3.10. Estados de Excitación y Salida


Ejemplos de Control Secuencial
Los sistemas combinacionales y secuenciales tienen gran variedad de aplicaciones en la
vida real. En la mayoría de sistemas digitales encontrados en la práctica se incluyen
elementos que memorizan la información, por lo cual se requieren de circuitos
secuenciales.
El objetivo de esta lección consiste en dar aplicabilidad a la teoría vista en este capítulo,
mediante dos ejemplos sencillos, con los cuales se harán uso de las herramientas de
análisis y diseño de circuitos secuenciales: la implementación de un semáforo y un
control de un motor de pasos.
Implementación de un Semáforo
Construir el circuito lógico para un semáforo que responda a la siguiente secuencia:
Verde, Amarillo, Rojo y Rojo/Amarillo.
El semáforo tiene cuatro estados, los cuales se pueden representar con 2 flip-flops, sin
embargo para asignar el tiempo de duración de cada estado se emplearan 3 flip-flops, de
los cuales se pueden obtener 8 estados, cuyos tiempos se pueden distribuir de la
siguiente forma:
• Verde (3 ciclos)
• Amarillo (1 ciclo)
• Rojo (3 ciclos)
• Rojo-Amarillo (1 ciclo)
Donde cada ciclo representa una transición en la señal de reloj. Observe que la duración
de la secuencia de los cuatro estados es de 8 ciclos.
El primer paso para realizar el diseño consiste en asignar los estados lógicos, como se
puede notar en la tabla 7.4.1. Esta asignación de estados se puede hacer de forma libre y
no necesariamente debe corresponder a una secuencia binaria, sin embargo, en este caso
por comodidad sean establecido de esta forma para implementar el circuito con base en
un contador sincrónico de tres bits.
Salidas de los flip-flops Salidas al Semáforo
Color
Q2 Q1 Q0 V A R
0 0 0 1 0 0
Verde> 0 0 1 1 0 0
0 1 0 1 0 0
Amarillo 0 1 1 0 1 0
1 0 0 0 0 1
Rojo 1 0 1 0 0 1
1 1 0 0 0 1
Rojo-Amarillo 1 1 1 0 1 1

Tabla 7.4.1. Asignación de estados


En la figura 7.4.1 se observa un contador sincrónico de tres bits construido con flip-
flops JK, a partir del cual se realizará el diseño. El objetivo de hacer uso del contador es
emplear sus salidas (Q2, Q1 y Q0) para generar los estados de las variables V, A y R
(Verde, Amarillo y Rojo) del semáforo.

Figura 7.4.1. Contador de tres bits


El siguiente paso consiste en deducir la logica combinacional adicional para generar los
estados de las variables V, A y R. Para ello se deben construir los mapas de Karnaugh y
obtener las ecuaciones lógicas. En la figura 7.4.2 se muestran los mapas con las
ecuaciones resultantes para cada variable.
Figura 7.4.2. Mapas de Karnaugh
Con las expresiones obtenidas solo resta agregar la lógica al contador de la figura 7.4.1.
El diseño del final del circuito de muestra en la animación 7.4.1.

Animación 7.4.1. Circuito Lógico


Motor paso a paso operando en forma unipolar
Un motor de pasos es un tipo especial de motor diseñado para rotar un determinado
ángulo como respuesta a una señal en su circuito de control. Estos motores se utilizan en
varios sistemas de control de posición debido a la presición que manejan.
Este tipo de motor puede tener una o dos bobinas por fase. Los que tienen una bobina
por fase se conocen como motores de tres hilos y los que tienen dos bobinas por fase se
conocen como motores de devanado partido. Para este ejemplo se empleará un motor de
fase partida, como el que se indica en la figura 7.4.3. Observe la foma en que debe ser
conectado para hacer el control.
Figura 7.4.3. Motor de pasos de devanado partido
En este ejemplo se hará el diseño del circuito de control para manejar cuatro pasos, los
cuales corresponden a la posición de los interruptores se indican en la tabla 7.4.2.
Estado de los interruptores
Numero de paso
S1 S2 S3 S4
1 ON OFF OFF ON
2 ON OFF ON OFF
3 OFF ON ON OFF
4 OFF ON OFF ON
Tabla 7.4.2. Secuencia de estados de los interruptores (4 pasos)
Los interruptores se pueden controlar de dos formas, ya sea con tiristores (SCR's) o
mediante el uso de relevos. En la figura 7.4.4 se observan las dos opciones para manejar
los interruptores.

Figura 7.4.4. Interruptor por relevo y de estado solido


Observando la tabla 7.4.2, se puede notar que los estados de los interruptores S1 y S2,
son complementarios, al igual que los interruptores S3 y S4, lo cual simplifica el diseño
del circuito.
El primer paso para realizar el diseño de la unidad de control, consiste en asignar los
estados lógicos y seleccionar el tipo de flip-flop con el cual se implementará el circuito
lógico. En la tabla 7.4.3 se relacionan los estados lógicos de las salidas y los estados de
las entradas j y k de los flip-flops. Note que las variables S2 y S4 no se tuvieron en
cuenta, debido a que sus estados son el complemento de S1 y S3 respectivamante.
Estado Actual Entrada Estado Siguiente Estadas de los flip-flops
S1 S3 D S1 S3 J1 K1 J3 K3
1 0 0 0 0 X 1 0 X
1 1 0 1 0 X 0 X 1
0 1 0 1 1 1 X X 0
0 0 0 0 1 0 X 1 X
1 0 1 1 1 X 0 1 X
1 1 1 0 1 X 1 X 0
0 1 1 0 0 0 X X 1
0 0 1 1 0 1 X 0 X
Tabla 7.4.3. Tabla de estado
El siguiente paso consiste en construir los mapas de Karnaugh para los estados de los
flip-flops (J1, K1, J3, K3). Tales estados se indican en los mapas de Karnaugh mostrados
en las figura 7.4.5 con las ecuaciones lógicas correspondientes.

Figura 7.4.5. Mapas de Karnaugh


El último paso del diseño consiste en construir el circuito lógico a partir de las
ecuaciones lógicas obtenidas, el cual se muestra en la figura 7.4.6.

Figura 7.4.6. Diseño final del circuito lógico


Observe que los estados S2 y S4 no se tuvieron en cuenta en el diseño debido a que los
flip-flops por defecto entregan en sus salidas una variable y su complemento.
PLD's Secuenciales
En la mayoría de las aplicaciones en electrónica digital se requiere del almacenamiento
de información de forma temporal para efectuar operaciones lógicas. Debido a que los
flip-flops tienen esta característica, la gran parte de los PLDs existentes en el mercado
tienen incorporados estos dispositivos en su estructura interna.
Estos dispositivos lógicos se conocen como PLDs de registro y son empleados para
construir máquinas de estado de propósito especial, además de la ventaja que ofrecen
para reducir el tamaño de los circuitos. Se puede agregar que los PLDs facilitan el
ruteado de las placas de circuito impreso debido a la libertad de asignación que
proporcionan, y además permiten realizar modificaciones posteriores del diseño.
Los PLDs secuenciales se componen de un arreglo programable de compuertas AND
seguido de un arreglo fijo de compuertas OR, dispuestos de la misma manera que en los
PLDs combinatorios. Su diferencia con los PLDs combinatorios se debe a que el estado
de las salidas se almacena en flip-flops cuando se presenta un flanco activo en la señal
de reloj del PLD.
En este capitulo veremos la arquitectura de algunos PLDs de uso general y ejemplos de
programación para aplicaciones particulares mediante el Programa ABEL.
Arquitectura de Diversos PLD's Secuenciales
En el capítulo 4 vimos la descripción y arquitectura de los PLD's combinatorios, en el
cual se dieron los detalles sobre su estructura y funcionamiento. En esta lección
veremos la descripción de algunos PLDs secuenciales de uso comercial. Los PLDs
secuenciales se encuentran clasificados en dos tipos: "no reprogramables" y
"reprogramables". A continuación veremos estas dos categorías de PLDs y sus
diferencias.
PLDs no reprogramables
En este tipo de PLD's es posible programar el arreglo de compuertas sólo una vez, de tal
manera que no es posible hacer modificaciones posteriores al estado de los fusibles,
quedando únicamente operando con la lógica definida por las conexiones internas
programadas. Estos dispositivos son conocidos por la sigla PAL (Programmable Array
Logic).
En la figura 8.1.1 se muestra un PLD secuencial PAL16R6. Este dispositivo tiene 20
pines, los cuales se distribuyen de la siguiente forma:
• 8 entradas principales (pines 2 a 9).
• 8 salidas (pines 12 a 19).
• 1 entrada de reloj (pin 1).
• 1 entrada de habilitación (pin 11).
• 2 entradas de alimentación (pines 10 y 20).
Este PLD tiene la posibilidad de obtener 10 entradas como máximo y 6 salidas de
registro con flip-flop tipo D. En la Figura 8.1.1. se observa la estructura interna de este
PLD, donde se puede notar lo siguiente:
• Todos los flip-flops se encuentran conectados a una señal común de reloj, como
en los circuitos secuenciales sincrónicos.
• Cada una de las salidas de los flip-flops pasa por un buffer triestado cuya señal
de habilitación es común para los demás buffers de las salidas.
• Existen dos pines especiales IO1 e IO8, los cuales son bidireccionales y se
pueden configurar como entrada o como salida.
• Las salidas de los flip-flops retornar hacia el arreglo de compuertas, lo cual
permite crear lazos de realimentación, lo cual permite implementar contadores y
registros.
En la tabla 8.1.1 se observa una lista de algunos PLDs secuenciales de uso general. Los
PLDs PAL16XX indicados en la tabla tiene el mismo arreglo de compuertas de 16
variables. Los PLDs de la familia PAL20XX tienen un arreglo de compuertas similar con
20 variables. En la figura 8.1.2 se observan los esquemas lógicos de los PLDs
relacionados en la tabla 8.1.1.
Entradas
Salidas Salidas
Nº de por Entradas Salidas
PLD combinacionales tipo
pines compuerta principales combinacionales
bidireccionales registro
AND
PAL16R4 20 16 8 4 4 0
PAL16R6 20 16 8 2 6 0
PAL16R8 20 16 8 0 8 0
PAL20R4 24 20 12 4 4 0
PAL20R6 24 20 12 2 6 0
PAL20R8 24 20 12 0 8 0
Tabla 8.1.1. Descripción de PLDs secuenciales no reprogramables de uso general
Figura 8.1.2. Diagramas lógicos de PLDs secuenciales no reprogramables (Copyright ©
1999 by John F. Wakerly)
PLDs reprogramables
Estos PLDs utilizan tecnología EEPROM (Electrical Erasable Programmable ROM) y
se conocen con el nombre de GALs (Generic Array Logic). Estos dispositivos a
diferencia de los anteriores permiten modificar la disposición interna de las conexiones
de las compuertas después de haber sido programados. En la Figura 8.1.3 se observa la
arquitectura de una GAL16V8.
Este dispositivo tiene 20 pines distribuidos de la siguiente forma:
• 8 entradas dedicadas (pines 2 a 9).
• 8 salidas de registro programables (pines 12 a 19).
• 1 entrada de reloj (pin 1).
• 1 entrada de habilitación (pin 11).
• 2 entradas de alimentación (pines 10 y 20).
Las salidas se pueden programar como salida secuencial o como salida combinacional
dependiendo del estado de los fusibles de selección ubicados en la macrocelda lógica de
cada salida. La macrocelda corresponde al conjunto de elementos agrupados en cada
salida, incluyendo la compuerta OR).

Figura 8.1.4. Macroceldas lógicas para el PLD GAL16V8. (Copyright © 1999 by John
F. Wakerly).
Estas celdas son conocidas como OLMCs de la sigla en inglés Output Logic MacroCell
y en la figura 8.1.4 se observa la estructura interna de una de estas celdas en sus dos
configuraciones disponibles (salida secuencial y salida combinacional).
Arquitectura de Diversos PLD's Secuenciales
Figura 8.1.1. PLD secuencial PAL16R6. (Copyright © 1999 by John F. Wakerly)
Arquitectura de Diversos PLD's Secuenciales
Ejemplos de ProgramaciÓn de PLDs Secuenciales
En el capitulo 4 se vieron las bases sobre la programación de PLD's con CUPL. En esta
lección se indicarán algunos ejemplos para aplicaciones particulares desarrolladas en
CUPL. Recordando lo visto en el capítulo 4, en este lenguaje el código fuente se
dividide en tres partes: Encabezado, asignación de pines de entrada y salida y
ecuaciones lógicas.
Los ejemplos ilustrados en esta lección fueron tomados de algunos fabricantes que han
desarrollado estos códigos para aplicaciones particulares en sus dispositivos. Se plantea
al estudiante analizar el código de estos ejemplos para comprender la forma en que se
pueden programar en CUPL.
Ejemplo 8.2.1 - Uso de los flip-flop D en un PLD
Name Flops;
Partno CA0002;
Revision 03;
Date 9/12/95;
Designer G. Woolhiser;
Company Assisted Technology, Inc.;
Location None;
Assembly None;
Device P16R8;
/****************************************************************/
/* */
/* This example demonstrates the use of D-type flip-flops, */
/* and flexibilty of expression with CUPL. The following */
/* are four implementations of a two bit counter. */
/* */
/****************************************************************/
/* Target Devices: PAL16R8, PAL16RP8, EP300 */
/****************************************************************/
Pin 1 = clock;
Pin 2 = reset;
Pin 11 = !enable;
/*
* Outputs: define outputs and output active levels
*/
Pin 19 = qa0; Pin 18 = qa1;
Pin 17 = qb0; Pin 16 = qb1;
Pin 15 = qc0; Pin 14 = qc1;
Pin 13 = qd0; Pin 12 = qd1;
/*
* Logic: examples of two-bit counters using d-type flip-flops
*/
/* two-bit counter example no. 1 */
/* using software emulated exclusive or's */
qa0.d = !reset & !qa0;
qa1.d = !reset & (qa1 $ qa0);
/* two-bit counter example no. 2 */
/* using expanded exclusive or's */
qb0.d = !reset & (!qb0 & !qb1 # !qb0 & qb1);
qb1.d = !reset & (!qb0 & qb1 # qb0 & !qb1);
/* two-bit counter example no. 3 */
/* using bit fields on the right hand side of the equals sign */
field state = [qc1,qc0];
qc0.d = !reset & (state:0 # state:2);
qc1.d = !reset & (state:1 # state:2);
/* two-bit counter example no. 4 */
/* using bit fields on the left hand side of the equals sign */
field q = [qd0,qd1];
q.d = !reset & ([!qd0,qd1] & [!qd1,!qd0] # [!qd0,!qd1] & [qd1,qd0]);

Ejemplo 8.2.2 - Contador Sincrónico de 8 bits con Cargue en Paralelo


Name Count8;
Partno CA0008;
Date 7/19/95;
Revision 01;
Designer Kahl;
Company Assisted Technology;
Assembly None;
Location None;
Device P20X8;
/****************************************************************/
/* */
/* Octal Counter (74LS461) */
/* */
/* 8-bit synchronous counter with parallel load, clear, and */
/* hold capability. The LOAD operation loads the inputs */
/* (D7-D0) into the output register (Q7-Q0). The CLEAR */
/* operation resets the output register to all LOWs. The HOLD */
/* operation holds the previous value regardless of clock */
/* transitions. The increment function adds one to the output */
/* register when the CARRY-IN is true (!ci=LO), otherwise the */
/* operation is a hold. The CARRY-OUT is true (!co=LO) when */
/* the output register (Q7-Q0) is all HIGHs, otherwise false */
/* (!co=HI). */
/****************************************************************/
/** Allowable Target Device Types : PAL20X8 */
/****************************************************************/
/** Inputs **/
PIN 1 = clock ; /* Register Clock */
PIN [2,11] = [instr0..1] ; /* Instruction Type Inputs */
PIN [3..10] = [D0..7] ; /* Data Inputs */
PIN 13 = !out_enable ; /* Register Output Enable */
PIN 23 = !carry_in ; /* Carry-In Input */
/** Outputs **/
PIN 14 = !carry_out ; /* Carry-Out Output */
PIN [15..22] = [Q7..0] ; /* Register Outputs */
/** Declarations and Intermediate Variable Definitions **/
field instruction = [instr1..0]; /* Instruction Field */
clear = instruction:0 ; /* Operation Types */
hold = instruction:1 ;
load = instruction:2 ;
count = instruction:3 ;
/** Logic Equations **/
carry_out = carry_in & [Q0..7]:& ;
!Q0.d = clear # (count # hold) & !Q0 $ load & !D0 # count & carry_in ;
!Q1.d = clear # (count # hold) & !Q1 $ load & !D1 # count & carry_in & Q0 ;
!Q2.d = clear # (count # hold) & !Q2 $ load & !D2 # count & carry_in & [Q0..1]:& ;
!Q3.d = clear # (count # hold) & !Q3 $ load & !D3 # count & carry_in & [Q0..2]:& ;
!Q4.d = clear # (count # hold) & !Q4 $ load & !D4 # count & carry_in & [Q0..3]:& ;
!Q5.d = clear # (count # hold) & !Q5 $ load & !D5 # count & carry_in & [Q0..4]:& ;
!Q6.d = clear # (count # hold) & !Q6 $ load & !D6 # count & carry_in & [Q0..5]:& ;
!Q7.d = clear # (count # hold) & !Q7 $ load & !D7 # count & carry_in & [Q0..6]:& ;

Ejemplo 8.2.3 - Contador Up/Down con Límites


Name CYP_CNT;
Partno CY7C330;
Revision 01;
Date 02-25-95;
Designer Joe Designer;
Company Cypress Semiconductor;
Location U1;
Assembly COUNTER;
Device P7C330;
/*
This design is an up/down counter with preloadable limits. The Lower limits
are loaded into the dedicated input registers on the rising edge of LLC and
the upper limits are loaded into the input registers found in the I/O
macrocells on the rising edge of ULC. The counter begins counting upwards,
when preloading is done, until the upper limit is reached, and then, begins
counting downward. This design, because the equations are already
minimized and in sum of products form, should only be compiled with the
default minimization (-M1 flag).
*/
PIN 1 = CLK; /* Clock used for counting */
PIN 2 = LLC; /* Clock for preloading lower limit */
PIN 3 = ULC; /* Clock for preloading upper limit */
PIN [4..7] = [LL0..3]; /* Lower limit hold registers */
PIN [9..12] = [LL4..7];
PIN 13 = LPL; /* Lower limit preload indications */
/*
Counter output registers. Pin assignments are based on the number of
product terms are available on that pin.
*/
PIN 28 = CNT0; /* Also used for Upper limit loading */
PIN 15 = CNT1; /* Also used for Upper limit loading */
PIN 26 = CNT2; /* Also used for Upper limit loading */
PIN 17 = CNT3; /* Also used for Upper limit loading */
PIN 19 = CNT4; /* Also used for Upper limit loading */
PIN 24 = CNT5; /* Also used for Upper limit loading */
PIN 20 = CNT6;
PIN 23 = CNT7;
PIN 18 = UL6; /* Used for Upper limit loading */
PIN 25 = UL7; /* Used for Upper limit loading */
PIN 27 = UPL;
PINNODE 29 = UEQUAL; /* Upper limit has been reached */
PINNODE 30 = PLDONE; /* Preloading has finished */
PINNODE 31 = LEQUAL; /* Lower limit has been reached */
PINNODE 32 = UP; /* Count direction */
PIN 16 = !RESET; /* Reset signal clears all registers */
PIN 14 = !CNTOE; /* I/O pin OE used for loading upper limit */
PINNODE 45 = UL0; /* Shared input MUX definition */
PINNODE 46 = UL2; /* Shared input MUX definition */
PINNODE 47 = UL5; /* Shared input MUX definition */
PINNODE 48 = UL4; /* Shared input MUX definition */
PINNODE 49 = UL3; /* Shared input MUX definition */
PINNODE 50 = UL1; /* Shared input MUX definition */
UL0.IMUX = CNT0.IOD; /* These definitions are used to */
UL2.IMUX = CNT2.IOD; /* indicate which pin will be fed */
UL5.IMUX = CNT5.IOD; /* through the share feedback MUX.*/
UL4.IMUX = CNT4.IOD;
UL3.IMUX = CNT3.IOD;
UL1.IMUX = CNT1.IOD;
UL0 = CNT0.IOD;
UL2 = CNT2.IOD;
UL5 = CNT5.IOD;
UL4 = CNT4.IOD;
UL3 = CNT3.IOD;
UL1 = CNT1.IOD;
UPL.CKMUX = ULC;
LPL.CKMUX = LLC;
RESET.CKMUX = LLC;
[CNT0..5].CKMUX = ULC; /* Pin 3 will be used for upper preload */
[UL6..7].CKMUX = ULC; /* Pin 3 will be used for upper preload */
[LL0..7].CKMUX = LLC; /* Pin 2 will be used for lower preload */
[CNT0..7].SR = RESET.DQ; /* Count register will be reset with pin 16 */
[CNT0..7].OEMUX = CNTOE; /* Output enable will be controlled by pin 14 */
/*
Count equations. Note how the use of the XOR terms significantly reduces the
number of product terms that are needed. This allows this complex design to
fit into the device.
*/
!CNT0.D = !CNT0
$ PLDONE
# !LL0.DQ & LPL.DQ & CNT0
# !CNT0 & UL0 & UPL.DQ
# LL0.DQ & LPL.DQ & !CNT0
# CNT0 & !UL0 & UPL.DQ ;
!CNT1.D = !CNT1
$ !LL1.DQ & LPL.DQ & !PLDONE & CNT1
# LL1.DQ & LPL.DQ & !PLDONE & !CNT1
# UPL.DQ & !PLDONE & !UL1 & CNT1
# UPL.DQ & !PLDONE & UL1 & !CNT1
# CNT0 & PLDONE & !UP
# !CNT0 & PLDONE & UP ;
!CNT2.D = !CNT2
$ !LL2.DQ & LPL.DQ & CNT2 & !PLDONE
# LL2.DQ & LPL.DQ & !CNT2 & !PLDONE
# UPL.DQ & CNT2 & !UL2 & !PLDONE
# UPL.DQ & !CNT2 & UL2 & !PLDONE
# CNT0 & PLDONE & !UP & CNT1
# !CNT0 & PLDONE & UP & !CNT1;
!CNT3.D = !CNT3
$ !LL3.DQ & LPL.DQ & !PLDONE & CNT3
# LL3.DQ & LPL.DQ & !PLDONE & !CNT3
# UPL.DQ & !PLDONE & !UL3 & CNT3
# UPL.DQ & !PLDONE & UL3 & !CNT3
# CNT0 & CNT2 & PLDONE & !UP & CNT1
# !CNT0 & !CNT2 & PLDONE & UP & !CNT1;
!CNT4.D = !CNT4
$ !LL4.DQ & LPL.DQ & !PLDONE & CNT4
# LL4.DQ & LPL.DQ & !PLDONE & !CNT4
# UPL.DQ & !PLDONE & !UL4 & CNT4
# UPL.DQ & !PLDONE & UL4 & !CNT4
# CNT0 & CNT2 & PLDONE & !UP & CNT3 & CNT1
# !CNT0 & !CNT2 & PLDONE & UP & !CNT3 & !CNT1;
!CNT5.D = !CNT5
$ !LL5.DQ & LPL.DQ & CNT5 & !PLDONE
# LL5.DQ & LPL.DQ & !CNT5 & !PLDONE
# UPL.DQ & CNT5 & !UL5 & !PLDONE
# UPL.DQ & !CNT5 & UL5 & !PLDONE
# CNT0 & CNT2 & PLDONE & CNT4 & !UP & CNT3 & CNT1
# !CNT0 & !CNT2 & PLDONE & !CNT4 & UP & !CNT3 & !CNT1;
!CNT6.D = !CNT6
$ !LL6.DQ & LPL.DQ & !PLDONE & CNT6
# LL6.DQ & LPL.DQ & !PLDONE & !CNT6
# UPL.DQ & !PLDONE & CNT6 & !UL6.DQ
# UPL.DQ & !PLDONE & !CNT6 & UL6.DQ
# CNT0 & CNT2 & CNT5 & PLDONE & CNT4 & !UP & CNT3 & CNT1
# !CNT0 & !CNT2 & !CNT5 & PLDONE & !CNT4 & UP & !CNT3 & !CNT1;
!CNT7.D = !CNT7
$ !LL7.DQ & LPL.DQ & CNT7 & !PLDONE
# LL7.DQ & LPL.DQ & !CNT7 & !PLDONE
# UPL.DQ & !UL7.DQ & CNT7 & !PLDONE
# UPL.DQ & UL7.DQ & !CNT7 & !PLDONE
# CNT0 & CNT2 & CNT5 & PLDONE & CNT6 & CNT4 & !UP & CNT3 & CNT1
# !CNT0 & !CNT2 & !CNT5 & PLDONE & !CNT6 & !CNT4 & UP & !CNT3 & !
CNT1;
/* Direction of count */
UP.D = UP
$ !UEQUAL & !UP & PLDONE
# !LEQUAL & UP & PLDONE
# UPL.DQ & !PLDONE & !UP
# LPL.DQ & !PLDONE & UP;
/* Has the lower limit been reached */
LEQUAL.D = LL6.DQ & !CNT6
# !LL7.DQ & CNT7
# LL7.DQ & !CNT7
# LL3.DQ & !CNT3
# !LL5.DQ & CNT5
# LL5.DQ & !CNT5
# !LL1.DQ & CNT1
# LL0.DQ & !CNT0
# !LL2.DQ & CNT2
# !LL4.DQ & CNT4
# LL4.DQ & !CNT4
# !LL0.DQ & CNT0
# LL1.DQ & !CNT1
# !LL6.DQ & CNT6
# !LL3.DQ & CNT3
# LL2.DQ & !CNT2;
/* Has preloading finished */
PLDONE.D = !LPL.DQ & !UPL.DQ ;
/* Has the upper limit been reached */
UEQUAL.D = !CNT6 & UL6.DQ
# !UL7.DQ & CNT7
# UL7.DQ & !CNT7
# UL3 & !CNT3
# CNT5 & !UL5
# !CNT5 & UL5
# !UL1 & CNT1
# !CNT0 & UL0
# CNT2 & !UL2
# !UL4 & CNT4
# UL4 & !CNT4
# CNT0 & !UL0
# UL1 & !CNT1
# CNT6 & !UL6.DQ
# !UL3 & CNT3
# !CNT2 & UL2;

Ejemplo 8.2.4 - Contador Up/Down de 16 bits


Name Tcounter;
Partno CA0020;
Date 6/9/95;
Revision 01;
Designer Kahl;
Company Personal CAD Systems, Inc.;
Assembly None;
Location None;
Device ep600;
/****************************************************************/
/* */
/* 16 Bit Synchronous Up/Down Counter */
/* */
/* This is a 16-bit up/down counter with built-in shift */
/* register using toggle flip-flops. The various modes are */
/* controlled by the signals CNTUP (1 = count up) */
/* SHIFT (1 = shift) */
/* SHLFT (1 = shift left) */
/****************************************************************/
/* Allowable Target Device Types : EP600 */
/****************************************************************/
/** Inputs **/
Pin 1 = clock1; /* Counter Clock 1 */
Pin 13 = clock2; /* Counter Clock 2 */
Pin 2 = data_in; /* Serial Shift Data Input */
Pin 11 = cntup; /* Count Up/Down Mode Control */
Pin 14 = shift; /* Shift/Count Mode Control */
Pin 23 = shlft; /* Shift Left Mode Control */
/** Outputs **/
Pin [3..10,15..22] = [q0..15]; /* Counter/Shifter Outputs */
/** Declarations and Intermediate Variable Definitions **/
count_up = !shift & cntup & !shlft;
count_down = !shift & !cntup & !shlft;
shift_left = shift & !cntup & shlft;
shift_right = shift & !cntup & !shlft;
reset_count = shift & cntup & shlft; /* Counter Reset Command */
Field counter = [q15..0]; /* Declared Counter Field */
/** Logic Equations **/
counter.t = 'h'0001 & (count_up & 'b'1 /* BIT 0 (LSB) */
# count_down & 'b'1
# shift_left & (data_in $ q0)
# shift_right & (q0 $ q1))
# 'h'0002 & (count_up & q0 /* BIT 1 */
# count_down & !q0
# shift_left & (q0 $ q1)
# shift_right & (q1 $ q2))
# 'h'0004 & (count_up & [q0..1]:& /* BIT 2 */
# count_down & ![q0..1]:&
# shift_left & (q1 $ q2)
# shift_right & (q2 $ q3))
# 'h'0008 & (count_up & [q0..2]:& /* BIT 3 */
# count_down & ![q0..2]:&
# shift_left & (q2 $ q3)
# shift_right & (q3 $ q4))
# 'h'0010 & (count_up & [q0..3]:& /* BIT 4 */
# count_down & ![q0..3]:&
# shift_left & (q3 $ q4)
# shift_right & (q4 $ q5))
# 'h'0020 & (count_up & [q0..4]:& /* BIT 5 */
# count_down & ![q0..4]:&
# shift_left & (q4 $ q5)
# shift_right & (q5 $ q6))
# 'h'0040 & (count_up & [q0..5]:& /* BIT 6 */
# count_down & ![q0..5]:&
# shift_left & (q5 $ q6)
# shift_right & (q6 $ q7))
# 'h'0080 & (count_up & [q0..6]:& /* BIT 7 */
# count_down & ![q0..6]:&
# shift_left & (q6 $ q7)
# shift_right & (q7 $ q8))
# 'h'0100 & (count_up & [q0..7]:& /* BIT 8 */
# count_down & ![q0..7]:&
# shift_left & (q7 $ q8)
# shift_right & (q8 $ q9))
# 'h'0200 & (count_up & [q0..8]:& /* BIT 9 */
# count_down & ![q0..8]:&
# shift_left & (q8 $ q9)
# shift_right & (q9 $ q10))
# 'h'0400 & (count_up & [q0..9]:& /* BIT 10 */
# count_down & ![q0..9]:&
# shift_left & (q9 $ q10)
# shift_right & (q10 $ q11))
# 'h'0800 & (count_up & [q0..10]:& /* BIT 11 */
# count_down & ![q0..10]:&
# shift_left & (q10 $ q11)
# shift_right & (q11 $ q12))
# 'h'1000 & (count_up & [q0..11]:& /* BIT 12 */
# count_down & ![q0..11]:&
# shift_left & (q11 $ q12)
# shift_right & (q12 $ q13))
# 'h'2000 & (count_up & [q0..12]:& /* BIT 13 */
# count_down & ![q0..12]:&
# shift_left & (q12 $ q13)
# shift_right & (q13 $ q14))
# 'h'4000 & (count_up & [q0..13]:& /* BIT 14 */
# count_down & ![q0..13]:&
# shift_left & (q13 $ q14)
# shift_right & (q14 $ q15))
# 'h'8000 & (count_up & [q0..14]:& /* BIT 15 (MSB) */
# count_down & ![q0..14]:&
# shift_left & (q14 $ q15)
# shift_right & (q15 $ data_in)) ;
counter.ar = reset_count; /* Resets the Counter */

También podría gustarte