Introducción
Sistemas Digitales
I.1 Definición.
Denominamos sistema digital a aquél que realiza operaciones mediante dígitos, los cuales
usualmente se representan como números binarios. Las principales operaciones son: ingreso,
procesamiento, transmisión, almacenamiento y despliegue de datos digitales.
Los sistemas análogos representan las variables en forma continua, en el tiempo; los digitales
en forma discreta. Los sistemas simbólicos emplean letras o iconos como símbolos no
numéricos.
Los sistemas análogos están siendo reemplazados por sistemas digitales, para esto las
cantidades físicas en forma análoga, por ejemplo: sonidos, imágenes, voltajes, distancias, deben
ser convertidas a representaciones digitales mediante técnicas de aproximación, empleando
dispositivos de conversión análogo-digitales. Primero se toman muestras, luego se convierten
las muestras en números.
El permanente cambio que tiene el estudio de sistemas digitales se debe principalmente a tres
factores: la continua evolución de la tecnología digital que en menor tamaño coloca cada vez
mayor número de componentes más rápidas; el desarrollo de herramientas de ayuda al diseño
digital (CAD) que permiten enfrentar tareas extremadamente complejas; y las nuevas
metodologías de desarrollo de software que facilitan el desarrollo de aplicaciones complejas con
interfases visuales, como las herramientas CAD y los lenguajes de descripción de hardware
(HDL).
Las primeras metodologías de diseño digital, que podríamos denominar clásicas, permiten
comprender los principios de funcionamiento de los sistemas digitales básicos, y pueden ser
desarrolladas empleando papel y lápiz. Emplean los principios teóricos del álgebra de Boole y
algoritmos de minimización. Sin embargo los algoritmos son de tipo no polinomial, y no pueden
ser aplicados a situaciones de mediana complejidad (redes con más de 5 entradas), debido a su
costo exponencial.
Sin embargo, al ser posible enfrentar diseños digitales más complejos, debido a la
tecnología, debieron desarrollarse nuevas heurísticas para representar sistemas digitales,
minimizarlos, y poder implementarlos en base a bloques lógicos determinados. En estos nuevos
Sea un sistema con una entrada E y una salida S, como se muestra en la Figura I.1.
E S
Figura I.1
Las variables E y S sólo pueden tomar los valores discretos: 0, 1, 2, 3. Es decir son variables
discretas multivaluadas.
Figura I.2
También podemos describirla mediante la gráfica que se muestra en la Figura I.3. Puede
notarse que la gráfica no es continua, sólo están definidos puntos en la cuadrícula o reticulado
(lattice). Esto debido a que la definición de la función ya está digitalizada; es decir, representada
por números o dígitos, en sistema decimal, en el ejemplo.
Los puntos podrían ser el resultado de una discretización (tomando cuatro muestras en todo
el rango de variación) y cuantización (asignado los valores numéricos enteros 0, 1, 2 y 3, a los
diferentes niveles) de una señal análoga o continua.
S
3
2
1
E
1 2 3
Figura I.3
Codificación.
E1 S1
E0 S0
Figura I.4
La asociación de los valores 0, 1, 2 y 3 con los vectores booleanos en B2, puede efectuarse de
diferentes maneras. Por ejemplo para el símbolo 0, podemos escoger una de las cuatro
siguientes: {0,0}, {0,1}, {1,0} y {1,1}. Luego para el 1, nos quedan tres posibles; para el 2 sólo
tendremos 2 posibles; y una para el símbolo 0. Es decir, 24 asignaciones de código diferentes.
La tabla de la Figura I.5 muestra seis elecciones de codificación binaria, en las cuales el código
para el símbolo 0 está formado por el vector {0,0}; existen 18 codificaciones adicionales que no
se muestran.
Valor C1 C2 C3 C4 C5 C6
0 00 00 00 00 00 00
1 01 01 10 10 11 11
2 10 11 01 11 01 10
3 11 10 11 01 10 01
Figura I.5
El código C1, tiene una interpretación numérica sencilla. Las secuencias de ceros y unos son
los equivalentes, en el sistema binario, del valor decimal.
En el sistema numérico binario la base numérica es 2, y los dígitos sólo pueden ser 0 y 1. El
equivalente decimal N de un número binario de n dígitos: d n 1d n 2 ...d 2 d1d 0 , se obtiene
empleando:
N d n 1 2n 1
d n 2 2n 2
... d 2 22 d1 21 d 0 20
Así por ejemplo, la secuencia binaria: 111 interpretada como número binario equivale al
número siete decimal: 7 1 22 1 21 1 20 4 2 1
Los números con dos dígitos binarios permiten representar 4 cifras decimales. Conociendo
los tres dígitos binarios, de un número binario de tres dígitos, se puede identificar uno de 8
números decimales representables.
Por ejemplo, si tenemos dos objetos, uno blanco y uno negro, si asociamos valor 1 al objeto
blanco y un 0 al objeto negro, conociendo el valor del dígito binario asociado a una variable
podemos conocer a cual de los dos objetos se hace referencia, mediante dicha variable.
Si se toma la convención de asociar el dato 1 a la ocurrencia del evento: obtener una cara al
arrojar una moneda; y el símbolo 0, si se obtiene sello. Con un bit de información podemos
comunicar a otro el resultado del experimento de arrojar una moneda.
Si son 4 eventos en total, para conocer la ocurrencia de uno determinado de ellos debe
comunicarse dos bits de información. La unidad de información es el bit (binary digit).
Si se tienen 256 personas, puede asignársele a cada una de ellas un nombre en el sistema
binario, puede verse que se requieren 8 bits para esto (log2(256/1) = 8 ). Los nombres binarios
irían en forma ascendente desde el 00000000 hasta el 11111111.
También se define que 1024 Bytes es un KByte, entonces para guardar los nombres de las
100 personas se requieren 4,88 KB.
Tablas de verdad.
E1 E0 S1 S0
0 0 0 1
0 1 1 0
1 0 1 1
1 1 0 0
Figura I.6
Se tienen ahora dos funciones booleanas S1 y S0, en términos de las variables E1 y E0. La
representación de las funciones, mediante la Figura I.6, se denomina tablas de verdad. Se suele
asumir 1 por valor verdadero y 0 por falso, y puede emplearse el álgebra de Boole para
conceptualizar acerca de estas funciones.
En el álgebra de Boole se definen los operadores and y or, mediante las tablas de verdad que
se muestran en la Figura I.7. Las tablas describen la conducta estática de las compuertas; para
estudiar su comportamiento dinámico será preciso introducir el concepto de retardo, que se verá
luego.
Figura I.7
La Figura I.8 muestra los símbolos lógicos para la funciones or y and de dos variables.
and
or
Figura I.8
Figura I.9
A A’
Figura I.10
Empleando los métodos para construir tablas de verdad, de un curso introductorio de álgebra,
podemos elaborar la tabla de la Figura I.11, en la cual el operador and se emplea con la notación
del producto lógico y el or con el operador suma lógica; el complemento de una variable se
anota agregando una comilla simple a la variable.
Figura I.11
Expresiones booleanas.
Comparando las tablas de las Figuras I.6 e I.11, podemos escribir, las expresiones booleanas:
S1 = E1E0’+E1’E0
S0 = E0’
Se considera que dos funciones booleanas que tengan iguales tablas de verdad son
equivalentes; esto se muestra, en las ecuaciones anteriores, introduciendo el operador = para
denotar la equivalencia lógica.
Esquemático.
La Figura I.12 se denomina esquemático o diagrama lógico del sistema descrito por la
Figura I.6. Los puntos de unión se han destacado con un pequeño círculo negro; los puntos en
que se cruzan cables no tienen indicada la conexión.
E1
S1
E0
S0
Figura I.12
Niveles lógicos.
Con los conocimientos de cursos previos de electrónica sabemos que el ruido y las
inexactitudes (valores de las componentes, tolerancias de fabricación, etc.) son inevitables;
debido a esto no es posible reproducir fielmente, en forma repetida, la información almacenada
en el valor de un voltaje. Por esto es preciso diseñar un sistema que tolere determinadas
magnitudes de error para que procesar la información (vía voltajes) sea confiable.
La idea básica es no permitir que un 0 pueda ser confundido con un 1 y viceversa; y que los
dispositivos elementales tengan una alta confiabilidad. Esto lleva a prohibir un rango de valores
entre los asociados al 0 y 1 lógicos, y al mismo tiempo al concepto de rango de valores 0 y 1
válidos.
Zona
prohibida
0 Válido 1 Válido
Volts
Figura I.13
Volts
Vol Vil Vih Voh
Márgenes de ruido
Figura I.14
Los valores de salida deben considerarse asociados a la salida de una componente, y los
valores de entrada asociados a la entrada de una componente.
El diagrama de la Figura I.15, ilustra que VIL debe ser un poco mayor que VOL; permitiendo
absorber las fluctuaciones del voltaje, debidas al ruido causado por diversas fuentes, entre la
salida de una componente y la entrada de la siguiente:
Vruido Vi
V IL
VOL VIL VOL
t
Figura I.15
Dispositivos lógicos.
Un dispositivo básico que acepta una entrada y la deposita en la salida (sin cambios) se
denomina buffer (amortiguador) y queda definido por la siguiente función de transferencia
estática:
Vout
VOH
VIH
Vin Vout
VIL
VOL
Vin
Figura I.16
Los dispositivos deben ser diseñados evitando las áreas grises, que corresponden a entradas
válidas pero salidas inválidas. Se muestra una posible curva que no pasa por las áreas grises. Se
asume que normalmente los voltajes de entrada cumplen con los umbrales, y que sólo cuando
cambia el valor lógico, se ocupa la parte de la curva ubicada entre los umbrales. Como resultado
de esto se advierte que los dispositivos deben tener ganancia y ser no lineales. A la derecha se
muestra un símbolo lógico para el buffer.
Vout
Voh
Vih
Vil
Vin Vout
Vol
Vin
Figura I.17
Retardos de conmutación.
La Figura I.18 muestra la red electrónica que tiene el comportamiento de un inversor en base
a un transistor bipolar. El condensador C, representa la capacidad parásita entre el cable de
salida y la tierra, a ésta debe sumarse la capacidad de entrada del circuito al que esté conectada
la salida del inversor.
Si el voltaje Vin es menor que 0,7 [V], la juntura base emisor no conduce y el transistor está
en corte. Cuando se produce el corte, el voltaje Vout sube hasta Vcc, debido a la carga del
condensador, mediante una exponencial de constante de tiempo RcC. Tenemos luego de un
tiempo, un voltaje bajo en la entrada y uno alto en la salida; en esta situación se tiene un 1
lógico en la salida y el transistor está en un estado de bajo consumo.
+Vcc
Rc
NPN
C Vout
Vin
Figura I.18
Si se aplica un voltaje alto, muy superior a 0,7 y cercano a Vcc, el transistor debe estar
saturado, es decir con un voltaje entre colector y emisor cercano a 0,2 [V]. En estas condiciones
el circuito equivalente del transistor es una fuente continua de 0,2[V], en serie con una
resistencia muy baja, sea esta resistencia Rsat. El condensador, cargado a voltaje Vcc, se descarga
según una exponencial de constante de tiempo RsatC, hasta llegar al voltaje de saturación. Luego
Al proceso de pasar de entrada baja o alta a una salida alta o baja, respectivamente, se lo
denomina conmutación. Este cambio de estado implica que el transistor pasa por su zona lineal
de operación, y durante un breve lapso de tiempo aumentará su consumo de energía.
La Figura I.19 muestra las formas de ondas de los voltajes de entrada y salida de un inversor.
Se advierte que existe un retardo entre el instante en que la entrada toma valor uno lógico y el
instante en que la salida toma valor lógico cero. Se denomina tiempo de retardo de propagación
de alto a bajo (tPDHL). También existe un retardo de propagación, que puede ser diferente al
anterior, cuando la salida pasa de 0 a 1 (tPDLH).
Vin
VIH
VIL
t
tPDHL tPDLH
Vout
VOH
VOL
t
tf tr
Tiempo Tiempo
caída subida
(fall time) (rise time)
Figura I.19
Las formas de ondas que se ilustran en la Figura I.19, son análogas, y son las que mostraría
un osciloscopio. Sin embargo tanto los simuladores como los analizadores lógicos mostrarían
señales estrictamente binarias; esto se debe a que los valores muestreados se almacenan en
forma digital. La Figura I.20, muestra las señales de conmutación, idealizadas por señales
binarias.
Vin
VIH
VIL
t
tPDHL tPDLH
Vout
VOH
VOL
Figura I.20
Perturbaciones, carreras.
Si en el circuito digital de la Figura I.12 aplicamos cambios en las entradas, las salidas
deberían cambiar según la tabla de verdad de la Figura I.6. Debido a los retardos veremos que
estos cambios no se producen inmediatamente. Si suponemos que las entradas E1 y E0 han
estado un largo tiempo con valor 1, ambas salidas estarán en 0. Esta condición se muestra en el
tiempo 0 de la Figura I.21.
t1
E1
t
E0
E1’
E0’
E1E0’
E1’E0
S1=E1’E0+E1E0’
S0
t2
Figura I.21
a
x
Figura I.22
En la Figura I.23 se ilustran las formas de ondas: en la entrada, a la salida del inversor, en la
salida del and, y en la salida del or. Se aprecia que la salida va momentáneamente a cero,
cuando debía permanecer siempre en 1; este efecto se denomina perturbación estática. De
acuerdo al algebra de Boole, la salida x puede escribirse según: x=a+a’=1.
a
t
a’
a+a’
x
t1
Figura I.23
Entonces: los cambios no simultáneos de las entradas, y las operaciones and y or con
operandos iguales a una señal y su complemento, que produzcan una salida, originan cambios
indeseados en la salida de una red combinacional.
La siguiente simulación Verilog (Ver Apéndice 5), genera las formas de ondas, de la Figura
I.24, asumiendo que los retardos de los inversores son de una unidad de tiempo de simulación, y
que las compuertas and y or tienen retardos de dos unidades. Se describe la red combinacional
mediante la interconexión de compuertas de la Figura I.12, mediante el módulo funcioncnt. La
Figura I.24, es generada automáticamente, mediante simulación; la Figura I.21, fue generada
manualmente. El módulo test produce una secuencia de estímulos que genera el archivo
cntmod4.vcd, que emplea un formato estándar para las formas de ondas.
module BancoDePrueba;
wire E1,E0;
wire S1,S0;
funcioncnt f1 (E1,E0,S1,S0);
test t1 (S1,S0,E1,E0);
endmodule
Figura I.24
Flip-flop D.
D Q
Q’
Clk
Figura I.25
Reloj
En un dispositivo real es preciso que no ocurran cambios de la entrada un intervalo antes del
canto de subida del reloj (set-up); y un intervalo después del canto de subida del reloj (hold).
Clk
D
Q
Figura I.26
Las formas de ondas consideran que el valor inicial de Q es cero. Los cambios de las
entradas después del tiempo de hold de un canto de subida, y antes del tiempo de set-up del
próximo canto de subida, no son registrados por el flip-flop; lo que se ilustra en el intervalo t3 de
la Figura I.26.
E0 S0
s0
clk
Figura I.27
Si las entradas S1 y S0 (con mayúsculas) cumplen los requerimientos de set-up y hold, las
salidas s1 y s0 (con minúsculas) experimentan sus cambios luego del canto de subida del reloj, y
permanecen estables entre cantos de subida del reloj.
clk
s 01 11 10
Figura I.28
Debe destacarse que es poco probable el cambio simultáneo de las salidas de flip-flops
diferentes, a pesar de que operen con igual reloj.
Si los circuitos que generan las señales E1 y E0, lo efectúan mediante salidas registradas,
controladas por el mismo reloj, se tienen:
a) Si el tiempo de propagación a través de los flip-flops es mayor que el tiempo de hold, los
cambios (posiblemente no simultáneos) del vector E, se producen con el reloj alto.
b) Las señales S1 y S0 pueden contener cambios no deseados, que deben extinguirse antes
del tiempo de set-up. Si esto no se cumple debe bajarse la frecuencia del reloj.
c) Si las señales S1 y S0 cumplen los requerimientos del tiempo de set-up y hold, los valores
capturados por los flip-flops contendrán en s1 y s0, los valores estables de S1 y S0.
La Figura I.26, muestra que los cambios, de las entradas, entre cantos de subida del reloj no
son considerados para ser grabados; prácticamente son filtrados.
Si en el circuito de la Figura I.27, realimentamos las salidas s hacia las entradas E, se obtiene
el sistema secuencial sincrónico que se muestra en la Figura I.29.
S1
E1 s1
S0
E0 s0
clk
Figura I.29
Supongamos que ambos flip-flops tienen salida 0. Entonces, entre dos cantos de reloj la
salida será s1=0 y s0=0, entonces las entradas a la red combinacional serán E1=0 y E0=0. Lo
11 01
10
Figura I.30
Otra forma de describir la información del diagrama de estados es a través de una tabla de
transiciones, que muestre en una columna el estado presente y en otra, el próximo estado.
Figura I.31
Debido a las realimentaciones, la tabla anterior describe la red combinacional vista al inicio,
en la Figura I.6.
Puede describirse en Verilog la red de la Figura I.29, se ha agregado la señal Resetn, para
colocar la máquina secuencial en el estado inicial s=00.
Figura I.32
La Figura I.32, muestra las formas de ondas producidas con la simulación del contador
módulo 4. Muestra en binario los diferentes valores que toma el vector s, entre cantos de subida
del reloj.
Una generalización permite una visión más profunda de un problema particular. Una
generalización ayuda a diferenciar las propiedades especiales o particulares de las generales.
x P1 P2
E S s
DQ
Clk
Figura I.33
Un mayor grado de generalización se muestra en la Figura I.34, que muestra una red
booleana, formada por la interconexión de redes combinacionales con registros. El diseño de
estas redes, debido a su complejidad, está basado en la descripción de diferentes módulos
mediante lenguajes. Cada módulo es desarrollado y simulado antes de ser integrado como una
parte del sistema mayor. El sistema debe describirse mediante las operaciones de
transformación que efectúan los bloques combinacionales y las reglas para almacenar
confiablemente la información en los registros. Esto suele efectuarse describiendo las
transferencias entre registros; razón por la cual se suele denominar RTL (Register Transfer
Level) a la descripción de sistemas digitales en este nivel.
salidas
entradas
Si todas las señales de sincronización (los clk de los registros) son iguales se dice que el
sistema es sincrónico; en caso contrario el sistema es asincrónico.
Evento
Se denomina evento al cambio de valor de una señal en un instante de tiempo. Pasar de nivel
lógico 1 a 0 se denomina canto de bajada. Un canto de subida se produce cuando la señal pasa
de nivel lógico 0 a 1.
A un evento también se lo denomina mensaje; los valores que toman los eventos suelen
interpretarse como símbolos pertenecientes a un alfabeto.
Máquina abstracta.
Una máquina abstracta es un modelo de computación que establece cómo se generan las
acciones, o eventos de salida, a partir de los mensajes o eventos de entrada.
Mensajes Acciones
Máquina
Figura I.35
Sistemas combinacionales.
Los eventos de entrada pueden tomar los valores: abrir o cerrar. La acción de salida puede
tomar los valores: apagar o encender.
V
L
S2
S1
Figura I.36
S1 S2 L
abrir abrir apagar
abrir cerrar encender
cerrar abrir encender
cerrar cerrar encender
Figura I.37
o alternativamente:
if ( (S1 == abrir ) && (S2 == abrir) ) L = apagar; else L = encender;
Si puede construirse la tabla que relaciona los eventos de entrada con los de salida, el sistema
es combinacional. En la descripción mediante un lenguaje, si sólo se emplean sentencias de
alternativa (if then else, switch) el sistema es combinacional.
Existen sistemas más complejos que los combinacionales, son aquellos que pueden cambiar
sus atributos en función del tiempo (dinámicos).
Estado.
Máquinas de estados.
Transición.
Se denomina transición al cambio de estado del sistema, y ésta debe indicar cómo se pasa de
un estado a otro.
Diagrama de estados.
Figura I.38
El torniquete tiene dos estados: puede estar trabado o destrabado. Cuando el torniquete está
trabado, una persona puede ingresar un boleto, este evento causa que el torniquete pase al estado
destrabado. Estando destrabado, cuando se produce el evento de que una persona pasa, haciendo
girar el torniquete, éste pasa al estado trabado.
En el siguiente diagrama se ilustran las transiciones entre estados, éstas se han identificado
por un par (evento de entrada)/(evento de salida), ilustrando que las salidas están asociadas a las
transiciones (Modelo de Mealy).
Insertar/Destrabar
destrabado trabado
Pasar/Trabar
Figura I.39
El diagrama considera que los mensajes o eventos de entrada ocurren normalmente, según lo
planeado por el diseñador y describen claramente las funciones del sistema en forma precisa,
permitiendo además juzgar si el diseño está o no completo.
Los usuarios podrían gatillar eventos normales en tiempos en los que éstos no se esperan.
Por ejemplo: estando en estado trabado, se podría generar la señal de paso (aplicando fuerza
bruta); o estando destrabado volver insertar un boleto. Estos eventos deben ser tratados en un
diseño real, ojalá en el modelado inicial; su no consideración temprana podría generar un
producto de mala calidad o inútil.
Para resolver la situación podría generarse una alarma en caso de intentar pasar cuando el
torniquete está trabado. Esto implica una acción adicional, y al mismo tiempo la necesidad de
un evento adicional que apague la alarma; o bien la creación de un estado adicional de
violación. Por otro lado, puede bloquearse el ingreso de boletos cuando el torniquete está
destrabado, o bien lo que propondría un ingeniero comercial: prender un aviso luminoso que
diga “gracias”. Lo cual lleva a especificar la acción de apagar dicho letrero, que también debe
agregarse al diagrama.
Insertar/Destrabar
Iniciar
Insertar/Agradecer Pasar/Alarmar
destrabado trabado
Pasar/Trabar
Eventos de
entrada
Estado Pasar Insertar
actual
Trabado Trabado Destrabado
Destrabado Trabado Destrabado
Próximo estado
Figura I.41
Eventos de
entrada
Estado Pasar Insertar
actual
Trabado Alarmar Destrabar
Destrabado Trabar Agradecer
Acciones
Figura I.42
Es posible generar un autómata de estados finitos determinista que tenga las mismas salidas,
para iguales entradas, que uno no determinista.
Tipos de máquinas.
Reloj.
Máquinas secuenciales.
Las máquinas de estados finitos suelen denominarse máquinas secuenciales ya que a partir
de una secuencia ordenada de eventos de entrada, generan una secuencia de estados por los que
pasa la máquina, y a su vez una secuencia de acciones de salida.
Las máquinas secuenciales son un poderoso modelo para implementar esquemas de control
secuencial (dependientes de la historia pasada), tanto en hardware como en software. Facilitan
el diseño de la programación de sistemas multitareas, en tiempo real, utilizando
microcontroladores.
Diseño.
El diseño digital podría definirse como la determinación de las componentes digitales que
realizan las especificaciones de comunicación, control y procesamiento de los datos. Más
específicamente, es descomponer la solución en redes combinacionales y/o secuenciales
organizando jerárquicamente el diseño y empleando efectivamente herramientas
computacionales modernas de ayuda al diseño.
Figura I.43
El diagrama ilustra la estructura jerárquica de los sistemas digitales, en la cual cada nivel
tiene complejidad acotada y además los bloques constructivos básicos se emplean con diferente
propósito.
En el menor nivel los dispositivos están implementados con transistores MOSFET. Estas
componentes primitivas más un sistema para codificar la información en forma digital, permiten
construir los diferentes niveles de un sistema digital.
Figura I.44
Un buen trabajo de diseño implica: poder adaptarse a mejoras tecnológicas, permitir realizar
tareas diferentes con los mismos módulos y ser efectivo en cuanto a costos.
Desarrollar abstracciones de los bloques primitivos, y conocer los principios para organizar
los bloques constructivos básicos en unidades más complejas.
I.6. Resumen.
Se desea mostrar:
Los principios de diseño digital basados en el álgebra de Boole, con utilización de
herramientas computacionales, para minimizar las ecuaciones y analizar el comportamiento
temporal.
El concepto de estado y de máquinas secuenciales.
Cómo especificar, simular y sintetizar los diseños en dispositivos programables y no
programables.
Conviene conocer el diseño en bajo nivel de los subsistemas típicamente usados, de esta
manera se conocerá su funcionalidad, sus alcances, la forma de generalizarlos, y su costo. Luego
las descripciones de la arquitectura pueden realizarse basada en esos módulos.
Un curso básico en sistemas digitales debe profundizar en el diseño de los bloques básicos,
y también capacitar en descomponer un problema en términos de esos bloques. Esto
garantiza plantear arquitecturas con partes que serán sintetizadas eficientemente.
La Figura I.45, muestra el proceso de síntesis como un nivel intermedio, entre las
descripciones de arquitecturas mediante módulos sintetizables (top-down), y el desarrollo de
módulos básicos implementados mediante compuertas y flip-flops (bottom-up).
Arquitectura abstracta
Síntesis
Bloques Básicos
Compuertas
Flip-flops
Figura I.45
Índice general.
INTRODUCCIÓN ................................................................................................................................1
SISTEMAS DIGITALES .....................................................................................................................1
I.1 DEFINICIÓN. ...................................................................................................................................1
I.2 DISEÑO CLÁSICO Y ACTUAL............................................................................................................1
I.3 CONCEPTOS BÁSICOS EN SISTEMAS DIGITALES. ..............................................................................2
Codificación. ..................................................................................................................................3
Sistema numérico binario. ..............................................................................................................4
Información. Bit, Byte. ..................................................................................................................4
Tablas de verdad. ...........................................................................................................................6
Compuertas básicas. Operadores booleanos. ................................................................................6
Expresiones booleanas. ..................................................................................................................7
Esquemático. ..................................................................................................................................8
Niveles lógicos................................................................................................................................8
Dispositivos lógicos. .......................................................................................................................9
Retardos de conmutación. ............................................................................................................11
Perturbaciones, carreras..............................................................................................................13
I.4. SISTEMAS DIGITALES SECUENCIALES...........................................................................................16
Flip-flop D. ...................................................................................................................................16
Reloj .............................................................................................................................................16
Set-up, hold, tiempo de propagación. ...........................................................................................16
Salidas combinacionales sincronizadas por un reloj. ..................................................................17
Realimentaciones. Sistema secuencial sincrónico. .......................................................................18
Generalizaciones. Red booleana. .................................................................................................20
I.5. DEFINICIONES DE ALGUNOS CONCEPTOS GENERALES DE SISTEMAS DIGITALES. ..........................22
Evento ...........................................................................................................................................22
Máquina abstracta. ......................................................................................................................22
Sistemas combinacionales. ...........................................................................................................22
Ejemplo de sistema combinacional. .............................................................................................22
Estado. ..........................................................................................................................................23
Máquinas de estados. ...................................................................................................................23
Transición. ...................................................................................................................................23
Diagrama de estados. ...................................................................................................................24
Ejemplo de máquina de estados. ..................................................................................................24
Lenguajes de descripción de hardware. .......................................................................................27
Autómata de estados finitos determinista. ....................................................................................27
Tipos de máquinas. .......................................................................................................................27
Reloj. ............................................................................................................................................27
Máquinas secuenciales. ................................................................................................................27
Algunas aplicaciones de máquinas secuenciales. ........................................................................27
Diseño. .........................................................................................................................................28
I.6. RESUMEN. ...................................................................................................................................30
ÍNDICE GENERAL. ..............................................................................................................................32
ÍNDICE DE FIGURAS............................................................................................................................33
Índice de figuras.
Sistemas Digitales.
Sinopsis.
Prólogo.
El texto intenta mostrar: Los principios de diseño digital basados en el álgebra de Boole, con
utilización de herramientas computacionales, para minimizar las ecuaciones y analizar el
comportamiento temporal; el concepto de estado y de máquinas secuenciales; y finalmente,
cómo especificar, simular y sintetizar los diseños en dispositivos programables y no
programables.
El permanente cambio que tiene el estudio de sistemas digitales se debe principalmente a tres
factores: la continua evolución de la tecnología digital que en menor tamaño coloca cada vez
mayor número de componentes más rápidas; el desarrollo de herramientas de ayuda al diseño
digital (CAD) que permiten enfrentar tareas extremadamente complejas; y finalmente, las
nuevas metodologías de desarrollo de software, que facilitan el desarrollo de aplicaciones
Las primeras metodologías de diseño digital, que podríamos denominar clásicas, permiten
comprender los principios de funcionamiento de los sistemas digitales básicos, y pueden ser
desarrolladas usando papel y lápiz. Emplean los principios teóricos del álgebra de Boole y
métodos de minimización de funciones booleanas; sin embargo, los algoritmos son de tipo no
polinomial, y no pueden ser aplicados a situaciones de mediana complejidad (redes con más de
5 entradas), debido a su costo exponencial.
Sin embargo, al ser posible enfrentar diseños digitales más complejos, debido a la tecnología,
debieron desarrollarse nuevas heurísticas para representar sistemas digitales, minimizarlos, y
poder implementarlos en base a bloques lógicos determinados. En estos nuevos algoritmos,
están basadas las actuales herramientas CAD; su exposición y estudio, más que a un curso
básico de sistemas digitales, corresponden a disciplinas de programación, estructuras de datos y
algoritmos. Actualmente el diseño, la simulación y la implementación o síntesis de sistemas
digitales se realizan mediante complejos y numerosos algoritmos incrustados dentro de las
herramientas computacionales de apoyo al diseño.
A través del texto se muestra que conviene conocer el diseño en bajo nivel de los subsistemas
típicamente usados; de esta manera se conocerá su funcionalidad, sus alcances, la forma de
generalizarlos, y su costo. Luego las descripciones de arquitecturas más complejas pueden
realizarse basada en esos módulos.
Un texto actual en sistemas digitales debe profundizar en el diseño de los bloques básicos, y
también capacitar en descomponer un problema en términos de esos bloques. Esto garantiza
plantear arquitecturas con partes que serán sintetizadas eficientemente. De esta forma se define
el diseño como: Desarrollar abstracciones de los bloques primitivos, y conocer los principios
para organizar los bloques constructivos básicos en unidades más complejas.
Por las razones anteriores, el texto expone los principios de diseño digital basándose en las
técnicas clásicas, que pueden ser asimiladas con ejercitación basada en métodos para papel y
lápiz; y en forma paralela se introduce la utilización de Verilog en los diferentes niveles del
diseño digital.
La Figura P1, muestra el proceso de síntesis como un nivel intermedio, entre las descripciones
de arquitecturas mediante módulos sintetizables (top-down), y el desarrollo de módulo básicos
implementados mediante compuertas y flip-flops (bottom-up). Los lenguajes de descripción de
hardware, como Verilog, permiten las descripciones y simulaciones en los diferentes niveles,
dando homogeneidad al proceso de diseño.
Arquitectura abstracta
Síntesis
Bloques Básicos
Compuertas
Flip-flops
Figura P1.
Contenidos.
El Capítulo 4 define y utiliza n-cubos para ilustrar los principios de minimización de funciones
booleanas. Define implicantes e implicantes primos e introduce la matriz de coberturas como
representación matricial de los cubos o implicantes.
El Capítulo 13 muestra los principios de diseño de los principales bloques básicos secuenciales:
contadores, registros de desplazamiento y almacenamiento. Introduce metodologías de diseño,
de sistemas sincrónicos, basadas en dispositivos programables y el uso de un secuenciador para
implementar máquinas de estado.
El Capítulo 15 describe registros, buses y memorias, creando un vínculo para cursos sobre
estructuras de computadores.
El Apéndice 1, expone en detalle el álgebra de Boole, demostrando los principales teoremas que
se usarán en el texto. Se incluye un método de deducción natural basado en reglas de inferencia
y la exposición de los diferentes silogismos.
El Apéndice 2, expone el uso del lenguaje Abel, como una muestra de los primeros lenguajes de
apoyo al diseño digital.
El Apéndice 5, muy extenso, es un texto adicional sobre el uso de Verilog, como herramienta
actual de diseño y simulación de sistemas digitales. Se exponen los fundamentos de la
simulación orientada a eventos y se dan numerosos ejemplos de sistemas combinacionales y
secuenciales. Al final se exploran las herramientas de síntesis basadas en tablas de búsqueda y
en bloques de ram y registros de desplazamiento.
Capítulo 1
Funciones Booleanas
Cada salida de un sistema digital combinacional puede describirse por una función booleana
de sus variables de entrada. Es decir, las salidas de una red combinacional dependen solamente
de sus entradas. Lo anterior se considera la definición de un sistema digital combinacional.
1.1. Definiciones
i) Una variable booleana es un símbolo, el cual puede ser sustituido por un elemento del
conjunto B={0,1}. Una constante booleana es un valor perteneciente al conjunto {0,1}.
ii) El elemento que es sustituido por el símbolo de la variable se llama el valor de la variable.
iii) Una función booleana de n variables f ( x1 , x2 ,..., xn ) , es un mapeo o correspondencia que
asocia un valor booleano a f, con cada una de las posibles combinaciones de valores que
pueden tomar las variables.
iv) Una expresión o fórmula booleana queda definida, recursivamente, por las reglas:
a) Constantes y variables son expresiones.
b) Si x e y son expresiones, entonces:
x+y, x·y, x’, y’, (x) también son expresiones.
v) Una función booleana es una función f ( x1 , x2 ,..., xn ) , para la cual existe una expresión
E ( x1 , x2 ,..., xn ) , tal que:
f ( x1 , x2 ,..., xn ) E ( x1 , x2 ,..., xn ) (1.1)
vii) Dos expresiones son equivalentes si una puede ser obtenida a partir de la otra mediante un
número finito de aplicaciones de los postulados o teoremas. O bien si tienen las mismas tablas
de verdad.
Para x = (x1, x2), podemos definir una función booleana f de dos variables según:
f ( x) : B 2 B (1.3)
f ( x) : B n B (1.4)
El conjunto uno u “on” de f puede definirse como los puntos de B n que se mapean a 1:
f1 f 1
(1) x | f ( x) 1 (1.5)
El conjunto cero u “off” de f puede definirse como los puntos de B n que se mapean a 0:
f0 f 1
(0) x | f ( x) 0 (1.6)
f ( x) g ( x) (1.7)
1.3.1. Expresiones.
La función puede evaluarse para las diferentes combinaciones de valores que tomen las
variables. Se ilustra la evaluación de la función para A = 1, B = 0 y C = 0.
f( 1, 0, 0) = 1 0 + 1’ 0 + 1 0’
= 0 +0 0+1 1
= 1
Esto nos lleva al problema de síntesis lógica que consiste en encontrar la “mejor” expresión
para representar a una función.
La mayor ventaja de esta representación es que puede ser muy compacta y facilita la
manipulación matemática. Sin embargo resulta difícil el tratamiento algorítmico.
A B C f
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 0
1 1 0 1
1 1 1 1
Sin embargo a medida que el número de variables aumenta su uso se torna impracticable. El
crecimiento exponencial del número de renglones, ya que éstos se duplican al aumentar en una
variable, impiden que esta representación se emplee para desarrollar algoritmos
computacionales eficientes.
Una variante de las tablas de verdad son las matrices de cobertura que se desarrollan en
4.6.4.
NOT
AND NAND
D Q
OR NOR
Los símbolos lógicos anteriores representan a las funciones booleanas básicas, cuyas
definiciones se presentan en 1.4.2.
La Figura 1.3 ilustra las relaciones geométricas de los símbolos IEEE para las compuertas
lógicas elementales.
26
19
26
5 10 13
4
26
26
Existen múltiples esquemáticos que pueden representar la misma función. La ventaja de esta
representación es que está asociada a la implementación.
Los esquemáticos pueden describirse mediante secuencias de texto, que especifican las
compuertas y los cables que las interconectan. Se denominan netlist a estas representaciones.
Síntesis lógica.
El problema de síntesis lógica consiste en encontrar un circuito C(G, A), formado por un
conjunto G de compuertas y flip-flops, y un conjunto A de alambres o elementos orientados que
interconectan las compuertas y flip-flops.
Los cambios de f no están alineados con los cambios de las entradas, debido a que toma
tiempo para que una compuerta cambie su estado. Es similar a una tabla de verdad, pero
horizontal.
Nótese que entre los tiempos 10 y 20, la señal f debería estar en 1 lógico(A=1, C'=1), sin
embargo esto ocurre un poco después (tipo 2 unidades). Esto se debe al retardo de propagación
a través de las compuertas.
También se aprecia, en la gráfica de la Figura 1.5, que la salida tiene una caída a cero, un
poco después del tiempo 40; como se verá después, es una perturbación.
En el tiempo cercano a cero existe un valor no lógico asociado a f, esto es debido a que el
simulador no puede conocer la salida hasta que los valores iniciales se hayan propagado a través
de las compuertas.
Las formas de ondas pueden también visualizarse mediante un analizador lógico, o con un
osciloscopio.
Retardos de propagación.
Existe un retardo entre la salida y la entrada de una compuerta, que se denomina retardo de
propagación.
La Figura 1.6, muestra las formas de ondas a la entrada y salida de un inversor, en las que se
han definido los retardos de propagación (propagation delay) de un canto de subida y de un
canto de bajada. Al mismo tiempo se definen los tiempos de subida y de bajada.
Los retardos de propagación han sido definidos como cotas superiores de retardos entre
entradas válidas y salidas válidas.
Vin
VIH
VIL
t
tPDHL tPDLH
Vout
VOH
VOL
t
tf tr
Tiempo caída Tiempo subida
(fall time) (rise time)
Vin
VIH
VIL
t
Vout tCDHL tCDLH
VOH
VOL
t
Figura 1.7. Tiempos de contaminación.
La Figura 1.8, muestra las formas de ondas idealizadas en las entradas y salidas de los
inversores. Nótese que los tiempos de propagación son acumulativos en conexiones en cascada.
A1 A2 A3
A1
A2
A3
A A’ A’ A
A A
A’ A’
A
A’
A
A’
A
A’
A
A’
1.3.7. N-cubos.
Para sistemas reales se emplean aplicaciones computacionales que emplean lenguajes para la
descripción del hardware (HDL Hardware Description Language).
n N 2n 22
n
0 1 2
1 2 4
2 4 16
3 8 256
4 16 65536
... ...
El caso n = 0 se interpreta como una función descrita por 0 variables; es decir por una
constante. En esta situación existe sólo un valor posible (N=1) y como la constante puede ser 0
ó 1 el número de funciones de cero variables es 2.
Para n = 2 las tablas de verdad tienen cuatro renglones. Los cuatro casilleros de una función
pueden llenarse de 16 formas, las que se muestran en la siguiente tabla.
Las funciones se han numerado, en binario, considerando el primer renglón como el dígito
menos significativo. Por ejemplo: 0111 equivale a 7, en sistema binario. Lo cual puede verse
de la siguiente relación: 0 23 +1 22 + 1 21 +1 20 = 7
f0 = 0 f8 = AB
f1 = A'B' = (A + B)' f9 = A'B' + AB
f2 = A'B f10 = A'B + AB = B
f3 = A'B' + A'B = A' f11 = A'B' + A'B + AB = A' + B
f4 = AB' f12 = AB' + AB = A
f5 = A'B' + AB' = B' f13 = A'B' + AB' + AB = A + B'
f6 = A'B + AB' f14 = A'B + AB' + AB = A + B
f7 = A'B' + A'B + AB' = A' + B' = (AB)' f15 = A'B' + A'B + AB' + AB = 1
Las diferentes expresiones pueden comprobarse verificando que se satisfacen las tablas de
verdad de la Figura 1.11.
Algunas de estas funciones son tan utilizadas, que se las reconoce con un nombre.
Definiciones de funciones lógicas de dos variables.
f1 (A, B) = nor (A, B) = A B
f 8 (A, B) = and (A, B) = A B
f 6 (A, B) = xor (A, B) = A B (1.9)
f 7 (A, B) = nand (A, B) = A B
f14 (A, B) = or (A, B) = A + B
La función 6, se denomina xor, por or exclusivo. Toma valor verdadero si los valores lógicos
de A y B son diferentes; por esto también se la denomina desigualdad o diferencia.
La función 9 se denomina xnor. Toma valor verdadero si los valores lógicos de A y B son
iguales. Por esto se la denomina igualdad o coincidencia .
La función 9 se denomina equivalencia lógica o bicondicional; la función 11 es la
implicancia lógica o condicional.
f11 (A,B) = A B =A B
A B OR XOR
0 0 0 0
0 1 1 1
1 0 1 1
1 1 1 0
A 0=A
A 1 =A
A A=0
A A=1
Por lo tanto un circuito combinacional puede construirse usando sólo compuertas AND, OR
y NOT.
nand ( A, B) AB
nand ( A, A) A
nand ( A, B ) A B
También la función NOR es funcionalmente completa. Esto puede verse observando que la
función nor, genera el complemento de una variable, y también el or y el and de dos variables.
nor ( A, B) A B
nor ( A, A) A
nor ( A, B ) AB
Generalización para funciones de más de dos variables.
Algunas funciones pueden generalizarse para más de dos variables, por ejemplo:
La función xor para n variables puede generalizarse, estableciendo que la función toma valor
uno si se tiene un número impar de variables que toman valores iguales a 1; y toma valor cero si
el número de variables que toman valor 1 es par.
(Taub): En un estante hay 5 libros (v, w, x, y, z) que se pueden tomar cumpliendo las
siguientes reglas:
a) Se seleccionan v o w o ambos
b) Se seleccionan x o z pero no ambos
c) se selecciona v y z juntos, o bien una selección que no incluya a ninguno de ellos
d) si se selecciona y, también debe seleccionarse z
e) si se selecciona a w, también debe seleccionarse a v e y.
Expresar cómo seleccionar un grupo de libros cumpliendo las reglas anteriores.
Solución.
Sean:
u la proposición lógica que indica que la selección de libros cumple las reglas
el nombre del libro es la proposición lógica que indica que se tomó dicho libro para formar
la selección.
Como las reglas de selección deben cumplirse simultáneamente, debe entenderse que debe
cumplirse la primera regla y la segunda, y así sucesivamente.
v z regla c)
0 0 1
0 1 0
1 0 0
1 1 1
Es decir: (v z)'
Una frase alternativa para (w' +y) es: si no se selecciona w, la selección de y es opcional.
Ejemplo 1.2.
(Dietmeyer). Tres interruptores(a, b, c) controlan dos ampolletas (una roja R, y otra verde V)
del modo siguiente:
a) Cuando los tres interruptores están cerrados, se enciende la luz roja.
b) Cuando el interruptor A está abierto y B o C están cerrados se enciende la luz verde.
c) No deben encenderse ambas ampolletas a la vez.
d) En el resto de los casos la roja debe encenderse, excepto cuando los tres interruptores están
abiertos, en este caso no debe encenderse ninguna ampolleta.
Solución:
A B C R V
0 0 0 0 0 por condición e
0 0 1 0 1
0 1 0 0 1
0 1 1 0 1 por condición b.
1 0 0 1 0
1 0 1 1 0
1 1 0 1 0 por condición c
1 1 1 1 0
Se advierte que si no se hubiese dado, por ejemplo, la especificación c), el problema queda
indeterminado. En estos casos es preciso efectuar suposiciones o agregar especificaciones.
Por esto podría decirse que una tabla de verdad es una especificación formal.
Una vez que se tiene la tabla pueden encontrarse las expresiones para R y V en función de A,
B y C.
Puede comprobarse que cada uno de la función está asociado a un producto lógico de las
variables A, B y C. Y que la función es la suma lógica de esos productos, se tiene entonces que:
R = A.
V = A'(B +C)
Este teorema permite calcular la función dual ( fd) de una función f. Debe notarse que no se
intercambian las constantes y los operadores.
Demostración por inducción perfecta de la primera proposición. Se analizan todos los casos
que se presentan cuando la variable x1 toma todos los valores que le son posibles.
Considerando:
x1 f ( x1 ,..., xn ) x1 f (0, x2 ,..., xn )
Cuando x1 = 1, entonces:
f ( 1,x2 ,...,x n ) 1 f ( 1,x2 ,...,x n ) 0 f ( 0,x2 ,...,x n )
La repetida aplicación de este teorema permite representar una función de n variables como
una suma de productos o un producto de sumas.
Ejemplo 1.3.
En desarrollos de minimización se clasifican las funciones, dependiendo de cómo aparecen
las variables en una forma suma de productos.
Criterios de Reducción.
Cada función tiene una y sólo una tabla de verdad asociada; sin embargo pueden escribirse
diferentes expresiones booleanas para la misma función. Esto implica diferente costo.
Ejemplo 1.4.
Es usual asumir que se dispone de las variables y sus complementos como entradas de una
red combinacional, por esta razón se cuentan los literales.
J Q D Q
CP _ _
K Q CP Q
A A'
A
Figura 1.17. Entradas complementadas
Ejemplo 1.5.
B f
De este modo todas las compuertas empleadas no tienen más de dos entradas, según puede
verse en el esquema de la Figura 1.19:
A
f
B
Los circuitos lógicos que tienen igual tabla de verdad son equivalentes, pero pueden tener
diferente costo, en tiempo o en espacio.
Existen diversas herramientas para explorar el compromiso entre retardos y tamaño, que
permiten generar automáticamente diferentes soluciones, empleando minimización lógica para
reducir la complejidad espacial y optimización de los retardos para aumentar la velocidad de
respuesta.
Índice general.
CAPÍTULO 1.........................................................................................................................................1
FUNCIONES BOOLEANAS ...............................................................................................................1
1.1. DEFINICIONES ...............................................................................................................................1
1.2. ESPACIOS Y FUNCIONES BOOLEANAS............................................................................................2
1.3. REPRESENTACIÓN DE FUNCIONES BOOLEANAS ............................................................................3
1.3.1. Expresiones. .........................................................................................................................3
1.3.2. Tabla de verdad ....................................................................................................................3
1.3.3. Esquema Lógico. ..................................................................................................................4
Símbolos de compuertas básicas (gates) .................................................................................................... 4
Esquemático red digital.............................................................................................................................. 5
Síntesis lógica. ........................................................................................................................................... 5
1.3.4. Diagrama Temporal. ............................................................................................................5
Retardos de propagación. ........................................................................................................................... 6
Perturbaciones............................................................................................................................................ 8
1.3.5. Diagramas de Venn. .............................................................................................................9
1.3.6. Mapas de Karnaugh. ..........................................................................................................10
1.3.7. N-cubos...............................................................................................................................10
1.3.8. Lenguajes de descripción de hardware. .............................................................................10
1.4. FUNCIONES DE VARIAS VARIABLES. ............................................................................................10
1.4.1 Funciones de n variables. ....................................................................................................10
1.4.2 Funciones de dos variables. ................................................................................................11
Definiciones de funciones lógicas de dos variables. ................................................................................ 11
Conjuntos Funcionalmente Completos. ................................................................................................... 13
Generalización para funciones de más de dos variables........................................................................... 13
1.5. FORMULACIÓN DE EXPRESIONES BOOLEANAS.............................................................................13
Ejemplo 1.1. .................................................................................................................................14
Ejemplo 1.2. .................................................................................................................................15
1.6. TEOREMAS RELATIVOS A FUNCIONES DE VARIAS VARIABLES. ....................................................16
T.16 Función Dual .......................................................................................................................16
T.17 Reducción. ............................................................................................................................17
T.18 Teorema de expansión de Shannon. .....................................................................................17
Ejemplo 1.3. ............................................................................................................................................. 18
1.7. MINIMIZACIÓN (REDUCCIÓN O SIMPLIFICACIÓN) DE FUNCIONES. ...............................................18
Criterios de Reducción. ................................................................................................................18
Ejemplo 1.4. .................................................................................................................................19
Ejemplo 1.5. .................................................................................................................................20
ÍNDICE GENERAL. ..............................................................................................................................22
ÍNDICE DE FIGURAS ...........................................................................................................................23
Índice de Figuras
Capítulo 2
Existen dos formas básicas de expresiones booleanas que pueden ser implementadas en dos
niveles de compuertas.
Existen formas híbridas que son mezclas de las dos anteriores, y que en general tienen
representación en redes con más de dos niveles de compuertas.
Las formas híbridas se pueden reducir a una de las anteriores, aplicando postulados y
teoremas.
Ejemplo 3: AB(C+D)+E es una forma híbrida, de 5 literales, 8 entradas y 3 niveles que
puede ser representada como suma de productos según: ABC+ABD+E, con 7 literales, 9
entradas y 2 niveles. La forma híbrida tiene menor costo espacial, pero mayor costo temporal.
Toda expresión booleana puede ser representada en estas dos formas básicas.
Por ejemplo para el Ejemplo 1, se tiene la forma producto de sumas: ( A B )(C D)( A C )
con 6 literales y 9 entradas, que es de menor costo. La equivalencia entre ambas formas puede
ser demostrada aplicando los postulados y teoremas.
También se tiene para el Ejemplo 2, la forma equivalente según suma de productos:
A ' B ' C ' AC BD CD , con 9 literales y 13 entradas, que es de mayor costo. En este caso también
se tiene la forma equivalente: A ' B ' C ' AC BD A ' D .
Una forma canónica destaca las componentes más primitivas de una expresión.
Existe sólo una forma de escribir la tabla de verdad de una función y sólo una forma
canónica, pero existen diversas representaciones de la función, mediante esquemáticos o
expresiones booleanas.
Los términos elementales con los que se construyen las formas canónicas se denominan
mintérminos y maxtérminos. Una forma canónica no es una expresión mínima.
2.2. Mintérminos
Debe notarse que cada renglón de una tabla de verdad está asociado a un y sólo un
mintérmino.
Una función booleana puede describirse por la suma de los mintérminos que la constituyen.
Debe destacarse que es importante el orden de las variables antes de asignar códigos
binarios.
La tabla de verdad de un mintérmino contiene uno y sólo un valor lógico "1"; el resto son
"0"s. La posición del "1", define unívocamente un renglón. Cada columna de un mintérmino, a
través de la operación OR, deja un uno, en un renglón determinado de la columna de f.
La suma lógica de los mintérminos no incluidos en la sumatoria que describe a f, son los
mintérminos de la función complementada, en el caso del ejemplo anterior:
f m(0,1, 3, 4, 5, 7)
2.3. Maxtérmino.
Es una suma lógica que contiene todas las variables, pudiendo éstas estar o no
complementadas.
El código decimal para identificar a los maxtérminos se obtiene, una vez ordenadas las
variables dentro de una suma de acuerdo a cierto criterio, asignando un "0" a cada variable no
complementada y un "1" a las variables complementadas. Debe notarse que esta asignación es
diferente (dual) de la elegida para mintérminos.
Una función puede describirse como el producto de los maxtérminos que la constituyen.
Cada maxtérmino asegura un cero de la función en un determinado renglón.
En general: f Mi
Es una forma particular de producto de sumas. También puede abreviarse mediante una lista
de los números decimales de los maxtérminos.
Se tiene:
# ABC f M2 M6
0 000 1 1 1
1 001 1 1 1
2 010 0 0 1
3 011 1 1 1
4 100 1 1 1
5 101 1 1 1
6 110 0 1 0
7 111 1 1 1
Relaciones
Se puede escribir la función complementada, como la suma de los mintérminos que no están
presentes en la función, es decir: f m0 m1 m4 m5
Aplicando De Morgan: f f m0 m1 m4 m5
Cualquier función booleana puede ser representada en forma canónica. El proceso de obtener
la forma canónica se denomina expansión.
Un método directo consiste en obtener la tabla de verdad, y luego identificar los mintérminos
o los maxtérminos. Otra posibilidad, que se estudia a continuación, es mediante un desarrollo
algebraico basado en los postulados y teoremas del álgebra de Boole.
f (a, b, c) m(2,4,5,6,7)
Dada una función mediante una suma de productos, ésta puede implementarse usando un
OR de AND's.
Ejemplo 2.9. OR de ANDs
Una red es de n niveles, cuando una señal de entrada debe pasar a través de n compuertas
para llegar a la salida; la señal de entrada que recorra más compuertas hasta llegar a la salida, es
la que define la cantidad de niveles; el recorrido se denomina ruta crítica y define el retardo de
propagación de la red. Debe notarse que se considera que se dispone de b' (si sólo se dispone de
b, se requiere un nivel adicional).
Gráficamente:
a
b'
f
c
d
Dada una función mediante un producto de sumas, puede lograrse una implementación en
dos niveles; usando un AND de OR's.
Ejemplo: f (A B ) (C D)
Se obtiene:
A
B' f
C
D
Algebraicamente:
f ( A B ) (C D) ; involución
( A B ) (C D) ; De Morgan
Resulta:
A
B' f
C
D
| Primer Nivel | Segundo Nivel |
El circuito anterior, puede obtenerse directamente a partir del basado en AND y OR, de la
Figura 2.7, usando el equivalente gráfico del teorema de De Morgan, que se muestra en la
Figura 2.9.
A A
B' f B' f
C C
D D
A A'
B' f B f'
C C'
D D'
Debe notarse que la implementación como suma de productos tiene todas las variables de
entrada y salida complementadas, respecto a la forma producto de sumas. Es decir, plantea la
expresión en términos de los complementos de las variables originales.
También puede convertirse una expresión tipo suma de productos a la forma producto de
sumas. En un esquemático, se cambian los ANDs del primer nivel por ORs; y el OR del
segundo nivel por un AND; además se complementan las variables de entrada y la de salida.
En la práctica, las compuertas lógicas tienen ciertas características. Una de ellas es el fan-in,
que es el número de entradas de una compuerta.
A menor número de niveles se tendrá que ocupar compuertas de mayor fan-in, lo que
generalmente implica ocupar más pastillas en una implementación.
f f1 f2
0 0 1
1 1 1
0 1 0
1 1 1
1 1 1
1 1 1
0 1 0
0 0 1
f f1 f2
0 0 0
1 1 0
0 0 0
1 0 1
1 0 1
1 1 0
0 0 0
0 0 0
Ambas funciones pueden representarse como suma de mintérminos; es decir, como suma de
productos.
A muchas personas les resulta más sencillo formar agrupaciones de unos. Entonces:
agrupando los unos de la función se logra la forma suma de productos; y agrupando los unos de
la función complementada, se genera mediante De Morgan la forma producto de sumas, ya que
esto equivale a agrupar los ceros de la función. Luego debe compararse el costo de ambos
diseños para obtener el mínimo.
Entonces con {B=0, C=1} o {B=0 y D=0}, se presenta perturbación, en canto de subida de A
atrasado, ver Figura 1.9.
A
B
C
D P = A'(AB' + C'D)
Las carreras entre los cantos, pueden evitarse en este caso cambiando el diseño.
Minimizando se logra un diseño libre de perturbaciones: P = A' C' D
Para esto se usa el teorema del consenso, que para tres variables puede escribirse:
AB AC AB AC BC
La condición para la perturbación, se produce con B=0 y C=0, cuando ocurre un canto de
subida de A (con A’ atrasada respecto de A); la salida del and equivale al producto: AA’.
A’
C f2
En este caso, cuando B=0 y C=0, la salida será: f ( A 0)( A ' 0)(0 0) 0 , y no se
produce perturbación.
B f
Para determinar cuándo se produce, es preciso conocer cual de las señales llega primero. En el
caso de la Figura 2.17, B llega al OR de la salida, con un retardo de propagación, a través del
AND; y B’ pasando a través del NOT llega al OR de salida, con dos retardos de propagación.
Como B' está atrasada respecto de B, la perturbación se produce en el canto de bajada de B.
Ver Figura 1.9.
AB
C 00 01 11 10
0 2 6 4
0 1
1 3 7 5
1 1 1 1
f(A, B, C)=A'B'+BC
Figura 2.18. Visualización de perturbaciones en mapas.
a
a’
f1
f2
f
f = (A+A’)(A+A’)
Resumiendo se puede decir que una perturbación es dinámica si ocurre en una conmutación
de la salida. Se espera una sola transición de la salida y se producen oscilaciones de ésta.
f2
D
A
A’
f1
f
El caso dual del anterior, se produce para una red combinacional en la que se produzca en la
salida: f=AA’ + A’.
2.6.5.4. Carreras aleatorias de las entradas. Perturbación de la función.
En redes combinacionales también pueden producirse perturbaciones si varias de las entradas
tienen cambios casi simultáneos.
f(0, 0, 0, 0) a f(0, 1, 0, 1)
f(A, B, C, D)
Una forma de controlar las carreras de las entradas es la habilitación del conjunto durante un
breve lapso de tiempo, luego de un tiempo de ocurrido el cambio de las entradas.
A, B, C, D
p
Ejemplo 2.13.
La red combinacional, de la Figura 2.27, es alimentada por un contador que genera las
señales A, B, C y D. Éstas cambian casi al mismo tiempo; es decir, varias tienen cantos que
TP1
TP2
Problemas resueltos
f (A B) C (D E) F
A'
B'
C
f
F'
D
E
A'
B'
C
f
F'
D
E
Nótese que las variables de entrada, que recorren un número impar de compuertas para llegar
a la salida, deben complementarse. Es el caso de A, B, D y E en el ejemplo anterior.
Asumiendo que ya está simplificada lógicamente como suma de productos, se observa que
requiere una compuerta OR de 7 entradas (fan-in = 7), también se requieren 6 compuertas AND
de 3 entradas. La expresión está formada por 19 literales. Un diseño directo requiere 25 entradas
(7 al OR de salida y 18 a los ANDs). Esta implementación tiene alto costo y es en dos niveles.
X = (A + B + C) (D + E) F + G
Para encontrar los factores adecuados pueden ayudar programas de minimización multinivel.
A B C f
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 0
A S
B
C' f
A S
B
f
C
Implementación que emplea 2 compuertas, dos niveles, 4 entradas. Una de las compuertas es
un OR exclusivo que requiere mayor costo interno.
Dependiendo de la forma de la expresión, las formas mínimas pueden tener costos diferentes,
como se aprecia en el siguiente ejemplo.
Expresar como suma de mintérminos usando teorema de expansión. Exprese los mintérminos
mediante números decimales, ordenados en forma ascendente.
Con f(a, b, c, d) = a + b’ c
Solución:
Para el primer término se tiene la siguiente expansión:
a = ab + ab’ = abc + abc’ + ab’c + ab’c’
a = abcd + abcd’ + abc’d + abc’d’ + ab’cd + ab’cd’ + ab’c’d + ab’c’d’
a = m(15, 14, 13, 12, 11, 10, 9, 8)
Para el segundo término, la expansión resulta:
b’c = ab’c + a’b’c = ab’cd + ab’cd’ + a’b’cd + a’b’cd’ = m( 11, 10, 3, 2)
Entonces: f(a, b, c, d) = m(15, 14, 13, 12, 11, 10, 9, 8) + m( 11, 10, 3, 2)
Como m10 + m10 = m10 por idempotencia, y también: m11 + m11 = m11
Problema 2.7.
Se tiene una red combinacional con tres entradas (D2, D1, D0) y ocho salidas: (L7, L6, L5, L4,
L3, L2, L1, L0).
Los tres dígitos binarios pueden leerse en su equivalente decimal (n), considerando que D2
es la cifra más significativa y D0 la menos significativa.
Cuando en la entrada se tiene el número n: la salida Ln está baja (0 lógico) y el resto de las
salidas están altas (1 lógico).
D2 L7
L6
D1 ...
D0 L1
L0
Determinar:
a) Tabla de verdad.
b) Expresión lógica mínima para L5 como suma de productos, efectuando reducciones
algebraicas.
c) Expresión lógica mínima para L5 como producto de sumas, efectuando reducciones
algebraicas.
Solución.
D2 D1 D0 L7 L6 L5 L4 L3 L2 L1 L0
0 0 0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1 1 0 1
0 1 0 1 1 1 1 1 0 1 1
0 1 1 1 1 1 1 0 1 1 1
1 0 0 1 1 1 0 1 1 1 1
1 0 1 1 1 0 1 1 1 1 1
1 1 0 1 0 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1
L5 = m0+m1+m2+m3+m4+m6+m7
L5 = m0+m0+m1+m2+m2+m2+m3+m3+m4+m6+m6+m7 Por idempotencia. T8.
L5 = (m0+m2+m4+m6) + (m0+m1+m2+m3) + (m2+m3+m6+m7) Por conmutación. P4.
Aplicando repetidamente fusión: T14
m(0, 2, 4, 6) = (D2’D1’D0’ + D2’D1D0’) +(D2D1’D0’ + D2D1D0’)
= D2’D0’ + D2D0’ = D0’
L5 = M5 = D2’ + D1 + D0’
En este caso, ambos diseños resultan de igual complejidad (y con la misma expresión).
Problema 2.8.
Se tiene la función:
f(a, b, c) = M(1,2,3,6) + m(5, 7)
Solución:
a) La tabla de verdad para f, resulta de la suma lógica de las columnas asociadas al producto
de maxtérminos y a la suma de mintérminos. Con n el código decimal para el mintérmino.
a b c M(1,2,3,6) m(5, 7) f n
0 0 0 1 0 1 0
0 0 1 0 0 0 1
0 1 0 0 0 0 2
0 1 1 0 0 0 3
1 0 0 1 0 1 4
1 0 1 1 1 1 5
1 1 0 0 0 0 6
1 1 1 1 1 1 7
Problema 2.9.
Se tiene la función:
f(a, b, c, d) = ( a b) c
Solución:
a b c d a b (a b) c n
0 0 0 0 0 0 0
0 0 0 1 0 0 1
0 0 1 0 0 1 2
0 0 1 1 0 1 3
0 1 0 0 1 1 4
0 1 0 1 1 1 5
0 1 1 0 1 0 6
0 1 1 1 1 0 7
1 0 0 0 1 1 8
1 0 0 1 1 1 9
1 0 1 0 1 0 10
1 0 1 1 1 0 11
1 1 0 0 0 0 12
1 1 0 1 0 0 13
1 1 1 0 0 1 14
1 1 1 1 0 1 15
Figura P2.12 Tabla de verdad Problema 2.9.
Otro desarrollo:
Se tiene por definición:
a b = ab’ +a’ b
Luego: ( a b ) c = (ab’ +a’ b)c’ + (ab’ +a’ b)’c = ab’c’ +a’bc’ + ab’c +a’b’c Por P6.
f = ab’c’d +ab’c’d’ + a’bc’d + a’bc’d’ + ab’cd + ab’cd’ + a’b’cd + a’b’cd’ por T14.
f = m9 + m8 + m5 + m4 + m11 + m10 + m3 + m2
Conmutando se obtiene igual resultado que el anterior.
Los números de los maxtérminos son los números de los mintérminos que no están
presentes, en la expresión anterior. Con esta información puede escribirse la tabla de verdad.
Problema 2.10.
Solución.
a) m2 = A'BC' ; m3 = A'BC ;m5 = AB'C ; m7 = ABC
Los unos de f están asociados a los mintérminos presentes. El mintérmino 2 en decimal
equivale a la combinación de valores 010 de las variables ABC, y por lo tanto tendrá asociado
un uno en la tabla de verdad de la función.
Resulta entonces:
ABC f f' Código decimal
000 0 1 0
001 0 1 1
010 1 0 2
011 1 0 3
100 0 1 4
101 1 0 5
110 0 1 6
111 1 0 7
b) Los maxtérminos de f ' quedan definidos por los ceros de su tabla de verdad. Para A=0,
B=1 y C=0 se tiene que (A + B' +C) genera el cero en el renglón respectivo de f '.
Entonces: f ' = (A+B' +C)(A+B'+C')(A'+B+C')(A'+B'+C')
Codificando los maxtérminos en binario, se logra: f ' = M010 + M011 + M101 +M111
En decimal: f ' = M2 M3 M5 M7
Otro desarrollo:
A partir de f = (m2+m3+m5+m7), negando ambos miembros se logra:
f ' = (m2+m3+m5+m7)' ; P2
= m2' m3' m5' m7' ; T12 De Morgan
= M ( 2,3,5,7) ;Con mi' = Mi
c) f(A,B,C) = m(2,3,5,7)
= A'BC'+AB'C'+AB'C+ ABC ; definición de mintérminos.
= A'C'B+AC'B'+ACB'+ ACB ; P4 Conmutatividad.
= A'C'(B+B') + AC(B'+B) ; P6 Distributividad.
= A'C'(1) +AC(1) ; P7 Complemento único.
= A'C'+AC ; P3 Elementos únicos.
Problema 2.11.
Diseñar un sistema que acepte a n como entrada y que produzca en la salida el equivalente
binario del número decimal: ( n*4 +1).
Solución.
El mayor n que puede escribirse con cuatro bits es 15, por lo tanto la salida mayor será 61, lo
cual requiere 6 cifras binarias para representarla. Sean éstas: S5S4S3S2S1S0.
A3 S5
S1
A2 S4 VCC
A1 S3
S0
A0 S2
S1
tierra
S0
VCC
Problema 2.12.
Se tiene un circuito digital de 4 entradas (A, B, C, D) y cuatro salidas (f1, f2, f3, f4).
a) Determinar como suma de mintérminos, la función f1 que es verdadera cuando exactamente
dos de las entradas sean verdaderas.
b) Determinar como producto de maxtérminos, la función f2 que es verdadera cuando
exactamente tres de las entradas sean verdaderas.
c) Determinar mediante un circuito lógico en base a AND, OR y NOT, la función f3, que es
verdadera cuando exactamente cuatro de las entradas sean verdaderas.
d) Determinar mediante una expresión booleana, la función f4, que es verdadera cuando
exactamente cuatro de las entradas sean falsas.
Solución.
A B C D f1 f2 f3 f4 Código
0 0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0 1
0 0 1 0 0 0 0 0 2
0 0 1 1 1 0 0 0 3
0 1 0 0 0 0 0 0 4
0 1 0 1 1 0 0 0 5
0 1 1 0 1 0 0 0 6
0 1 1 1 0 1 0 0 7
1 0 0 0 0 0 0 0 8
1 0 0 1 1 0 0 0 9
1 0 1 0 1 0 0 0 10
1 0 1 1 0 1 0 0 11
1 1 0 0 1 0 0 0 12
1 1 0 1 0 1 0 0 13
1 1 1 0 0 1 0 0 14
1 1 1 1 0 0 1 0 15
Entonces:
f1 = m(3, 5, 6, 9, 10, 12)
f2 = M(0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15)
f3 = m(15) = ABCD
A
B f3
C
D
f4 = m(0) = A'B'C'D'
Ejercicios propuestos.
Ejemplo 2.1.
f m(2, 6) M (0,1, 3, 4, 5, 7)
f m(0,1, 3, 4, 5, 7) M (2, 6)
Ejemplo 2.2.
Para la función:
Determinar:
a) Formas canónicas.
b) Minimizar, indicando número de entradas.
c) 2-cubos que contienen a m7
d) Agregue un mintérmino (a elección) tal que la expresión se simplifique.
Ejemplo 2.4.
Para la función:
Determinar:
a) Formas canónicas.
b) Minimizar, indicando número de entradas.
c) 2-cubos que contienen a m7
d) Agregue un mintérmino (a elección) tal que la expresión se simplifique.
Ejemplo 2.5.
Ejemplo 2.6.
Índice general.
CAPÍTULO 2.........................................................................................................................................1
SÍNTESIS EN DOS NIVELES ............................................................................................................1
2.1. FORMAS DE FUNCIONES. ...............................................................................................................1
2.2. MINTÉRMINOS ..............................................................................................................................2
Ejemplo 2.1. Definición de mintérmino ..........................................................................................2
Ejemplo 2.2. Suma de mintérminos ................................................................................................3
2.3. MAXTÉRMINO. ..............................................................................................................................3
Ejemplo 2.3. Definición de maxtérmino. ........................................................................................4
Ejemplo 2.4. Producto de maxtérminos .........................................................................................4
Relaciones ......................................................................................................................................5
Ejemplo 2.5. De suma de mintérminos a productoria de maxtérminos. .........................................5
2.4. EXPANSIÓN A FORMAS CANÓNICAS...............................................................................................6
2.4.1. Expansión de suma de productos .........................................................................................6
Ejemplo 2.7. Expansión a mintérminos. .................................................................................................... 6
2.4.2. Expansión de productos de sumas ........................................................................................6
Ejemplo 2.8. Expansión a maxtérminos ..................................................................................................... 6
2.5. SÍNTESIS DE LAS FORMAS..............................................................................................................7
2.5.1. Suma de productos ...............................................................................................................7
Ejemplo 2.9. OR de ANDs ........................................................................................................................ 7
Ejemplo 2.10. Dos niveles de NANDs ....................................................................................................... 7
2.5.2. Producto de sumas ...............................................................................................................8
2.5.3. Conversión de producto de sumas a suma de productos. Cambio de lógica. .......................9
2.6. DISEÑO LÓGICO ..........................................................................................................................10
2.6.1. Fan-in. Fan out...................................................................................................................10
2.6.2. Observaciones sobre la forma Producto de Sumas. ...........................................................11
2.6.3. Observaciones sobre la forma Suma de Productos. ...........................................................11
2.6.4. Observaciones sobre las diferentes formas de diseño. .......................................................12
2.6.5. Perturbaciones. Diseños con riesgos. ................................................................................12
2.6.5.1. Perturbación estática en uno........................................................................................................ 13
2.6.5.2. Perturbación estática en cero. ...................................................................................................... 14
Ejemplo 2.11. Análisis de perturbaciones. ............................................................................................... 15
Ejemplo 2.12. ........................................................................................................................................... 16
2.6.5.3. Perturbaciones dinámicas. ........................................................................................................... 17
2.6.5.4. Carreras aleatorias de las entradas. Perturbación de la función. .................................................. 18
Ejemplo 2.13. ...................................................................................................................................... 19
PROBLEMAS RESUELTOS ....................................................................................................................21
Problema 2.1. Diseño multinivel ..................................................................................................21
Problema 2.2. Conversión a NANDs en multinivel ......................................................................22
Problema 2.3. Diseño multinivel. Factorización. .........................................................................22
Problema 2.4. Diferentes formas de implementación. .................................................................23
Problema 2.5. Costos de Implementación. ...................................................................................24
Problema 2.6. ...............................................................................................................................25
Problema 2.7. ...............................................................................................................................25
Problema 2.8. ...............................................................................................................................26
Índice de Figuras
Capítulo 3
Codificación binaria
3.1. Codificación
Al modelar problemas es usual encontrar variables que pueden tomar múltiples valores, se
denomina codificación al proceso de convertir esas variables en señales binarias. La elección
adecuada del código puede conducir a redes lógicas más simples.
Consideremos, por ejemplo, el estado de un semáforo: éste puede tomar uno de tres valores:
verde, amarillo o rojo.
Una posible codificación es considerar cada color como una señal binaria; así si la variable
color toma valor rojo, estará en nivel alto la señal rojo y el resto de las señales (la verde y
amarilla) serán ceros.
Otra posibilidad es emplear dos bits para representar las tres situaciones que son posibles; ya
que con dos bits pueden simbolizarse, en binario, cuatro casos. Existen gran cantidad de códigos
posibles, ya que el nombre binario para el primer color puede elegirse de 4 maneras diferentes;
el código binario para el segundo color puede ser elegido de tres maneras diferentes, y el tercer
color puede ser elegido de dos modos diferentes. Existen 24 formas de representar la variable
multivaluada color mediante un vector binario.
Los más empleados son aquellos usados para representar números decimales.
El código representa los dígitos decimales por una secuencia de símbolos binarios.
Decimal BCD
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
La tabla es el código. Cada secuencia de 4 bits es una palabra del código. Nótese que a cada
dígito decimal se le asocia una secuencia de 4 bits.
La posición de más a la izquierda, o más significativa, tiene peso 8. El bit menos significativo,
el de más a la derecha, tiene ponderación 1. Las ponderaciones son potencias de 2.
Así, la palabra 7, puede interpretarse según:
12 = 0001 0010
1 1 0 0 0 1 0 0 1 0 0 1
t
3 2 9
La situación anterior ilustra una transmisión serie. La duración temporal de los bits y la forma
de iniciar y terminar la comunicación debe ser acordada entre el transmisor y receptor, esta
modalidad se denomina comunicación asincrónica. Si además se transmite una señal de reloj, se
tendrá una comunicación serial sincrónica.
Si se dispone de cuatro líneas, más una referencia, se puede enviar una cifra decimal en
paralelo. Si enviamos primero la cifra más significativa, y si identificamos los cables del bus
por su ponderación, la Figura 3.3. muestra la transmisión paralela del número 329.
Las líneas se han identificado de acuerdo al peso.
b
8 t
b
8
b
b 4 t
4
b
2
b b
1 2 t
b
1 t
3 2 9
3.2.2. Distancia
Se define la distancia entre dos palabras de un código, como el número de dígitos que se deben
cambiar a una palabra para obtener la otra.
Por ejemplo:
Hay distancia 1 entre 0100 y 0110.
Hay distancia 4 entre 0011 y 1100.
La distancia del código es la mínima distancia entre dos palabras consecutivas cualesquiera del
código.
En ciertas aplicaciones son útiles los códigos de distancia unitaria. Uno de los más empleados
es el código Gray, que es un sistema de codificación que ordena un conjunto de 2n números
binarios, de tal modo que sólo uno de los n bits cambia de una palabra a la siguiente.
Por ejemplo, para palabras de largo igual a 3 bits, se pueden representar 8 números decimales
según:
Decimal Gray
0 000
1 001
2 011
3 010
4 110
5 111
6 101
7 100
Nótese que entre números decimales consecutivos la distancia entre las palabras codificadas es
1.
Cuando en una lista ordenada ascendente, según el código, la mitad superior es simétrica con la
inferior, exceptuando el bit de mayor orden, se dice que el código es reflejado.
00
01
--
11
10
Nótese que lo anterior permite construir tablas de código Gray con largos de palabra mayores.
Para obtener el código para largo tres, se duplica el código de largo dos, mediante un reflejo; a
la mitad superior se la antecede con un 0 y a la inferior con un 1, ver Figura 3.4.
En la Figura 3.5. se muestran los diseños de redes combinacionales, para generar código Gray a
partir de una secuencia binaria de cuatro bits y viceversa.
B3 G3
B2 G2
G3 B3
B2
G2
B1 G1
B1
G1
B0 G0 G0 B0
En éstos, las palabras consecutivas tienen la misma distancia, y esta distancia existe también
entre la primera y la última palabra del código. En este sentido, la lista puede considerarse
cerrada.
3.2.5. Paridad
Cuando la probabilidad de error no es muy alta, ha probado ser efectivo un sistema denominado
Chequeo de paridad. Esta técnica emplea un bit extra, llamado de paridad, cuyo valor se
selecciona de tal forma de dejar un número par de unos en la palabra de código, entonces se dice
que el código es de paridad par. Si el bit se escoge tal que el número de unos en la palabra sea
impar, se tiene un sistema de paridad impar.
Ejemplo 3.3. Generador y detector de paridad.
Generador y detector de paridad. Se envían 4 bits en paralelo más uno de paridad par. La Figura
3.6 muestra la generación del bit de paridad, mediante:
p b8 b4 b2 b1
dp b8 b4 b2 b1 p
Las ecuaciones que realizan el diseño se obtienen planteando la tabla de verdad y luego
empleando compuertas or exclusivo para la implementación.
Tx Rx
dp
En la Figura 3.6 se muestra, entre líneas punteadas, el medio de transmisión; que separa al
transmisor del receptor. Analizar el circuito, determinando valores de p y dp, en caso de
producirse errores, en una de las cinco señales que se transmiten.
Ejemplo 3.5.
a) Sea una palabra de largo 3: 010
Entonces con un bit de paridad par, se representa: 1010. Donde el bit de paridad ocupa la
posición más significativa. En este caso: p b4 b2 b1 0 1 0 1
b) Puede verse que un error se detecta simplemente, en un código con paridad, debido al
cambio de tipo de paridad. Si la palabra correcta, con paridad par es 1010, se tiene que si se
recibe:
Un error en dos bits no puede ser detectado. Este sistema no permite corregir el error, sólo
detectarlo.
Nótese que la distancia del código, de la Figura 3.7, es dos. La paridad ocupa el bit más
significativo.
Ejemplo 3.6.
Un código muy empleado es el hexadecimal que representa 16 símbolos o cifras del sistema
hexadecimal mediante secuencias de cuatro bits. La tabla con el código se muestra en la Figura
3.8. Las secuencias hexadecimales suelen precederse con 0x; de este modo el número
hexadecimal 0x1A4 tiene como equivalente al número decimal 420:
0 x1A4 000110100100
Uno de los códigos más empleados es el código ASCII. Éste es un código de 7 bits, más uno de
paridad. Permite representar 128 símbolos. Su nombre es una abreviación de "American
Standard Code for Information Interchange".
Los códigos binarios de las letras mayúsculas y minúsculas difieren en el estado de un bit.
H D H D H D H D H D H D H D H D
00 NULL 00 10 DEL 16 20 32 30 0 48 40 @ 64 50 P 80 60 ` 96 70 p 112
01 SOH 01 11 DC1 17 21 ! 33 31 1 49 41 A 65 51 Q 81 61 a 97 71 q 113
02 STX 02 12 DC2 18 22 " 34 32 2 50 42 B 66 52 R 82 62 b 98 72 r 114
03 EXT 03 13 DC3 19 23 # 35 33 3 51 43 C 67 53 S 83 63 c 99 73 s 115
04 EOT 04 14 DC4 20 24 $ 36 34 4 52 44 D 68 54 T 84 64 d 100 74 t 116
05 ENQ 05 15 NAK 21 25 % 37 35 5 53 45 E 69 55 U 85 65 e 101 75 u 117
06 ACK 06 16 SYN 22 26 & 38 36 6 54 46 F 70 56 V 86 66 f 102 76 v 118
07 BEL 07 17 ETB 23 27 ' 39 37 7 55 47 G 71 57 W 87 67 g 103 77 w 119
08 BS 08 18 CAN 24 28 ( 40 38 8 56 48 H 72 58 X 88 68 h 104 78 x 120
09 TAB 09 19 EM 25 29 ) 41 39 9 57 49 I 73 59 Y 89 69 i 105 79 y 121
0a LF 10 1a SUB 26 2a * 42 3a : 58 4a J 74 5a Z 90 6a j 106 7a z 122
0b VT 11 1b ESC 27 2b + 43 3b ; 59 4b K 75 5b [ 91 6b k 107 7b { 123
0c FF 12 1c FS 28 2c , 44 3c < 60 4c L 76 5c \ 92 6c l 108 7c | 124
0d CR 13 1d GS 29 2d - 45 3d = 61 4d M 77 5d ] 93 6d m 109 7d } 125
0e SO 14 1e RS 30 2e . 46 3e > 62 4e N 78 5e ^ 94 6e n 110 7e ~ 126
0f SI 15 1f US 31 2f / 47 3f ? 63 4f O 79 5f _ 95 6f o 111 7f del 127
Unicode asigna un código único a cada carácter, utilizado en los lenguajes escritos del mundo,
para esto Unicode representa un carácter en forma abstracta, y deja la representación visual,
tamaño, dimensión, fuente o estilo, a otra aplicación, como un navegador web, un procesador de
texto o un cliente de correo. Las normas de transmisión Unicode más empleadas son UTF-8 y
UTF-16.
En páginas web se emplean entidades HTML para enviar caracteres especiales al cliente.
Comienzan con & y terminan en punto y coma. Por ejemplo para enviar una a minúscula
acentuada, se envía: á. También se acepta introducir una secuencia Unicode precedida
de la secuencia &#x. Por ejemplo U+00E1, es el Unicode para la á; entonces en la página web,
puede codificarse: á
Existe una variedad de códigos empleados en voltímetros digitales, tubos de rayos catódicos y
calculadoras. Uno de los más empleados es el código de siete segmentos, cuya tabla se ilustra a
continuación:
Decimal S6 S5 S4 S3 S2 S1 S0
0 0 1 1 1 1 1 1
1 0 0 0 0 1 1 0
2 1 0 1 1 0 1 1
3 1 0 0 1 1 1 1
4 1 1 0 0 1 1 0
5 1 1 0 1 1 0 1
6 1 1 1 1 1 0 1
7 0 0 0 0 1 1 1
8 1 1 1 1 1 1 1
9 1 1 0 1 1 1 1
0
5 1
6
4 2
3
Índice general.
CAPÍTULO 3 ............................................................................................................................................. 1
CODIFICACIÓN BINARIA ..................................................................................................................... 1
3.1. CODIFICACIÓN ................................................................................................................................... 1
3.2. CÓDIGOS NUMÉRICOS ........................................................................................................................ 1
3.2.1. Códigos ponderados .................................................................................................................. 1
Ejemplo 3.1. Código BCD ............................................................................................................................... 2
Ejemplo 3.2. Transmisión de símbolos BCD. .................................................................................................. 2
3.2.2. Distancia ................................................................................................................................... 3
3.2.3. Código reflejado. ....................................................................................................................... 4
3.2.4. Código cíclico ........................................................................................................................... 5
3.2.5. Paridad ...................................................................................................................................... 5
Ejemplo 3.3. Generador y detector de paridad. ................................................................................................ 5
Ejemplo 3.5. ..................................................................................................................................................... 6
Ejemplo 3.6. ..................................................................................................................................................... 7
3.3. CÓDIGOS ALFANUMÉRICOS ................................................................................................................ 8
3.4. CÓDIGOS DE DESPLIEGUE (DISPLAY CODES) ..................................................................................... 9
ÍNDICE GENERAL. ................................................................................................................................... 11
ÍNDICE DE FIGURAS................................................................................................................................. 12
Índice de figuras
Capítulo 4
N-cubos
La definición de una función consiste en establecer cuáles de los vértices del n-cubo se mapean
a valor lógico 0, y cuáles otros se mapean a valor lógico 1.
Esta representación permite visualizar los grupos de mintérminos, o subcubos, que considerados
juntos logran una expresión con menos literales
4.2. Dos-cubos.
Para dos variables x1 y x2, se tiene el espacio B2 el que puede considerarse definido por:
{0, 1}X{0, 1} = {(00), (01), (10), (11)}
X2 X1
X1 00 01
Expresiones en términos de literales tienen directa relación con los subcubos en el espacio que
se esté considerando. Las diferentes expresiones, formadas por un literal: X1, X’1, X2 y X’2 son
1-cubos y corresponden a los lados del cuadrado, de la Figura 4.1; están formadas por dos
mintérminos adyacentes.
Pero dos mintérminos no adyacentes no pueden ser representados mediante un solo literal. Por
ejemplo, para los mintérminos ubicados en los extremos de las diagonales se requieren cuatro
literales para representarlos mediante una expresión. Se tiene: X2X1’+X2’X1; y también cuatro
literales para los otros dos mintérminos que no están a distancia uno: X2X1+X2’ X1’.
4.3. 3-cubos.
X
2 010 011
x3 x2 x1
X 100
101
3
000 001
X
1
Figura 4.2. 3-cubo.
Nótese en la Figura 4.2, que x2 = 1 es la cara superior, y que x2 = 0 define la cara inferior.
Cuando se congela una de las variables de un 3-cubo, se obtiene un 2-cubo.
En la Figura 4.3, un vértice es un producto de tres literales; una arista del cubo es una expresión
formada por el producto de dos literales; una cara del cubo puede representarse por una
expresión con un literal.
B
_ C
B AB
A
C ___
ABC
A A
3-cubo
__
ABC
Recordando que: Un conjunto de k variables booleanas puede tomar 2k valores posibles; y que
n
se pueden efectuar elecciones de k elementos de un grupo total de n, puede concluirse que
k
el número total de subcubos de (n-k) dimensiones incluidos en uno de n es:
n n!
2k 2k
k k !(n k )!
Donde: 0 k n
Con k=n se tienen 2n subcubos de 0 dimensiones; son los mintérminos.
Ejemplo 4.1.
Un 3-cubo contiene:
3
i) 21 = 6 2-cubos. (k=1, n-k=2) Cuatro mintérminos en un plano. Una cara.
1
3
ii) 22 = 12 1-cubos. (k=2, n-k=1) Dos mintérminos adyacentes. Una arista.
2
3
iii) 2 3 = 8 0-cubos. (k=3, n-k=0) Los mintérminos. Un vértice.
3
La primera letra puede escogerse de 4 formas, la segunda de 3 formas. Se fija la primera letra y
luego se dan valores a la segunda. En total se tienen 4*3 = 12 permutaciones:
ab, ac, ad, ba, bc, bd, ca, cb, cd, da, db, dc.
Se forma una lista ordenada de las variables, en el caso del ejemplo: (a, b, c, d).
Ejemplo 4.4.
Mientras mayores sean las dimensiones de un sub-cubo, menos letras pueden emplearse
para representarlo según una expresión booleana formada por un producto de literales.
Con m<n, un m-cubo dentro de un n-cubo, se representa con un término formado por (n-m)
literales.
4.6.1. Irredundante.
Antes se definió que un cubo es un producto de literales. También se mostró que una expresión
booleana puede representarse por una suma de productos.
Ejemplo 4.5.
c abc’
a
f
4.6.2. Implicante.
Además ab es primo esencial ya que contiene al mintérmino abc’ que los cubos ac y bc no
contienen.
bc ab
b
ac
c a
a
f ab’c’
Si para cuatro variables se tiene que: abc, abc’ y ab son implicantes, entonces ab es implicante
primo. El cubo ab tiene el doble de mintérminos que abc y abc’. El literal c no es primo, y si lo
son los literales a y b.
Puede notarse que bc es primo esencial pues contiene el mintérmino abc, que los otros
implicantes no contienen. También ac es primo esencial.
Un subcubo es primo si no puede agruparse con otros para formar un cubo de mayores
dimensiones. Es decir si ninguno de sus literales puede omitirse.
Pueden anotarse los cubos que son implicantes empleando notación matricial. Las columnas
describen las variables, y en los renglones se representan los cubos. Cuando en el cubo aparece
el literal de la variable, se coloca valor 1 en esa variable; si aparece como literal el complemento
se coloca valor 0 en esa variable. Si la variable no está presente en el cubo, se coloca un – en la
posición de la variable; este símbolo también puede interpretarse representando ambos valores 0
y 1.
Ejemplo 4.7.
Sea f(a, b, c, d) = ac + c’d
a b c d
ac 1 - 1 -
c’d - - 0 1
a b c d
ac 1 - 1 -
abc 1 1 1 -
ab’c 1 0 1 -
Puede comprobarse que los cubos abc y ab’c pueden agruparse para formar el cubo ac. En
forma simbólica, el proceso de expansión podría anotarse:
Las operaciones en sentido inverso muestran la forma en que se fusionan los subcubos: abc y
ab’c en el cubo ac.
La matriz de cobertura es una notación bastante más compacta que la de una tabla de verdad, y
representa a una función booleana por una suma de productos o cubos.
Su mayor ventaja es que modela mediante matrices a los cubos de una función; luego mediante
operaciones matriciales pueden desarrollarse algoritmos para la minimización de funciones
booleanas.
Se desarrolla más sobre esta notación o formato pla, en el Apéndice 3, sobre uso de espresso.
El 3-cubo de la Figura 4.3, puede dibujarse sobre un plano. Puede empujarse una tapa hacia el
plano formado por la tapa opuesta, como se muestra en la Figura 4.7.
110 111
10 11
010 011
00 01
000 001
2-cubo
100 101
3-cubo
El 4-cubo puede representarse también en el espacio, sin embargo, es más sencillo de realizar en
un plano. Para dibujarlo, se escriben dos 3-cubos como el anterior. A un 3-cubo se le agrega un
1 en la primera posición; al otro un cero. Luego se unen los mintérminos a distancia uno.
0110 0111
0010 0011
0000 0001
0100 0101
1100 1101
1000 1001
1010 1011
1110 1111
Un 4-cubo contiene:
8 3-cubos. Cada 3-cubo formado por 8 mintérminos.
24 2-cubos. Cada 2-cubo formado por 4 mintérminos.
32 1-cubos. Cada 1-cubo formado por dos mintérminos adyacentes.
16 0-cubos o mintérminos.
Como puede apreciarse en la Figura 4.8, la representación gráfica de cubos con dimensiones
mayores que 3, no resultan prácticas.
Índice general.
CAPÍTULO 4 ............................................................................................................................................. 1
N-CUBOS.................................................................................................................................................... 1
4.1. REPRESENTACIÓN DE UNA FUNCIÓN BOOLEANA EN EL ESPACIO BN. .................................................. 1
4.2. DOS-CUBOS. ...................................................................................................................................... 1
4.3. 3-CUBOS. ........................................................................................................................................... 2
4.4. GENERALIZACIONES EN N-CUBOS ..................................................................................................... 3
Ejemplo 4.1. ........................................................................................................................................ 4
Ejemplo 4.2. Selecciones de dos objetos de un grupo de 4. ................................................................ 4
Ejemplo 4.3. Combinaciones. .............................................................................................................. 4
Ejemplo 4.4. ........................................................................................................................................ 5
4.5. LOS N-CUBOS Y LA MINIMIZACIÓN DE EXPRESIONES BOOLEANAS. ..................................................... 5
4.6. RELACIÓN CON LA FORMA SUMA DE PRODUCTOS. ............................................................................. 6
4.6.1. Irredundante. ............................................................................................................................. 6
Ejemplo 4.5. ........................................................................................................................................ 6
4.6.2. Implicante. ................................................................................................................................. 6
4.6.3. Primo. ........................................................................................................................................ 7
Ejemplo 4.6. ..................................................................................................................................................... 7
4.6.4. Matriz de coberturas. ................................................................................................................ 8
Ejemplo 4.7. ..................................................................................................................................................... 8
4.7. REPRESENTACIÓN DE CUBOS DE DIMENSIONES MAYORES QUE TRES. ................................................. 9
ÍNDICE GENERAL. ................................................................................................................................... 11
ÍNDICE DE FIGURAS................................................................................................................................. 12
Índice de figuras
Capítulo 5
Mapas de Karnaugh
5.1. Conceptos
Esta representación gráfica de una función booleana ha sido utilizada desde 1953. Permite entender los
principales conceptos sobre minimización de funciones, pero su uso práctico está limitado a un número
relativamente bajo de variables, no más de 5 ó 6.
Existe una relación uno a uno entre un mapa y una tabla de verdad. Una tabla tiene un renglón por cada
mintérmino; y un mapa, como se verá, tiene un casillero o cuadro asociado a cada mintérmino.
El mapa también puede ser considerado una extensión de los diagramas de Venn. Consideremos un diagrama
de Venn para dos variables A y B:
A B
A B’ AB
A’ B
A’ B’
Si el orden de las variables para la asignación del código de mintérminos es AB, se puede rotular el diagrama
con el número decimal asociado al mintérmino, queda:
A B
2 3 1
0
Figura 5.2 Códigos decimales de mintérminos en un diagrama de Venn.
Puede observarse que resultan áreas desiguales para cada mintérmino; y que el gráfico refleja las adyacencias
entre mintérminos, pero no tan claramente como un 2-cubo, el cual se muestra en la Figura 5.3:
0 A
2
1 3
B
C
Figura 5.3 Mintérminos de dos variables en un 2-cubo.
En un mapa de Karnaugh para cada mintérmino se adopta un área de igual tamaño y forma cuadrada; y
además, estos cuadrados se disponen de tal forma que reflejen las adyacencias. En la Figura 5.4, se ha
superpuesto el 2-cubo, con un mapa de dos variables.
A
B 0 1
0 0 2 A
1 1 3
B f(A,B)
C
Figura 5.4 Mintérminos de dos variables en un mapa de Karnaugh.
La identificación de los cuadros con el número del mintérmino, depende de la elección del orden de las
variables que se haya elegido para la representación decimal equivalente. Por ejemplo, para dos variables A y
B:
B 0 1 B 0 1
A A
0 1 0 2
0 0
2 3 1 3
1 1
f(A, B) f(B, A)
La representación de funciones mediante mapas, se logra marcando los mintérminos presentes con un "1"; los
ceros suelen omitirse.
Por ejemplo, las funciones AND y OR, de dos variables, se representan en mapas según:
B B
A 0 1 A 0 1
0 1 0 0 1
0 0 0 1
2 3 2 3
1 0 1 1 1 1
f1(A,B)=A B f2(A,B)=A + B
Para tres variables, en orden: A, B y C, se ilustran los mintérminos en un diagrama de Venn y en un 3-cubo:
B
A B 2 6
4 6 2
0 A
7 4
5 3
3
7
1 0 1 5
C
C
La Figura 5.8, muestra un desarrollo de un 3-cubo. Nótese que al abrir las caras del cubo, los mintérminos
que están a distancia uno, quedan adyacentes (exceptuando los de la cara 0451).
Los códigos de los mintérminos quedan ordenados según código Gray. El 3-cubo muestra también la
propiedad del código Gray de ser reflejado, la cara 0231 y la cara 4675 son 2-cubos con A=0 y A=1
respectivamente.
B B=1
A=0
2 A=1
6
4 A 2 6
0 0
C=0 4
3
7
1 3 7
5 C=1 5
1
0
C
f(A, B, C)
f(A, B, C)
Figura 5.8 Del 3-cubo al mapa de Karnaugh de tres variables.
La Figura 5.9 muestra el desarrollo de un 3-cubo sobre el mapa de Karnaugh de tres variables:
AB
C 00 01 11 10
0 2 6 4
0
1
1 3 7 5
f(A, B, C)
Figura 5.9 Mapa de Karnaugh de tres variables y un 3-cubo.
Nótese que m0 es adyacente a m1 , m2 y m4 . En un mapa de Karnaugh se considera que los bordes de los
rectángulos son coincidentes, debido a la propiedad del código Gray de ser cíclico. Los cuatro mintérminos
de los extremos pueden visualizarse como muestra la Figura 5.10:
El mapa para tres variables puede obtenerse con dos mapas de dos variables.
Resulta práctico colocar en un borde de cada cuadrado el número del mintérmino. De esta forma, resulta
cómodo expresar una forma canónica en un mapa.
A continuación se ilustran mapas, para 3, 4 y 5 variables. Los valores de columnas y renglones se ordenan
empleando código Gray, para reflejar mejor las adyacencias. El orden de las variables, para la representación
decimal equivalente del mintérmino, figura en la base de cada mapa.
AB
CD 00 01 11 10
0 4 12 8
AB 00
C 00 01 11 10
0 2 6 4 1 5 13 9
0 01
1 3 7 5 3 7 15 11
1 11
2 6 14 10
f(A, B, C) 10
B
Figura 5.12 Mapa de Karnaugh para tres variables.
Nótese que el mapa de 5 variables se obtiene a partir de dos mapas de cuatro variables. A uno se le antecede
un cero en la codificación de las columnas y al otro un 1.
ABC
000 001 011 010 110 111 101 100
DE
0 4 12 8 24 28 20 16
00 0
1 5 13 9 25 29 21 17
01
3 7 15 11 27 31 23 19
11
2 6 14 10 26 30 22 18
10
f(A, B, C, D, E)
Sin embargo esta forma de generar mapas, no refleja bien las adyacencias.
En un mapa de cinco variables cada mintérmino tiene cinco adyacentes, pero sólo pueden dibujarse cuatro
cuadrados adyacentes en un lado a un cuadrado. Por ejemplo, en la Figura 5.13, se visualiza bien que el
mintérmino 5 tiene adyacentes los mintérminos: 1, 4, 7 y 13; pero no tan claramente que también es
adyacente al 21.
Otra forma es una representación de mapas apilados en el espacio, como se muestra en la Figura 5.14. De
esta forma puede visualizarse las adyacencias en diferentes planos. En esta representación se visualiza mejor
que el mintérmino 5 es adyacente con el 21.
19 23 31 27
ABC
1 5 13 9
01 f(A, B, C, D, E)
3 7 15 11
11
2 6 14 10
10
Los siguientes mapas ilustran el concepto de agrupaciones de números pares de mintérminos, que forman
subcubos.
AB AB
CD 00 01 11 10 CD 00 01 11 10
0 4 12 8 0 4 12 8
00 0 0 1 1 00 0 0 1 0
1 5 13 9 1 5 13 9
01 0 0 1 1 01 0 0 1 0
3 7 15 11 3 7 15 11
11 0 0 1 1 11 0 0 1 0
2 6 14 10 2 6 14 10
10 0 0 1 1 10 0 0 1 0
AB AB
CD 00 01 11 10 CD 00 01 11 10
0 4 12 8 0 4 12 8
00 0 0 0 0 00 0 0 0 0
1 5 13 9 1 5 13 9
01 0 0 0 0 01 0 0 0 0
3 7 15 11 3 7 15 11
11 0 0 1 0 11 0 0 1 0
2 6 14 10 2 6 14 10
10 0 0 1 0 10 0 0 0 0
Para n = 4:
a) Un mintérmino se expresa como un producto de 4 variables.
b) Una agrupación de 2 mintérminos, que forman un 1-cubo (o que son adyacentes), puede expresarse en tres
variables.
c) Una agrupación de 4 mintérminos, que forman un 2-cubo, se expresa en dos variables.
d) Una agrupación de 23 mintérminos, que forman un 3-cubo, reduce en 3 las variables; es decir, esta
agrupación puede expresarse como una variable.
e) Una agrupación de los 2 4 mintérminos (forman un 4-cubo), puede expresarse como 1. Es decir, en 0
variables.
f) Nótese que bajo el mapa suele escribirse la función que éste representa.
g) La lectura de la expresión asociada a un grupo, se efectúa por la intersección de las zonas asociadas a las
variables.
h) El número de grupos de un literal, en caso de n variables, aplicando la fórmula desarrollada en 4.4, es:
n n!
21 2 2n
1 1!(n 1)!
A, B, C , D, A , B , C , D
n n!
22 22 2n(n 1)
2 2!(n 2)!
22
j) Los grupos de k literales, cuando se tienen n variables, quedan dados por:
Con k n :
n!
2k
k!(n k )!
Cuando k es igual a n, se logra el número de mintérminos.
k) Debido al alto número de subcubos, es importante ejercitarse en ubicarlos en el mapa.
Los menos evidentes son aquellos que se encuentran en los bordes.
Ejemplos de estos casos, para n=4: b’d’, b’c, a’b’d’, a’bd’
La obtención del mapa, a partir de una forma canónica es asunto trivial, si los casilleros han sido rotulados
con los números decimales de los mintérminos.
La obtención del mapa, a partir de una forma “suma de productos” puede obtenerse empleando los conceptos
desarrollados en manejo de mapas en el punto 5.3, para representar los cubos de cada producto.
Aplicando la inducción perfecta los mapas pueden emplearse para demostrar teoremas, y también para
verificar alguna proposición del álgebra de Boole.
La principal aplicación de los mapas es la minimización de funciones, realizada en forma manual, lo que
resulta conveniente para 5 o menos variables.
AB
C 00 01 11 10
0 2 6 4
0 1
1 3 7 5
1 1 1
f ( A, B, C ) m(1, 2,5)
Para tres variables: Un mintérmino tiene 3 literales; una agrupación de dos mintérminos adyacentes tiene una
expresión dependiente de dos variables.
Para aclarar el método, se dibujará un mapa para cada producto. Con un poco de experiencia, todos los
productos pueden dibujarse en el mismo mapa.
AB AB
C 00 01 11 10 C 00 01 11 10
0 2 6 4 0 2 6 4
0 0 1 1
1 3 7 5 1 3 7 5
1 1 1 1
AB AB
C 00 01 11 10 C 00 01 11 10
0 2 6 4 0 2 6 4
0 0 1 1
1 3 7 5 1 3 7 5
1 1 1 1 1
Dadas dos funciones, si se desea probar su equivalencia, la aplicación de los mapas simplifica largas
demostraciones algebraicas. Sólo es preciso obtener un mapa para cada una de las funciones, y luego
comparar la igualdad de sus formas canónicas.
La expresión del lado derecho tiene el mapa que figura a la izquierda en la Figura 5.20. A la derecha de la
Figura 5.20 se tiene el mapa para el OR de las variables.
A A
0 1 B 0 1
0 2 0 2
0 1 0 1
1 3 1 3
1 1 1 1 1
f1(A,B)=A'B' f2(A,B)=A+B
Negando el mapa para la función OR, se obtiene idéntico mapa al de f1. Entonces f1 y f2’ son equivalentes por
tener igual forma canónica, lo cual demuestra por inducción completa la proposición, conocida como teorema
de De Morgan.
Se han desarrollado herramientas de diseño lógico que permiten efectuar minimizaciones para funciones de
una o varias variables. Sin embargo los algoritmos y heurísticas en que están basados no son fáciles de
entender, ya que conceptualizan aspectos de las funciones booleanas que son más adecuadas a un tratamiento
algorítmico, mediante un computador.
A continuación desarrollaremos métodos gráficos, basados en mapas, y que están limitados a un número
reducido de variables (no más de 6), ya que su exposición permitirá entender los métodos automáticos, así
como también permitir diseñar, con papel y lápiz, algunos casos sencillos.
Podemos plantear el problema de minimización diciendo que se desea obtener, a partir de una expresión
booleana, una forma equivalente que contenga un número mínimo de términos, y tal que cada término tenga
el mínimo número de literales posible.
El método consiste en dibujar el mapa a partir de la función, y luego leer desde el mapa agrupando
convenientemente los mintérminos presentes.
Deben respetarse las siguientes reglas:
Deben agruparse tantos bloques como sea posible; ya que mientras mayor sea la agrupación, menor será el
número de literales.
Debe formarse el menor número de agrupaciones de bloques; ya que a menor número de grupos, se tendrá
menor número de términos.
Un bloque puede ser usado muchas veces, en distintas agrupaciones; pero a lo menos una vez.
Una técnica consiste en formar primero los grupos con menor número de adyacencias. Por esta razón, los
primeros mintérminos que deben marcarse son aquellos que no tienen adyacencias.
Ejemplo 5.4. Minimización a partir de los mintérminos
Se tiene:
AB
C 00 01 11 10
0 2 6 4
0 1 1 1
1 3 7 5
1 1 1
Si se considera primero la agrupación de los mintérminos (2, 3, 6, 7) que puede leerse como B, podría inducir,
en caso de mapas complejos, a no agrupar convenientemente al mintérmino A’B’C’, que sólo tiene una
adyacencia.
Considerando formar grupos mayores con los mintérminos que tienen menos adyacencias quedan las
siguientes agrupaciones de mintérminos: (0, 2) y (2, 3, 6, 7).
AB
C 00 01 11 10
A’C’ 0 2 6 4
0 1 1 1 0
1 3 7 5
1 0 1 1 0
B
f(A, B, C)=B+A’C’
Figura 5.22. Agrupaciones en el Mapa de Karnaugh.
Se observa que:
m14 no tiene mintérminos adyacentes. Por esta razón no puede agruparse.
m13 tiene un mintérmino adyacente. Por lo tanto, sólo puede agruparse con m9 .
m0 , m3 , m8 y m11 tienen dos mintérminos a distancia uno.
m1 tiene 3 mintérminos adyacentes.
m9 tiene 4 mintérminos a distancia uno.
Los grupos que forman sub-cubos suelen marcarse en al mapa, encerrando los mintérminos del grupo con una
línea cerrada.
Sólo falta considerar m3 y m11 , que a su vez forman un grupo. Sin embargo, conviene efectuar la
agrupación: ( m1 , m3 , m9 , m11 ), que emplea m1 y m9 , ya considerados, con el objeto de hacer el grupo lo mayor
posible.
f(A,B,C,D)=ABCD’+AC'D+B’D+B’C’
Ejemplo 5.6.
Minimizar: f(A, B, C, D) = m(0, 1, 2, 7, 8, 9, 10, 15)
AB
CD 00 01 11 10
0 4 12 8
00 1 0 0 1
1 5 13 9
01 1 0 0 1
3 7 15 11
11 0 1 1 0
2 6 14 10
10 1 0 0 1
f(A, B, C, D)=BCD+B’D’+B’C’
1 5 13 9 17 21 29 25
01 0 0 1 0 0 0 1 0
3 7 15 11 19 23 31 27
11 0 1 0 0 0 1 0 0
2 6 14 10 18 22 30 26
10 1 0 0 1 1 0 0 1
f(A, B, C, D, E)=B’CDE+A’B’D’E’+BCD’+C’DE’
El método consiste en desarrollar el mapa para f, a partir de la forma canónica. Luego se obtiene el mapa para
f negado, de esta forma, se puede leer el producto de maxtérminos de f, como la suma de mintérminos de f’.
Así se obtiene la forma mínima como suma de productos. Después se obtiene por involución, la función f; y
finalmente se aplica De Morgan.
Para una función dada, siempre deberán obtenerse los dos diseños; es decir la forma suma de productos y
producto de sumas, ya que no es posible obtener una relación que indique cual de las dos formas será
mínima.
Ejemplo 5.8
Para el mapa de la Figura 5.27, se pueden obtener las formas canónicas:
La suma de mintérminos, resulta:
f’ = m(2, 5, 6, 7) = m2 + m5 + m6 + m7
f ’ = A’BD + A’CD’
Ejemplo 5.9.
Minimizar, según producto de sumas: f(A,B,C,D) = (4,5,7,8,10,11,12,13,15)
AB
CD 00 01 11 10
0 4 12 8
00 0 1 1 1
1 5 13 9
01 0 1 1 0
3 7 15 11
11 0 1 1 1
2 6 14 10
10 0 0 0 1
AB
CD 00 01 11 10
0 4 12 8
00 1
1 5 13 9
01 1 1
3 7 15 11
11 1
2 6 14 10
10 1 1 1
f '(A, B, C, D)
Figura 5.29. Mapa con los mintérminos de f’
Formando los siguientes grupos, en el mapa: (0, 1, 3, 2); (6, 14); (1, 9).
Con un poco de práctica, pueden agruparse los ceros en el primer mapa, y leer directamente las sumas,
complementando las variables.
Algunas funciones booleanas son completamente especificadas para todas las combinaciones posibles de sus
variables.
Se denominan funciones incompletamente especificadas cuando se establece que el valor de la función es "1"
para ciertas combinaciones, "0" para otras y un valor cualquiera para el resto.
Los mintérminos pueden agruparse en tres conjuntos: conjunto que activa la función (on set), conjunto que
desactiva la función (off set) y conjunto de mintérminos superfluos (dc set).
Los mintérminos que pueden ser especificados con valor "1" ó "0"; es decir: con cualquier valor, se
denominan “condiciones superfluas”, o que “no importan” (don’t care).
Ejemplo de esta situación, es cuando existe dependencia entre las variables de entrada; ésta puede originar
que nunca se produzcan ciertas combinaciones de valores de las variables de entrada.
Debe tenerse presente que no deben formarse agrupaciones que sólo contengan términos superfluos.
En un mapa:
AB
C 00 01 11 10
0 2 6 4
0 1 d
1 3 7 5
1 d d 1
f(A, B, C)
Sin emplear las condiciones superfluas, se tiene: f = A’B’C’ + AB’C, con 6 literales.
Puede agruparse (0,1) y (5,7). En este caso: f = A’B’ + AC, con 4 literales.
Sin embargo, la agrupación más conveniente es (0, 1, 4, 5), y así se obtiene, con un literal:
f = B’
Nótese que: f(A,B,C) = (2,3,6) D(1,4,7) es decir, los maxtérminos superfluos tienen iguales
números que los mintérminos superfluos.
También se tienen:
f’(A, B, C) = m(2, 3, 6) + d(1, 4, 7)
f’(A, B, C) = M(0, 5) D(1, 4, 7)
Si en el ejemplo anterior, se minimiza la función f, como suma de productos, se logra: f’=B. Obteniendo un
resultado igual al anterior.
AB
C 00 01 11 10
0 2 6 4
0 1 1 d
1 3 7 5
1 d 1 d
f '(A, B, C)
Figura 5.31. Mapa con condiciones superfluas de f’
f = (f ')'
Ejemplo 5.12.
Diseñar traductor de código BCD a exceso-3. El código exceso-3, representa los dígitos decimales mediante
su equivalente binario más tres. Tiene propiedades aritméticas que lo hacen útil en manipulaciones.
Nótese que se tiene un sistema con cuatro entradas y cuatro salidas: Se ha asumido que la cifra BCD se
dispone en paralelo, y se desea lograr la equivalente exceso-3, también en paralelo.
Se tiene:
BCD exceso-3
0 0000 0011
1 0001 0100
2 0010 0101
3 0011 0110
4 0100 0111
5 0101 1000
6 0110 1001
7 0111 1010
8 1000 1011
9 1001 1100
wxyz f 4 f3 f 2 f1
Si se conoce que en la entrada se tendrá una cifra BCD, entonces algunas combinaciones de las variables w,
x, y, z deben tratarse como condiciones superfluas. Es el caso de los mintérminos con equivalentes binarios
1010 hasta 1111. En un mapa, esto puede anotarse:
wx
yz 00 01 11 10
0 4 12 8
00 d
1 5 13 9
01 d
3 7 15 11
11 d d
2 6 14 10
10 d d
f(w, x, y, z)
Figura 5.33. Mapa de las condiciones superfluas del ejemplo 5.13.
f1 = m(0,2,4,6,8) + d(10,11,12,13,14,15)
f2 = m(0,3,4,7,8) + d(10,11,12,13,14,15)
f3 = m(1,2,3,4,9) + d(10,11,12,13,14,15)
f4 = m(5,6,7,8,9) + d(10,11,12,13,14,15)
Minimizando, para cada una de las funciones por separado, se logra para el sistema de múltiples salidas, con
17 entradas:
f1 = z’
f2= y’ z’ + yz
f3= x’y + x’z + xy’z’
f4 = x’w +yw’z’
Puede apreciarse que en un sistema de salidas múltiples existe la posibilidad de ahorrar material: usando
parte o la totalidad de los productos de una función como partes de otra. Ejemplo de esto es el factor y’z' de
f2, que puede usarse en f3.
Si se presenta una cifra BCD inválida en la entrada, la salida también será errónea. Para usar confiablemente
el circuito combinacional, diseñado empleando condiciones superfluas, debe asegurarse que la entrada sea
una cifra BCD válida.
Un diagrama general de las entradas y salidas del módulo combinacional que se diseñará es el siguiente:
N1 A LT AB<CD
B
EQ AB=CD
C
N2
D GT AB>CD
A continuación se especifica el diseño mediante una tabla de verdad. Ésta tiene 16 renglones.
A B C D LT EQ GT
0 0 0 0 0 1 0
0 0 0 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 1 0 0
0 1 0 0 0 0 1
0 1 0 1 0 1 0
0 1 1 0 1 0 0
0 1 1 1 1 0 0
1 0 0 0 0 0 1
1 0 0 1 0 0 1
1 0 1 0 0 1 0
1 0 1 1 1 0 0
1 1 0 0 0 0 1
1 1 0 1 0 0 1
1 1 1 0 0 0 1
1 1 1 1 0 1 0
Problema 5.2. Multiplicador de dos números binarios de dos cifras cada uno.
A
N1 P3
B P2
C P1
N2 P0
D
A continuación se especifica el diseño mediante una tabla de verdad. Ésta tiene 16 renglones.
A B C D P3 P2 P1 P0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 1 0 0 0 0
0 1 0 0 0 0 0 0
0 1 0 1 0 0 0 1
0 1 1 0 0 0 1 0
0 1 1 1 0 0 1 1
1 0 0 0 0 0 0 0
1 0 0 1 0 0 1 0
1 0 1 0 0 1 0 0
1 0 1 1 0 1 1 0
1 1 0 0 0 0 0 0
1 1 0 1 0 0 1 1
1 1 1 0 0 1 1 0
1 1 1 1 1 0 0 1
E3 S3
E2 S2
E1 S1
E0 S0
E3 E2 E1 E0 S3 S2 S1 S0
0 0 0 0 0 0 0 1
0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 1
0 0 1 1 0 1 0 0
0 1 0 0 0 1 0 1
0 1 0 1 0 1 1 0
0 1 1 0 0 1 1 1
0 1 1 1 1 0 0 0
1 0 0 0 1 0 0 1
1 0 0 1 0 0 0 0
1 0 1 0 d d d d
1 0 1 1 d d d d
1 1 0 0 d d d d
1 1 0 1 d d d d
1 1 1 0 d d d d
1 1 1 1 d d d d
Se denomina semi-sumador a un dispositivo que permite sumar, en binario, dos variables de entrada de un bit
(Ai y Bi). El sistema debe generar dos salidas: la suma (Si) y la reserva de salida (Ci carry).
La tabla de verdad resulta:
Ai Bi Ci Si
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
Ci
Figura P5.8. Implementación semisumador.
Si se desea sumar variables de varios bits se requiere un sumador completo, que tenga una tercera entrada
denominada reserva de entrada (carry-in):
Ai Bi Ci
Ci+1 Si
Figura P5.9. Diagrama funcional sumador completo de un bit.
Ai Bi Ci Ci+1 Si
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
El esquema de la Figura P5.11, muestra una suma de cuatro bits en base a la conexión de cuatro sumadores
completos:
A3 B3 C3 A2 B2 C2 A1 B1 C1 A0 B0 C0
C4 S3 C3 S2 C2 S1 C1 S0
Figura P5.11. Diagrama funcional sumador completo de cuatro bits.
Ai Ai
Bi Ci
Ci
Si Ci+1
Ci Bi
Ai
Bi
Ai Ai Bi Ai Bi Ci
Bi Si
Ai Bi (Ai Bi )Ci
Ci+1
Ci
En sistemas digitales, determinadas acciones sobre los datos colocan la integridad de éstos en peligro.
Ejemplo de procesos que pueden generar errores son: El almacenar bits en memorias dinámicas o en medios
magnéticos (superficies de discos flexibles o rígidos, que pueden dañarse físicamente o contaminarse por
interferencia en la escritura o lectura); la transmisión de bits mediante conductores de cobre, fibra o en forma
inalámbrica a través de grandes distancias.
La detección de errores emplea los bits adicionales cuando se accesa o recibe información para determinar si
existe corrupción de los datos. En la corrección de errores, la información adicional debe permitir detectar y
corregir los errores, dentro de ciertos límites.
La detección requiere menos bits redundantes, pero si se detecta un error, el receptor solicita que se vuelvan a
enviar los datos, lo cual agrega tiempo de latencia y complejidad.
En la corrección se tiene menor latencia, ya que el proceso de corrección es una parte de la lógica que recibe
los datos; y sólo si los errores sobrepasan los límites de la corrección, debe solicitarse el reenvío.
Existen procedimientos para detectar y corregir errores simples (paridad, Hamming) y múltiples (códigos de
redundancia cíclica).
Detección de un error simple.
Se envían n bits: b0, b1, b2, ..., bn-1. Se desea encontrar el modo de detectar un error de un bit.
Una solución es enviar (n+1) bits, el bit n-avo es uno si existe un número impar de unos en los n bits de
datos. Por esto al bit redundante se lo denomina de paridad (par en este caso), ya que la información más el
bit adicional contienen una cantidad par de unos.
Para dos variables booleanas, el or exclusivo de ellas es cero si el número de unos es par; y uno si es impar.
Para las n variables, la forma de computar (generar) el bit de paridad es mediante la siguiente ecuación
lógica:
bn = b0 b1 b2 ...bn-1
Si los datos se disponen en paralelo (todos al mismo tiempo) puede determinarse la paridad mediante un árbol
combinacional mediante xors. Si los datos se tienen en serie, basta una compuerta xor y un registro(o
memoria) de un bit.
En este caso resulta k = 3, y m = 7. Deben enviarse tres bits adicionales para detectar y corregir un error
simple. Si n es elevado se tendrá que k es aproximadamente igual a log2(n).
Cuatro bits de paridad permiten un máximo de m = 16, con 12 de datos.
Cinco bits de paridad permiten un máximo de m = 32, con 27 de datos.
chequeo = w0 + 2* w1 + 4* w2 + ....
Si el valor de chequeo no es cero, un bit debe ser erróneo. Cada wi = 0 remueve la duda sobre algunos bits.
Cualquier bit puede tener un error (solo un bit), incluso uno de los de paridad puede haberse contaminado en
la transmisión o lectura. Si un bit está errado existe sólo una forma de corregirlo.
Si chequeo es cero, no hay error simple. En caso contrario se complementa el bit cchequeo
c2
c3 w
c1 c6
c3 w c7 1
c
c5 7 0
c4
c5 w
c6
c7 2
La siguiente tabla muestra los valores binarios de los wi posibles, y asumiendo que sólo un bit del
subconjunto puede estar errado si wi es uno; y que si wi es cero, los elementos del subconjunto asociado están
correctos.
Estudiemos el segundo renglón: Con w2 igual a cero, no pueden estar errados: p2, b1, b2, b3; y si además w1
es cero: p1, b0, b2, b3 llegan correctamente; y si w0 es 1 podría existir un error en p0, b0, b1, b3. Pero de las
listas anteriores: b0, b1, b2 y b3 llegaron correctamente; por lo tanto se determina que en este caso p0 llegó
errado.
En la siguiente red, si w0 y w1 son unos y w2 es cero, se tendrá que f0 es b0'; en caso contrario es b0.
w0 w0 w'0
w1
w'2 f0 w'1 f1 w1
f2
w2 w2
c3 c5 c6
w0
w1
w2 f3
c7
b) Se calculan los wi, a partir de los ci , asumiendo que c3 llega errado, según:
w0 = (c1 c3 c5 c7) = (p0 b0 b1 b3) = (0 1 1 1) = 1
w1 = (c2 c3 c6 c7) = (p1 b0 b2 b3) = (1 1 0 1) = 1
w2 = (c 4 c 5 c6
El valor de chequeo resulta: c7) = (p2 b1 b2 b3) = (0 1 0 1) = 0
chequeo = w0 + 2* w1 + 4* w2 = 1 + 2*1 +4 *0 = 3, lo cual implica que debe complementarse c3.
c) Se calculan los wi, a partir de los ci , asumiendo que c5 llega errado, según:
w0 = (c1 c3 c5 c7) = (p0 b0 b1 b3) = (0 0 0 1) = 1
w1 = (c2 c3 c6 c7) = (p1 b0 b2 b3) = (1 0 0 1) = 0
w2 = (c4 c5 c6 c7) = (p2 b1 b2 b3) = (0 0 0 1) = 1
El valor de chequeo resulta:
chequeo = w0 + 2* w1 + 4* w2 = 1 + 2*0 +4 *1 = 5, lo cual implica que debe complementarse c5.
d) Se calculan los wi, a partir de los ci , asumiendo que c1 llega errado, según:
w0 = (c1 c3 c5 c7) = (p0 b0 b1 b3) = (1 0 1 1) = 1
w1 = (c2 c3 c6 c7) = (p1 b0 b2 b3) = (1 0 0 1) = 0
w2 = (c4 c5 c6 c7) = (p2 b1 b2 b3) = (0 1 0 1) = 0
El valor de chequeo resulta:
chequeo = w0 + 2* w1 + 4* w2 = 1 + 2*0 +4 *0 = 1, lo cual implica que debe complementarse c1.
Problema 5.7.
Se tiene un número binario de cuatro bits: A3A2A1A0, donde A3 es la cifra más significativa, sea n el
equivalente decimal de este número.
Diseñar un sistema que acepte a n como entrada y que produzca en la salida el equivalente binario del número
decimal: ( n*4 +1).
Solución.
El mayor n que puede escribirse con cuatro bits es 15, por lo tanto la salida mayor será 61, lo cual requiere 6
cifras binarias para representarla. Sean éstas: S5S4S3S2S1S0.
Problema 5.8.
Se tiene un circuito digital de 4 entradas (A, B, C, D) y cuatro salidas (f1, f2, f3, f4).
a) Determinar como suma de mintérminos, la función f1 que es verdadera cuando exactamente dos de las
entradas sean verdaderas.
b) Determinar como producto de maxtérminos, la función f2 que es verdadera cuando exactamente tres de las
entradas sean verdaderas.
c) Determinar mediante un circuito lógico en base a AND, OR y NOT, la función f3, que es verdadera cuando
exactamente cuatro de las entradas sean verdaderas.
d) Determinar mediante una expresión booleana, la función f4, que es verdadera cuando exactamente cuatro
de las entradas sean falsas.
Solución.
Se tienen las siguientes tablas de verdad.
A B C D f1 f2 f3 f4 Código
0 0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0 1
0 0 1 0 0 0 0 0 2
0 0 1 1 1 0 0 0 3
0 1 0 0 0 0 0 0 4
0 1 0 1 1 0 0 0 5
0 1 1 0 1 0 0 0 6
0 1 1 1 0 1 0 0 7
1 0 0 0 0 0 0 0 8
1 0 0 1 1 0 0 0 9
1 0 1 0 1 0 0 0 10
1 0 1 1 0 1 0 0 11
1 1 0 0 1 0 0 0 12
1 1 0 1 0 1 0 0 13
1 1 1 0 0 1 0 0 14
1 1 1 1 0 0 1 0 15
Entonces:
a) f1 = m(3, 5, 6, 9, 10, 12)
b) f2 = M(0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15)
c) f3 = m(15) = ABCD
A
B f3
C
D
d) f4 = m(0) = A'B'C'D'
Problema 5.9.
Solución.
a) Para la forma suma de productos se tiene el siguiente mapa de Karnaugh:
ab
cd 00 01 11 10
0 4 12 8
00 d
1 5 13 9
01 d d 1 d
3 7 15 11
11 d 1
2 6 14 10
10 d 1 d
Implicantes 7 13 14
primos
a’b x
c’d
a’d x
acd’ x
bcd’ x
Se tienen 4 diseños alternativos con mínimo costo. Con 10 entradas cada uno.
f(a, b, c, d) = c’d + a’b + acd’
f(a, b, c, d) = c’d + a’b + bcd’
f(a, b, c, d) = c’d + a’d + acd’
f(a, b, c, d) = c’d + a’d + bcd’
ab
cd 00 01 11 10
0 4 12 8
00 1 d 1 1
1 5 13 9
01 d d d
3 7 15 11
11 d 1 1
2 6 14 10
10 1 d d
f ’(a, b, c, d)
La siguiente tabla de implicantes, muestra que c’d’ y acd son implicantes primos esenciales.
Implicantes 0 2 8 11 12 15
primos
b’ x x x x
c’d’ x x
a’c’ x
a’d’ x x
acd x
Problema 5.10.
Se conoce: que el mintérmino a’bcd’ es superfluo, que el maxtérmino (a’ + b + c + d’) es superfluo, y que el
implicante a’b’c’ es superfluo.
a) Determinar el mapa de Karnaugh para f, indicando los unos, ceros y condiciones superfluas.
b) Obtener el diseño mínimo como producto de sumas, indicando en un mapa los implicantes seleccionados.
Solución:
a1) Se ubican los mintérminos superfluos, y se los dibuja en el mapa:
Que el maxtérmino (a’ +b +c +d’) = M9 sea superfluo, indica que m9’ es superfluo.
Esto permite determinar los unos de la función como m(2, 4, 8, 13, 15); y también los ceros de la función
como M(3, 5, 7, 10, 11, 12, 14)
ab
cd 00 01 11 10
0 4 12 8
00 d 1 0 1
1 5 13 9
01 d 0 1 d
3 7 15 11
11 0 0 1 0
2 6 14 10
10 1 d 0 0
El mapa ilustra el diseño de la función mínima, con condiciones superfluas, expresada como suma de
productos:
f(a, b, c, d) = m(2, 4, 8, 13, 15) + d(0, 1, 6, 9) = abd + b’c’ + a’d’
El grupo M(1, 3, 5, 7) debe incluirse ya que es el mayor y único grupo que cubre a 5 y 7.
El grupo M(12, 14) es el mayor y único grupo que cubre a 12, y debe estar presente.
Sólo resta cubrir a M(10, 11), lo cual puede hacerse incluyendo a dicho grupo. La incorporación del grupo
mayor M(1, 3, 9, 11) que cubre al 11, requiere otro grupo para cubrir al 10, ya sea M(10, 14) o M(10, 11).
Para un diseño libre de perturbaciones debería incluirse a los grupos M(10, 14) y M(3, 11)
En la tabla de implicantes se muestran sólo los mintérminos; no se requiere cubrir los superfluos. De la tabla
se advierte que a’d es implicante primo esencial, ya que agrupa al 5 y 7 que sólo él contiene. También abd’ es
implicante primo esencial ya que es el único grupo que contiene al mintérmino 12.
3 5 7 10 11 12 14
a’d x x x
abd’ x x
ab’c x x
acd’ x x
b’d x x
bcd’ x
Figura P5.28. Tabla implicante. Mapa de la Figura P5.27
Para cubrir m10 y m11, la mejor opción es ab’c, lo cual puede deducirse de la tabla reducida.
10 11
ab’c x x
acd’ x
b’d x
Problema 5.11.
Solución:
a) Considerando las condiciones superfluas y los mintérminos, en un mapa rotulado según notación de
conjuntos, resulta:
a
d 1 0 1
0 1 1 1
d
0 d d 0
c
0 1 0 1
b
Figura P5.30. Mapa con condiciones superfluas.
d 1 1
1 1 1
d
d d
c
1 1
b
Figura P5.31. Implicantes de la Figura P5.30.
Resulta: f = a b’ d’ + a d c’ + a’ b
a
c) El mapa para f’ resulta:
d 1
1
d
1 d d 1
c
1 1
b
Figura P5.32. Mapa del complemento de f.
Aplicando De Morgan.
f = ( a’ + b’ + d)(d’ + c’)(a + b)
Problema 5.12.
a) Si se puede escoger un mintérmino cualquiera como superfluo, cuál o cuáles son las funciones mínimas
(todas las que encuentre); indicando, en cada caso, el mintérmino superfluo elegido.
b) Si se pueden escoger dos mintérminos cualesquiera como superfluos, cuál o cuáles son las funciones
mínimas (todas las que encuentre); indicando, en cada caso, los mintérminos superfluos elegidos.
c) Si se pueden escoger tres mintérminos cualesquiera como superfluos, cuál o cuáles son las funciones
mínimas (todas las que encuentre); indicando, en cada caso, los mintérminos superfluos elegidos.
Solución:
a) La Figura P5.33 muestra la elección conveniente de un mintérmino superfluo.
AB
CD 00 01 11 10
0 4 12 8
00
1 5 13 9
01 1 d 1 Se elige m13. Resulta:
f = AC’D + BC’D + ABD
3 7 15 11
11 1
2 6 14 10
10
f(A, B, C, D)
b1)
AB
CD 00 01 11 10
0 4 12 8
00 Se elige m13 y m11.
f = AD + BC’D
1 5 13 9
01 1 d 1
3 7 15 11
11 1 d
2 6 14 10
10
f(A, B, C, D)
1 5 13 9
01 1 d 1
3 7 15 11
11 d 1
2 6 14 10
10
f(A, B, C, D)
b3)
AB
CD 00 01 11 10
0 4 12 8 Se elige m13 y m1.
00 f = ABD + C’D
1 5 13 9
01 d 1 d 1
3 7 15 11
11 1
2 6 14 10
10
f(A, B, C, D)
1 5 13 9
01 1 d 1
3 7 15 11
11 d 1 d
2 6 14 10
10
c2)
AB
CD 00 01 11 10
0 4 12 8 Se elige m13, m11 y m1.
00 f = C’D + AD
1 5 13 9
01 d 1 d 1
3 7 15 11
11 1 d
2 6 14 10
10
1 5 13 9
01 d 1 d 1
3 7 15 11
11 d 1
2 6 14 10
10
Problema 5.13.
Solución.
En un 5-cubo un 3-cubo puede expresarse con dos literales. Las combinaciones de dos letras de un conjunto
de 5 son: AB, AC, AD, AE, BC, BD, BE, CD, CE, DE. Para cada combinación pueden tenerse 4 expresiones;
por ejemplo para AB se tienen: A'B', A'B, AB', AB. En total se tienen cuarenta 3-cubos inscritos en un 5-cubo.
Entonces los 3-cubos pedidos son: AB, AB', AC, AC', AD, AD', AE, AE'.
Problema 5.14.
C'D'E + B'C
Solución:
Los míntérminos asociados a B'C se encuentran en las columnas 001 y 101,
Resulta B'C = m(4, 5, 6, 7, 20, 21, 22, 23) son 8.
Los mintérminos asociados a C'D'E son m(1, 9, 17, 25) son 4, con C=0, D=0 y E=1.
ABC
000 001 011 010 100 101 111 110
DE
0 4 12 8 16 20 28 24
00 1 0 1
1 5 13 9 17 21 29 25
01 1 1 1 1 1 1
3 7 15 11 19 23 31 27
11 1 1
2 6 14 10 18 22 30 26
10 1 1
Problema 5.15.
Solución:
f1=ABABC+ABD'+CABC+CD'+A'B'D' ; P6
=ABC+ABD'+CD' +A'B'D' ; P4, T8
= m(14,15) +m(12,14)+m(2,6,10,14)+m(0,2) ; T14
= m(0, 2, 6, 10, 12, 14, 15); T8
AB
CD 00 01 11 10
0 4 12 8
00 1 1
1 5 13 9
01
3 7 15 11
11 1
2 6 14 10
10 1 1 1 1
f1(A, B, C, D)
Figura P5.41. Mapa de f1.
f2 = A'B'+A'D'+B'B'+B'D'+B'D+DD'; P6, P4
= A'B'+A'D'+B'+B'(D'+D)+0 ;T8, P6, P7
= A'B' +A'D'+B' ; P3,P7, T8
= m(0, 1, 2, 3) + m(0, 2, 4, 6) + m(0, 1, 2 , 3, 8, 9, 10, 11) ; T14
= m(0, 1, 2, 3, 4, 6, 8, 9, 10, 11) ;T8
AB
CD 00 01 11 10
0 4 12 8
00 1 1 1
1 5 13 9
01 1 1
3 7 15 11
11 1 1
2 6 14 10
10 1 1 1
f2(A, B, C, D)
Referencias.
Karnaugh M. “The map method for synthesis of combinatorial logic circuits”, Trans. AIEE Comm.
Electron.,Vol. 72, No. 4, pp. 593–598. 1953.
Índice general.
CAPÍTULO 5 ..................................................................................................................................................................... 1
MAPAS DE KARNAUGH ................................................................................................................................................ 1
5.1. CONCEPTOS ............................................................................................................................................................... 1
5.2. FORMAS DE MAPAS ................................................................................................................................................... 4
5.3. MANEJO DE MAPAS ................................................................................................................................................... 7
5.4. USO DE MAPAS........................................................................................................................................................... 9
Ejemplo 5.1. Mapa a partir de los mintérminos. ........................................................................................................ 9
Ejemplo 5.2. Mapa a partir de expresión. ................................................................................................................ 10
Ejemplo 5.3. Uso de mapas en la demostración de teoremas. .................................................................................. 11
5.5. MINIMIZACIÓN USANDO MAPAS DE KARNAUGH. ..................................................................................................... 12
5.5.1. Minimización como suma de productos. ......................................................................................................... 12
Ejemplo 5.4. Minimización a partir de los mintérminos .......................................................................................................... 12
Ejemplo 5.5. Formación de grupos de mintérminos en minimización basada en mapas.......................................................... 13
Ejemplo 5.6. ............................................................................................................................................................................. 14
Ejemplo 5.7. ............................................................................................................................................................................. 15
5.5.2. Minimización en forma de producto de sumas. ............................................................................................... 15
Ejemplo 5.8.............................................................................................................................................................................. 15
Ejemplo 5.9. ............................................................................................................................................................................. 16
5.5.3. Condiciones superfluas (don't care) ................................................................................................................ 17
Ejemplo 5.10. ........................................................................................................................................................................... 18
Ejemplo 5.11. ........................................................................................................................................................................... 19
Ejemplo 5.12. ........................................................................................................................................................................... 19
PROBLEMAS RESUELTOS. ................................................................................................................................................ 21
Problema 5.1. Comparador binario. ......................................................................................................................... 21
Problema 5.2. Multiplicador de dos números binarios de dos cifras cada uno. ....................................................... 22
Problema 5.3. Incrementador en uno de cifra BCD. ................................................................................................. 22
Problema 5.4. Semisumador binario. ........................................................................................................................ 23
Problema 5.5. Sumador completo. ............................................................................................................................ 24
Problema 5.6. Detección y corrección de errores en bits. Hamming........................................................................ 25
Detección de un error simple. .................................................................................................................................................. 26
Corrección de un error simple.................................................................................................................................................. 26
Ejemplo código Hamming de 7 bits. ........................................................................................................................................ 29
Problema 5.7. ............................................................................................................................................................ 29
Problema 5.8. ............................................................................................................................................................ 30
Problema 5.9. ............................................................................................................................................................ 31
Problema 5.10. .......................................................................................................................................................... 33
Problema 5.11. .......................................................................................................................................................... 36
Problema 5.12. .......................................................................................................................................................... 37
Problema 5.13. .......................................................................................................................................................... 41
Problema 5.14. .......................................................................................................................................................... 41
Problema 5.15. .......................................................................................................................................................... 42
REFERENCIAS. ................................................................................................................................................................ 43
ÍNDICE GENERAL. ........................................................................................................................................................... 44
ÍNDICE DE FIGURAS. ....................................................................................................................................................... 45
Índice de Figuras.
Capítulo 6
Algoritmos de minimización
La tabla de implicantes tiene como columnas los mintérminos y como renglones los cubos que
son implicantes primos. Para n variables, se tienen 2 n mintérminos o columnas; y se dispone de
3n
un resultado que establece que se pueden tener del orden de implicantes primos. Con lo cual
n
los algoritmos para reducir la tabla, en forma exacta, tienen un costo exponencial.
Por esta razón se han desarrollado heurísticas de minimización que están basadas en
propiedades de las funciones booleanas y que producen resultados bastante satisfactorios, desde
un punto de vista de ingeniería. Un excelente ejemplo de estos programas es espresso, que se
trata en el Apéndice 3.
6.1. Implicación
f X
Un implicante primo es un implicante que no puede ser agrupado con otros implicantes, para
formar un sub-cubo de mayor dimensión.
Encontrar los implicantes primos es determinar los grupos de mintérminos que pueden
escribirse con menos literales.
Es aquél que cubre a lo menos un mintérmino de la función que no es cubierto por otros
implicantes primos. Deben estar presentes en la forma mínima.
Los mintérminos superfluos pueden emplearse para formar implicantes primos; pero no deben
considerarse para los implicantes primos esenciales.
Para una función de 4 variables, cuyo mapa es de la figura 6.2, se tienen los siguientes
implicantes primos:
A'B'D, BC', AC, A'C'D, AB, B'CD
De los 6 implicantes primos, sólo AC es esencial, ya que contiene al mintérmino: AB'CD' que
no es cubierto por ningún otro implicante primo.
A
0 d 1 0
1 1 1 0
D
1 0 1 1
C
0 0 1 1
B
Figura 6.2 Implicantes primos
Ejemplo 6.2.
0 0 1 0
1 1 1 0
D
0 1 1 1
C
0 1 0 0
B
Figura 6.3 Implicantes primos ejemplo 6.2
Sólo BD es no esencial, ya que los demás contienen un mintérmino no cubierto por los otros
implicantes primos.
La función mínima debe contener los esenciales, y con éstos se logra cubrir completamente a la
función:
f = ABC' + ACD + A'BC + A'C'D
Es un método sistemático para encontrar la expresión mínima de una función, que no depende
de la habilidad para reconocer agrupaciones en un mapa de Karnaugh.
Básicamente, es una búsqueda exhaustiva de todas las adyacencias entre los mintérminos de la
función, mediante la aplicación sistemática del teorema de fusión ( a ab ab ) a todos los
términos de la forma canónica.
Los términos que originan nuevas entradas, en la próxima columna, sólo necesitan marcarse una
vez. Pero pueden usarse las veces que sea necesario.
Nótese que la segunda columna lista todos los grupos de dos mintérminos. La tercera, lista
grupos de cuatro mintérminos adyacentes, y así sucesivamente. Al finalizar el proceso anterior,
los elementos no marcados en las columnas, corresponden a los implicantes primos.
Ejemplo 6.3.
Obtener los implicantes primos de: f (a, b, c) m(0, 2,5, 6, 7)
No se pueden formar nuevas columnas, por lo tanto los implicantes primos son:
Nótese que en la segunda columna, se han identificado los renglones con los grupos de
mintérminos.
La tabla de implicantes se forma empleando los implicantes primos en los renglones y los
mintérminos de la función en las columnas. Luego, en cada renglón, se marca con valor 1 las
columnas de los mintérminos pertenecientes al implicante considerado.
Aquellas columnas que tengan sólo una marca, permiten detectar a los implicantes primos
esenciales. En esta tabla debe escogerse el menor número de implicantes primos que cubran
todos los mintérminos de la función. Evidentemente, deben estar presentes todos los implicantes
primitivos esenciales en la expresión mínima de una función.
Ejemplo 6.4.
La tabla de implicantes, para el ejemplo anterior:
0 2 5 6 7
a'c' 1 1
bc' 1 1
ac 1 1
ab 1 1
La columna 0, por tener sólo un renglón marcado, permite identificar a: a'c' como implicante
primo esencial.
Se acostumbra encerrar con un círculo las marcas en las columnas que definen los implicantes
primos esenciales.
Nótese que sólo resta cubrir el mintérmino 6, lo que puede lograrse eligiendo: bc' o ab.
o, alternativamente: f = a'c' + ac + ab
En caso de tener tablas complejas, éstas pueden reducirse mediante el siguiente método.
Cada vez que se selecciona un implicante para formar la función, se remueve el renglón
correspondiente.
Cuando se remueve un renglón, también se eliminan las columnas que tienen marcas en dicho
renglón.
Se comienza eliminando los implicantes primos esenciales. Luego la tabla puede seguir
reduciéndose, aplicando las siguientes reglas:
Un renglón cubre a otro, si tiene marcas en las columnas marcadas del otro, pudiendo además
tener columnas adicionales marcadas. Podría decirse que el renglón eliminado es menos
importante, debido a su menor cobertura de la función.
Una columna cubre a otra, si contiene marcas en cada renglón que esa otra columna tiene
marcas, pudiendo además tener renglones adicionales marcados.
Ejemplo 6.5.
En la Figura 6.6, el implicante primo ipa cubre al implicante primo ipb. Puede eliminarse
renglón ipb; ya que si luego se eligiese ipa, m1 y m3 quedarían considerados en la función.
m1 m2 m3
ipa 1 1 1
ipb 1 1
1 5 13 9
01 1 1
3 7 15 11
11 1 1
2 6 14 10
10
f(A, B, C, D)=m(0,4,5,11,13,15)
Figura 6.7 Mapa con implicantes.
0 4 5 11 13 15
A‟C‟D‟ 1 1
A‟BC‟ 1 1
BC‟D 1 1
ABD 1 1
ACD 1 1
Se tiene que A’C’D’ y ACD son implicantes primos esenciales. Reduciendo la tabla de la Figura
6.8, se obtiene:
5 13
A‟BC‟ 1
BC‟D 1 1
ABD 1
Si se elimina columna m2, para cubrir al mintérmino m1 debe seleccionarse uno de los cubos:
ipb o ipc; y como cualquiera de éstos contiene a m2, se considera automáticamente a m2 en la
cobertura.
1 5 13 9
01 1 1 d d
3 7 15 11
11 1 1
2 6 14 10
10 1 d
1 2 3 5 7
A‟B‟ 1 1 1
C‟D 1 1
A‟D 1 1 1 1
A‟C 1 1 1
2 5 7
A‟B‟ 1
C‟D 1
A‟D 1 1
A‟C 1 1
En la Figura 6.13, se tiene que el cubo A’D cubre al cubo C’D; y que el implicante A’C cubre al
implicante A’B’. Eliminando los renglones cubiertos, resulta:
2 5 7
A‟D 1 1
A‟C 1 1
En la tabla reducida de la Figura 6.14, los cubos A’D y A’C deben formar parte de la función ya
que tienen una columna con una sola marca; éstos podría denominarse implicantes primos
esenciales secundarios. Resulta:
Se repite la aplicación de las reglas hasta agotar la tabla. Siempre se remueven aquellos
renglones que contengan columnas con una sola marca; se tratan en la tabla reducida, en forma
similar a los implicantes primos esenciales en la tabla completa.
La función se forma con los implicantes de los renglones removidos por contener columnas con
una sola marca.
En determinados casos, luego de remover los implicantes primos esenciales, los renglones
cubiertos por otros, y las columnas que cubren a otras, no puede seguir reduciéndose la tabla.
Se denominan tablas reducidas cíclicas, aquéllas que no pueden reducirse según el método
recién planteado.
Para resolver tablas cíclicas se tienen varios métodos; uno es una heurística conocida como
“bifurcación y acotamiento”, otro es el algoritmo o método exacto de Petrick.
6.5.1. Bifurcación.
La columna costo puede ser el número de literales del implicante primo. Se escoge,
tentativamente, uno de los implicantes, removiéndolo junto a los mintérminos que cubre; se
Para el caso de la tabla cíclica de la Figura 6.15, se escoge en primer lugar Ip1, con costo 2,
queda, luego de la reducción:
Costo m3
Ip2 4 1
Ip3 2 1
Costo m1
Ip1 2 1
Ip3 2 1
Costo m2
Ip1 2 1
Ip2 4 1
Entonces tenemos dos soluciones con costo total 4, para la solución de la tabla cíclica. A este
costo habría que sumarle el debido a la selección de implicantes primos antes de la tabla cíclica.
Si el subproblema resulta cíclico, debe repetirse el procedimiento en forma recursiva.
Se plantea una expresión booleana P, como producto de sumas, que garantice que la cobertura
considera todos los mintérminos de la tabla, sea ésta cíclica o no, y que a la vez entregue todas
las soluciones de cobertura posibles.
Si definimos Pi como verdadera si el implicante primo Ipi está presente en la cobertura; y falsa
si no está presente, podemos plantear, observando la Figura 6.19, que para que el mintérmino
m1 esté presente en la cobertura, debe cumplirse que debe estar presente el implicante Ip1 o el
implicante Ip4; es decir: (P1+P4).
P = (P1+P4)(P2+P3)(P1+P3)(P2+P4)
Se tienen dos soluciones, que resuelven la tabla cíclica: los implicantes Ip1 e Ip2, o bien los
implicantes Ip3 e Ip4. Puede verificarse que ambas son coberturas, con la tabla de la Figura
6.19.
Se elige la de menor costo.
Ejemplo 6.8.
Si una columna cubre a otra, puede eliminarse la columna que cubre a las otras. Por ejemplo si
un mintérmino tiene garantizada su inclusión, si (P6 + P7 + P8) y si otro mintérmino tiene
asegurada su cobertura si: (P6 + P7); entonces puede comprobarse que:
P= (Pp1)(...)(Ppm)(Pa+Pb)(…)
Donde (Pp1)(…)( Ppm) son los m implicantes primos esenciales. El resto de las sumas deben
garantizar la inclusión de los mintérminos no esenciales en la cobertura de la función. De esta
forma el tratamiento algebraico para reducir los productos de sumas a suma de productos se
complica un tanto, pero se obtienen todas las formas de implementación posibles. En todas éstas
deben estar presentes los m implicantes primos esenciales.
Ejemplo 6.9.
Si se toma la tabla de la Figura 6.13, y se enumeran los implicantes según:
2 5 7
IP1 A‟B‟ 1
IP2 C‟D 1
IP3 A‟D 1 1
IP4 A‟C 1 1
P = (P1+P4)(P2+P3)(P3+P4)
Lo cual muestra que el método de Petrick obtiene todas las soluciones posibles.
Debe notarse que si se eliminan los renglones que son cubiertos por otros, no se obtienen todas
las soluciones. En el caso del ejemplo de la Figura 6.20, deberían eliminarse el renglón IP1, que
es cubierto por IP4; y el implicante primo IP2 que es cubierto por el renglón IP3.
Ejemplo 6.10.
Reducir la tabla de implicantes de la función f(a,b,c,d) que se muestra en la Figura 6.21.
Notar que el costo de todos los implicantes primos es similar, ya que todos contienen dos
mintérminos.
1 3 4 6 7 9 13 15
ipa 1 1
ipb 1 1
ipc 1 1
ipd 1 1
ipe 1 1
ipf 1 1
ipg 1 1
iph 1 1
1 3 7 9 13 15
ipa 1 1
ipc 1 1
ipd 1
ipe 1 1
ipf 1 1
ipg 1 1
iph 1 1
El renglón ipc cubre a ipd; por lo tanto, puede eliminarse el renglón ipd.
1 3 7 9 13 15
ipa 1 1
ipc 1 1
ipe 1 1
ipf 1 1
ipg 1 1
iph 1 1
Ahora, ipe cubre a ipc; e ipg cubre a iph, queda eliminando a ipc e iph:
7 9 13 15
ipe 1 1
ipf 1 1
ipg 1 1
ipe e ipg deben formar parte de la función; pues contienen a las columnas 7 y 9, que en la tabla
reducida sólo tienen una marca. Luego de esto, la tabla queda vacía.
Finalmente:
f = ipb + ipa + ipe + ipg
f=a’bd’+a’b’d+bcd+ac’d
Existen otras formas posibles. Éstas se obtienen eliminando otro implicante cuando la tabla
resultó cíclica. Por ejemplo, eliminando ipc, en la Figura 6.18, resulta:
1 9 13 15
ipa 1
ipe 1
ipf 1 1
ipg 1 1
iph 1 1
1 9 13 15
ipf 1 1
ipg 1 1
iph 1 1
Aplicando el método de Petrick a la tabla de la Figura 6.21, se debe satisfacer p, para cubrir
todos los mintérminos:
p= (pa+ph)*(pa+pc)*(pb)*(pb+pd)*(pc+pd+pe)*(pg+ph)*(pf+pg)*(pe+pf);
Expresando como suma de productos, se obtienen siete soluciones, debe notarse que pb, está
presente en todos los productos, ya que es esencial. A continuación debe evaluarse el costo de
cada una de las soluciones para seleccionar cuales son mínimas.
Los dos últimos productos, formados por cuatro implicantes primos son las dos soluciones
obtenidas antes, con 16 entradas. Los primeros cuatro productos del método de Petrick,
conducen a soluciones con 15 literales y 20 entradas, por lo cual no son considerados soluciones
mínimas.
f= (b+d)(a’+d)(a’+b+c’)(a+b’+c+d’)
Es una variante para encontrar los implicantes primos, representando en forma digital el método
de Quine, y es adecuado para ser programado en un computador.
Su complejidad, de tipo exponencial, lo convierte en un problema intratable para elevados
valores de variables.
Se comparan los elementos de cada grupo, buscando adyacencias, y se forman las siguientes
columnas en forma similar al método de Quine. Notando que en la representación decimal,
diferencias de 1, 2, 4, 8 y, en general, de una potencia de 2, indican una diferencia en un bit.
También se mantiene la separación en grupos en las nuevas columnas.
Es posible encontrar una función que entregue el número de unos en representación binaria de
un número decimal. La cual facilita la formación de los grupos.
La segunda columna representa todas las agrupaciones posibles de dos mintérminos. La tercera
columna representa grupos de cuatro mintérminos, y así sucesivamente.
El algoritmo permite trabajar con dígitos decimales o binarios. Se anotan en los ejemplos
columnas binarias y decimales.
En la segunda y siguientes columnas, las variables eliminadas se denotarán con un guión
(también es posible anotar la posición del guión con un número decimal potencia de dos).
Pueden combinarse dos términos si ellos difieren solamente en un literal; por esta razón, no
podrán combinarse dos términos en un mismo grupo. Los miembros de un grupo de un solo "1",
difieren en dos variables por lo menos; lo mismo puede establecerse para los otros grupos. Esta
observación organiza la búsqueda de adyacencias, ya que sólo es preciso comparar entre grupos
adyacentes.
Ejemplo 6.11.
g(a, b, c, d, e, f) = m(0,2,6,7,8,10,12,14,15,41)
Decimal Binario
mintérmino a b c d e f Número de unos
0 0 0 0 0 0 0 0
2 0 0 0 0 1 0 1
8 0 0 1 0 0 0
6 0 0 0 1 1 0 2
10 0 0 1 0 1 0
12 0 0 1 1 0 0
7 0 0 0 1 1 1 3
14 0 0 1 1 1 0
41 1 0 1 0 0 1
15 0 0 1 1 1 1 4
Los mintérminos del grupo con n unos, se comparan con todos los del grupo con (n+1) unos.
Decimal Binario
Grupo Posición a b c d e f Número de unos
0,2 2 0 0 0 0 - 0 0
0.8 8 0 0 - 0 0 0
2,6 4 0 0 0 - 1 0 1
2,10 8 0 0 - 0 1 0
8,10 2 0 0 1 0 - 0
8,12 4 0 0 1 - 0 0
6,7 1 0 0 0 1 1 - 2
6,14 8 0 0 - 1 1 0
10,14 4 0 0 1 - 1 0
12,14 2 0 0 1 1 - 0
7,15 8 0 0 - 1 1 1 3
14,15 1 0 0 1 1 1 -
No importa el orden de las listas de mintérminos, sólo se anotan una vez. Por ejemplo, entre los
primeros grupos se tiene:
0, 2 (2)
8, 10 (2)
Diferencia: 8, 8 generando: 0, 2, 8, 10 (2,8)
0, 8 (8)
2, 10 (8)
Diferencia: 2, 2 generando: 0, 8, 2, 10 (8,2)
Decimal Binario
Grupo Posición a b c d e f Número de unos
0, 2, 8, 10 2,8 0 0 - 0 - 0 0
2, 6, 10, 14 4,8 0 0 - - 1 0 1
8, 10,12,14 2,4 0 0 1 - - 0
6, 7, 14, 15 1,8 0 0 - 1 1 - 2
Implicantes 0 2 8 6 10 12 7 14 41 15
primos
41 1
0, 2, 8, 10 1 1 1 1
2, 6, 10, 14 1 1 1 1
8, 10, 12, 14 1 1 1 1
6, 7, 14, 15 1 1 1 1
Nótese que todo el proceso podría haberse realizado sólo considerando la información binaria, o
solamente la información decimal.
6.7.1. Fundamentos.
f p1 p2 ... pk
Si se tiene:
pi a p j con a 1 , siendo a una de las variables de f .
Se puede descartar pi de f.
Esto debido a que:
pi p j a p j p j (a 1) p j p j
Lo cual puede anotarse:
pi p j
El método consiste en introducir términos implicados, de tal manera de eliminar los términos
que los implican. Es decir, se introduce p j , en la suma de productos, y se elimina pi .
f xT x ' yT yT
Como se tiene que:
x ' yT yT
f xT yT
La formación de implicantes basada en el teorema de fusión, sobre la que está basado el método
de Quine, también puede verse como la eliminación de productos que implican a otros
productos:
f xT x ' T
Los productos S y R tienen consenso S0 R0 , si existe una variable x tal que S xS0 y R x ' R0 ;
y no existe una variable y , en el producto S 0 , que aparezca como y ' en R0 . Si existe la variable
y , el término S0 R0 es cero, y no hay consenso. Se dice que la variable x es biforme en el
conjunto: S , R . Los productos S y R están formados por conjuntos disjuntos de mintérminos.
El consenso es el implicante primo de los mintérminos de S y R , y es la máxima cobertura entre
las fronteras de la exclusión mutua entre S y R .
AB S AB
CD 00 01 11 10 CD 00 01 11 10
0 4 12 8 0 4 12 8
00 1 00 1 1
1 5 13 9 1 5 13 9
01 1 01 1 1
3 7 15 11 3 7 15 11
11 1 1 1 1 11 1 1 1 1
2 6 14 10 2 6 14 10
10 10
S0R0=A‟BD R S0R0=A‟D
f p1 p2 ... pk
Sea el conjunto:
L p1 , p2 ,..., pk
AB
CD 00 01 11 10
0 4 12 8
00 1
1 5 13 9
01 1 1
15 11
11 13 17 1
2 6 14 10
10 1 1
D es biforme, se tiene consenso A’B’C’ entre (0000, 00_1), A’BC entre (0110, 01_1) y ABC
entre (1110, 1111).
AB
CD 00 01 11 10
0 4 12 8
00 1
1 5 13 9
01 1 1
3 7 15 11
11 1 1 1
2 6 14 10
10 1 1
Agregándolos a L:
L 0000, 0110,1110,1111, 00 _1, 01_1, 000 _, 011_,111_
Eliminando los que implican consensos:
L 00 _1, 01_1, 000 _, 011_,111_
Agregando (_11_) a L:
L 00 _1, 01_1, 000 _, 011_,111_, _11_
Eliminando los que implican consenso:
L 00 _1, 01_1, 000 _, _11_
Finalmente B, es biforme, se tiene consenso A’D entre (00_1,01_1),
AB
CD 00 01 11 10
0 4 12 8
00 1
1 5 13 9
01 1 1
15 11
11 13 17 1
2 6 14 10
10 1 1
Agregando (0__1) a L:
L 00 _1, 01_1, 000 _, _11_, 0 __1
Eliminando los que implican consenso, se obtienen los implicantes primos:
L 000 _, _11_, 0 __1
AB
CD 00 01 11 10
0 4 12 8
00 1
1 5 13 9
01 1 1
3 7 15 11
11 1 1 1
2 6 14 10
10 1 1
Entonces:
S0 R0 1 1 0 0
Debido a que el producto de una variable o su complemento en S, cuando no está presente esa
variable en R, deja la variable en el término de consenso.
Lo anterior puede comprobarse en el siguiente ejemplo. El producto: (ab ' e ')(ab ' cde) ab ' cd
Puede representarse, empleando notación de cubos, por:
S 10--0
R =10111
S0 R0 1011-
El código, con notación de subcubo, para pi , sintoniza con todos los caracteres binarios de p j ;
y pi tiene unos o ceros en posiciones donde p j tiene .
Ejemplo: 1011 1 1 1 1
Ejemplo 6.13.
Aplicando las operaciones binarias anteriores, pueden determinarse los implicantes primos de f,
debe observarse que L puede estar formado por productos, no necesariamente mintérminos.
Para: f ( x1 , x2 , x3 , x4 , x5 , x6 ) , se tiene:
L 0 11 1, 0 0 1,1 11 0,1 1 1
x4 y x5 no son biformes en L.
x6 es biforme en L, en 1 11 0,1 1 1 con consenso: 1 11 y también en:
1 11 0, 11 1 con consenso: 1 11
L 0 0 1,1 11 0,1 1 1, 11 1, 0 1 1,1 11
Se tiene la única implicación: 1 11 0 1 11 .
Ejemplo 6.14.
Minimizar: be’f+acde’fgh+b’gh
Se tiene una función de ocho variables, para la cual es difícil emplear mapas de Karnaugh.
Con b biforme, el consenso entre el primer y último término es: e’fgh.
Pero acde’fgh implica e’fgh. A su vez e’fgh es término de consenso, e implica a be’f y b’gh.
Entonces resulta: be’f + b’gh
Ejemplo 6.15.
Minimizar: ac’de+d’+e’+c.
Problemas resueltos.
Problema 6.1.
Solución.
Se ordena según número de unos de los mintérminos. En la primera columna quedan todos los
mintérminos marcados, en el proceso de formar la siguiente columna de 1-cubos.
un uno
8 001000
10 001010 dos unos
24 011000
26 011010 tres unos
42 101010
58 111010 cuatro unos
59 111011
cinco unos
8,10 0010_0
8,24 0_1000
10,26 0_1010
10,42 _01010
24,26 0110_0
26,58 _11010
42,58 1_1010
58,59 11101_ ip1 queda sin marcar
La tercera columna, de los 2-cubos, es la última que puede formarse. Y por lo tanto los
renglones quedan sin marcar.
Problema 6.2.
2 3 4 5 8 10
ip1 x x x
ip2 x x x x
ip3 x x
ip4 x x x x
ip5 x x
a) Determinar cuáles renglones pueden eliminarse por estar cubiertos por otro.
b) Determinar cuáles columnas pueden eliminarse.
c) Explicar la razón por la que ip2 e ip4 figuran con los mismos mintérminos.
Solución.
a) ip1 cubre a ip3 y también a ip5. Podrían eliminarse renglones asociados a ip3 e ip5.
ip2 cubre a ip4 y viceversa; puede eliminarse uno de ellos.
b) Columna 3 puede eliminarse, ya que está cubierta por la columna 2. (el mintérmino 3 tiene
asegurada su consideración)
Columna 4 puede eliminarse, ya que está cubierta por las columnas 5, 8 y 10. (el mintérmino 4
tiene asegurada su consideración)
Columnas 5, 8 y 10 se cubren entre sí. Pueden eliminarse dos cualesquiera.
c) ip2 e ip4 tienen iguales mintérminos, se diferencian en implicantes superfluos; los cuáles no
se indican en la tabla.
Ejercicios propuestos.
Ejercicio 6.1.
Y para que estén presentes todos los mintérminos, debe cumplirse, aplicando el método de
Petrick:
P = (P1+P8+P9)*(P6+P7+P8+P9)*(P6+P7)*(P1+P3+P4+P9)*(P3+P4)*(P3+P6+P9)*
(P3+P6)* (P1+P2+P5+P8)*(P2+P5)*(P2+P7+P8)*(P2+P7)*(P1+P4+P5)*(P4+P5);
Lo cual entrega 15 soluciones, seis de ellas formadas por cuatro implicantes, que resultan las
formas mínimas.
INORDER = P1 P2 P3 P4 P5 P6 P7 P8 P9;
OUTORDER = P;
P = (P1+P8+P9)*(P6+P7+P8+P9)*(P6+P7)*(P1+P3+P4+P9)*(P3+P4)*(P3+P6+P9)*(P3+P6)*
(P1+P2+P5+P8)*(P2+P5)*(P2+P7+P8)*(P2+P7)*(P1+P4+P5)*(P4+P5);
Los últimos seis productos son las formas mínimas, y se han anotado a la derecha de las
funciones en el enunciado del problema.
Ejercicio 6.3.
Ejercicio 6.4.
Ejercicio 6.5.
Ejercicio 6.6.
Ejercicio 6.7.
Demostrar
f g f g g y f g f
f g ( f g) y (g f )
W.V. Quine. "The problem of simplifying truth functions." American Mathematical Monthly
Vol. 59. Octubre 1952. págs 521-531.
W.V. Quine. "A way to simplify truth functions." American Mathematical Monthly Vol. 62.
Noviembre 1955. págs 627-631.
E.J. McCluskey. "Minimization of Boolean Functions". Bell Syst. Tech. Journal N°6,
Noviembre 1956. págs. 1417-1444.
P. Tison. "Théorie des consensus.” These présentée à La Faculte des Sciences de L'Universite
de Grenoble. Junio 1965.
P. Tison, "Generalization of consensus theory and application to the minimization of Boolean
functions," IEEE Trans. Electron. Comput., vol. EC-16, pp. 446-456, Aug. 1967.
Petrick, S. R. “A Direct Determination of the Irredundant Forms of a Boolean Function from the
Set of Prime Implicants”. Technical Report AFCRC-TR-56-110, Air Force Cambridge Research
Center, Cambridge, MA, USA. 1956.
Índice general.
CAPÍTULO 6 ............................................................................................................................................. 1
ALGORITMOS DE MINIMIZACIÓN ................................................................................................... 1
6.1. IMPLICACIÓN ..................................................................................................................................... 1
6.2. IMPLICANTES PRIMOS ........................................................................................................................ 2
6.3. IMPLICANTE PRIMO ESENCIAL ............................................................................................................ 2
Ejemplo 6.1. ........................................................................................................................................ 3
Ejemplo 6.2. ........................................................................................................................................ 3
6.4. MÉTODO DE QUINE (1952) ................................................................................................................ 4
6.4.1. Obtención de implicantes primos .............................................................................................. 4
Ejemplo 6.3. ..................................................................................................................................................... 4
6.4.2. Tabla de implicantes ................................................................................................................. 5
Ejemplo 6.4. ..................................................................................................................................................... 5
6.4.3. Reducción de tablas................................................................................................................... 6
Ejemplo 6.5. ..................................................................................................................................................... 6
Ejemplo 6.6. ..................................................................................................................................................... 8
6.5. TABLA REDUCIDA CÍCLICA. ............................................................................................................. 10
6.5.1. Bifurcación. ............................................................................................................................. 10
Ejemplo 6.7. ................................................................................................................................................... 10
6.5.2. Petrick (1956). ......................................................................................................................... 11
Ejemplo 6.8. ................................................................................................................................................... 12
Ejemplo 6.9. ................................................................................................................................................... 13
Ejemplo 6.10. ................................................................................................................................................. 13
6.6. MÉTODO DE QUINE-MCCLUSKEY (1956) ........................................................................................ 17
Ejemplo 6.11...................................................................................................................................... 17
6.7. MÉTODO DE TISON (1965) PARA ENCONTRAR IMPLICANTES PRIMOS. CONSENSO REITERADO. ........ 20
6.7.1. Fundamentos. .......................................................................................................................... 20
6.7.2. Algoritmo de Tison. ................................................................................................................. 21
Ejemplo 6.12. ................................................................................................................................................. 22
6.7.3. Operaciones para desarrollar el algoritmo, ........................................................................... 25
a) Obtener términos de consenso. .................................................................................................................. 25
b) Un producto que implica otro: pi p j ............................................................................................... 26
Ejemplo 6.13...................................................................................................................................... 26
Ejemplo 6.14...................................................................................................................................... 27
Ejemplo 6.15...................................................................................................................................... 27
PROBLEMAS RESUELTOS. ........................................................................................................................ 28
Problema 6.1. .................................................................................................................................... 28
Problema 6.2. .................................................................................................................................... 29
EJERCICIOS PROPUESTOS. ....................................................................................................................... 29
Ejercicio 6.1. ..................................................................................................................................... 29
Ejercicio 6.2. ..................................................................................................................................... 30
Ejercicio 6.3. ..................................................................................................................................... 31
Ejercicio 6.4. ..................................................................................................................................... 31
Ejercicio 6.5. ..................................................................................................................................... 31
Índice de figuras
Capítulo 7
Sistemas Combinacionales
Las componentes digitales electrónicas han evolucionado rápidamente. Se han logrado elevados
niveles de integración; es decir gran número de compuertas y flip-flops en un solo dispositivo.
Debido a que los problemas computacionales que deben ser resueltos son de gran complejidad,
y a menudo de costo exponencial, se han desarrollado heurísticas y nuevos conceptos para
describir sistemas digitales.
Estudiaremos algunos bloques constructivos básicos: Veremos que ellos pueden implementarse
en base a compuertas, o bien existen como dispositivos de mediana integración, o son partes o
bloques que se pueden agregar a esquemáticos, o son elementos básicos de los dispositivos
programables, o son módulos de software de los lenguajes descriptivos de hardware.
Mediante señales de control se selecciona una de las 2 n entradas y se la dirige hacia una salida
única. Se tienen n señales de control que, al ser decodificadas internamente, permiten establecer
la única vía hacia el canal de salida. El dispositivo puede emplearse para convertir una entrada
paralela en una salida en serie.
Suele existir una señal de habilitación (enable) que permite el control del multiplexor. Cuando,
por razones que se verán más adelante, se autoriza el ingreso del control en un breve lapso de
tiempo, la señal de habilitación toma la forma de un pulso angosto. Este pulso de control, se
denomina STROBE, en inglés.
La Figura 7.2, muestra un símbolo lógico para un multiplexor de dos vías a una. El símbolo
representa la ecuación: f (c, x0 , x1 ) c ' x0 cx1
c
x0
0
f
x1
1
x0 f
x1
La Figura 7.3, muestra la realización o síntesis de un mux de 4 vías a una, mediante tres muxs
de 2 vías a una. La descomposición aumenta el número de niveles.
c1
c0
x0 0
x1 1
0
1
f
x2 0
x3 1
f(c1, c0, x3, x2, x1, x0) = c1c0 x3 + c1c0' x2 + c1'c0 x1 + c1'c0' x0
x0
x1 f
x2
x3
c1 c0
x0 00 0
x1 01 x 1
x2 f f
10 2
x3 11 3
La Figura 7.5 derecha, muestra conjuntos de señales con notación de buses o arreglos de
alambres.
Ejemplo 7.1.
f x1 x2 x1 x3 x1 x3
f ( x1 , x2 , x3 ) x1 f (1, x2 , x3 ) x1 f (0, x2 , x3 ) x1 ( x2 x3 ) x1 ( x3 )
x1
x3’ = f(0,x2,x3 ) 0
f
x2+x3 = f(1,x2,x3 ) 1
f ( x1 , x2 , x3 ) x1 f (1, x2 , x3 ) x1 f (0, x2 , x3 )
x1 ( x2 f (1,1, x3 ) x2 f (1, 0, x3 )) x1 ( x2 f (0,1, x3 ) x2 f (0, 0, x3 ))
x1 x2 f (1,1, x3 ) x1 x2 f (1, 0, x3 ) x1 x2 f (0,1, x3 ) x1 x2 f (0, 0, x3 )
x3’=f(0,0,x3 ) 0
x3’=f(0,1,x3 ) 1
0
f
x2 1
x3=f(1,0,x3 ) 0
1=f(1,1,x3 ) 1
f x1 x2 x1 x3 x1 x3 x1 x2 x1 x2 x3 x1 x2 x3 x1 x2 x3 x1 x2 x3
Simplificando, se obtiene:
f x1 x21 x1 x2 x3 x1 x2 x3 x1 x2 x3
Comparando coeficientes con la expansión realizada para tres variables, se obtienen las
funciones de x3 , que se indican en la Figura 7.7.
Del diseño anterior puede verse que un mux de 4 a 1, permite implementar cualquier función de
tres variables.
Un multiplexor de 8 vías a una, cuyo diagrama se muestra en la Figura 7.9, implementado en
dos niveles, está disponible en la familia TTL, se tienen los dispositivos: 74151, 74152.
f=c2c1c0I7+c2c1c0'I6+c2c1'c0I5+c2c1'c0'I4+c2'c1c0I3+c2'c1c0'I2+c2'c1'c0I1+c2'c1'c0'I0
I0
I1
I2 Mux
I3 8:1
I4 f
I5
I6 8:1
I7 mu
x
c2c1c0
El 74150 implementa un mux de 16 vías a una; este mux permite implementar cualquier función
de cinco variables.
Una alternativa electrónica es dotar a estos multiplexores de una salida de tercer estado. En este
caso la compuerta de salida además de los valores lógicos 1 y 0, puede quedar en un estado de
alta impedancia. En caso de TTL, se disponen conexiones para que ambos transistores del
totem-pole de salida queden cortados. Este control adicional, permite conectar las salidas de dos
multiplexores a un mismo alambre, ya que sólo uno de los multiplexores impone valores lógicos
en la salida; el otro, está en tercer estado.
Esto permite componer un mux de 2n vías a partir de dos muxs de n vías.
control de tercer estado
x0
x1 z
x2
x3
c1 c0
Además de los valores lógicos 0 y 1, hemos visto el valor superfluo (usualmente X o d), sin
embargo estos valores no aparecen una vez que se ha realizado un diseño ya que éstos se han
empleado para minimizar, y han sido reemplazados por unos o ceros según convenga.
Suele encontrarse un tercer estado en el cual puede estar una variable booleana, este valor es de
alta impedancia, y se lo denomina corrientemente Z. Cuando una salida está en tercer estado,
puede considerársela desconectada.
Las compuertas que pueden proveer esta salida tienen una entrada adicional, denominada
habilitación de la salida (output enable). Cuando esta señal de control está desactivada la salida
está en tercer estado; cuando está activa, la salida puede tomar valores lógicos, de acuerdo a las
entradas.
El siguiente diagrama ilustra un buffer de tercer estado (amortiguador entre etapas), junto a su
tabla de verdad, en la cual aparecen los estados X (superfluo) y Z (de tercer estado):
OE E OE S
X 0 Z
0 1 0
E S
1 1 1
E1 OE S
1 E1
OE' S
0 E2
E2
En numerosos circuitos se proveen buffers de tercer estado que activan la salida cuando su nivel
es bajo. En estos casos la señal de control, antes de ingresar al buffer, tiene un pequeño círculo,
que se interpreta como un inversor. En estos casos de activación del control mediante nivel
bajo, el nombre de la señal suele definirse como una señal negada, según se ilustra, en el
siguiente diagrama:
OE ' E OE ' S
X 1 Z
0 0 0
E S
1 0 1
Figura 7.13. Buffer con salida activada por señal de lógica negativa.
7.4. Decodificadores.
Para un decodificador de dos líneas de entradas, se tendrán cuatro salidas. Pueden denominarse
decodificadores de 2 entradas a 4 salidas, anotando 2 : 4; o bien, una salida de las cuatro, lo que
se anota: 1 de 4.
E
Dec 3 z3
2a4 2 z2
1 z1
1 0 0 z0
c1 c0
z0 E c1 c0 z3 z2 z1 z0
1 0 0 0 0 0 1
z1 1 0 1 0 0 1 0
1 1 0 0 1 0 0
1 1 1 1 0 0 0
z2
0 X X 0 0 0 0
z3 z0 = c1' c0' E
z1 = c1' c0 E
z2 = c1 c0' E
z3 = c1 c0 E
c0 E
c1
Figura 7.15. Diseño en base a compuertas
En toda memoria existe un decodificador del bus de direcciones, cuyas salidas activan sólo una
de las palabras de la memoria.
3
2
1
1 0 0
cd
3
2
1
1 0 0
cd
3
2
1
1 0 0
cd
z
0
z
1
x . z
2
.
.
control z
2n-1
Figura 7.16. Esquema funcional de Demultiplexor
Permite dirigir la información que fluye desde x, por una (y sólo una) de las 2 n salidas, de
acuerdo a una entrada de control codificada, en n líneas. La señal de control selecciona la vía
por la que fluirá la única información de entrada.
z0
z0 = c1' c0' x
z1 z1 = c1' c0 x
x z2 = c1 c0' x
z2 z3 = c1 c0 x
z3
c1 c0
La señal x fluye hacia la salida z3, si las señales de control toman valores: c1 = 1, c0 = 1. El
resto de las salidas: z0, z1 y z2 toman valor cero.
c x
Para un demultiplexor con una entrada, tres señales de control y 8 salidas, se tienen las
ecuaciones:
y
cdemux
Pueden usarse para resolver la interconexión entre múltiples fuentes y múltiples destinos.
Una aplicación importante es seleccionar los operandos de entrada a una unidad aritmética, y la
posibilidad de llevar el resultado por diferentes rutas. La Figura 7.20 ilustra la posibilidad de
escoger dos valores diferentes para cada operando de la unidad aritmética.
A0 A1 B0 B1
Ca MUX MUX Cb
A B
Sumador
Cs DEMUX
S0 S1
En el diseño del camino de datos de un procesador suelen emplearse muxes para movilizar la
información. En un caso práctico, A0, A1, B0, B1, S0 y S1 son buses formados por 16 ó 32
señales.
En circuitos con funciones cada vez más complejas, los diseños lógicos mediante componentes
SSI, o primitivas fijas MSI/LSI ya no resultaron convenientes.
Comenzaron a emplearse componentes programables, por la disminución del tiempo de diseño y
verificación; y además la posibilidad de reprogramación en caso de modificaciones al diseño.
Esto estuvo ligado a la aparición de herramientas computacionales de apoyo al diseño.
Los primeros dispositivos programables fueron: PROM, memoria programable sólo de lectura
(Programable Read Only Memory); PLA, arreglos lógicos programables (Programable Logic
Arrays); PAL arreglo de and programable (Programable Array Logic).
Estos dispositivos poseen, como parte importante, una matriz de diodos.
Supongamos que deseamos tener dos palabras de 3 bits cada una. Una de ellas debe ser 101 y la
otra, 001. En la Figura 7.21 se tienen dos líneas horizontales o de palabras que pueden estar
conectadas a voltajes altos o bajos. Se conectan diodos entre las líneas de palabra y las tres
líneas verticales o de contenidos.
Debe recordarse que un diodo abierto representa una alta impedancia; en el caso anterior, la
línea de palabra p0 queda físicamente desconectada de las líneas de salida.
Asumimos que los diodos que conducen dejan un voltaje igual al voltaje de la línea palabra
menos 0,7 V, en las líneas de contenido.
p1
Línea palabra
p0
Línea de salida
C2 C1 C0
Para construir una memoria, sólo resta activar las líneas de palabras, de acuerdo al código
binario de la dirección. Esto puede implementarse simplemente mediante un decodificador.
Se ilustra un esquema de una memoria de 2m palabras con n bits cada una, con salidas
de tercer estados controladas por la señal leer. En cada casilla de la matriz se tiene un
diodo, que conecta la línea de palabra con la columna de salida, en caso de tener
almacenado un uno; y no se tiene diodo, en caso de almacenar un cero.
Sel 0
0/1 0/1 0/1
Sel 1
0/1 0/1 0/1
Deco-
a Sel 2
0 dificador 0/1 0/1 0/1
a
1
Dirección ma2
m
a
–
m-1
m
Sel 2
– 0/1 0/1 0/1
Leer
Datos d d d
n– n-1 0
7.6.2. ROM
En una ROM, los datos quedan permanentemente almacenados. Esto se logra colocando o no
diodos, mediante métodos fotográficos, al construir el circuito integrado. Otra posibilidad es
construir el circuito con todos los diodos de la matriz; luego se aplica un voltaje adecuado de
programación que rompe aquellos diodos asociados a los ceros de la palabra. El voltaje de
programación se introduce por las líneas de salida.
La elección de una de estas técnicas de programación de ROM, dependen de la cantidad de
dispositivos que se deseen programar. Estos dispositivos pueden tener diferentes usos, por
ejemplo pueden usarse para: almacenar secuencias de control en un microprograma, generar
caracteres, traductor de códigos usuales, etc.
En lo sucesivo, se empleará la siguiente notación para describir una matriz de diodos. La Figura
7.23 muestra una memoria de 4 palabras de 4 bits cada una, se ilustra el decodificador y luego
la matriz de diodos.
No se dibujan las resistencias de terminación, y los diodos conectados se simbolizan por puntos
gruesos:
0
a0
1
2
a1 3
C3 C2 C1 C0
Dirección Contenido
a1 a0 c3 c2 c1 c0
0 0 0 0 1 0
0 1 1 1 0 1
1 0 1 0 0 1
1 1 0 1 0 0
El esquema en que se puede programar, pero sólo una vez, a través de la ruptura de algunos
diodos del arreglo se clasificó como ROM. En las memorias PROM, puede colocarse
información en la memoria, la P inicial recuerda que el dispositivo es programable.
Se emplean transistores MOSFET con la base aislada, en lugar de diodos. Mediante el efecto
de avalancha se deposita carga en la base, quedando una baja impedancia o un '1' almacenado.
Para liberar la carga de la compuerta se aplica luz ultravioleta a través de una pequeña ventana
que posee la PROM, dejándola con puros unos. Suele denominarse EPROM a las memorias de
este tipo, donde la "E" simboliza "Erasable" (borrable).
2n m [bits]
a) Conversión de códigos.
La programación de la PROM está basada en la asignación de un contenido a cada dirección; es
decir, se programa por palabras.
Un caso especial de traductor de código es una tabla de búsqueda. En éstas pueden almacenarse
valores de funciones trigonométricas, logaritmos, etc. Además, todas las operaciones aritméticas
que pueden ser planteadas con tablas, como la suma, resta y multiplicación, también pueden ser
implementadas usando PROM.
Ejemplo 7.3. Conversión de BCD a exceso 3.
La tabla de conversión:
El resto de las combinaciones debe ser llenado con ceros. Nótese que se programa por palabras;
es decir, se le asocia un significado al contenido de cada dirección. Se tiene una visión
horizontal de la tabla.
b) Generadores de funciones.
En este caso se tiene una visión vertical de la tabla. Se asigna los valores de la tabla de verdad
de la función, a una columna de contenido de la PROM.
Lo usual es generar varias funciones de las variables con la misma PROM.
DEC 3:8 0
1
2
a A2
3
b A1
4
c A0
5
6
7
f
Figura 7.27. Esquema funcional del diseño de una función en base a PROM.
0
1 16x3
2
3
0
1 16x3
2
3
:
El primer carácter de la línea es el símbolo dos puntos (colon en inglés).
: 10
Los siguientes dos caracteres especifican, en hexadecimal, el número de bytes de datos
presentes en la línea. (En el ejemplo que se ilustra, el número de bytes es 10H, es decir: 16 en
decimal.)
:10 0010
Los siguientes cuatro caracteres, especifican la dirección del primer byte de datos de la línea
(0010H equivale a la dirección 16 en decimal). Esto implica que el mayor tamaño de la
memoria es FFFFH, es decir una memoria de 64 KB. Existen formatos de archivos para
especificar memorias mayores a 64KB, entre ellos los registros S de Motorola y los archivos
con formato Textronix.
:100010 00
Los siguientes dos caracteres indican el tipo de línea o registro. El tipo 00 indica un registro
normal de datos; es decir, una línea que no es la última del archivo. El tipo de la última línea
del archivo debe ser 01.
:10001000 FE352FCD454BAEFFE43E5D55AAE435EE
:10001000FE352FCD454BAEFFE43E5D55AAE435EE EF
Los últimos dos caracteres son una suma de chequeo para la línea. Se denomina byte de paridad.
Y se define como el valor que al ser agregado a la suma de los bytes anteriores (los bytes
después del dos puntos, hasta el penúltimo) de la línea da como resultado cero. Puede decirse
que es el negativo de la suma, descrita antes, expresada en complemento dos.
La suma se realiza en módulo 100H (módulo 256 en decimal).
Ejemplo 7.6
Las siguientes dos líneas son el contenido de un archivo en formato hexadecimal de Intel. El
cual se emplea para grabar eprom. El archivo es de texto (puede editarse con notepad); es decir,
está formado por caracteres imprimibles del código ASCII, organizado en líneas separadas por
0D, 0A (CR, LF carriage return y line feed)
:070100002402FDEC3400FCB9
:00000001FF
La última línea tiene tipo 01, que es la última línea del archivo.
Se cargan 7 bytes a partir de la dirección 0100H.
El código hexadecimal para el carácter dos puntos es 3A. Para el carácter 0 es 30 hexadecimal,
y así sucesivamente. Existe una aplicación Windows llamada mapa de caracteres donde pueden
visualizarse los símbolos disponibles en una fuente y su valor en hex.
Si se transforma el archivo anterior, en formato Intel hex a binario, la información del archivo
binario, vista con un editor hexadecimal se vería como sigue:
00000000 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000010 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000020 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000040 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050 0000 0000 0000 0000 0000 0000 0000 0000 ................
Note que en la zona ASCII, los caracteres que no son gráficos o imprimibles (del 00 a 31
decimal, y los mayores que 7FH) se visualizan con puntos; y que también se rellenan con ceros
las zonas donde no se han especificado datos; este es el caso desde la dirección 00000000 hasta
000000FF. Y sólo se cargan en este mapa de memoria los siete valores especificados, a partir
de la dirección 00000100.
No puede verse un archivo binario, con un editor de texto.
Note que la fuente para ver alineadas las columnas debe ser de espacio no proporcional, como
courier o similar.
Existe una aplicación, normalmente denominada dump, que pasa un archivo binario a un
archivo de texto, con la información similar a la desplegada por un editor binario (o
hexadecimal).
En una EPROM, todos los mintérminos son generados por un decodificador fijo, luego los
mintérminos requeridos para producir la función, son combinados mediante otro arreglo
programable con el papel de un OR.
Sin embargo, para ciertos diseños lógicos, sólo se usa una pequeña fracción de los mintérminos
generados por el decodificador.
• •
entradas
•
Arreglo
Arreglo
de
de productos
OR
AND
salidas
• • •
Ejemplo 7.7.
Implementar, mediante PLA , las siguientes funciones:
f0 ABCD DE DE
f1 AB BCDE DE
f2 ABCD BCDE
P0 ABCD
P1 DE
P2 DE
P3 AB
P4 BCDE
Línea de variable
Línea de producto
B
C
Arreglo de AND
D
Líneas de salida
P4 P3 P2 P1 P0
f0
Arreglo de OR f1
f2
Como se verá más adelante, las ROM y PLA se emplean también en diseños de máquinas
secuenciales.
Detalle arreglo de AND.
En la Figura 7.31, si a o b o ambas tienen voltaje cero, en f se tendrá el voltaje de conducción
del (o de los) diodos. Este voltaje es cercano a los 0,7 [V] y corresponde a un cero lógico. Si
ambos diodos están abiertos, con a y b altos, se tendrá un voltaje alto, proporcionando por la
fuente y la resistencia, en la salida f.
a b f
a 0 0 0
0 1 0
1 0 0
b
1 1 1
f =ab
f
En la Figura 7.32, basta que una (o ambas) de las entradas estén altas, para que en la salida f
se tenga un voltaje alto, (Vin - 0,7), al cual se asocia un 1 lógico.
Si ambas entradas están bajas, la salida toma un voltaje de -0,7; al cual se asocia el 0 lógico.
Los circuitos que se ilustran en las Figuras 7.31 y 7.32, no son los únicos posibles. Las
explicaciones simplificadas del funcionamiento de los arreglos, en base a diodos, son con fines
ilustrativos de conceptos solamente.
Existen dos modalidades, una denominada fusible (fuse) en la que las vías están normalmente
conectadas, y se funden o abren las conexiones que no se desean.
Otra modalidad, llamada Antifusible (Anti-fuse), en la cual las conexiones están normalmente
desconectadas, y la programación crea las conexiones.
a’bc’
ab
b’c
f1 f2 f3 f4
Cuando la densidad aumenta, se suele emplear la siguiente notación para las matrices de diodos:
Se dibuja una sola línea de entrada a las compuertas, y se dibuja una marca cuando existe
conexión entre las líneas perpendiculares. El siguiente diagrama ilustra una PLA de cuatro
entradas y cuatro salidas, cuando todas las conexiones aún no han sido programadas.
Usando este convenio, la programación de f1= a'b + b'a y f2 = a'b'c'd' + abcd puede
representarse según:
a b c
d
a'b
ab'
a'b'c'd'
abcd
f1 f2
7.6.6. PAL arreglo lógico (de and) programable (Programable Array Logic).
En la Figura 7.37, se ilustra un solo or con tres líneas de producto, y tres entradas. Note que en
las entradas al arreglo de and se disponen de la señal y su complemento.
Existen PAL con lógica activa alta en la salida (Ejemplo P16H8) y con lógica activa baja en la
salida (P16L8).
También suele proveerse una realimentación de la salida en las líneas de producto, esto permite
programar realimentaciones, y puede emplearse para diseños asincrónicos.
Si se está diseñando un conjunto de funciones, y existen productos que puedan ser compartidos
las PLA son más eficientes que las PAL. Pero debido a que las conexiones basadas en fusibles
tienen mayor resistencia que las conexiones físicas, las PLA son más lentas que las PAL.
clock
enable
reset Q.AR
AR Q.OE
D Q
clk
Q.C
x1
Q.FB Q.PIN
x2
Una ventaja de emplear ROM es que no se requiere minimizar las funciones de salida, y
conviene emplearlas cuando se requieren muchas combinaciones de las entradas (por ejemplo,
en cambiadores de código); las dificultades de su empleo es que por cada entrada adicional se
duplica el tamaño de la ROM, y no puede emplearse minimización debida a condiciones
superfluas. En una ROM puede implementarse cualquier función, y su costo es relativamente
bajo, debido a los altos niveles de producción; pero su velocidad es baja relativa a las otras
estructuras programables.
Los arreglos lógicos programables (PLA) comparten los productos entre varias funciones y su
empleo es ventajoso si las funciones no tienen presentes mintérminos aislados. La mayor
ventaja es que existen aplicaciones que permiten minimizar diseños de múltiples funciones. Es
de mayor costo y menor velocidad que una PAL.
La principal desventaja del arreglo lógico programable (PAL) es que existen restricciones de
fan-in en las entradas de los or fijos, cuestión que se ha superado en los diseños de las
arquitecturas de los CPLD; su ventaja es la mayor rapidez relativa a PLA y ROM. En el diseño
de funciones complejas, puede emplearse una salida como entrada, a la misma PAL, lo cual
aumenta el número de niveles.
Se denomina CPLD al siguiente nivel de la tecnología. Tienen mayor nivel de integración (cerca
de 6500 compuertas y 288 registros, lo cual es un elevado incremento comparado con los 10
registros de la GAL22V10). Se caracterizan por tener programable el número de líneas de
producto que pueden sumarse en un or, y por la incorporación de un bloque de entrada-salida
independiente de la macrocelda.
Suelen tener memoria flash, lo que permite reprogramarlos ya conectados al resto del circuito, y
además conservan su programación al desconectarles la polarización.
7.6.10. FPGA
A medida que han ido aumentando el número de compuertas y flip-flops dentro del chip,
también ha ido variando su estructura interna, actualmente algunas de ellas tienen memoria y
procesadores incorporados.
Si los bloques son muy simples, lo más probable es que se utilicen completamente, pero
requieren un elevado número de alambres y switches programables; la programación de las
interconexiones puede requerir mucho espacio en el área del chip o tener gran retardo.
Celdas basadas en multiplexores.
La celda de la Figura 7.40 tiene 8 entradas y una salida.
s0
s1
sA
A0 0
A1 1
0
sB f
1
B0 0
B1 1
Esta celda puede implementar todas las funciones de dos variables, todas las de tres variables
con al menos una entrada sin complementar, muchas de cuatro variables y hasta algunas de ocho
variables.
Celdas basadas en tablas de búsqueda.
Pueden emplearse Tablas de Búsqueda para implementar funciones booleanas. Se denominan
LUT (look-up table) en inglés. Están basadas en un registro cuya salida alimenta a un
multiplexor.
La Figura 7.41 muestra una tabla de búsqueda de 4 variables de entrada, la cual permite
implementar cualquier función de cuatro variables.
a, b, c, d f(a, b, c, d)
clk
Un módulo básico conecta dos o tres tablas de búsqueda con multiplexores y flip-flops.
Ejemplo 7.8.
Diseñar la función de cuatro variables, empleando LUT:
f ( x1 , x2 , x3 , x4 ) x2 x3 x1 x2 x3 x2 x3 x4 x1 x2 x4
f ( x1 , x2 , x3 , x4 ) x1 f x1 x1 f x1
f x1 f (0, x2 , x3 , x4 ) x2 x3 x2 x3 x2 x3 x4 x2 x3 x2 x3
f x1 f (1, x2 , x3 , x4 ) x2 x3 x2 x3 x4 x2 x4
En la Figura 7.43 se muestra que, en este caso, la función cofactor f x , depende de dos variables.
1
x1
0 Lut 3 Lut 3 f
x2
x3 f x1
Lut 3
x4 f x1
Luego viene una fase de compilación y simulación funcional del diseño, en la que pueden
corregirse errores. Puede verificarse el diseño lógico y el flujo de los datos.
Posteriormente se efectúa el mapeo tecnológico que implementa las ecuaciones con los
elementos lógicos disponibles. En esta fase además de especificar las localizaciones que se
emplearán también se efectúa los enrutamientos y conexiones entre los bloques lógicos (Place
and route).
En algunas herramientas CAD, una vez verificado un diseño basado en FPGA y evaluado
experimentalmente, puede migrarse el diseño a dispositivos ASIC; en los cuales se eliminan
todos los circuitos de configuración y programación, de esta forma se puede diseñar un circuito
integrado que opere a mayor velocidad y que consuma menos energía que el diseño basado en
FPGA.
Problemas resueltos.
Un mux puede expandirse, si es combinado con otra componente del mismo tipo. Por ejemplo,
puede formarse un MUX de 8 hacia 1, mediante dos MUX de 4 a 1 y uno de 2 vías a una.
I0 Mux 8:1
I1 4:1
I2 mux
I3 2:1
mux f
I4
I5 4:1
I6 mux
I7
C1 C0 C2
En forma alternativa se muestra un mux de 8 vías a una, implementado con cuatro mux de 2
vías a una, y un mux de 4 vías a una. Ambos diseños difieren en el número de entradas.
C0 C2 C1
Con un mux de 8 vías a 1, pueden obtenerse las 256 funciones booleanas de 3 variables,
programando las entradas del mux con unos o ceros.
Si en las entradas de control del mux se aplican todas las variables de entrada menos una; y si se
aplican en las entradas del mux: la variable de entrada restante o su complemento o unos y
ceros, puede verse que con un mux de 4 vías a 1, pueden implementarse funciones booleanas de
3 variables, como se estudiará en el siguiente ejemplo.
Puede verse, en forma similar, que la señal x3 controla la presencia de los mintérminos 6 y 7 en
la función. Entonces se programa el multiplexor mediante: x3 = 1; x2 = z'; x1 = z'; x0 = z.
Nótese que la variable z se introduce en las entradas de datos del mux, y las variables x, e y
como entradas de control.
Con un diseño tradicional SSI se necesitan 2 pastillas: Cuatro compuertas NAND de fan-in 2, y
una compuerta OR de fan-in 4; el mux de 4 vías a una viene integrado en una sola pastilla.
Generalizando un mux de 8 vías a una, permite implementar todas las funciones de 4 variables.
Basta elegir tres variables como entradas de control, y la cuarta se emplea en las entradas de
datos.
1 0 0 0
D
I1 I3 I7 I5
1 1 0 1
C
0 1 1 0
B
Luego se identifican las funciones de D, como entradas de datos. En el mapa se identifican pares
de mintérminos asociados a un determinado valor de las entradas de control.
1 0
D 1
0 2
1 3
D' 4 8:1 MUX
D 5
D' 6
D' 7
C2 C1 C0
A B C
No siempre es conveniente diseñar con un mux. Por ejemplo, para la función de siete variables:
f x1 x2 x3 x4 x5 x6 x7
Se requiere un mux de 128 vías a 1, o bien uno de 64 vías a una. También pueden emplearse 3
mux de 4 vías a 1, como se muestra en el siguiente ejemplo.
X2 0 X4 0 X6 0
X3 1 X5 1 X7 1
E Mux E Mux E Mux
X1 0 4a1 0 0 4a1 0 0 4a1 f
1 1 1
2 2 2
0 3 0 3 0 3
f3 = X1 * X2 * X3 f2 = f3 * X4 * X5 f1 = f2 * X6 * X7
Nótese que en cada mux se utiliza solamente un mintérmino. Esto implica una mala utilización
de las capacidades de cada mux. Un diseño SSI, mucho más simple, conveniente y directo es:
X1
X2’
X3’
X4 f
X5’
X6
X7’
En este caso se requiere sólo una pastilla, ya que se dispone comercialmente de un NAND de 8
entradas. En la implementación se conecta una de las entradas a Vcc, para disponer de un
NAND de 7 entradas.
Se desea diseñar las siguientes tres funciones de cuatro variables (diseño multifunción),
empleando un decodificador 4: 16.
f1 = A' B' C D +A' B C' D + A B C D
f2 = A B C' D’ + A B C
f3 = (A' + B' + C' + D')
0 A'B'C'D'
1 A'B'C'D
2 A'B'CD' f1
3 A'B'CD
4 A'BC'D'
5 A'BC'D
6 A'BCD'
4:16 7 A'BCD
Enable = 1
DEC 8 AB'C'D' f2
9 AB'C'D
10 AB'CD'
11 AB'CD
12 ABC'D'
13 ABC'D
14 ABCD'
15 ABCD f3
A B C D
El primer decodificador genera, con E = 1, los grupos: AB, AB', A'B, A'B'.
Cada uno de los decodificadores 3:8, generan los ocho productos de la línea de entrada, con los
mintérminos de las variables CDE.
A’B’C’D’E’
0 0
1 1
2 2 AB’C’DE’
3 3
4 4
5 5
6 6
012 7 012 7
0
E=1 1 CDE
CDE
2
01 3
0 0 AB’C’D’E’
1 1
AB
2 2
3 3
4 4
5 5
6 6
012 7 012 7 AB’CDE
ABCDE
CDE CDE
V F
C1
V F V F
C2 C3
a b a c
b) Si analizando las variables, antes del ingresar al diagrama que se muestra, se conoce que la
acción c nunca se realizará, determinar las condiciones para que se realicen las acciones a y b.
Solución.
a) Del diagrama se obtienen:
La acción a se realiza cuando la condición: C1C2 + C1’ C3 es verdadera.
La acción b se realiza cuando la condición: C1C2’ es verdadera.
La acción c se realiza cuando la condición: C1’C3’ es verdadera.
Existen seis soluciones, en las cuales cada acción está presente una vez:
V F V F
C3 C5 V F
C7
a V F b V F
C4 C6 c V F
C8
b c a c a b
V F V F
V F C11 C13
C9
V F c V F
a V F b C12 C14
C10
c b a
c b a
El siguiente mapa ilustra las condiciones para realizar las tres acciones: a, b y c, que son
mutuamente excluyentes, ya que cubren todo el mapa.
C1C2
C3 AB 00 01 11 10
0 2 6 4
0 1 1 1 1
1 3 7 5
1 1 1 1 1
a: C1C2 + C1’ C3
b: C1C2’
c: C1’C3’
C1C2
C3 00 01 11 10 V
C1’+C2
F
0 2 6 4
0 d d 1 1
1 3 7 5 a b
1 1 1 1 1
a: C1’ + C2
b: C1C2’
o bien:
Si el grupo de acciones alternativas que deben realizarse, están condicionadas por un reducido
número de mintérminos es conveniente emplear la sentencia switch, en lugar de sentencias
anidadas if-then-else.
Se tiene una PROM de 32*8[bits], como se muestra en el esquema del circuito U1. Se entrega el
mapa de memoria, tanto la dirección como el contenido se entregan en hexadecimal.
Solución.
Según el esquemático, A0 y O0 son los bits menos significativos de la dirección y el contenido
respectivamente.
Se dibuja un mapa para f2. Como el orden de las variables es (a, b, c, d) resultan los siguientes
mintérminos para f2: 4, 6, 7, 8, 10, 11.
b) Según el mapa:
a’bd’ es implicante primo esencial ya que es el único que contiene al mintérmino 4.
a’bc es implicante primo esencial ya que es el único que contiene al mintérmino 7.
ab’d’ es implicante primo esencial ya que es el único que contiene al mintérmino 8.
ab’c es implicante primo esencial ya que es el único que contiene al mintérmino 11.
c) El diseño como suma de productos es: f(a, b, c, d) = a’bd’ + a’bc + ab’d’ + ab’c
Y tiene un costo de 16 entradas (12 literales).
El diseño como producto de sumas es, se obtiene agrupando los ceros de f2.
Se obtiene: f(a, b, c, d) = (a +b)(a’ + b’)(c + d’), la cual tiene un costo de 9 entradas (6
literales), éste es el diseño mínimo.
Solución:
a) Se tiene la siguiente ecuación para el multiplexor:
f = c2c1c0 I7+ c2c1c0' I6 + c2c1'c0 I5 + c2c1'c0' I4 + c2'c1c0 I3 + c2'c1c0' I2 + c2'c1'c0 I1
+c2'c1'c0' I0
Simplificando, se logra:
f = abc + abc’ + ab’cd + a’b’c d’ + a’b’c’d
ab
cd 00 01 11 10
0 4 12 8
00 0 0 1 0
1 5 13 9
01 1 0 1 0
3 7 15 11
11 0 0 1 1
2 6 14 10
10 1 0 1 0
1 2 11 12 13 14 15
ab x x x x
acd x x
a’b’c’d x x
a’b’cd’ x x
Se tiene que el implicante ab es el mayor y único grupo que contiene a los mintérminos: 12, 13,
y 14, por lo tanto es esencial.
El implicante acd es el único que contiene al mintérmino 11, por lo tanto es esencial.
Los mintérminos 1 y 2 no pueden agruparse y por lo tanto son implicantes primos esenciales.
La función mínima debe contener a los cuatros implicantes primos esenciales. Lo cual justifica
el diseño de la parte a).
c) Para lograr la expresión lógica mínima para f como producto de sumas, debe agruparse los
ceros de la función f (o los unos de la función f ’, y luego complementar).
f1’(a, b, c, d) = a’b+a’cd+ab’c’+ab’d’+b’c’d’
f2’(a, b, c, d) = a’b+a’cd+ab’c’+ab’d’+a’c’d’
I0
I1
I2 Mux
I3 8:1
f = c2c1c0 I7+ c2c1c0' I6 + c2c1'c0 I5 + c2c1'c0' I4 + c2'c1c0 I3 +
I4 c2'c1c0' I2 + c2'c1'c0 I1 + c2'c1'c0' I0
I5 8:1
I6
I7 mu
x
C2C1C0
a b c
Figura P7.23. Mux Problema 7.11.
Indicar las diferentes soluciones, dependiendo de la elección del valor dado a las condiciones
superfluas.
Solución:
En la ecuación del multiplexor, reemplazando C2, C1 y C0 por a, b y c respectivamente, se
tiene:
f = abc I7+abc’I6+ab’c I5+ab’c’ I4+a’bcI3+a’bc’ I2+a’b’c I1+a’b’c’ I0
Para cada una de las entradas Ii podemos aplicar d, d’, 0 ó 1. Cada entrada permite incorporar
distintas combinaciones de dos mintérminos (uno o el otro, o ambos o ninguno).
Ubicando los mintérminos y las condiciones superfluas en un mapa de cuatro variables, donde
a, b y c, se han hecho equivalentes a C2, C1 y C0 respectivamente, se tiene:
C2C1
I2 I6
ab
C0v
cd 00 01 11 10
0 4 12 8
00 0 0 1 0 I4
I0
1 5 13 9
01 1 0
3 7 15 11
11 1 1 1
I5
I1
2 6 14 10
10 0 0 0 1
I3 I7
f(a, b, c, d)= m(1, 3, 10, 11, 12, 15)+ d( 5, 7, 13)
Figura P7.24. Mapa Problema 7.11.
Deben escogerse: I0 = d, I1 = d, I4 = 0, I5 = 1, I7 = d
Si d5 se escoge 0, entonces I2=0. Si d5 se escoge 1, entonces I2=d.
Si d7 se escoge 0, entonces I3=0. Si d7 se escoge 1, entonces I3=d.
Si d13 se escoge 0, entonces I6=d’. Si d13 se escoge 1, entonces I6=1.
C B A EN Y +---+--+---+
X X X H L D3 |1 +--+ 16| VCC
L L L L D0 D2 |2 15| D4
L L H L D1 D1 |3 14| D5
L H L L D2 D0 |4 74 13| D6
L H H L D3 Y |5 151 12| D7
H L L L D4 /Y |6 11| A
H L H L D5 /EN |7 10| B
H H L L D6 GND |8 9| C
H H H L D7 +----------+
Dibujar las formas de ondas en TP1 y TP2. Asumir para el dibujo que los circuitos no tienen
retardos de propagación. Indicar función que realiza el sistema.
V3
0V
TP2
V1
CP1 Q1 U1
CP2 Q2 74LS93
MR1 Q3
MR2 Q2 V2
CP0 Q1 0V
CP1 Q0
U3 TP1
74LS151
I7 E
I6 S2
I5 S1
I4 S0
I3
I2
I1 Y
I0 YN
Solución.
a) Con EN' (enable) alto se tiene la salida Y en bajo. Es decir con EN' = 0 se habilitan la salida
del mux.
En el manual TTL de TEXAS, la señal EN´se denomina S (strobe). Con S = 0 se habilita el
mux.
Es decir:
Y =( D0 C'B'A' +D1 C'B'A+D2 C'BA'+D3 C'BA+D4 CB'A'+D5 CB'A+D6 CBA'+D7 CBA) S'
En el mapa se empleó código Gray, y se tiene que cada columna corresponde a una
combinación de las señales de control del mux que activan una línea de datos de entrada. Para
generar dicho mapa con el mux se deben efectuar las conexiones indicadas, es decir: en D0 se
conecta la entrada w', en D1 se efectúa conexión a Vcc, etc.
f(w,A,B,C)=(C'B'A+CB'A)+(wC'B'A+wCB'A+wC'BA+wCBA)+(w'C'B'A'+ w'C'B'A+w'CB'A'+
w'CB'A)+(w'C'B'A'+w'C'BA')
y ordenando, queda:
f(w,A,B,C) = w'C'B'A'+ w'C'B'A'+ w'C'B'A+ wC'B'A+ C'B'A+w'C'BA'+ wC'BA+w'CB'A'+
w'CB'A+ wCB'A+CB'A+ wCBA
Comparando con la ecuación del mux vista en 1, se logra identificar las funciones asociadas a
los Di.
c) El contador genera la secuencia de valores 000, 001, 010, 011, 100, 101, 110, 111 que se
aplican a las entradas de control del mux (es un contador módulo 8 en binario). Cuando se
aplica en S0, S1 y S2 los valores 000, el mux saca en la salida Y el valor que esté conectado a
I0, que en el ejemplo es 0; luego saca I1 y así sucesivamente hasta sacar I7; y luego, la
secuencia se repite.
Se muestran las formas de ondas obtenidas con un simulador, la forma de onda TP1 muestra un
retardo de propagación relativa al canto de bajada de TP2; este retardo contempla el del
contador y del circuito combinacional del mux (se ilustra en el diagrama). Se ha destacado un
ciclo completo de la salida.
retardo
TP1
0 1 0 1 0 0 0 1
D0 D1 D2 D3 D4 D5 D6 D7
Determinar los valores con que deben programarse las entradas del mux para tener en la salida
la función f.
I7 1
I0 I6 0
I1
I5 1
I2 Mux
8:1 I4 0
I3
f (a, b, c, d) = ac + a’d’ I3 d’
I4
I5 I2 d’
I6 8:1 I1 d’
I7 C2mu
C1 C0 I0 d’
Solución.
x
a b c
Figura P7.27. Mux Problema 7.13.
Solución:
Se tiene:
f=c2c1c0 I7+c2c1c0' I6+c2c1'c0 I5+c2c1'c0' I4+c2'c1c0 I3+c2'c1c0' I2+c2'c1'c0 I1+c2'c1'c0' I0
Si se conectan las variables de entrada: a, b y c, según se indica en el diagrama, se tiene:
f = abc I7+ abc’ I6+ ab’c I5+ ab’c’ I4+ a’bcI3+ a’bc’ I2+ a’b’c I1+ a’b’c’ I0
Por otra parte pueden escribirse:
ac = abc + ab’c
a’d’= a’bd’+a’b’d’= a’bcd’+a’bc’d’+ a’b’cd’+a’b’c’d’
Es decir:
f (a, b, c, d) = ac + a’d’= abc + ab’c + a’bcd’ + a’bc’d’ + a’b’cd’ + a’b’c’d’
Comparando coeficientes, resultan:
I7 = 1; I6 = 0; I5 = 1; I4 = 0; I3 = d’; I2 = d’; I1 = d’; I0= d’
ab
cd 00 01 11 10
0 0 2 4 6 12 4 8 f (a, b, c, d) = m( 0, 2, 4, 6, 10, 11, 14, 15)
00 1 1
1 5 13 9 Se identifican los pares de mintérminos
01 controlados por las entradas al multiplexor.
f(a, b, c, d)
Figura P7.28 Mapa Problema 7.13.
Determinar el contenido de la EPROM, que implementa las funciones combinacionales: f0, f1, y
f2, en función de las entradas a, b, c, d.
Add0 a
Add1 b
Add2 c EPROM D0 = f0(a, b, c, d) = ac + a’d’
Add3 d
Add4 D1 = f1(a, b, c, d) = m( 0, 2, 14 ) + d(13 )
Add5
8:1 D2 = f2(a, b, c, d) = M(0, 2, 4, 12)
Add6
Add7 mu D3
x
Figura P7.29 EPROM Problema 7.14.
Solución:
En una memoria sólo se pueden escribir unos o ceros.
Como no existe función asociada a la línea de datos D3, esta columna debe llenarse con
cualquier secuencia de unos o ceros.
La función f2 establece los ceros de D2. También puede escribirse en función de los unos de f2,
según: f2(a, b, c, d) = m( 1, 3, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15)
Obtenidas las funciones deben escribirse las columnas de datos de la EPROM. Puede
considerarse que cada dirección está asociada a un mintérmino; el número del mintérmino
depende del ordenamiento dado a la función. En el caso propuesto, el orden es a, b, c, d; es
decir, a es la variable más significativa para la numeración decimal de los mintérminos. Se ha
colocado el número del mintérmino asociado a la tabla de contenidos versus direcciones.
Las líneas de dirección que no se empleen(add4, add5, add6 y add7) deben ser conectadas a
tierra.
Solución:
Pueden dibujarse los mapas para f0 y f1.
ab dc
cd 00 01 11 10 ab 00 01 11 10
0 4 12 8 0 4 12 8
00 1 1 00 1 1
1 5 13 9 1 5 13 9
01 01
3 7 15 11 3 7 15 11
11 1 11 1
2 6 14 10 2 6 14 10
10 1 10 1
f0(a,b,c,d) = a’bc’ + a’b’c + ab’c’d’ + abcd f1(a,b,c,d) = ac’d’ + a’cd’ + a’b’c’d + abcd
Para f2:
f2 = f0’ = (a + b’ + c)(a +b +c’)(a’ + b + c + d)(a’ + b’ + c’ + d’)
f2 = a’b’c’ + c’d’ + abc’ + a’bc + bcd’ + ab’c
ab
cd 00 01 11 10
0 4 12 8
00 1 1
1 5 13 9
01 1 1 1
3 7 15 11
11 1 1
2 6 14 10
10 1 1 1
c a d b f3 f0 f2 f1
dirección add3 add2 add1 add0 D3 D2 D1 D0
0 0 0 0 0 0 0 1 0
1 0 0 0 1 1 1 0 0
2 0 0 1 0 1 0 1 1
3 0 0 1 1 0 0 1 0
4 0 1 0 0 1 1 0 1
5 0 1 0 1 0 0 1 0
6 0 1 1 0 0 0 1 0
7 0 1 1 1 0 0 1 0
8 1 0 0 0 1 1 0 1
9 1 0 0 1 0 0 1 0
10 1 0 1 0 0 0 1 0
11 1 0 1 1 0 0 1 0
12 1 1 0 0 0 0 1 0
13 1 1 0 1 0 0 1 0
14 1 1 1 0 0 0 1 0
15 1 1 1 1 1 1 0 1
Se tiene que la función expresada como producto de sumas, considerando las condiciones
superfluas con valores iguales a uno es: f (a, b, c, d) = (a + c)(a’ + b + c + d)
Se tiene que la función mínima expresada como suma de productos, considerando las
condiciones superfluas con valores iguales a cero es: f (a, b, c, d) = abd + abc+ bcd + acd
Solución:
a) La primera proposición nos permite determinar los ceros de la función. La segunda determina
los unos de la función. Dibujando en un mapa, pueden encontrarse las condiciones superfluas de
f, como los mintérminos: 2, 3, 6, 9, 10, 12.
ab
cd 00 01 11 10
0 4 12 8
00 0 0 d 0
1 5 13 9
01 0 0 1 d
3 7 15 11
11 d 1 1 1
2 6 14 10
10 d d 1 d
0 1 4 5 8
a’c’ x x x x
c’d’ x x x
b’c’ x x x
a’b’ x x
b’d’ x x
c) Agrupando los unos de la función y considerando las condiciones superfluas, se obtienen los
siguientes implicantes primos: c, ab, ad. Confeccionando una tabla de implicantes (donde no
se anotan los superfluos), se obtiene que c es implicante primo esencial. Sólo resta cubrir al
mintérmino 13, lo cual puede lograrse de dos formas; eligiendo (ab) o (ad). Se tienen entonces,
dos soluciones:
7 11 13 14 15
c x x x x
ab x x x
ad x x x
f 1(a, b, c, d) = c + ab
f 2(a, b, c, d) = c + ad
Un sistema digital tiene cuatro entradas: a, b, c, d y una salida z, que debe colocarse alta cuando
se cumplan las siguientes condiciones:
i) Si la entrada, en binario, es múltiplo de 3 ó 7.
Solución:
a) El cero no se considera, con la definición dada, como múltiplo de 3 ó 7.
Condición i) = m(3, 6, 7, 9, 12, 14, 15)
# a b c d i) ii) iii) z
0 0 0 0 0 0 1 0 0
1 0 0 0 1 0 1 1 0
2 0 0 1 0 0 1 1 0
3 0 0 1 1 1 1 1 1
4 0 1 0 0 0 1 0 0
5 0 1 0 1 0 1 1 0
6 0 1 1 0 1 1 1 1
7 0 1 1 1 1 1 1 1
8 1 0 0 0 0 1 1 0
9 1 0 0 1 1 1 1 1
10 1 0 1 0 0 1 1 0
11 1 0 1 1 0 1 1 0
12 1 1 0 0 1 0 1 0
13 1 1 0 1 0 0 1 0
14 1 1 1 0 1 0 1 0
15 1 1 1 1 1 0 1 0
b) Condición ii)
a b’ = a’+ b’
= (a’ +b’)(c + c’)
= (a’ +b’ + c’)(a’ +b’ + c)(d +d’)
= (a’ + b’ + c’ + d) (a’ + b’ + c’ + d’) (a’ + b’ + c + d) (a’ + b’ + c + d’)
= M14 M15 M12 M13
= M(12,13,14,15).
c) Condición iii)
a’ (c +d) = a + c + d
Condición iii) = a +c +d
d) Cuando se cumplan las siguientes condiciones se interpreta como el and de las condiciones
i), ii) y iii).
ab
cd 00 01 11 10
0 4 12 8
00
1 5 13 9
01 1
3 7 15 11
11 1 1
2 6 14 10
10 1
z = m(3, 6, 7, 9)
C3
5 C1
C2
Se asume que las entradas ABCD representan un número binario, donde A es la cifra más
significativa.
A continuación se ilustran los siguientes símbolos ordenados de izquierda a derecha. El ubicado
más a la izquierda debe representar al número binario menor (dado por ABCD), y así
sucesivamente hasta el número binario mayor que pueda representarse.
Solución.
Se puede confeccionar la siguiente tabla de verdad:
Las salidas del sistema combinacional (las señales que controlan los LEDs) se consideran
condiciones superfluas para el primer renglón de la tabla, debido a que las entradas no pueden
estar todas en cero. Y como no pueden existir más de dos entradas altas, también se consideran
superfluos los mintérminos: 7, 11, 13, 14 y 15.
Luego se van llenando los valores de las señales C0, C1, C2 y C3, renglón por renglón,
considerando los segmentos que deben encenderse, de acuerdo al orden de los símbolos.
AB
A B C D C0 C1 C2 C3
CD 00 01 11 10
0 0 0 0 d d d d
0 0 0 1 1 1 0 4 12 8
00 d 1 1
0 0 1 0 1 1
0 0 1 1 1 1
0 1 0 0 1 1 1 5 13 9
0 1 0 1 1 1 1 01 d 1
0 1 1 0 1 1 1
0 1 1 1 d d d d 3 7 15 11
1 0 0 0 1 1 1 11 1 d d d
1 0 0 1 1 1 1
1 0 1 0 1 2 6 14 10
1 0 1 1 d d d d 10 1 d
1 1 0 0 1
1 1 0 1 d d d d
1 1 1 0 d d d d
1 1 1 1 d d d d C0=A'BD'+AB'C'+CD
AB AB
CD 00 01 11 10 CD 00 01 11 10
0 4 12 8 0 4 12 8
00 d 1 1 00 d
1 5 13 9 1 5 13 9
01 1 d 01 1 1 d 1
3 7 15 11 3 7 15 11
11 1 d d d 11 d d d
2 6 14 10 2 6 14 10
10 1 1 d 10 1 1 d 1
C1=AC'D'+BD+A'C C2=C'D+CD'
Figura P7.43 Mapas de C1 y C2.
AB
CD 00 01 11 10
0 4 12 8
00 d 1 1
1 5 13 9
01 1 1 d 1
3 7 15 11
11 d d d
2 6 14 10
10 d
C3=A'C'+ B'C'
Los implicantes primos de C1 son: AC'D', A'B'D', B'C'D', AB, A'C, BD, CD, BC.
BD debe estar presente ya que es esencial (el único que cubre al 3).
AC'D' cubre al 8 y 12. Igual cobertura se logra con mayor costo: B'C'D'+AB
A'C cubre al 2, 3 y 6. Mucho mayor costo para igual cobertura es: CD+BC+A'B'D
Los implicantes primos de C2 son: A'B'C', A'B'D', AD, BC, CD', C'D, BD
La única minimización razonable que se considera es: C'D+CD'
Ejercicios propuestos.
Ejercicio 7.1.
Ejercicio 7.2.
Ejercicio 7.3.
Ejercicio 7.4.
Índice general.
CAPÍTULO 7 ............................................................................................................................................. 1
SISTEMAS COMBINACIONALES ........................................................................................................ 1
7.1. COMPONENTES BÁSICOS. ................................................................................................................... 1
7.2. MULTIPLEXOR. MUX. ........................................................................................................................ 2
Ejemplo 7.1. ........................................................................................................................................ 4
7.3. TERCER ESTADO. ALTA IMPEDANCIA. .............................................................................................. 7
7.4. DECODIFICADORES. ........................................................................................................................... 8
Ejemplo 7.2 ......................................................................................................................................... 9
7.5. DEMULTIPLEXER, DISTRIBUIDOR. .................................................................................................... 10
7.6. PRIMITIVAS PROGRAMABLES ........................................................................................................... 13
7.6.1. Matriz de diodos ...................................................................................................................... 13
7.6.2. ROM ........................................................................................................................................ 15
7.6.3. PROM, EPROM. ..................................................................................................................... 16
7.6.4. Usos de PROM en circuitos combinacionales. ........................................................................ 17
a) Conversión de códigos. .............................................................................................................................. 17
Ejemplo 7.3. Conversión de BCD a exceso 3. .......................................................................................... 17
b) Generadores de funciones. ......................................................................................................................... 17
Ejemplo 7.4. .............................................................................................................................................. 18
c) Extensión. Estructura de memorias. .......................................................................................................... 18
Ejemplo 7.5 ............................................................................................................................................... 18
d) Descripción de archivos con código hexadecimal Intel. ............................................................................ 19
Ejemplo 7.6 ............................................................................................................................................... 20
7.6.5. PLA. Arreglos Lógicos Programables. .................................................................................... 21
Ejemplo 7.7. ................................................................................................................................................... 22
Detalle arreglo de AND. ................................................................................................................................ 23
Detalle arreglo OR. ........................................................................................................................................ 24
Diagrama simplificado PLA. ......................................................................................................................... 25
7.6.6. PAL arreglo lógico (de and) programable (Programable Array Logic). ................................ 27
7.6.7. PLD (Programable Logic Device). ......................................................................................... 28
7.6.8. Comparaciones entre dispositivos programables. .................................................................. 29
7.6.9. CPLD ( Complex Programable Logic Device). ....................................................................... 29
7.6.10. FPGA..................................................................................................................................... 29
Celdas basadas en multiplexores.................................................................................................................... 30
Celdas basadas en tablas de búsqueda. .......................................................................................................... 30
Ejemplo 7.8. ................................................................................................................................................... 31
Etapas o fases de diseño................................................................................................................................. 32
7.6.11. ASIC. ..................................................................................................................................... 33
PROBLEMAS RESUELTOS. ........................................................................................................................ 34
Problema 7.1. Expansión. Conexión cascada. .................................................................................. 34
Problema 7.2. Realización de funciones booleanas, mediante mux. ................................................. 34
Problema 7.3. Diseño de lógica combinacional empleando mux. ..................................................... 35
Problema 7.4. Diseño empleando mux de 8:1 ................................................................................... 37
Problema 7.5. Mal uso de muxs ........................................................................................................ 38
Problema 7.6. Diseño multifunción con decodificador. .................................................................... 38
Índice de figuras
Capítulo 8
Descomposición
En síntesis lógica es una actividad fundamental, ya que separa un sistema lógico de un número
elevado de entradas en un conjunto de subsistemas interconectados con un número menor de
variables de entrada.
La Figura 8.1, a la izquierda, muestra la descomposición paralela, que separa la red en varias
redes con menor número de entradas y salidas. La ubicada a la derecha ilustra la
descomposición en serie.
Xn f f(Xn)
g 0 ( x1 , x2 ,.., xn 1 ) f ( x1 , x2 ,.., xn 1 , 0)
g1 ( x1 , x2 ,.., xn 1 ) f ( x1 , x2 ,.., xn 1 ,1)
Podremos expresar:
f ( x1 , x2 ,.., xn 1 , xn ) F ( g 0 , g1 , xn )
Con:
F ( g0 , g1 , xn ) xn ' g 0 xn g1
g0
Xn-1 F(g0, g1, xn) f(Xn)
g1
xn
Donde: X n 1 x1 , x2 ,.., xn 1
g0 0
Xn-1 f(Xn)
g1 1
xn
Si se escribe la tabla de verdad de f como una matriz, similar a un mapa de Karnaugh, donde los
renglones representan los valores de xn, y las columnas asociadas a los valores de las
combinaciones del resto de las (n-1) variables, se tiene la Figura 8.5, la que representa una
función de 4 variables:
x3/x1x2 00 01 11 10
0 1 1 1
1 1 1
g0=x2’+x1’x3’
x3/x1x2 00 01 11 10
0 1 1
1 1
g1=x1x2+x2x3’
Resultando:
F ( g0 , g1 , x3 ) x3 ' g 0 x3 g1 x3 '( x2 ' x1 ' x3 ') x3 ( x1 x2 x2 x3 ')
Del mismo modo pueden disminuirse las entradas a las funciones auxiliares, generando
funciones con un número menor de variables de entrada. La Figura 8.8 muestra las funciones
cofactores cuando se han extraído las variables xn y xn-1.
g0
g1
Xn-2
g2 F(g0, g1, g2, g3, xn-1, xn) f(Xn)
g3
xn-1, xn
g 0 ( x1 , x2 ,.., xn 2 ) f ( x1 , x2 ,.., xn 2 , 0, 0)
g1 ( x1 , x2 ,.., xn 2 ) f ( x1 , x2 ,.., xn 2 , 0,1)
g 2 ( x1 , x2 ,.., xn 2 ) f ( x1 , x2 ,.., xn 2 ,1, 0)
g3 ( x1 , x2 ,.., xn 2 ) f ( x1 , x2 ,.., xn 2 ,1,1)
La cual puede ser implementada mediante un mux de 4 vías a una, según se muestra en la
Figura 8.9.
g0
0
g1 1
Xn-2 f(Xn)
g2 2
g3 3
xn-1, xn
Donde las funciones gi, se pueden minimizar empleando mapas de tres variables.
En 1952 Ashenhurst demuestra las condiciones en que una función f puede ser descompuesta
en la forma:
f ( x1 , x2 ,.., xn 1 , xn ) h( x1 , x2 ,..xk , g ( xk 1 , xk 2 ,.., xn ))
El módulo g debe poder ser implementado en un dispositivo en el cual se pueda programar una
función de (n-k) variables de entrada y una salida.
Si la función h tiene más de (n-k) entradas puede ser descompuesta de manera similar.
Generando una red multinivel con estructura de árbol. Si resultan en el proceso dos funciones
iguales, basta utilizar una instancia, y generar múltiples salidas de este bloque; en este caso la
estructura deja de ser de tipo árbol para convertirse en un grafo dirigido acíclico.
Xa g
h(g, Xl) f(Xn)
Xl
Si se dibuja la tabla de verdad, colocando en los renglones las combinaciones de los valores de
las variables libres, y en las columnas los valores de las combinaciones del conjunto acotado, se
tiene una matriz denominada de descomposición.
La condición para que pueda aplicarse la descomposición de Ashenhurst, es que las columnas
de este arreglo tengan a lo más dos valores diferentes. Uno de los valores de las columnas estará
asociado a g ( xk 1 , xk 2 ,.., xn ) 0 ; el otro a g ( xk 1 , xk 2 ,.., xn ) 1 .
Figura 8.12. Matriz de descomposición con dos columnas con valores diferentes.
Se tienen dos posibles elecciones para la función h, dependiendo de la columna que se asocie al
valor de g=0. La Figura 8.13 ilustra una de las elecciones posibles.
x1x2/g(x3,x4,x5) 0 1
00
01 1
10 1
11 1 1
h
Resulta, minimizando: h x1 x2 ( x1 x2 ) g
Si se elige la otra columna asociada al valor de g=0, resulta una función de igual costo, salvo
que aparece g’ en la expresión. Nótese que se efectúa una minimización o reducción de
columnas equivalentes.
x5/x3x4 00 01 11 10
0 1
1 1 1 1
g=x3x4+x3x5+x4x5
Debe notarse que tanto h como g pueden implementarse con bloques que tengan un número de
entradas acotado a 3. Si se efectúa el diseño con compuertas tradicionales, se obtiene un diseño
en cuatro niveles con 17 entradas.
f x1 x2 x1 x3 x4 x2 x3 x4 x1 x3 x5 x2 x3 x5 x1 x4 x5 x2 x4 x5
f x1 x2 ( x1 x2 )( x3 x4 x3 x5 x4 x5 )
Esta descomposición disjunta se basa en la mezcla de las columnas equivalentes con el objetivo
de remover las redundancias de la tabla de verdad de n variables.
Otra forma de encontrar las condiciones suficientes y necesarias para que exista la
descomposición de Ashenhurst es observar los renglones de la matriz, que representan las
combinaciones de valores que puede tomar el conjunto libre de variables de entrada.
Observando las Figuras 8.3 y 8.8, se puede generalizar el resultado para la extracción de k
variables, notando que la función f puede descomponerse en 2 k funciones gi ( X l ) , una por cada
renglón. Con m 2k el número de funciones auxiliares, se tiene:
g0
0
g1 1
Xa f(Xn)
… …
gm-1 2k-1
Xl
Pero como la descomposición de Ashenhurst sólo tiene una función g, las diferentes funciones
cofactores deben ser constantes (formadas por solamente ceros o unos), o poder ser expresadas
en términos de una sola función o su complemento.
Dicho de otro modo: no considerando los renglones formados por solamente ceros o unos, o
aquellos que son complementos de otros renglones, sólo puede existir un y solo un renglón
diferente, el cual estará asociado a la función g de la Figura 8.11.
Xa g C 1
f(Xn)
0 …
1 2k-1
Xl
h(g,Xl)
En el caso del ejemplo de la Figura 8.12, esto se cumple, ya que existe un solo renglón diferente
en la matriz, además de las constantes. En este ejemplo no existe un renglón que sea
complemento de otro. Observando la tabla de la Figura 8.12, la función h puede escribirse:
h x1 x2 ( x1 ' x2 x1 x2 ') g
La que minimizada en el espacio de las variables libres y g, tres variables en este caso, permite
obtener:
h x1 x2 ( x1 x2 ) g
Si lo que interesa es obtener todas las particiones posibles, aceptando que tanto las variables
acotadas como las libres puedan ser cero, se tendrá un número total de particiones igual a 2 n ,
ya que se tiene que:
Para el caso del ejemplo descrito en la tabla de la Figura 8.11, se tienen 10 particiones,
considerando que el número de variables del conjunto acotado es 3. Se enumeran a continuación
los conjuntos de los índices de las variables acotadas: {1, 2, 3}, {1, 2, 4}, {1, 2, 5}, {1, 3, 4},
{1, 3, 5}, {1, 4, 5}, {2, 3, 4}, {2, 3, 5}, {2, 4, 5}, {3, 4, 5}. En el ejemplo visto antes sólo se
analizó el último conjunto.
Pero no todas las particiones permiten obtener una descomposición disjunta de Ashenhurst.
La partición, en la cual las variables acotadas son x2x3x4, se muestra en la Figura 8.17, en la cual
hay 5 columnas diferentes, lo cual implica que no existe la descomposición de Ashenhurst. Lo
mismo puede concluirse al observar que existen cuatro renglones diferentes.
x1x5/ x2x3x4 000 001 010 011 100 101 110 111
00 1
01 1 1 1
10 1 1 1 1 1
11 1 1 1 1 1 1
Existen numerosas contribuciones para resolver estos problemas: Algunas basadas en grafos
coloreados, otras en cálculo con cubos, otras en diagramas de decisión binarios. Todas ellas
escapan a un curso introductorio de sistemas digitales.
Para el caso tratado antes de extracción de una variable, que se muestra en la Figura 8.3, se tiene
que k=1 y por lo tanto: (n-k)=n-1, este caso se denomina descomposición simple o trivial.
Interesa la situación en que los bloques gi tienen acotado el número de variables de entrada. El
esquema general de las funciones, con la notación introducida, se muestra en la Figura 8.18,
para el caso de dos funciones seriales.
g0
Xa F(g0, g1, Xl) f(Xn)
g1
Xl
Si se dibuja la tabla de verdad, colocando en los renglones las combinaciones de los valores de
las variables libres, y en las columnas los valores de las combinaciones del conjunto acotado, la
condición para que pueda aplicarse la descomposición de Curtis, con dos funciones auxiliares,
es que las columnas de este arreglo tengan a lo más cuatro valores diferentes. Las cuatro
columnas no redundantes quedarán asociadas a los siguientes valores:
g1 , g 0 00, 01,10,11
Las mezclas de las columnas equivalentes, permiten determinar las funciones auxiliares en
términos de las variables del conjunto acotado.
Nótese que en este caso el número de columnas equivalentes debe ser mayor que 2; ya que si
sólo fueran dos podría aplicarse la descomposición de Ashenhurst. Puede decirse que la
descomposición simple de Curtis, cuando sólo se tienen dos columnas diferentes, es la
descomposición de Ashenhurst.
El análisis de los renglones permite establecer que existe la descomposición de Curtis, con dos
funciones seriales, si se tienen dos renglones diferentes, una vez eliminados los renglones
constantes y los renglones que son el complemento de otros.
g1
Xa
… F(g0, g1, …, gm-1, Xl) f(Xn)
gm-1
Xl
Nótese que los bloques g, representan una codificación de las variables del conjunto acotado, y
existe compactación si: m < n-k.
A 0 1 2 3 4 5 6 7
L x4x5\x1x2x3 000 001 010 011 100 101 110 111
0 00 1 1 1 1
1 01 1 1 1
2 10 1 1
3 11 1 1 1 1 1
f(A, L)=f(x1,x2,x3,x4,x5)
f ( x1 , x2 , x3 , x4 , x5 ) f ( A, L)
El primer renglón de f, es una función de tres variables, que representa los mintérminos de ese
renglón, lo cual puede anotarse:
f ( A, L) f ( A, 0) p0 ( L) f ( A,1) p1 ( L) f ( A, 2) p2 ( L) f ( A,3) p3 ( L)
i 7
f ( A, L) f (i, L) pi ( A)
i 0
En un caso general de n variables, la expansión por columnas, resulta con c igual al número de
columnas de la matriz:
i c
f ( x1 , x2 ,..., xn ) f ( A, L) f (i, L) pi ( A)
i 0
En la Figura 8.21, se muestra una implementación con multiplexor, controlado por las variables
acotadas de la expansión. Notar que las entradas al mux son funciones de las variables libres,
que representan los unos presentes de la función en cada columna. Existe simplificación en la
descomposición si varias de estas funciones son iguales entre sí, o bien si unas son el
complemento de otras, o si son constantes. La generación de una entrada lógica uno o cero, no
requiere electrónica para ser implementada; si una función es el complemento de otra, basta un
inversor para generarla.
f(0,L)
0
f(1,L) 1
L ….. f(A,L)
.
f(i,L) i
…..
.
f(c,L) c
La expansión por renglones, para un caso general con r igual al número de renglones, resulta:
f(A,0)
0
f(A,1) 1
A ….. f(A,L)
.
f(A,i) i
…..
.
f(A,r) r
Estas representaciones son únicas, ya que en ambos casos se están representando los
mintérminos de la función f. En un caso se expande por columnas, en el otro por renglones.
i c i r
f ( x1 , x2 ,..., xn ) f (i, L) pi ( A) f ( A, i ) pi ( L)
i 0 i 0
Una vez introducida la notación, nos interesa descomponer f en las funciones g y h, según:
f ( A, L) h( g ( A), L)
A g
h( g(A), L) f(A,L)
L
El número de columnas debe ser una potencia de dos, si cg=4, entonces el bloque g tiene dos
salidas, que podemos denominar g1 y g0, las que serían las variables, cuyos mintérminos
identificarían a las columnas.
Si cg=2m, entonces g tiene m salidas. Que podemos denominar: g0, g1, …, gm. Este es el caso
general de la descomposición disjunta de Curtis.
f ( x1 , x2 ,..., xn ) f ( A, L) h( g ( A), L)
i c i cg
f (i, L) pi ( A) h( g i, L) pi ( g )
i 0 i 0
Si c es mayor que cg, por ejemplo 8, ya que tiene que ser una potencia de dos, existirán 8
columnas en f y 4 columnas en h. Esto implica tres variables acotadas.
Entonces se requiere que a lo más f tenga 4 columnas diferentes, incluidas los valores de
columnas con puros ceros o puros unos; los valores de esas columnas serán los valores de las
columnas de h. Existen 4! formas de escoger las columnas de h, a partir de las columnas
diferentes de f.
Si f tiene 3 columnas diferentes, una de las columnas de h puede escogerse con solamente
valores superfluos.
Si f tiene 5 columnas diferentes, no es posible satisfacer la igualdad, en este caso es preciso que
h tenga también 8 columnas, de las cuales 3 pueden ser fijadas en condiciones superfluas. Sin
embargo en este caso se requieren 3 funciones g, lo cual implica que h tendrá igual número de
entradas que la función f. Razón por la cual este caso no es de interés en descomposición.
Una vez seleccionadas las columnas de f que representarán a las de h, esta función puede
determinarse. Además la determinación de las funciones g puede realizarse con las siguientes
cuatro ecuaciones:
pi ( A) p0 ( g ) g1 ' g 0 '
i f ( i , L ) h (0, L )
pi ( A) p1 ( g ) g1 ' g 0
i f ( i , L ) h (1, L )
pi ( A) p2 ( g ) g1 g 0 '
i f ( i , L ) h (2, L )
pi ( A) p3 ( g ) g1 g 0
i f ( i , L ) h (3, L )
Las cuales permiten escribir las tablas de verdad de las funciones g1 y g0, en términos de las
variables acotadas, ya que los pi ( A) sólo dependen de las variables acotadas.
En la tabla de la Figura 8.20, se han agregado dos renglones que identifican la selección
realizada de las columnas de h, y los valores binarios correspondientes de las salidas g1 y g0.
g1g0 00 01 00 10 10 01 11 00
h(0,L) h(1,L) h(0,L) h(2,L) h(2,L) h(1,L) h(3,L) h(0,L)
A 0 1 2 3 4 5 6 7
L x4x5\x1x2x3 000 001 010 011 100 101 110 111
0 00 1 1 1 1
1 01 1 1 1
2 10 1 1
3 11 1 1 1 1 1
f(A, L)=h(g(A),L)
g1 g 0 pi ( A) p6 ( A) x1 x2 x3 '
i 6
g1g0 00 01 00 10 10 01 11 00
x1x2x3 000 001 010 011 100 101 110 111
Funciones que pueden ser minimizadas, redibujando las tablas de verdad como mapas de
Karnaugh.
x4x5\ g1g0 00 01 11 10
00 1 1
01 1 1
11 1 1 1
10 1
h(g, x4, x5)
x3\ x1 x2 00 01 11 10
0 00 00 11 10
1 01 10 00 01
g1g0
Resultan:
g1 ( x1 , x2 , x3 ) x1 x3 ' x1 ' x2 x3
g0 ( x1 , x2 , x3 ) x2 ' x3 x1 x2 x3 '
Cuando la tabla de verdad tiene condiciones superfluas se dice que dos columnas i, j son
compatibles si cada elemento en la columna i es igual al correspondiente elemento de j, o si el
elemento en i o en j no está especificado.
Dicho de otra forma: Dos columnas, Cr y Cs, son compatibles, si no existe un renglón i, para el
cual los correspondientes elementos Cir y Cis sean diferentes, cuando ambos están
especificados.
Un conjunto de columnas para el cual cada par de columnas son compatibles se denomina clase
compatible. Las clases compatibles que no son subconjuntos de otras clases compatibles se
denominan clases de compatibilidad máxima.
Finalmente se selecciona un subconjunto de mínima cardinalidad de las clases máximas, tal que
cada columna esté al menos en una de clases de compatibilidad máxima que se empleen.
8.4.1. Ejemplo.
ab/ cde 000 001 010 011 100 101 110 111
00 1 - 0 1 - 0 1 0
01 - - - - 1 1 - -
10 - 0 1 0 0 - 0 1
11 0 1 - - - - - -
C0 C1 C2 C3 C4 C5 C6 C7
f(a,b,c,d,e)
Como ejemplo, los siguientes pares son incompatibles: (C0, C1), (C0, C2), (C0, C5), (C0, C7).
Para formar las clases, es preciso disponer de los pares de columnas compatibles. En la
siguiente tabla de la Figura 8.30, en la primera columna se anotan los pares indicando los
índices de las columnas.
Para formar la segunda columna, se recorren los pares para detectar los tríos de columnas
compatibles entre sí. Por ejemplo se tienen los pares: (0,3), (0,4) y (3,4), entonces se forma el
trío de columnas compatibles entre sí: (0, 3, 4). En la Figura 8.30, no se muestran todos los
vínculos que permiten construir la segunda columna. Como se usan todos los pares al formar la
columna de tríos, no se tiene una clase máxima formada por dos columnas.
Luego de la columna de tríos se forma una clase compatible de cuatro columnas entre sí. De este
modo puede formarse la clase (0,3,4,6) ya que se tienen: (0,3,4), (0,3,6), (0,4,6) y (3,4,6). Se
procede de igual forma hasta que no se puedan generar clases con un número mayor de
columnas compatibles entre sí.
Nótese que en la tercera columna quedan dos clases con cuatro columnas compatibles entre sí, y
en la segunda quedan dos con tres columnas compatibles entre sí. Éstas son las clases de
compatibilidad máxima.
0,3
0,4
0,6 0,3,4
1,3 0,3,6
1,4 0,4,6
1,5 1,3,4 0,3,4,6
1,6 1,3,6 1,3,4,6
2,5 1,4,5
2,7 1,4,6
3,4 2,5,7
3,6 3,4,6
4,5
4,6
5,7
Ahora debe efectuarse una selección de las clases, de tal modo que cada una de las columnas
esté incluida en alguna de las clases seleccionadas. Por ejemplo, pueden escogerse las clases:
(0,3,4,6), (1,4,5), (2,5,7). Finalmente los elementos múltiples deben eliminarse, resultando las
siguientes clases: (0,3,4,6), (1,5), (2,7).
La mezcla de las columnas de cada clase, que en el caso del ejemplo son tres, se asocian a los
valores de las funciones seriales g1 y g0. Nótese que se agrega una columna con valores
superfluos, lo que permite un nivel adicional de minimización de la función: h(g1, g0, (a,b))
ab/ g1g0 00 01 10 11
00 1 0 0 -
01 1 1 - -
10 0 0 1 -
11 0 1 - -
C0,C3,C4,C6 C1,C5 C2,C7 -
h
Si A C son las variables acotadas y L C son las variables libres y C es no vacío se tiene
una descomposición no disjunta.
A
g
C
F f
El uso de mapas con variables repetidas, permite generalizar el caso de las descomposiciones
disjuntas al tratamiento de las no disjuntas.
El mapa con variables repetidas es incompletamente especificado aunque la función original sea
completamente especificada. Cada variable repetida crea un mapa de una dimensión mayor en el
cual las nuevas celdas introducidas son condiciones superfluas.
8.5.1. Ejemplo.
f(A, B, C, D)
f(A, B, C, D)
Entonces mezclando las columnas compatibles, puede verse que existe la descomposición de
Ashenhurst no disjunta.
cd\g 0 1
00 1 0
01 0 0
11 0 1
10 1 0
h=d’g’+cdg
La determinación de la función g, puede obtenerse considerando que g será uno cuando las
variables acotadas CAB toman las combinaciones: 011, 101, 111, 110, con el mapa:
c\ab 00 01 11 10
0 1
1 1 1 1
g=ab + ac+ bc
Evaluando el costo con compuertas elementales, resulta de 17 entradas y 5 niveles. Sin embargo
este cálculo no es relevante si las funciones g y h pueden implementarse en un bloque básico.
b) Diseño compactando renglones.
Eligiendo valores para las condiciones superfluas, pueden formarse dos renglones
complementarios
C1AB
C2D 000 001 011 010 100 101 111 110
0 4 12 8
00 1 1 0 1 1 0 0 0
1 5 13 9
01 0 0 0 0 - - - -
3 7 15 11
11 0 0 1 0 0 1 1 1
2 6 14 10
10 1 1 0 1 1 0 0 0
f(A, B, C, D)
La ecuación para la función sucesora, se obtiene con la ecuación del multiplexor gobernado por
las variables libres.
h= gc’d’+0c’d+ g’cd + gcd’
La cual puede ser minimizada:
h= cdg’+d’g
c\ab 00 01 11 10
0 1 1 1
1 1
g=a’b’ + a’c’+ b’c’
Factorizando con SIS, que emplea cálculo con cubos, se obtiene la red booleana:
g1 = ab, g2=a’+b’ h= d’g1’+cdg1+c’d’g2 con 16 entradas, 4 niveles
En caso de tener sistemas con múltiples salidas debe aplicarse la descomposición en paralelo.
En la descomposición paralela el conjunto de variables de salida f, es particionado en dos
subconjuntos fG y fH, y la función f en las funciones G y H correspondientes. De tal modo que
los conjuntos XG y XH, de variables de entrada a los bloques G y H respectivamente, contengan
menos variables que el conjunto X de variables de entrada a la función f.
X XG XH
f fG fH
Los sistemas computacionales de ayuda al diseño (CAD) que permiten la optimización de lógica
multinivel, modelan las ecuaciones mediante una red lógica booleana, que es una
generalización de un netlist o un esquemático basado en compuertas.
A x1
B
x2
C
D
La Figura 8.43 representa una red lógica booleana, en la cual las salidas de los bloques,
denominados vértices internos o nodos, son funciones booleanas. Es decir un netlist de
componentes conectadas, pero éstas pueden ser ahora funciones booleanas arbitrarias.
En un caso general puede suponerse que las entradas a la red, provienen de salidas de latchs o
flip-flops, que almacenan los valores de las variables; y que las salidas de la red son
almacenadas en registros.
A
x1
B
x2
C
D
Si las funciones de cada nodo se representan en forma suma de productos, el costo de la red
puede calcularse como la suma de los literales de cada nodo.
Se entiende por optimización multinivel al proceso de encontrar factores lógicos que sean
comunes, lo cual reduce el fan in pero aumenta el número de niveles. Luego debe mapearse
estas formas factorizadas en alguna de las formas que estén disponibles en una biblioteca.
8.7.2. Operaciones.
Eliminación de un nodo.
Se elimina un nodo interno mediante el reemplazo de la función que lo describe en todos los
nodos que éste alimenta. Se elimina un nodo de pequeño costo, el cual es absorbido por el
resto. También se denomina colapsamiento del nodo x. Esta operación disminuye el tiempo de
propagación de la red pero aumenta los costos de los nodos.
C S=x+C C S=A’+B+C
A
A
B
x=A’+B
B
T=xD A T=(A’+B)D
B
D D
Creación de un nodo.
Se agrega un nuevo vértice que contiene una subexpresión que es común a dos o más nodos;
luego la salida del nuevo nodo substituye el término común en los nodos.
Se disminuye el tamaño de algunos nodos, agregando un nodo factor; de este modo los nodos
resultantes son de costos menores.
Esta operación también se denomina extracción, ya que obtiene un factor que es común a varias
funciones. Esta operación aumenta el tiempo de propagación de la red pero disminuye los costos
de los nodos.
Encontrar métodos para obtener factores adecuados ha sido posible gracias al desarrollo de
nuevos conceptos teóricos: Para lograr disponer del operador división no se definen algunos
postulados del algebra de Boole, de este modo una expresión booleana se comporta como un
polinomio de números reales.
Específicamente no se definen: a+a’=1, aa’=0, aa=a, a+a=a, a+1=1, a+(b+c) =(a+b)(a+c).
Con esto podemos usar para expresiones las reglas algebraicas empleadas con reales. Nótese
que en este ambiente una variable y su complemento no tienen ninguna relación.
Simplificación.
Puede aplicarse un método de simplificación, del tipo minimización en forma de suma de
productos, a la función asociada a un nodo. Si no se eliminan variables se tiene una
minimización local; sin embargo si se elimina una o más variables, se dice que la simplificación
es global ya que cambia la red.
SIS
La forma de efectuar minimizaciones multinivel es a través de herramientas CAD de ayuda al
diseño. Éstas suelen venir incorporadas en el software provisto por los fabricantes de
dispositivos programables, o bien se producen en forma comercial. Por otra parte se puede usar
software libre como sis, que fue desarrollado por la Universidad de Berkeley. Ver Apéndice 6,
Las formas factorizadas no son únicas. La siguientes tres formas son equivalentes:
ab+c(a+b) bc+a(b+c) ac+b(a+c)
Una forma suma de productos es una forma factorizada pero seguramente no es una buena
factorización considerando el costo espacial.
Esto implica que una forma “bien” factorizada es bastante más compacta que la cobertura
mínima formada por la suma de implicantes primos.
La forma factorizada equivalente func2, tiene 10 literales y 6 niveles. Con 16 entradas en total.
En este diseño todas las compuertas son de dos entradas, salvo una que es de 4.
func2=(a+b)(c+d(e+f(g+h+i+j)))
A través de los ejemplos anteriores se comprueba que las formas factorizadas son útiles en la
reducción del costo de una red multinivel.
En diseños de funciones integradas CMOS, las redes de pull-up y pull down corresponden a la
forma factorizada de la función.
Problemas resueltos.
P8.1. Descomposición.
ab\cd 00 01 10 11
00 0 1 1 0
01 1 0 0 1
10 1 1 1 1
11 0 0 0 0
Luego se buscan columnas equivalentes. Se encuentran dos columnas diferentes, lo que implica
que la red tiene descomposición de Ashenhurst.
ab\g 0 1
00 0 1
01 1 0
10 1 1
11 0 0
h=ab’+b’g+a’bg’
P8.2. Factorización.
C’
D A
f
E’ B
F’
Luego se representan todas las compuertas, usando el símbolo de los NAND. El diseño se logra
empleando 5 compuertas nand y con 10 entradas. Debe notarse que este método asume que se
dispone de las entradas y sus complementos.
Ejercicios propuestos.
E8.1.
Efectuar la descomposición, si es posible, del problema P8.1, para los siguientes juegos de
variables libres: (a,c), (a,d), (b,c), (b,d) y (c,d). Comparando los resultados, y seleccionando la
mejor descomposición.
E8.2.
H. Allen Curtis, “Generalized Tree Circuit”, Lewis Research Center. NASA. 1961.
Índice general.
CAPÍTULO 8 ..............................................................................................................................................1
DESCOMPOSICIÓN .................................................................................................................................1
8.1. DESCOMPOSICIÓN TRIVIAL. TEOREMA DE SHANNON..........................................................................2
8.1.1. Extracción de una variable. .......................................................................................................2
8.1.2. Extracción de dos variables. ......................................................................................................4
8.2. DESCOMPOSICIÓN DE ASHENHURST. ..................................................................................................5
8.2.1. Compactando las columnas. ......................................................................................................6
8.2.2. Redundancia de renglones. ........................................................................................................8
8.2.3. Complejidad de la descomposición. ...........................................................................................9
8.3. DESCOMPOSICIÓN DE CURTIS. ..........................................................................................................10
8.3.1. Descomposición de Curtis, con dos funciones auxiliares. .......................................................11
8.3.2. Descomposición de Curtis, con m funciones auxiliares. ..........................................................12
8.3.3. Fundamentos. ...........................................................................................................................13
8.4. DESCOMPOSICIÓN DE FUNCIONES INCOMPLETAMENTE ESPECIFICADAS. ...........................................19
8.4.1. Ejemplo. ...................................................................................................................................20
8.5. DESCOMPOSICIONES NO DISJUNTAS. .................................................................................................22
8.5.1. Ejemplo. ...................................................................................................................................22
a) Diseño mezclando columnas. ..................................................................................................................... 23
b) Diseño compactando renglones. ................................................................................................................ 24
8.6. DESCOMPOSICIÓN PARALELA. ..........................................................................................................25
8.7. SÍNTESIS MULTINIVEL.......................................................................................................................25
8.7.1. Redes lógicas booleanas. .........................................................................................................25
8.7.2. Operaciones. ............................................................................................................................27
Eliminación de un nodo. ................................................................................................................................ 27
Creación de un nodo. ..................................................................................................................................... 27
Descomposición. ............................................................................................................................................ 28
Factorización. ................................................................................................................................................. 28
Simplificación. ............................................................................................................................................... 28
SIS.................................................................................................................................................................. 28
8.7.3. Formas factorizadas. ...............................................................................................................29
PROBLEMAS RESUELTOS. ........................................................................................................................30
P8.1. Descomposición. .......................................................................................................................30
P8.2. Factorización. ...........................................................................................................................31
EJERCICIOS PROPUESTOS. ........................................................................................................................32
E8.1. ...................................................................................................................................................32
E8.2. ...................................................................................................................................................32
REFERENCIAS. .........................................................................................................................................33
ÍNDICE GENERAL. ....................................................................................................................................34
ÍNDICE DE FIGURAS .................................................................................................................................35
Índice de figuras
Capítulo 9
Sistemas secuenciales
9.1. Definiciones
Evento
Se denomina evento al cambio de valor de una señal en un instante de tiempo. Pasar de nivel
lógico 1 a 0 se denomina canto de bajada. Un canto de subida se produce cuando la señal pasa
de nivel lógico 0 a 1.
A un evento también se lo denomina mensaje; en un caso más general cuando se tienen varias
señales, los valores que toman los eventos suelen interpretarse como símbolos pertenecientes a
un alfabeto.
Máquina abstracta.
Una máquina abstracta es un modelo de computación que establece cómo se generan las
acciones, o eventos de salida, a partir de los mensajes o eventos de entrada.
Mensajes Acciones
Máquina
Existen sistemas o máquinas que pueden cambiar sus atributos en función del tiempo, se
denominan dinámicos.
Estado.
Transición.
Se denomina transición al cambio de estado del sistema, y ésta debe indicar cómo se pasa de un
estado a otro.
Un modelo matemático adecuado para la función de transición es una matriz, en la cual los
renglones y columnas representan los diferentes estados internos y los eventos de entrada,
respectivamente. El contenido de la matriz especifica el próximo estado.
Diagrama de estados.
Es posible generar un autómata de estados finitos determinista que tenga las mismas salidas,
para iguales entradas, que uno no determinista.
Tipos de máquinas.
Existen varios tipos de máquinas. Se denominan de Mealy aquéllas cuyas salidas se producen
en las transiciones entre estados; y Moore a aquéllas en las cuales las salidas están asociadas al
estado. Existen procedimientos para convertir un modelo de Mealy en uno de Moore.
Un diagrama de la estructura interna de la máquina abstracta que se ilustra en la Figura 9.1, se
muestra en la Figura 9.2.
Y = FPE(x, y)
x FPE M FS
Y y z
Las funciones de próximo estado y de salida son funciones combinacionales. La Figura 9.2,
muestra un bloque de memoria M, que sostiene durante un tiempo el valor del estado presente y,
una vez calculado el próximo estado Y, éste se registra como el nuevo estado actual.
Reloj.
Máquinas secuenciales.
Las máquinas de estados finitos suelen denominarse máquinas secuenciales ya que a partir de
un estado inicial y de una secuencia ordenada de eventos de entrada, generan una secuencia de
estados por los que pasa la máquina, y a su vez una secuencia de acciones de salida.
Las máquinas secuenciales son un poderoso modelo para implementar esquemas de control
secuencial (dependientes de la historia pasada), tanto en hardware como en software. El modelo
Si la memoria está formada por un conjunto de flip-flops comandados por el mismo reloj, la
actualización del estado se produce en instantes sincronizados por el reloj. La Figura 9.3
muestra el diagrama general de Moore de una máquina secuencial sincrónica.
Reset’
x FPE M FS
Y y z
D Q
Clk
Si en la Figura 9.2, el bloque de memoria M, está formado por unidades de retardo se tiene un
modelo de representación de máquinas secuenciales asincrónicas.
Síntesis lógica.
Ejemplos de secuencias.
a) Sincrónica de nivel.
0 1 2 3 4 5 6 7 8 9 (valores de k)
t0
...
xn = { 0 1 0 0 1 1 0 1 0 0 ... }
Se dice que la señal xn es una secuencia sincrónica de niveles, con respecto a un reloj, ya que
ésta sólo cambia en cantos de bajada (o de subida) del reloj, y además permanece constante el
nivel de la señal entre cantos de bajada (o de subida) del reloj.
La Figura 9.5, muestra una secuencia sincronizada por los cantos de bajada del reloj.
b) Sincrónica de pulsos
reloj
xp = { 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, ... }
t0 t1 t2 t3 t4 t5
xa = { 0 1 0 1 0 1 ...}
t t t t t t t
0 1 2 3 4 5 6
Los valores que deben registrarse para recordar la situación, debida a los valores de las entradas
pasadas, se almacenan en variables de estado. Podemos considerar que las variables de estado
son salidas de elementos con memoria (flip-flops, registros, latches, retardos).
En cualquier instante, una máquina secuencial está en uno de un número finito de estados; éstos
quedan determinados por el valor de las variables de estado. Por ejemplo, si hay cuatro estados,
se requieren 2 variables de estado para registrar que el sistema se encuentra en uno de los cuatro
estados posibles: 00, 01, 10, 11.
Si se aplica una secuencia de entrada, la máquina generará una secuencia de salida, y pasará por
una secuencia de estados internos.
y j (k 1) = Y j (k )
La memoria debe ser capaz de almacenar los Yj (k) y sostener estos valores durante el intervalo
(k+1). Debe notarse que los valores y j (k 1) son estables, pero los valores Y j (k ) , en el
intervalo anterior, pueden presentar perturbaciones al inicio para estabilizarse hacia el final del
intervalo. En el intervalo k-ésimo, la entrada a la memoria j-ésima es Y j (k ) ; la salida de esa
memoria, en el mismo intervalo, es y j (k ) .
Y(k) y(k+1)
Y(k) y(k)
k k+1
Ecuaciones que indican que tanto la salida como el próximo estado dependen de la entrada y el
estado actual.
Para resolverla, es preciso conocer el valor del estado inicial y la secuencia de entrada a partir
del tiempo inicial.
Gráficamente:
y (0) y (1) y (2) y (3)
....... ..
x (0) x (1) x (2) x (3)
Para conocer y(1) se requiere conocer y(0) y x(0). Para conocer y(2) se requiere conocer y(1) y
x(1). Para conocer y(3) se requiere conocer y(2) y x(2). Y así sucesivamente.
y (k 1) = y (k )
Si el próximo estado es diferente al actual, se dice que habrá una transición o cambio de estado.
Ese estado actual se denomina inestable:
y(k 1) y (k )
Lo anterior implica que una de las variables de estado conmuta, o cambia, su valor lógico.
Los elementos de almacenamiento pueden ser simplemente líneas de realimentación, las que
tienen asociado un retardo entre la entrada y la salida, en este caso se tienen sistemas
secuenciales asincrónicos.
Se entiende por representación la descripción de cómo se pasa de un estado a otro, debido a los
cambios de las entradas. Las representaciones deben describir en forma precisa y completa a la
máquina. Además, deben ser adecuadas para una manipulación formal.
Es un modelo secuencial en el cual la salida está asociada a las transiciones entre estados. Las
salidas cambian instantáneamente con los cambios de las entradas; el cambio de estado, se
produce sincronizadamente con el reloj. El diagrama se muestra en la Figura 9.9.
Reset’
x z
M
FS
Y y
FPE DQ
Clk
i) Diagrama de estados
Un diagrama de estados es un grafo en el cual, los estados se representan mediante círculos, y
por líneas rotuladas y orientadas las transiciones. El rótulo indica la entrada y la salida que
provoca la transición. Se separan con una pequeña barra diagonal (slash, en inglés).
En general:
y2
x/z
y1
El diagrama anterior puede leerse: Estando en el estado y1 , cuando llega la entrada x se pasa al
estado y2 , con salida z.
Esquemáticamente:
x
y Y/z
Las representaciones son equivalentes, puede lograrse una a partir de la otra. Es decir, la matriz
de transiciones y el diagrama de estado suministran la misma información.
y Y y z
Modelo secuencial en el cual la salida sólo está asociada al estado presente. Las salidas y el
estado cambian sólo en los cantos de sincronización del reloj.
x(k) FPE M FS
Clk
i) Diagrama de estados
y2/z2
x
y1/z1
El diagrama anterior, puede leerse: Estando en estado y1 , con salida z1 ; cuando ocurre la entrada
x se pasa al estado y2 , con salida z2 .
La salida no cambia en la transición; por esta razón, las salidas se asocian a los estados.
ii) Tabla de transiciones x
y Y y z
El modelo de Mealy es más general que el de Moore. Este último es un caso particular del
primero.
Ejemplo 9.1
X
0 1
Estado
A D/0 C/1 Secuencia de Entrada ={0,1,1,0,1,0,1,1,0,0,0,...}
B B/1 A/0
Estado inicial = A
C C/1 D/0
D A/0 B/1
Próximo estado/z
Secuencia 0 1 2 3 4 5 6 7 8 9 10
Entrada 0 1 1 0 1 0 1 1 0 0 0
Estado actual A D B A D B B A C C C
Próximo estado D B A D B B A C C C C
Salida 0 1 0 0 1 1 0 1 1 1 1
x z
... ...
0123.. 012...
Se ingresa la secuencia de valores: x0, x1, x2,… y se genera la secuencia de valores de salida: z0,
z1, z2, ...
B D
0/1 1/1
Ejemplo 9.2.
0 1
1 0
B/0
i 0 1 2 3 4 5
Entrada 0 0 0 1 1 1
Estado presente C B A A B C
Estado próximo B A A B C A
Salida 0 0 1 1 0 0
Las máquinas de Moore suelen emplearse como reconocedores de secuencias. Es decir, que
entreguen una salida cuando ocurre una determinada secuencia en la entrada.
Pueden obtenerse la tabla de transiciones y la tabla con la lógica de salida, a partir del diagrama
de estados:
Ejemplo 9.3.
1
reset
0
Moore 0 1 2 3 4 5
Entrada 0 1 1 0 1 1
Estado presente Inicio Inicio Est0 Est1 Est2 Est0
Estado próximo Inicio Est0 Est1 Est2 Est0 Est1
Salida 0 0 0 0 1 0
1/0 1/0
0/0 1/0
0/1
reset
Figura 9.24 Diagrama de Mealy Ejemplo 9.3.
Mealy 0 1 2 3 4 5
Entrada 0 1 1 0 1 1
Estado presente Inicio Inicio Est0 Est1 Inicio Est0
Estado próximo Inicio Est0 Est1 Inicio Est0 Est1
Salida 0 0 0 1 0 0
En general los modelos de Mealy pueden generar las mismas secuencias de salidas que una
máquina de Moore, pero con menos estados. Nótese que las salidas de Mealy ocurren un
intervalo de tiempo antes que las de Moore.
En las máquinas de Mealy, las salidas z pueden cambiar inmediatamente cuando ocurre un
cambio en las entradas, y éstas pueden cambiar entre pulsos del reloj. Si esto no se desea,
pueden sincronizarse las salidas asincrónicas, de una máquina de Mealy, pasándolas por un flip-
flop. Esto se muestra en la Figura 9.24b, donde la salida zr , tiene sus cambios sincronizados por
el reloj. Esto aumenta el número de flip-flops requeridos para la implementación y además se
posterga la salida hasta el próximo canto del reloj. Ver Capítulo 11.9.
Clk
x(k) zr(k)
M
FS
y(k+1) y(k)
FPE DQ
Clk
Ejemplo 9.4.
Los siguientes diagramas ilustran la diferencia entre el número de estados, requeridos para cada
uno de los modelos de máquina, para un detector de la secuencia de dos unos seguidos, cada vez
que ésta se presente.
reset
0 reset
S0/0
0/0
S0
0 1
0/0 1/0
S1/0 0
S1
1
1
S2/1 1/1
Supongamos que disponemos de una lavadora, que externamente tiene tres botones: Encender,
Detener, Lavar; de un indicador luminoso L, y de un interruptor ubicado en la puerta.
La Figura 9.26 ilustra un esquema de los controles e indicadores de la máquina lavadora.
puerta
Estando apagada, el evento encender dispara una transición al estado detenida (o encendida).
Estando en el estado detenida, la ocurrencia del evento lavar produce la transición al estado
lavando.
Si está lavando, la presión del botón detener gatilla la conmutación al estado detenida.
Al producirse el evento abrir la puerta, la lavadora debe pasar al estado apagada.
La luz L debe encenderse cuando hay potencia aplicada a la lavadora. Es decir, desde que se
pasa de apagada a encendida y mantenerse iluminada hasta que se abra la puerta, cuando se pasa
a apagada.
Los eventos producen cambios de estado. Cada transición o cambio de estado, está asociada a
un (y sólo un) evento. Un evento puede desencadenar varias transiciones, en el ejemplo, la
entrada o evento puerta produce dos transiciones, dependiendo del estado en que se encuentra la
lavadora.
La única acción de salida L se ilustra asociada a las transiciones (Mealy). También es posible
asociarla a los estados (Moore): la luz L debe estar encendida mientras la lavadora esté
encendida o lavando; debe apagarse cuando esté en el estado apagada.
Encender/ L Lavar/ L
Puerta/ L’ Detener/ L
Puerta/ L’
Sub-máquinas.
La descripción de la lavadora puede seguir especificándose con mayor detalle, si se define con
mayor precisión el estado lavando. Esto significa observar señales internas de la lavadora.
Si se define el evento rotar, que produce que el motor de una vuelta, y de la señal de salida giro
(G=1 a la izquierda, y G=0 a la derecha) y se define que el proceso de lavar sea dar dos vueltas
a la izquierda seguidas por dos vueltas a la derecha, en el diagrama aparecen cuatro nuevos
estados para describir el estado lavando.
Apagada
Puerta/ L’ Encender/ L
Puerta/ L’
Puerta/ L’
Encendida
Lavar/ L Detener/ L
Rotar
Izquierda/ G Derecha 1/ G’
Puerta/ L’ Puerta/ L’
Rotar Rotar
Izquierda 1/ G Derecha/ G’
Rotar
a) En el diagrama de Mealy deben separarse aquellos estados, para los cuáles existan
transiciones con diferentes valores de salida, para igual entrada:
x/0
x/0 Sa0
Sa
x/1 Sa1
x/1
Figura 9.29. Separación de estados.
Luego cada estado tendrá sólo un valor de salida asociado, y se transforma a representación de
Moore, según:
x Sa0/0
Sa1/1
x
b) Una vez agotado el paso a), para el estado inicial pueden presentarse dos casos:
b1) Estado inicial con salida 0. No requiere modificación.
reset S/0
S/1
reset
En este caso debería haber salida, sin haber aplicado una entrada. Se corrige agregando un
estado adicional:
S/1
Si/0
reset
reset
reset 0/0
S0
0/0
S0
0/0 1/0
reset
0/0
S0
0/0 1/0
S10 0/0
1/1
1/1
S11
reset
0
S0/0
0 1
S10/0 0
1
1
S11/1
0
reset entrada estado próximo salida
actual estado
B/0 1 D/1 1 - A - 0
0 0 A B 0
0 0 1 A C 0
0
reset 0 0 B B 0
A/0 0 1 B D 0
1 0
0 0 C E 0
1 0 1 C C 0
1
0 0 D E 1
C/0 E/1 0 1 D C 1
0
0 0 E B 1
0 1 E D 1
1
0/0
reset entrada Estado próximo salida
B actual estado
0/0 1 - A - -
0 0 A B 0
reset 0 1 A C 0
A 0/1 1/1
0 0 B B 0
0 1 B C 1
1/0
0 0 C B 1
C 0 1 C C 0
1/0
Si bien existen innumerables formas que pueden tomar los diagramas de estados, pueden
describirse algunos tipos que se presentan frecuentemente.
Máquinas que analizan secuencias de largo fijo con un recorrido fijo. Por ejemplo:
adquirir 5 valores de la secuencia y tomar una acción, de acuerdo a los valores.
Máquinas que analizan secuencias de largo fijo con un recorrido fijo, con reintento en
caso de falla. Si una subsecuencia no es correcta, vuelven al estado inicial; o a un estado
previo.
Reconocedores continuos. Se genera una salida cada vez que se detecta una secuencia
dada. En estas máquinas, cada estado recuerda una secuencia previa de la entrada. En
este caso, se habla de estado inicial sólo cuando la máquina comienza a funcionar.
Nuestro lenguaje común suele ser impreciso y a veces redundante. Por esta razón es conveniente
emplear las construcciones estructuradas de los lenguajes de programación. Ver Apéndice 5,
sobre Uso de Verilog.
En general, el paso de una descripción en lenguaje natural a la tabla de estados, se efectúa por
pasos tentativos, hasta asegurar que el modelo formal obtenido cumple las especificaciones
dadas.
x M.S. z
Tenemos que interpretar cuando se genera la salida. Como para cada valor i de la secuencia de
entrada debe existir un valor de la secuencia de salida; debemos decidir qué salida generar
cuando han llegado uno, dos o tres valores de la entrada. En estos casos asumiremos salida cero,
dejando salida uno si los cuatro bits no pertenecen al código BCD. El bit más significativo es el
primero.
Estado Inicial
0/0 1/0
b c
0/0 1/0 0/0 1/0
d e f g
0/0 1/0 0/0 1/0 0/0 1/0 0/0 1/0
h i j k l m n o
0/0 1/0 0/0 1/0 0/0 1/0 0/0 1/0 0/0 1/0 0/1 1/1 0/1 1/1 0/1 1/1
Cada estado representa una subsecuencia previa de la entrada. Por ejemplo, en el estado l se ha
recibido la secuencia 100. En el estado d se ha recibido 00.
Este primer diseño es muy sistemático; se forma un árbol de decisión. De cada estado, se pasa a
dos próximos con entrada cero y uno respectivamente.
Estos problemas no tienen una solución única. Puede encontrarse un diagrama de estados más
simple. Por ejemplo:
a
1/0
0/0
b e 1/0
/0 0/0
c f g
1/0
/0
/0
/0 /0
0/0
d h
/0 /1
Se emplea para indicar que con entrada cero o uno, se pasa al próximo estado. Este segundo
diagrama requiere tres flip-flops para representar los siete estados. El anterior requiere 4 flip-
flops para identificar 15 estados.
Existen procedimientos sistemáticos para encontrar estados equivalentes y removerlos de los
diagramas, esto se desarrolla en el Capítulo 12.
Se desea obtener el diagrama de estados de una máquina secuencial que produzca una salida alta
cada vez que se detecta la secuencia 0101 en la entrada; la salida debe ser cero en el resto de los
casos.
A partir de un estado inicial A, se plantea el diagrama para la secuencia que se desea reconocer:
A B C D
0/0 1/0 0/0
1/1
Luego, lo que resta es completar las transiciones que faltan. Desde cada estado deben salir dos
transiciones; en este caso, sólo hay una entrada, y ésta puede tomar valores 0 y 1.
Observaciones:
0/0
1/0 0/0
A B
B C D
0/0 1/0
1/1
0/0
Figura 9.43 Diagrama de estados completo del reconocedor continuo.
Diseñar máquina secuencial que reconozca con salida uno, cada vez que se presente en la
entrada, la secuencia de exactamente dos ceros, seguida de 10. En caso contrario debe generar
salida cero.
0/1
El diagrama completo:
1/0 0/0
E
1/0 0/0
0/0 1/0
1/0 A B C D
0/0
0/1
1/0
En este ejemplo se ilustra la importancia de darle un nombre simbólico adecuado a cada estado.
Si la entrada presente y las tres anteriores forman un código válido BCD, entonces la salida
permanece en 0; en caso contrario la salida debe ser uno.
Si asignamos el nombre del estado tal que éste sea la secuencia previa de 3 bits de la entrada,
para construir el diagrama basta obtener los estados próximos a cualquier estado.
Por ejemplo, a partir del 001, se llega a los estados 011 y 010, con entradas uno y cero
respectivamente.
001
1 0
011 010
Los dos últimos bits de 001, forman los dos primeros de 011 y 010.
De esta forma es sencillo plantear, el diagrama completo, que se muestra en la Figura 9.47.
000
1 0
1
001 100
0
0
010
1 1 0 0
101
1 1
011 110
0
1 0
111
Para completar el diagrama deben indicarse las salidas asociadas a las transiciones.
Las secuencias: 1010, 1011, 1100, 1101, 1110, 1111 son las que tienen asociada una salida uno.
La función de salida puede describirse por la siguiente tabla de verdad, y con ésta completar el
diagrama.
Estado x
0 1
000 0 0
001 0 0
010 0 0
011 0 0
100 0 0
101 1 1
110 1 1
111 1 1
z
0/0 1/0
1/0 0/0
1/1 B C
1/0 /0
/0
0/0
D E
1/0 /0
0/0
F G
Asumiendo que el estado inicial es el A, y observando cuando se produce la única salida con
valor 1, y que además después de cuatro transiciones se retorna al estado inicial: se obtiene que
analiza secuencias de largo cuatro. Si la secuencia es 1111 genera salida 1; en el resto de las
secuencias la salida es cero.
Problemas resueltos.
Se desea diseñar una máquina secuencial cuyo objetivo es permitir a la hormiga encontrar la
salida del laberinto.
La hormiga dispone de dos sensores en las antenas izquierda y derecha (I y D), que están en 1 si
la antena respectiva entra en contacto con las paredes del laberinto; y se colocan en cero si dejan
de estar en contacto. Son las entradas a la máquina de estados finitos.
La hormiga también dispone de tres señales de actuación, que son las salidas de la máquina, una
señal para avanzar hacia delante A; otra para doblar levemente hacia la izquierda DI; y otra para
doblar levemente hacia la derecha DD.
La estrategia para diseñar el cerebro de la hormiga es mantener la pared a la derecha de la
hormiga.
Para desarrollar el diagrama de estados, se elige emplear el modelo de Moore. Es decir, las
salidas estarán asociadas al estado.
Se definen los estados posibles, y en cada uno de éstos debe observarse los valores de las
entradas que llevan a otros estados. Debe notarse que se tienen cuatro combinaciones posibles
para los valores permitidos a las entradas, esto implica dibujar 4 transiciones a estados
próximos. Sin embargo es posible simplificar el diagrama rotulando las transiciones como una
expresión lógica de las entradas.
Ejemplos:
Si debe pasarse a cierto estado cuando cualesquiera de las antenas tocan una pared, la transición
puede rotularse ( I + D).
Para encontrar los estados debe analizarse las diversas situaciones en que se puede encontrar la
hormiga en su recorrido del laberinto. Observando las entradas, y las acciones que ésta puede
realizar, a continuación se plantean algunas de las situaciones:
C: Se acaba la pared:
Avanzar, doblando levemente a la derecha, hasta llegar a D:
H:Perdido:
Avanzar hasta tocar algo.
I+D I’ D
I’ D’ D
I’ D’ D
I’ D’
B C
(DD, A) (DD, A) D’
D’
Nótese que los estados E y G se tratan como si fuera un solo estado. En ambos se toca con la
antena izquierda, y el objetivo (local, para cumplir la estrategia) es dejar de tocar la pared.
El diagrama muestra que los estados B y C podrían tratarse como uno solo (son equivalentes).
Ya que tienen iguales salidas; y para iguales entradas, se pasa a igual estado próximo (más
adelante, en el Capítulo 12, se verán algoritmos para determinar estados equivalentes).
Si se funden los estados B y C se llega al siguiente diagrama, que representa el cerebro de la
hormiga:
I+D
L’ D’ D
I’ D’
I’ D’
B/C
D’ (DD,
A)
S0 S1 S2 S3 S4 S5 S6 S7
reset 0 0 0 0 0 0 0
[000] [001] [010] [011] [100] [101] [110] [111]
reset S0 0 S1 0 S2 0 S3 0 S4 0 S5 0 S6 0 S7
[000] [001] [010] [011] [100] [101] [110] [111]
1
1 1 1
1
1 1 1
Sean: entrada x y salida z. La salida se activa cada vez que se presenta la secuencia 010, y
mientras que la secuencia 100 no se haya presentado, en cuyo caso la salida se desactiva
permanentemente.
reset E0
[0]
0 1
E1 E4
[0] [0]
1 0
E2 E5
[0] [0]
0 0
E3 E6
0,1
[1] [0]
Si estando en E2 llega un uno, se tendrán dos unos seguidos, entonces debe pasarse al estado
E4.
Si estando en E5 llega un uno, se tendrá hasta ese momento, que los dos últimos de la secuencia
son 01, entonces debe pasarse al estado E2.
reset E0
[0]
0 1
E1 E4
0 1
[0] [0]
...0 ...1
1 0
1
E2 1 E5
...10
[0] [0]
...01
0 1 0
E3 E6
0, 1
[1] [0]
...010 ...100
Problema 9.4. Diseñar el control de una máquina de lavar ropa. Uso de temporizadores.
Entradas Salidas
Descripción Variable Descripción Variable
Botón de Partida SP Dispensador mediano AM
Sensor carga mediana SM Dispensador Grande AG
Sensor carga grande SG Actuador lavado AL
Sensor salida sucia SS Actuador enjuague AE
Sensor descarga salida SD Actuador centrífuga AC
Timeout 60 min O60 Inicio timer 60 min I60
Timeout 10 min O10 Inicio timer 10 min I10
reset
Enjuage Centrífuga
O10’ / AE
O10&SS’ # O60 / I10 1
O10’&SD / AC
Determinar el diagrama de estados de una máquina secuencial (Modelo de Mealy) que produce
una salida alta cada vez que se detecta la secuencia 0101 en la entrada; y salida cero en el resto
de los casos. Determinar la secuencia de salida y de estados para la siguiente secuencia de
entrada: 010110011…
Solución.
1/0
0/0
1/0 0/0
A B
B C D
0/0 1/0
1/1
0/0
Entrada 0 1 0 1 1 0 0 1 1 ....
Salida 0 0 0 1 0 0 0 0 0 ....
Pxo. Estado B C D C A B B C A ….
z1 0 1 1 0 1 0
z2 1 1 1 1 0 1
z1 0 1 1 0 0 1
z2 1 1 0 1 1 1
Solución:
a) Una posible solución es elegir la secuencia de x = 1 para asignar los nombres a los estados y
a partir de esta asignación completar la matriz de transición de tal manera que se cumpla con la
secuencia para x = 0.
En ambas secuencias las salidas pasan por seis estados, teniendo estados con iguales salidas las
soluciones pueden ser combinaciones de elecciones de estos estados, pero deben tenerse los seis
estados
Son posibles otras soluciones de acuerdo a la asignación de los nombres de los estados.
x 0 1 Salida z2z1
Estado Estado
A C B A 10
B A C B 11
C E D C 11
D B E D 10
E F F E 01
F D A F 10
0
A
1 10 1
F B
10 11
0
1
1 0
0
E C
01 11 0
0
1 D 1
10
Entrada Reset 0 0 0 1 1 0 0 1 0 -
Estado Actual - A C E F A B A C D B
Próximo Estado A C E F A B A C D B -
Salida (z2z1) 10 10 11 01 10 10 11 10 11 10 11
Para una máquina secuencial con dos entradas c1 y c0. A es el estado inicial.
Se tienen:
Con c1 = 0 y c0 = 0 el sistema recorre la siguiente secuencia periódica de estados: ABCD.
Con c1 = 1 y c0 = 1 el sistema recorre la siguiente secuencia periódica de estados: ADCB.
Con c1 = 1 y c0 = 0 el sistema recorre la siguiente secuencia periódica de estados: ADBC.
Con c1 = 0 y c0 = 1 el sistema recorre la siguiente secuencia periódica de estados: ABD. Y
si está en estado C, permanece en él.
a) Determinar la tabla o matriz de excitaciones.
b) Determinar la secuencia de estados para la siguiente secuencia de entradas:
c1 0 0 1 0 0 1
c0 0 0 0 1 1 1
Solución:
Se asume que al cambiar las entradas, mientras se genera una secuencia, se continúa con el
próximo estado de acuerdo a las entradas. Es decir no se retorna a un estado inicial.
reset A
0 0
C1C0
1 11
10
D B
10
11
11
00 0
C
01
01
a)
Entradas c1c0
Estado 00 01 11 10
A B B D D
B C D A C
C D C B A
D A A C B
Próximo estado
b)
c1 0 0 1 0 0 1 ..
c0 0 0 0 1 1 1 ..
Estado Actual A B C A B D C
Próximo estado B C A B D C
Se tiene una máquina secuencial de Moore, con una entrada x, y tres salidas: z1, z2 y z3.
Cada vez que se presenta la secuencia 01 en la entrada, las salidas toman valores:
z1=1, z2=0 y z3=0.
Cada vez que se presenta la secuencia 10 en la entrada, las salidas toman valores:
z1=0, z2=1 y z3=0.
Cuando se presenta la secuencia 00 en la entrada, vuelve al estado inicial, con salidas: z1=0,
z2=0 y z3=0; y desde allí reanuda el análisis de las secuencias; es decir, vuelve a comenzar.
Cuando se presenta la secuencia 11 en la entrada, permanece en el estado al cual llegó, con
salidas: z1=0, z2=0 y z3=1.
En el resto de los casos las salidas toman valores: z1=0, z2=0 y z3=0.
Determinar:
a) El diagrama de estados.
b) La tabla de transiciones entre estados.
c) Diseño de ecuaciones para las salidas, mediante un mapa de Karnaugh. Indicar el nombre
elegido para las variables de estado y los nombres binarios elegidos para los estados lógicos.
Solución.
El nombre _0 se usa para el estado al que pasa la máquina cuando ha llegado un cero, estando
en el inicial. Y _1 se usa para el estado al que pasa la máquina cuando ha llegado un uno,
estando en el inicial.
reset
x Estado z1 z2 z3
Estado 0 1 lógico
__
__ _0 _1 __ 0 0 0
0 000
1 _0 __ _1 _0 0 0 0
0 _1 10 11 _1 0 0 0
_0 _1 01 10 11 01 1 0 0
0 10 __ 01 10 0 1 0
000 000
11 11 11 11 0 0 1
1 0
0 Próximo Est.
01 10
100 010
1
1
11
1 001
Resultan:
Observaciones.
Estando en el estado inicial, cuando llega un uno o un cero, no pueden activarse las salidas z1,
z2 y z3. Ya que éstas reconocen las secuencias 01, 10 y 11 respectivamente; y no la presencia de
un cero o de un uno.
La frase: “Cuando se presenta...” es imperativa. Y tiene precedencia sobre las frases: “Cada vez
que se presente...”.
Por ejemplo, si llega la secuencia 001..., después de los dos ceros debe ir al estado inicial, y
volver a analizar. El estado inicial representa la situación en que aún no han llegado entradas, o
después de que llegó la secuencia 00.
Otro ejemplo, si llega la secuencia 1101...., va inmediatamente al estado 11, y no reconoce la
secuencia 01 que la sigue; tampoco debe reconocer la secuencia 10 que está también presente en
1101....
Con las especificaciones dadas, y la designación de los nombres dados antes, el diagrama queda
como sigue.
reset
No ha llegado nada
__
0 000 1
?
?
0
Llegó 00 1 0 Llegó 10
0
01 10
Llegó 01 100 010
1
11
1 001
Llegó 11
Para completar el diagrama hay que agregar estados adicionales, entre el inicial y los estados
denominados 01 y 10. Aparecen los estados _0 y _1.
Si desde el estado inicial, con entrada cero, fuera al estado 10, detectaría la secuencia 10 cuando
sólo ha llegado un cero.
z1 = Q1Q0’x
z2= Q1’Q0 x’
z3= Q1Q0 + Q0 x
Problema 9.9.
Si x es una entrada, se tienen las ecuaciones que programan tres flip-flops Ds.
D2 = Q2’Q1Q0’x, D1= Q2’Q0 + Q1Q0 + Q2’Q1x, D0 = Q2’x + Q1Q0x
Y las siguientes ecuaciones para las salidas: z1 = Q2’Q1Q0, z0 = Q2Q1Q0
En funcionamiento normal, un pulso en la entrada reset, deja al sistema en el estado binario 000.
Determinar:
a) Si la máquina es de Mealy o de Moore. En qué basa su respuesta.
b) Matriz de transiciones.
c) Diagrama de estados. Indicar los estados que no participan en el trabajo normal del sistema
secuencial.
d) Acciones que realiza la máquina de estados, considerando que el estado binario 000 es el
estado inicial.
e) Indicar secuencias de estado y de salida para la secuencia de entrada:
Número 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
secuencia
x 1 0 1 1 1 0 1 0 1 1 1 1 0 0 1 1 .
Estado actual 000
Z1
Z0
Solución:
a) Las salidas sólo dependen del estado. Puede aplicarse el modelo de Moore.
b) Matriz de transiciones.
Q2Q1Q0 x = 0 x = 1 Salidas
000 000 001 00
001 010 011 00
011 010 011 01
010 000 111 00
110 000 000 00
111 010 011 10
101 000 000 00
100 000 000 00
Q2+Q1+Q0+ z0z1
Figura P9.22. Matriz de transiciones Problema 9.9.
c) Diagrama de estados.
En funcionamiento normal no se pasa por los estados 110, 101 y 100.
No se puede llegar a ellos si la máquina parte en el estado inicial. Sin embargo están definidos
sus estados próximos como el estado inicial.
Q2Q1Q0 1 011
01
Z0Z1 1
reset
1 0
0 0
110 101 100
00 00 00
d) Acciones.
Reconoce la secuencia 101 cada vez que se presente, con salida z1=1 y z0 = 0.
Número 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
secuencia
x 1 0 1 1 1 0 1 0 1 1 1 1 0 0 1 1 .
Est. actual 000 001 010 111 011 011 010 111 010 111 011 011 011 010 000 001 011
Z0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0
Z1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 1
Se tienen dos sensores i y d (izquierda y derecha) ubicados a cierta distancia sobre el suelo de
un pasillo y cuyo objetivo es detectar la dirección del paso de personas por el pasillo.
Estando la persona ubicada en la zona izquierda, con ambos sensores en cero, si la persona
avanza hacia la derecha y llega a la zona donde nuevamente ambos sensores son cero, debe
indicarse con la señal z1 =1.
Estando la persona ubicada en la zona derecha, con ambos sensores en cero, si la persona
avanza hacia la izquierda y llega a la zona donde nuevamente ambos sensores son cero, debe
indicarse con la señal z0 =1.
En el resto de los casos, las salidas deben ser ceros.
Las personas pueden quedarse detenidas o retroceder, pero sólo deben generarse las salidas
cuando se cumplen las condiciones anteriores.
Se ilustran los valores de los sensores cuando un objeto ocupa total o parcialmente las zonas
indicadas. Hacia la extrema izquierda y derecha los sensores marcan cero.
i d
11
10 01 id
00 00
Determinar el diagrama de estados (modelo de Mealy) que modela el sistema. Indicar el estado
inicial, y la señal de reset.
Solución.
Todas las salidas son cero, excepto las de los estados F y G, con entradas 00.
De cada estado deben especificarse las transiciones que físicamente son permitidas. Por ejemplo
estando en el estado A, no puede presentarse el evento de que ambas entradas estén un uno. Si
por ejemplo la persona está ubicada en la zona con los dos sensores activos, es decir en los
estados D y E, las transiciones que deben especificarse son las correspondientes a las
combinaciones 11, 01 y 10 de las entradas; no puede presentarse, en esta situación, el evento de
que ambas entradas estén en cero.
00
A
10 01
00 00
10 B C 01
10 01
11 11
00/10 00/01
11 D E 11
01 10
11 11
01 F G 10
clk
reset
x
z
y
f) Secuencias de valores de la entrada y las salidas. Debe inspeccionarse los niveles en el canto
de subida del reloj de las señales x, z, y. Existe un valor por cada canto de subida del reloj. Se
logran:
entrada x 0010101001011011010010100
salida z 0001010100000000001000000
salida y 0000000011100000000111111
2. Diagrama de estados. Se activa z cada vez que llega la secuencia 010 en la entrada y mientras
no llegue la secuencia 100. Cuando llega esta última se activa la salida y, y la máquina
permanece en ese estado.
Se forman los reconocedores de 010 y 100. Y se establecen las salidas asociadas al estado 3 y 6,
con z=1 e y=1 respectivamente.
Luego se completan las transiciones para cumplir generar salida z=1 para cada vez que se
presente la secuencia 010.
Luego se completan las transiciones para recocer la secuencia 100, apenas se presente.
Finalmente se completa las transiciones para permanecer en el estado 6 con salida y = 1.
reset
Si/
x= S0/00
1
0 0
/yz
S1/0 S4/00
0 1
1
1 0
S2/00 S5/00
1
1 0 0
S3/01 S6/10
0
Diagrama de Mealy:
reset
Si
S0
x /yz 1/0
0/00 0/00 00
S1 S4
1/00
1/00
1/00 0/0
0
S2 S5
1/00
1/00 0/01 0/10
/10
S3 S6
0/10
S3 y S5 son equivalentes, ya que las transiciones que salen de S5, para iguales valores de las
entradas van con las mismas salidas a iguales estados próximos. Eliminando S5 se logra:
reset
Si
S0
x /yz 1/0
0/00 0/00 00
S1 S4
1/00
1/00
1/00
S2
0/0
0
1/00 0/01
/10
S3 S6
0/10
G. H. Mealy. A method for synthesizing sequential circuits, Bell System Technical Journal 34
(1955), 1045-1079.
Índice general.
CAPÍTULO 9 ..............................................................................................................................................1
SISTEMAS SECUENCIALES ..................................................................................................................1
9.1. DEFINICIONES ....................................................................................................................................1
Evento ..................................................................................................................................................1
Máquina abstracta. ..............................................................................................................................1
Estado. .................................................................................................................................................1
Máquinas de estados. ...........................................................................................................................2
Transición. ...........................................................................................................................................2
Diagrama de estados. ..........................................................................................................................2
Autómata de estados finitos determinista.............................................................................................2
Tipos de máquinas. ..............................................................................................................................2
Reloj. ....................................................................................................................................................3
Máquinas secuenciales. .......................................................................................................................3
Máquinas secuenciales sincrónicas. ....................................................................................................4
Síntesis lógica. .....................................................................................................................................4
9.2. SECUENCIAS. ......................................................................................................................................5
Ejemplos de secuencias. .......................................................................................................................5
a) Sincrónica de nivel. ...................................................................................................................................... 5
b) Sincrónica de pulsos .................................................................................................................................... 6
c) Asincrónica de nivel .................................................................................................................................... 6
d) Asincrónica de pulsos. ................................................................................................................................. 6
9.3. MODELO SECUENCIAL ........................................................................................................................6
9.4. REPRESENTACIÓN DE MÁQUINAS SECUENCIALES ...............................................................................9
9.4.1. Modelo de Mealy ........................................................................................................................9
i) Diagrama de estados ..................................................................................................................................... 9
ii) Tabla de transición de estados ................................................................................................................... 10
9.4.2. Modelo de Moore .....................................................................................................................10
i) Diagrama de estados ............................................................................................................................. 11
ii) Tabla de transiciones ................................................................................................................................. 11
Ejemplo 9.1 ........................................................................................................................................12
Ejemplo 9.2. .......................................................................................................................................13
Ejemplo 9.3. .......................................................................................................................................14
Algunas observaciones sobre las representaciones: ....................................................................................... 15
Ejemplo 9.4. .......................................................................................................................................16
Ejemplo 9.5. Modelado de diagrama de estados. Lavadora. .............................................................17
9.4.3. Transformación de Mealy a Moore. ........................................................................................19
Índice de figuras
Capítulo 10
Este tipo de memoria se denomina flip-flop, y se tienen tres tipos, denominados: JK, T y D.
Todos ellos operan con una señal periódica, denominada reloj.
10.1. Reloj
Los cambios de estado ocurren solamente en determinados instantes de tiempo; esos instantes
están sincronizados con el reloj.
En algunos casos se emplea el canto de subida del reloj para marcar los instantes de cambio; en
otros, se emplea el canto de bajada. El canto que define el instante de tiempo es el evento
sincronizante.
En los flip-flops disparados por cantos, se requiere una determinada pendiente para el reloj; no
importando el ancho. En general, el tiempo que la señal está en cero es mucho mayor que el
intervalo en que el reloj está alto. Se define el ciclo de trabajo de la señal periódica de un reloj,
como el porcentaje del tiempo que la señal está alta entre cantos de sincronización. Si la señal es
cuadrada el ciclo de trabajo es igual al 50%.
tsu th
th
tsu
clock
Los fabricantes especifican el valor promedio y de peor caso para los tiempos de preparación
(set-up) y de sostenimiento (hold), durante los cuales las entradas no pueden cambiar.
Desde un punto de vista lógico, podemos pensar que el reloj es un tren de impulsos.
t t t ...
0 1 2
Entonces: v(k) define una secuencia de valores sincrónicos con el reloj. Existe una
correspondencia biunívoca, entre { 0, 1, 2, 3, ...., k, ....} y { vo, v1, v2, ...., vk, .... }.
Existen dos tipos de señales sincrónicas. Las de niveles sincrónicos se caracterizan porque los
valores de la secuencia permanecen constantes entre pulsos del reloj, y sólo cambian con los
cantos de subida o bajada del reloj.
En secuencias sincrónicas de pulsos, solamente hay valores de la secuencia, durante los pulsos
del reloj.
Reloj
Sincrónica
nivel
Sincrónica
pulsos
10.3. Flip-flop JK
S R S’ R’
J Q J Q
datos salida datos salida
K K
reloj reloj
Las señales S y R son set y reset asincrónicos, y se verán después, en el Capítulo 14. El
diagrama de la izquierda ilustra un flip-flop que opera con cantos de bajada del reloj, se utiliza
un pequeño triángulo para mostrar que el flip-flop está sincronizado, o es disparado por cantos.
Si es disparado por cantos de bajada, se dibuja un pequeño círculo en la base del triángulo.
Cuando es sincronizado por un pulso (master slave), en lugar del triángulo se dibuja un pulso,
como se muestra en la Figura 10.8.
J Q
datos salida
K
reloj
Figura 10.8. Flip-flop master slave.
Se suele proveer dos salidas complementarias. Esto implica que internamente se almacenan dos
bits; como se verá más adelante, esto requiere tener dos variables de estado internas. Desde un
punto de vista externo, sólo basta especificar las secuencias de las entradas para tener
transiciones del estado Q= 0, al estado Q = 1 y viceversa.
1
0
0
JK = 11, 10
01, 11
1
Figura 10.9. Diagrama de estados Flip-flop JK.
El par de entradas asociada a cada transición puede anotarse empleando notación de bit
superfluo ; es decir, su ocurrencia indica que esa posición puede ser 0 ó 1. Ejemplo de esto es
el par: {01, 11} que se puede anotar: 1.
Existen diferentes formas alternativas de representar la información anterior, cada una aporta la
misma información desde un punto de vista diferente.
Los renglones son los valores que puede tomar el estado presente, las columnas están asociadas
a los diferentes valores que pueden tomar las entradas. Las casillas de la matriz muestran los
valores del próximo estado.
JK
00 01 11 10
Q(k)
0 0 0 1 1
1 1 0 0 1
Q(k+1)
Figura 10.10. Tabla de transiciones en Flip-flop JK.
que describe el próximo estado, mediante una expresión booleana del estado presente y las
entradas.
Para analizar circuitos que empleen flip-flops, se suele emplear la siguiente tabla:
J K Q(k+1)
0 0 Q(k)
0 1 0
1 0 1
_
1 1 Q(k)
La tabla característica puede obtenerse mediante la ecuación característica, dándole valores a las
entradas. También puede derivarse a partir de la interpretación de las columnas de la tabla de
transiciones.
La tabla característica describe cómo deben ser las entradas para tener un determinado estado en
la salida.
Describe las transiciones de la salida, en términos de las entradas. Suele usarse para diseñar
circuitos que empleen flip-flops JK.
0 0 0
0 1 1
1 0 1
1 1 0
10.4. Flip-flop D
D=1
Q
D=0 D=1
D
Q=0 Q=1
reset set
D=0
clk
D
Q(k) 0 1 Ecuación característica
0 0 1
Q(k 1) D(k )
1 0 1
Q(k+1)
Tabla característica Tabla de excitaciones
Q(k+1) Q(k) _
D > Q(k+1) D
0 0 0 0 0
0 1 1
1 1 1 0 0
1 1 1
D J Q
K Q'
clk
Figura 10.14. Flip-flop D mediante JK.
Q Q
J
D
K
Q'
reloj
T=1
T=0
T Q Q=0 Q=1 T=0
reset set
T=1
reloj
T
Q(k) 0 1
0 0 1 Q(k 1) T (k )Q(k ) T (k )Q(k ) T (k ) Q(k )
1 1 0
Q(k+1)
Q(k+1) Q(k) _ T
T > Q(k+1)
0 Q(k) 0 0 0
0 1 1
1 Q(k) 1 0 1
1 1 0
La T proviene de Toggle, que describe un tipo de interruptores de presión de una posición (se
oprime y queda en un estado; se vuelve a oprimir y cambia de estado).
D J Q
K Q'
clk
Figura 10.16. Flip-flop T mediante un JK.
Q Q
T D
Q'
reloj
Un uso típico de un flip-flop T es dividir por dos la frecuencia de entrada. Ya que en cada canto
activo cambia el estado del flip-flop T, permaneciendo la salida constante entre dos cantos
activos. La Figura 10.17 muestra un flip-flop T, disparado por canto de subida, y alimentado
con un uno lógico en la entrada; la salida divide por dos la frecuencia del reloj.
clk 1 Q
T
T=1
Q reloj
La siguiente gráfica muestra dichos tiempos para un flip-flop disparado por cantos de subida
(positive edge triggered); la señal de entrada D, cumple los requerimientos de Tsu y Th.
Th Tsu Th
D Tsu
20ns 5ns 20ns 5ns
CLK Tw 25ns
Tplh Tphl
25ns máx. 40ns máx.
13ns típico 25ns típico
Todos los tiempos se miden desde el canto activo del reloj (el de subida, en el ejemplo).
Las siguientes formas de ondas ilustran relaciones temporales para flip-flops disparados por
cantos de subida y de bajada. En flip-flops disparados por canto de subida (positive edge
triggered) las entradas se muestrean en el canto de subida (en realidad requiere valor estable tsu
segundos antes) y las salidas (Qp y Q’p) cambian un tiempo de propagación después, relativa al
canto de subida. Debe notarse que las salidas complementarias (Q y Q') no cambian
instantáneamente; esto se justificará después.
En flip-flops disparados por canto de bajada, se muestrean las entradas en el canto de bajada, y
las salidas (Qn Q’n) cambian después del canto de bajada.
Clk
Qp
Q'p
Qn
Q'n
El flip-flop JK fue sumamente empleado en los inicios debido a que tiene conducta determinada
cuando ambas entradas son unos (a diferencia del flip-flop SR). Es el flip-flop típico de la
familia TTL y de circuitos integrados en pequeña escala (SSI), permite construir fácilmente flip-
flops de tipo D y T. En la actualidad prácticamente no se usa. No está presente en las
configuraciones internas de los dispositivos lógicos programables, pero en estos casos se lo
puede construir en base a los flip-flops de tipo D, que éstos poseen.
El flip-flop de tipo T, prácticamente no está disponible como elemento; sin embargo puede ser
fácilmente implementado en base a los existentes (tipo D o JK).
En los flip-flops son necesarias entradas que permitan dejar al flip-flop en un estado
determinado. Clear o reset deja la salida Q en cero; y preset deja la salida alta. En el caso de
flip-flops de integración en pequeña escala estas señales suelen ser de naturaleza asincrónica
(como se verá más adelante); es decir, que se permite a estas entradas cambiar en cualquier
instante, respecto del reloj. Como se verá estas señales permiten dejar a un sistema secuencial
en un estado determinado. Sin embargo en diseños basados en dispositivos programables es
preferible dejar a los flip-flops en un determinado estado en forma sincrónica.
Se denomina así a las reglas para interconectar compuertas y flip-flops de tal forma de
garantizar que el sistema completo funcionará correctamente. Las metodologías dependerán del
tipo de elemento que se emplee para implementar la memoria, ya sean flip-flops disparados por
cantos (que suelen emplearse en dispositivos lógicos programables) o bien latchs transparentes
que suelen emplearse en la confección de registros en procesadores.
Las reglas básicas para la correcta temporización son: proporcionar entradas que cumplan los
tiempos de set-up y hold relativas al reloj, y que las salidas no cambien su estado más de una
vez por evento sincronizante.
La figura 10.20 ilustra las formas de ondas de las salidas de un flip-flop D, disparado por canto
de subida y un latch transparente de tipo D. Note que en el latch la salida cambia entre pulsos
del reloj, copiando los cambios de la entrada hacia la salida apenas ocurren cambios de ésta,
estando alto el reloj.
D Q Clk
E
QClk Qcanto
Qlatch
En el latch transparente (o sensible al nivel), estando el reloj en alto, la salida cambia de acuerdo
al valor de la entrada (después del tiempo de propagación); el canto de bajada del reloj del latch
captura el valor que tenga la entrada en ese tiempo (el latch, también requiere cumplir
especificaciones de set-up y hold, alrededor del canto de bajada del reloj).
También existe un tiempo de propagación desde un cambio de la entrada o del canto de subida
reloj (el evento que ocurra más tarde).
La estructura interna de los flip-flops disparados por cantos y el latch se verá más adelante.
CP
modo captura
Qlatch
modo transparente
Ejemplo de temporización.
La Figura 10.22, ilustra los requerimientos de las entradas de dos flip-flops D, disparados por
cantos de subida.
dato
D0 Q0 D1 Q1
clock
entrada estable
dato
clock
Las entradas D0 y D1 deben ser estables un tiempo antes y después del canto de subida del
reloj.
dato
D0 Q0 D1 Q1
clock
D0
Tsu Tsu
4ns 4ns
Q0=D1
Tp Tp
3ns 3ns
Q1
CLK
Th Th
2ns 2ns
Todos los flip-flops deben determinar su próximo estado en el mismo instante, bajo la condición
de las entradas permanezcan estables tsu antes del reloj y thold después.
La conexión anterior asume que todos los flip-flops tienen el mismo reloj. Sin embargo, en
sistemas que funcionan con relojes de altas frecuencias, el tiempo de retardo de propagación a
través del sistema digital es comparable al que requiere el reloj para llegar a los diferentes flip-
flops. La diferencia entre cantos de reloj, en diferentes flip-flops se denomina desfasamiento (o
desplazamiento, skew en inglés).
D0 Q1
dato Q0 D1
clk0 clk1
reloj
D0
Tsu Ts
4ns 4ns
Q0=D1
Tp Tp
3ns 3ns
Q1
Clk0
Tp 3ns Th Tp 3ns
Th
2ns 2ns
Clk1
Tsu Th Tsu Th
4ns 2ns 4ns 2ns
Se advierte que D1, no cumple la especificación de permanecer estable (Tsu antes y Th después
del canto de subida de clk1). Debido a esto la salida Q1 será indeterminada. Asumiendo que
conmuta y que se muestrea el valor de la entrada en el canto de subida, se muestra la forma de
Q1, Tp segundos después del canto de subida de clk1.
Más adelante podrá determinarse que la conexión cascada de los flip-flops se comporta como un
registro de desplazamiento. Debido al desfase podría dejar de ser un registro de desplazamiento.
Sincronización.
El análisis anterior nos lleva a uno más general y es cómo tratar entradas asincrónicas a sistemas
sincrónicos. En esta situación las entradas pueden cambiar en cualquier instante y puede que no
satisfagan los requerimientos de set-up y hold de los flip-flops del sistema sincrónico. Esta
dificultad no puede evitarse en algunas situaciones, como por ejemplo, en caso de una entrada
generada por un operador (y también cuando se emplean memorias en forma asincrónica).
Debido a lo anterior es preferible diseñar con entradas sincrónicas (si las entradas son salidas de
La Figura 10.26, muestra un interruptor manual, a través del cual se introduce un pequeño
pulso, de ancho variable y posiblemente con rebotes mecánicos, que finalmente coloca una de
las entradas en nivel bajo momentáneamente; esto asume que la entrada, en alta impedancia,
está en nivel alto.
clk
Cuando las entradas a un flip-flop cambian muy cercanas al canto del reloj, éste puede tener
inestabilidades internas que no permiten asegurar que se cumplan las ecuaciones del flip-flop.
En estos casos puede reducirse la probabilidad de falla aumentando la frecuencia del reloj,
relativa a la frecuencia de la entrada, o empleando compuertas más rápidas, o empleando un
sincronizador. La mejor solución es agregando un sincronizador, ya que no se depende de la
entrada. Un sincronizador es simplemente un flip-flop, cuya salida cambia sólo en los cantos del
reloj.
D Q
clk
El empleo de sincronizadores garantiza que el resto del sistema tendrá entradas sincrónicas, pero
no se puede garantizar que el sincronizador no tendrá fallas.
Normalmente basta agregar un flip-flop adicional para aumentar las probabilidades de lograr la
sincronización.
D1 Q1 D2 Q2
clk
Debe asegurarse que las entradas cumplan los requerimientos de set-up y hold de los flip-flops
del sistema sincrónico. A través de mediciones puede determinarse el funcionamiento confiable
del sincronizador, y de los niveles requeridos.
D2 Q2
clk
El siguiente diagrama ilustra que Q1 registra el cambio de la entrada, pero no así Q2.
Entrada
Q1
Q2
CLK
Índice general.
CAPÍTULO 10 ........................................................................................................................................... 1
MEMORIAS PRIMITIVAS SINCRÓNICAS. ........................................................................................ 1
10.1. RELOJ .............................................................................................................................................. 1
10.2. SECUENCIAS SINCRÓNICAS. ............................................................................................................. 3
10.3. FLIP-FLOP JK ................................................................................................................................... 4
10.3.1. Diagrama de estados ............................................................................................................... 5
10.3.2. Tabla de transiciones .............................................................................................................. 5
10.3.3. Ecuación característica ........................................................................................................... 6
10.3.4. Tabla característica ................................................................................................................ 6
10.3.5. Tabla de excitaciones .............................................................................................................. 6
10.3.6. Descripción HDL. ................................................................................................................... 7
10.4. FLIP-FLOP D..................................................................................................................................... 7
10.5. FLIP-FLOP T ..................................................................................................................................... 9
10.6 REQUERIMIENTOS TEMPORALES. .................................................................................................... 10
COMPARACIONES. .................................................................................................................................. 12
10.7. METODOLOGÍAS DE TEMPORIZACIÓN............................................................................................. 12
Ejemplo de temporización. ................................................................................................................ 13
Sincronización. .................................................................................................................................. 16
ÍNDICE GENERAL. ................................................................................................................................... 19
ÍNDICE DE FIGURAS................................................................................................................................. 20
Índice de figuras
Capítulo 11
11.1. Análisis
Dado el esquemático de una red secuencial sincrónica se desea obtener el diagrama de estados;
y a partir de éste, inferir el funcionamiento de la máquina. Este procedimiento se suele llamar
reingeniería.
Reset’
x(k) P1 z(k) P2
y(k)
Q
y(k+1)
Clk
El estado actual y (k ) es sostenido en las salidas Q(k ) de los flip-flops, durante el intervalo de
tiempo k. En este intervalo, se generan z (k ) e y (k 1) a partir de y (k ) y x(k ) , en la red
combinacional. El próximo estado, y (k 1) , se lleva a las entradas de los flip-flops, de tal
manera que en el instante (k +1) las salidas de los flip-flops, almacenaran los valores y (k 1) .
Para esto es indispensable que las entradas a los flip-flops sean estables en el momento de
aplicar el canto del reloj que efectuará la conmutación, o cambio de estado, que implica pasar
del intervalo k al intervalo (k+1).
A partir del esquemático de la red booleana pueden escribirse las funciones de las entradas de
los flip-flops en función de la entrada y el estado presente, se denominan programas de los flip-
flops, o ecuaciones de excitación de éstos.
El método de análisis tabular está basado en obtener la matriz de transiciones a partir de las
matrices de programación. En cada casilla, de cada una de las (m+1) matrices de programación,
mediante las tablas características, se determinan las (m+1) componentes del vector de próximo
estado de cada casilla de la matriz de transición.
x x
y y
J K y(k+1)
0 0 y(k)
0 1 0
1 0 1
Ji, Ki 1 1 y’(k) y(k+1)
Se muestra sólo la matriz de programación del flip-flop i-ésimo, que se asume del tipo JK. Para
cada par ( J i , Ki ) de la matriz de programación i-ésima, mediante la tabla característica, se
encuentra el próximo estado yi (k 1) asociado; componiendo de este modo el vector y(k+1).
Las ecuaciones de los programas de los flip-flops, que se asumen del tipo JK:
Ji f i ( y, x)
Ki gi ( y, x)
yi (k 1) J i yi ' Ki ' yi
yi (k 1) fi ( y(k ), x(k ))
Las que representadas en un mapa de Karnaugh, forman la matriz de transiciones.
A
J Q S
J
x K Q’
C
clk K
P
1
reset
B
S
J Q
C _
K Q
P z
C
S
J
C _
K Q
P
Leyendo las ecuaciones de las entradas de los flip-flops, directamente del esquemático, se
obtienen:
JA ( B ' C B ' x '); K A B
JB ( AB ' B ' C ); K B B
JC A ' x; K C B x'
Para obtener la matriz de programación del flip-flop A: Se debe establecer JA y KA para cada
combinación posible del estado presente y la entrada. Se procede en forma análoga para los
flip-flops B y C.
Este proceso de ilustra en la Figura 11.4, para cada uno de los flip-flops, se obtienen las
siguientes matrices de programación:
x x x
ABC 0 1 ABC 0 1 ABC 0 1
000 10 00 000 00 00 000 01 10
001 10 10 001 10 10 001 01 10
011 01 01 011 01 01 011 01 11
010 01 01 010 01 01 010 01 11
110 01 01 110 01 01 110 01 01
111 01 01 111 01 01 111 01 01
101 10 10 101 10 10 101 01 00
100 10 00 100 10 10 100 01 00
J , K J , K J , K
A A B B C C
A A A
Para todas las ocurrencias de (J,K) igual a (1,0) en las tablas de la Figura 11.4, se coloca un 1 en
la columna correspondiente de la Figura 11.5; se coloca 0 para (J, K) igual a (0,1).
Para (J, K) igual a (0,0) en las tablas de la Figura 11.4, se coloca el valor actual de la variable en
la columna correspondiente de la Figura 11.5.
Para (J, K) igual a (1,1) en las tablas de la Figura 11.4, se coloca el valor complementado de la
variable actual en la columna correspondiente de la Figura 11.5.
Si colocamos la cifra decimal, equivalente del nombre binario del estado, se logra la matriz de
transiciones, empleando nombres simbólicos para los estados. Se obtiene la Figura 11.6,
izquierda. Y de esta matriz se obtiene el diagrama de estados que se ilustra a la derecha en la
Figura 11.6.
3
0/0 2
Estado x 0/0
actual 0 1 1/1
0 1/0
0 4/0 1/0
1 6/0 7/0 0/0 1/0
3 0/0 0/1
2 0/0 1/0 4 /0 1 1/1
6 0/0 0/0 0/0
7 0/0 0/1 /0 0/0 1/0
5 6/0 7/0
4 6/0 6/0 6 7
Estado próximo/z
0/0 1/0
5
Se observa que los estados 2, 3 y 5 sólo pueden ser estados iniciales y no participan de la
naturaleza secuencial del resto. Si no se dibujan, resulta la Figura 11.7.
reset
0
0/0
0/0
1/0
1/1
4 /0 1
1/0
/0
0/0
7
6
En la Figura 11.7, con estado inicial igual a cero, puede concluirse que el circuito es un
reconocedor de secuencia de largo fijo igual a 3. A partir del estado inicial acepta tres valores de
la entrada y luego toma una decisión.
La máquina analiza grupos de 3 bits de la secuencia de entrada, y si ésta es 111, genera un uno
en la salida; cero en el resto de los casos.
A(k 1) JA A KAA
B(k 1) JB B KBB
C (k 1) JC C KCC
Donde se han reemplazado las salidas Q de los flip-flops, por las variables de estado: A, B y C.
b) Analizar la máquina secuencial descrita por el diagrama de bloques, de la Figura 11.9, y las
ecuaciones siguientes:
z1
x M.S.S. z 2
z3
clk
Figura 11.9. Entradas y salidas de máquina secuencial.
J1 xy2 ; K1 x z1 y1 y2
z2 xy1 y2
J2 xy1 ; K2 x z3 y1 y2
Y1 J1 y1 K1 y1
Y2 J 2 y2 K 2 y2
Las ecuaciones de las salidas pueden escribirse, empleando el mapa de Karnaugh, de la Figura
11.11:
Con la asignación de estados, de la Figura 11.12, en la que se emplea como nombre lógico el
equivalente decimal del nombre físico o binario, se obtiene el diagrama de estados que se
muestra en la Figura 11.13.
x
Estado 0 1
0 0 1
1 1 2
3 3 0
2 2 0
Est. próximo
0/100
1/100 0/000
0 1
1/001
1/100 x/z1z2z3
1/010
0/001 2 0/000
3
Notar que debido a que z2 depende de x, se modeló mediante una máquina de Mealy.
Red J
Combinacional Q
K
tp tf
reloj
Si tenemos un reloj:
t0 t1 t
Sea tpmin el mínimo tiempo que tardan los cambios de las señales en atravesar la red
combinacional, y tfmin el mínimo tiempo en que cambian las salidas de los flip-flops,
después del canto; entonces debe cumplirse: tpmin + tfmin + tskew > thold
Si puede asegurarse que las entradas no cambian tsu antes del canto y thold después del canto, el
flip-flop funcionará confiablemente. Esta verificación debe efectuarse para cada uno de los flip-
flops de la red booleana.
El problema que deseamos resolver es obtener las redes combinacionales que programan los
flip-flops de una red secuencial, a partir del diagrama de estados, reducido y con asignación de
estados. De estas ecuaciones puede obtenerse el esquemático, o el programa verilog para la
implementación física.
Esquemáticamente:
Ji, Ki
y(k) y(k+1) JK
Si se tienen (n+1) entradas y (m+1) flip-flops, los vectores booleanos de la entrada y el estado
quedan representados por:
En el esquema anterior se ilustra empleando flip-flops de tipo JK, se procede en forma similar si
los flip-flops son de otro tipo. Se eliminan las variables de próximo estado, obteniéndose las
matrices de programación.
Q(k) Q(k+1) D J K T S R
0 0 0 0 0 0
0 1 1 1 1 1 0
1 0 0 1 1 0 1
1 1 1 0 0 0
Luego, en el Capítulo 14, se verán los flip-flops SR, cuyas tablas se indican en las últimas dos
columnas de la Figura 11.17.
Ejemplo 11.8.1.
Para el detector de secuencia 110 cada vez que ésta se presente, se tiene:
1/0 1/0
0/0 1/0
reset
0/1
x
Estado Q1 Q0 Q1 Q0 0 1
Start 0 0 0 0 00/0 01/0
Estado 0 0 1 0 1 00/0 11/0
Estado 1 1 1 1 1 00/1 11/0
1 0 dd/d dd/d
Q1+Q0+/z
Figura 11.19. Asignación de estados y matriz de transiciones.
Notar la elección de condiciones superfluas para el estado 10, que no se emplea en el diseño. Se
escogió el estado de start como el 00, para simplificar el diseño de la señal reset; en este caso
basta activar la señal clear asincrónico del flip-flop que se emplee para lograr la función reset.
La elección de condiciones superfluas simplifican las redes combinacionales que efectúan los
programas de los flip-flops.
a) Procedimiento tabular empleando flip-flops Ds:
Usando la tabla de transiciones de flip-flops Ds, se logra:
x
Q1 Q0 0 1
0 0 00 01
0 1 00 11
1 1 00 11
1 0 dd dd
D1D0
Con programas: D1 = Q0 x
D0 = x
Debe notarse que cuando se emplean flip-flops D, los programas de éstos pueden obtenerse
directamente de la matriz de transiciones, cambiando Q1+ por D1 y Q0+ por D0.
b) Método analítico empleando flip-flops Ds:
De la matriz de transiciones se tienen:
z = Q1 x'
Q0+ = x
Q1+ = Q0 x
x x
Q1 Q0 0 1 Q1 Q0 0 1
0 0 0 0 0 0 0 1
0 1 0 1 0 1 1 0
1 1 1 0 1 1 1 0
1 0 1 0
J1K1 J0K0
Figura 11.21. Programas de flip-flops JK
Notar que K1 también se podría haber expresado, como: K1 = x' +Q0' agrupando los ceros, o
bien: K1 = x’Q0 agrupando los unos; sin aprovechar completamente las condiciones superfluas.
d) Método analítico empleando flip-flops JKs:
De la matriz de transiciones de la Figura 11.19, y aplicando el teorema de expansión, para tener
presente a la derecha la variable correspondiente, que figura a la izquierda de cada ecuación, se
logra:
z = Q1 x'
Q1+ = Q0 x = Q0xQ1' + Q0xQ1 (se expande en Q1)
Q0+ = x = xQ0' + xQ0 (se expande en Q0)
Notar que el método analítico, en este caso, agrega el término Q0' que resulta superfluo.
La matriz de transiciones de la Figura 11.20, puede plantearse como una tabla de verdad, entre
las entradas (estado presente y entradas) y las salidas (próximo estado y salidas), según se
muestra en la Figura 11.22.
Entradas Salidas
Q0 Q1 x Q1+ Q2+ z
0 0 0 0 0 0
0 0 1 0 1 0
0 1 0 0 0 0
0 1 1 1 1 0
1 0 0 d d d
1 0 1 d d d
1 1 0 1 0 1
1 1 1 1 1 0
// detector de secuencia 110 cada vez que ésta se presente. Salida registrada.
module mealy110 (input clk, resetn, x, output zs);
reg Q1, Q0, zs;
wire D1, D0;
// Redes combinacionales de próximo estado. P1
Ejemplo 11.8.2.
Determinar los programas de los flip-flops JK, para la siguiente matriz de transiciones.
AB
x 00 01 11 10
0 2 6 4
0 00 00 11 10
1 3 7 5
1 11 11 10 01
A+B+
Figura 11.23. Matriz de transiciones ejemplo 11.8.2.
Se tienen, de la matriz:
A+ = A'x + AB +Ax' = ( x )A' + (B + x') A
B+ = A'x + ABx' +B'x = A'xB' + A'xB + ABx' +B'x = (A'x + x) B' + (A'x + Ax')B
Se han factorizado las ecuaciones, en términos de Qi y Qi’ para cada uno de los flip-flops Qi.
AB
x 00 01 11 10
0 2 6 4
0 010 001 101 000
1 3 7 5
1 000 110 111 011
A+ B+ z
Ejemplo 11.8.4.
Q Q
J
D
K
Q'
reloj
Este diseño se emplea en dispositivos programables que no disponen en las macroceldas de flip-
flops JKs, pero que generalmente disponen de flip-flops Ds.
Q
D
DQ
J Q.f
b
K reloj
n p
clk
Consideramos que a la señal n, que resulta de oprimir un botón, se le han suprimido los rebotes,
y que además está sincronizada, es decir el canto de subida se produce después de que ha
transcurrido un tiempo mayor que el thold de los flip-flops.
Los rebotes pueden filtrarse con un latch, y la sincronización se logra haciendo pasar la señal a
través de uno o dos flip-flops Ds alimentados con el mismo reloj.
Si la salida está asociada al estado, tendremos tres situaciones distinguibles. La primera cuando
se espera un canto de subida con salida cero, la segunda cuando llega un canto de subida con
salida uno, y la tercera cuando se espera un canto de bajada con salida cero.
Si agregamos las condiciones bajo las cuales se cambia de estado, podemos describir que:
Mientras la señal de nivel n, está baja, se permanece en el estado ECS, esperando un canto de
subida, con salida p=0. Cuando en n se presenta un canto de subida se pasa al estado CS, llegó
un canto de subida, con salida p=1.
Estando en CS, si la señal n baja a cero, vuelve a esperar otro canto de subida; es decir pasa al
estado ECS; pero si la señal permanece en nivel alto, pasa a un tercer estado ECB, en el cual se
espera un canto de bajada.
Estando en ECB con salida p=0, se permanece en ese estado mientras la señal n esté alta, y se
pasa a ECS cuando llega un canto de bajada en n.
Estado Próximo
actual estado
Q1 Q0 n Q1+ Q0+ p
0 0 0 0 0 0
0 0 1 0 1 0
0 1 0 0 0 1
0 1 1 1 1 1
1 1 0 0 0 0
1 1 1 1 1 0
1 0 0 x x x
1 0 1 x x x
reset’
Q1 Q0
D D p
n
Q1’
clk
Si la salida está asociada a los cambios de entrada podemos conceptualizar dos estados: uno en
el que se espera un canto de subida, y el otro cuando se espera el canto de bajada.
Estando en ECS: Mientras la entrada esté baja, la salida también debe estar baja y debe
permanecer en ECS; cuando en la entrada se presenta un canto de subida la salida debe activarse
a uno y cambiar al estado ECB.
Estando en ECB: Mientras la entrada esté alta, la salida también debe estar baja y permanecer
en ECB; cuando en la entrada se presenta un canto de bajada la salida debe permanecer baja y
cambiar al estado ECB.
n=0/p=0
Q n Q+ p
0 0 0 0
0 1 1 1
1 0 0 0
1 1 1 0
D=n, p=Q’n
reset’
Q
n D p
Q’
clk
En un circuito físico, cuando se aplica un canto de bajada a la señal reset’, las salidas de los
flop-flops van a cero, llevando la máquina al estado inicial.
reset’
clk
tr
Q0
Q1
p
n
La salida, en el caso de Moore, tomará el valor correspondiente al estado inicial. Las entradas
son ignoradas hasta el primer canto del reloj, luego que se levante la señal de reset, lo cual se
indica con el instante tr, en la Figura 11.35. Se ilustra con una discontinuidad el tiempo que
dura la señal reset en nivel bajo, mostrando que esta situación puede durar varios períodos del
reloj.
En el instante tr, se muestrean las entradas y de acuerdo a éstas se producen los cambios de
estado. En la Figura 11.35 se asumió un nivel bajo de la entrada n, de este modo la máquina
permanece en estado inicial, esperando un canto de subida.
En un modelo de Mealy, la situación es similar para los estados de los flip-flops, pero la salida
dependerá de la entrada, mientras la señal de reset esté baja.
En caso de señales sincrónicas, la situación es similar, salvo que los cambios en los flip-flops se
producen en el siguiente pulso del reloj después de la activación del reset.
En simulación, deben generarse un pulso de reset, para que los flip-flops y las salidas tomen
valores. En caso de no hacerlo, puede que los flip-flops tomen valores desconocidos y no se
generen las secuencias que se desea simular. En un circuito físico, los flip-flops siempre estarán
en algún valor, después de aplicar la polarización.
b) Modelo de Moore.
Para un canto de subida en n, que cumpla con los requerimientos de hold, se tienen:
Q0 cambia un tiempo de propagación de flip-flop, después del canto de subida del reloj.
La salida p, cambia un tiempo de propagación de una compuerta AND, después de cambios en
Q1 o Q0.
El cambio de p se produce en el primer canto del reloj en el cual se tenga la entrada n en alto.
clk
Q0
Q1
c) Modelo de Mealy.
En el modelo de Mealy, la salida cambia cuando cambia la entrada, y suele producirse un ciclo
antes que en el modelo de Moore.
El cambio de estado se produce, un tiempo de propagación de flip-flop, después del canto de
subida del reloj.
n
clk
Q
p
En el modelo de Mealy suelen requerirse menos flip-flops, y genera la salida un tiempo antes
que en modelo de Moore. Sin embargo la salida no es sincrónica con el reloj.
d) Modelo de Mealy, con salida registrada.
Para resolver esta dificultad suele sincronizarse la salida de la máquina de Mealy, registrando la
salida en un flip-flop adicional.
reset’
ps
Q Q
n D p
Q’ D Q’
clk
clk
Q
p
ps
La salida puede generarse con las condiciones del estado próximo, y empleando un flip-flop
para sincronizar la salida.
Antes teníamos: Q1+=nQ0 Q0+=n p=Q1’Q0
reset’
ps
Q1 Q0 Q
p+
n D D D
Q1’ Q0’ Q’
clk
La salida ps, se produce en los mismos tiempos que en el modelo de Moore de la Figura 11.31,
pero se requiere un flip-flop adicional. Debe notarse que ps será sincrónica y no tendrá
perturbaciones.
En la Figura 11.41, se muestran las señales p+ y ps. Se ha dejado la señal p, del diseño anterior,
para comparar los casos.
n
clk
Q0
Q1
p
p+
ps
Problemas resueltos.
Problema 11.1.
CLK
Q0
Q1
Q2
Q3
s0
Período
0 1 2 3 4 5 6 7 8 9 10 0
Solución.
a) Las señales Q3, Q2, Q1 y Q0 corresponden a un contador módulo 11. Con Q3 el bit
más significativo.
Q3Q2
Q1Q0 00 01 11 10
0 4 12 8
00 0001 0101 dddd 1001
1 5 13 9
01 0010 0110 dddd 1010
3 7 15 11
11 0100 1000 dddd dddd
2 6 14 10
10 0011 0111 dddd 0000
Arreglando las ecuaciones de próximo estado se obtiene para cada tipo de flip-flop:
c) Q3 + = (Q2 Q1 Q0) + (Q3 Q1’) = Q3(Q2Q1Q0 + Q1’) + Q3’Q2Q1Q0
Q3+ = Q3’ J3 + Q3 K3’
Comparando coeficientes, se obtiene:
J3 = Q2Q1Q0 K3 = (Q2Q1Q0 + Q1’) ’ = Q1 (Q2’ +Q1’ +Q0’) = Q1Q2’ +Q1Q0’
Q2+ = (Q1 Q2’Q0) + (Q1’ Q2) + (Q2 Q0’) = Q2’(Q1Q0) +Q2(Q1’ +Q0’)
Q2+ = Q2’ J2 +Q2 K2’
Q3Q2
Q1Q0 00 01 11 10
0 4 12 8
00 0 0 d 1
1 5 13 9
01 0 0 d 1
3 7 15 11
11 0 0 d d
2 6 14 10
10 1 0 d 0
s0
Figura P11.3. Mapa de la salida s0, Problema 11.1
Problema 11.2.
V3
TP1 5V
CP1
U2A
A
S U4A
U3A J Q
TP2 TP3
CP _
DS1 K Q
R
Data
Seq U3C
z
CP1 x B U4B
U3B S
J Q
CP _
K Q
R
Reset
0V
Estado AB
0 00
1 01
2 10
3 11
b) Matrices de programación:
x x
AB 0 1 AB 0 1
00 11 00 00 00 11
01 11 01 01 00 11
11 11 01 11 01 11
10 11 00 10 01 11
Ja, Ka Jb, Kb
x
J K Q(k+1) AB 0 1
0 0 Q(k ) 00 10/0 01/0
0 1 0 01 11/0 00/1
1 0 1 11 00/0 00/0
1 1 Q(k ) 10 00/1 11/0
A(k+1) B(k+1)/z
x
AB 0 1
0 2/0 1/0
1 3/0 0/1
3 0/0 0/0
2 0/1 3/0
Próximo Estado/z
d) Diagrama de estados:
0/1 0 1/1
0/0 1/0
2 /0 1
1/0 0/0
e) Funcionamiento:
Salida z = 1 cuando llegan secuencias: 00 ó 11 a partir de estado inicial.
Salida z = 0 cuando llegan las secuencias: 010, 011, 100, 101 a partir del estado inicial.
Estando en estado 0, si llegan las secuencias 01 y 10 se descarta el bit siguiente.
f) Secuencia de salida:
x = 0100110011100101
z = 0000000101000000
Ejercicios propuestos.
Ejercicio 11.1
Rediseñar el diagrama de estados de la Figura 11.6 considerando que los estados inalcanzables
(2, 3, 5) son superfluos. Realizar el diseño con flip-flops JKs y comparar el costo de las nuevas
redes combinacionales.
x
Estado actual 0 1
0 4/0 1/0
1 6/0 7/0
3 / /
2 / /
6 0/0 0/0
7 0/0 0/1
5 / /
4 6/0 6/0
Estado próximo/z
Índice general.
CAPÍTULO 11 ............................................................................................................................................1
ANÁLISIS Y DISEÑO DE MÁQUINAS SECUENCIALES SINCRÓNICAS .....................................1
11.1. ANÁLISIS ..........................................................................................................................................1
Programas de los flip-flops. Matrices de programación .....................................................................2
11.2. MÉTODO DE ANÁLISIS TABULAR.......................................................................................................2
11.3. MÉTODO ANALÍTICO.........................................................................................................................3
11.4. EJEMPLO MÉTODO TABULAR ............................................................................................................3
11.5. EJEMPLOS DEL MÉTODO ANALÍTICO. ................................................................................................7
11.6. FRECUENCIA MÁXIMA DE OPERACIÓN DEL RELOJ. ............................................................................9
11.7. SÍNTESIS O DISEÑO DE MÁQUINAS SECUENCIALES SINCRÓNICAS, A PARTIR DEL DIAGRAMA DE
ESTADOS. ................................................................................................................................................ 11
11.7.1. PROCEDIMIENTO DE SÍNTESIS TABULAR. .....................................................................................11
11.7.2. PROCEDIMIENTO DE SÍNTESIS ANALÍTICO. ...................................................................................12
11.8. EJEMPLOS DE SÍNTESIS. ..................................................................................................................12
Ejemplo 11.8.1. ..................................................................................................................................12
a) Procedimiento tabular empleando flip-flops Ds: ........................................................................................ 13
b) Método analítico empleando flip-flops Ds:................................................................................................ 13
c) Procedimiento tabular empleando flip-flops JKs: ...................................................................................... 14
d) Método analítico empleando flip-flops JKs: .............................................................................................. 14
e) Descripción del diseño en Verilog. ............................................................................................................ 15
Ejemplo 11.8.2. ..................................................................................................................................16
Ejemplo 11.8.3. ..................................................................................................................................17
Ejemplo 11.8.4. ..................................................................................................................................17
11.9 RESUMEN Y OBSERVACIONES. .........................................................................................................18
11.9.1. Convertidor de cambio de nivel en un pulso. .........................................................................18
11.9.2. Modelo de Moore. ..................................................................................................................19
11.9.3. Modelo de Mealy. ...................................................................................................................21
11.9.4. Análisis de transiciones..........................................................................................................22
a) Estado inicial. Reset. .................................................................................................................................. 22
b) Modelo de Moore. ..................................................................................................................................... 23
c) Modelo de Mealy. ...................................................................................................................................... 23
d) Modelo de Mealy, con salida registrada. ................................................................................................... 23
e) Modelo de Moore, con salida registrada. ................................................................................................... 24
PROBLEMAS RESUELTOS. ........................................................................................................................25
Problema 11.1. ...................................................................................................................................25
Problema 11.2. ...................................................................................................................................27
EJERCICIOS PROPUESTOS. ........................................................................................................................31
Ejercicio 11.1 .....................................................................................................................................31
ÍNDICE GENERAL. ....................................................................................................................................32
ÍNDICE DE FIGURAS .................................................................................................................................33
Índice de figuras
Capítulo 12
Dos máquinas secuenciales son equivalentes si la relación entre la entrada y la salida son
idénticas para todas las posibles secuencias de entrada.
Un diseño en particular puede ser representado por varios diagramas de estado equivalentes. Los
costos de implementación pueden ser diferentes; en general los diagramas que tengan más estados
requieren más elementos de memoria y por lo tanto también necesitan mas redes combinacionales
para determinar el próximo estado.
Dos estados son equivalentes si no puede distinguirse entre ellos. Esto implica que si se aplica
cualquier secuencia de entrada, a partir de esos estados, se observan iguales secuencias de salida.
Puede determinarse, por inspección, que dos estados son equivalentes si tienen iguales renglones
en la matriz de transiciones. Es decir, para iguales entradas van a iguales estados próximos o
futuros, con salidas iguales.
Uno de estos estados puede removerse sin alterar la conducta de la máquina. Esto se logra
modificando la tabla de modo que no se invoque el estado eliminado sino a su equivalente.
Estado/Entrada 0 1
A B/0 C/1
B C/0 A/1
C D/1 B/0
D C/0 A/1
Estado/Entrada 0 1
A B/0 C/1
B C/0 A/1
C B/1 B/0
Se define una partición o conjunto de estados equivalentes P0, formada por todos los estados del
diagrama. Esto refleja la ignorancia del próximo estado cuando aún no se ha aplicado una entrada.
Se tiene entonces:
P0 = {A, B, C, D}
Las partes de P1 tienen igual salida para una secuencia de largo 1. Es decir, si se aplica cualquier
secuencia de largo 1 (hay dos) los estados de las partes no pueden distinguirse. Se dice que son 1-
equivalentes.
Luego para cada parte se definen los sucesores 0 y 1, que son los estados que siguen para entrada
0 y 1 respectivamente.
En el ejemplo:
Sucesores 0 de (ABD) son (BCC)
Sucesores 1 de (ABD) son (CAA).
Ahora: sucesores 0 de (BD) son (CC) y sucesores 1 de (BD) son (AA). En ambos casos los
sucesores pertenecen a una de las clases anteriores.
Los estados sucesores 0 y 1, pertenecen a un mismo grupo en P2, por lo tanto: P3 = P2
La siguiente tabla muestra la salida z0 para una entrada x0 de una secuencia de un bit, partiendo
de cada uno de los estados. Por ejemplo, estando en C, si llega un 0, la salida es 1.
1/1
0/0
A B
x0 A B C D
0 0 0 1 0
1/1 0/0 1/0 1 1 1 0 1
1/1
z0
0/1
D C
0/0
Las secuencia de salida, respecto a la de entrada, para los estados A, B y D, son iguales; no así
para el estado C. Lo cual muestra que C no puede ser equivalente con A, B o D. Esto justifica la
formación de la partición P1. Entonces C no es 1-equivalente con A, B o D.
La siguiente tabla muestra la secuencia de salida (z0z1) para una entrada de una secuencia de dos
bits (x0x1), partiendo de cada uno de los estados. Por ejemplo, estando inicialmente en A, si llega
la secuencia de entrada 10, en la salida se tiene la secuencia 11, y se recorren los estados C y D.
x0x1 A B C D
00 00 01 10 01
01 01 00 11 00
10 11 10 00 10
11 10 11 01 11
z0z1
Se advierte que no es necesario plantear la columna a partir del estado C, ya que como ilustraba
la tabla anterior el primer bit será diferente. Se observa que las columnas asociadas a los estados
B y D son idénticas y diferentes de las secuencias de la columna A. Por lo tanto A, no puede ser
equivalente a los estados B y D. Esto implica la partición P2. El estado A no es 2-equivalente con
B o D.
La siguiente tabla muestra la secuencia de salida (z0z1z2) para una entrada de una secuencia de
tres bits (x0x1x2), partiendo de los estados B y D solamente. Por ejemplo, estando inicialmente en
B, si llega la secuencia de entrada 110, en la salida se tiene la secuencia 111, y se recorren la
secuencia de estados ACD. Esto implica la partición P3.
x0x1x2 B D
000 010 010
010 000 000
100 100 100
110 111 111
001 011 011
011 001 001
101 101 101
111 110 110
z0z1z2
Puede decirse que los estados B y D son 3-equivalentes, ya que no puede distinguirse entre ellos
para secuencias de largo tres de entrada, debido a que tienen iguales secuencias de salida. El
procedimiento de Moore permite encontrar los estados n-equivalentes, y cuando no pueden
formarse nuevas particiones determina los estados equivalentes.
Algoritmo de las particiones de Moore.
1. Colocar todos los estados en un conjunto.
2. La partición inicial (P1) está basada en la conducta de la salida.
3. Las particiones sucesivas están basadas en las transiciones al próximo estado.
4. Se repite paso (3) hasta que no se produzcan nuevas particiones.
Los estados que queden en un mismo conjunto son equivalentes.
Puede demostrarse que el algoritmo es de costo polinomial.
Estado/Entrada 0 1
A C/1 B/0
B C/1 E/0
C B/1 E/0
D D/0 B/1
E E/0 A/1
Por particiones:
Se tienen P0 = {A , B, C, D, E} y P1 = {A, B, C }, {D, E }
Ya que A, B y C tienen salidas 1 y 0 para entrada 0 y 1 respectivamente. Y D y E tienen salidas 0
y 1 para entradas 0 y 1 respectivamente.
El método puede optimizarse, observando que algunos estados son equivalentes, luego de algunas
iteraciones. De este modo, no se requiere seguir obteniendo los sucesores de dichos estados.
Ejemplo 12.3.
Estado/Entrada 0 1
A E/0 D/1
B F/0 D/0
C E/0 B/1 implica partir en:
D F/0 B/0 {BD} y {F}
E C/0 F/1
F B/0 C/0
Estado/Entrada 0 1
a b/0 c/0
b d/0 e/0
c f/0 g/0
d h/0 i/0
e j/0 k/0
f l/0 m/0
g n/0 o/0
h a/0 a/0
i a/0 a/0
j a/0 a/0
k a/0 a/0
l a/0 a/0
Estado/Entrada 0 1
a b/0 c/0
b d/0 d/0
c f/0 g/0
d h/0 h/0 a
f h/0 m/0 1/0
0/
g m/0 m/0 0
h a/0 a/0 b c 1/0
m a/1 a/1 0/0
/0
d f g
1/0
c
/0
/0
/0 /0
0/0
h m
h
/0 /1
Se confecciona un diagrama triangular que tenga tantas celdas como posibles pares de estados.
Luego se marcan con diagonales cruzadas las casillas de estados que no puedan ser equivalentes
debido a que tienen salidas diferentes. Observando la tabla anterior, sólo podrían ser equivalentes
los pares: (S0, S2), (S0, S4), (S2, S4) por tener salida 1; y los pares (S1, S3), (S1, S5), (S3, S5)
por tener salida 0.
A las casillas que pueden representar estados equivalentes, por tener iguales salidas, se les
colocan los pares de estados que deben ser equivalentes; por ejemplo: S0 y S2 son equivalentes si
Luego en las celdas que tienen pares marcados, se descartan aquellas cuyos pares ya estén
marcados como no equivalentes. Por ejemplo, la celda de la primera columna y segundo renglón
se descarta por tener como condición el par (S0, S1), que ya se conoce que no pueden ser
equivalentes.
Observando las casillas no marcadas se concluye que los pares (S3, S5) y (S0, S4) deben ser
estados equivalentes.
S1
S0,S1
S1,S3
S2 S2,S2
S3,S4
S0,S1
S3,S0
S3 S1,S4
S4,S5
S0,S0 S1,S0
S1,S1 S3,S1
S4
S2,S2 S2,S2
S3,S5 S4,S5
S0,S1 S1,S1
S3,S4 S0,S4
S5 S1,S0 S4,S0
S4,S5 S5,S5
S0 S1 S2 S3 S4
Entradas x1 x0 Salida
Estado presente 00 01 10 11 z
S0 S0 S1 S2 S3 1
S1 S0 S3 S1 S0 0
S2 S1 S3 S2 S0 1
S3 S1 S0 S0 S3 0
Próximo estado
Estado Salidas
E0 -0
E1 1-
E2 -1
En la tabla anterior el estado E1 es compatible con E0 y E2, pero E0 no es compatible con E2.
En este caso no se dispone de algoritmos, de complejidad polinomial, que determinen las mejores
agrupaciones de estados en conjuntos equivalentes, los cuales permiten reducir el número de
estados. Existen numerosos programas CAD que realizan la minimización en este tipo de
máquinas.
Dado el nombre lógico de un estado se desea formar un nombre físico en binario, dado por los
estados de los flip-flops.
Si de n elementos tomamos k de ellos (sin repetición, sólo puede tomarse una vez a cada
elemento), el primero puede ser elegido de n formas, el siguiente de (n-1) formas; y el k-ésimo de
(n-k+1) formas.
2m !
ae
2m e !
Si se tienen 4 estados lógicos A, B, C y D, se requieren dos flip-flops. Con dos flip-flops pueden
establecerse 4 estados binarios: 00, 01, 10, 11. El nombre binario de A, puede ser escogido de 4
formas, el de B de tres formas, el de C de dos formas y el último de una sola forma. Esto produce
24 formas de asignar estados, empleando dos flip-flops.
asignación 1: 01001001
asignación 2: 01011001
f(a,b,c,d,e,f,g,h)
f(a,b,c,d',e,f,g,h)
Es decir, las funciones tendrán estructura similar, salvo la complementación de una variable. Y
como en los flip-flops y PLDs se dispone de las variables y sus complementos, las dos
asignaciones en discusión llevarán a implementaciones de igual costo.
Con dos variables a y b, se tienen las siguientes formas: ab, a'b, ab' a'b'. En general m variables
pueden ser complementarse de 2m formas. Entonces, aplicando el principio inverso de la
multiplicación de las tareas, el número de asignaciones se reduce en el factor 2m.
b) consideremos un intercambio de columnas, para una determinada asignación:
e m ae aeu
2 1 1 1
3 2 24 3
4 2 24 3
5 3 6.720 140
6 3 20.160 420
7 3 40.320 840
A continuación se ilustran las 24 asignaciones posibles que se pueden efectuar con dos flip-flops.
L 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
A 00 00 10 01 11 10 01 11 00 00 10 01 11 10 01 11 00 00 10 01 11 10 01 11
B 01 10 11 00 10 00 11 01 11 11 01 10 00 01 10 00 10 01 00 11 01 11 00 10
C 11 11 01 10 00 01 10 00 01 10 11 00 10 00 11 01 01 10 11 00 10 00 11 01
D 10 01 00 11 01 11 00 10 10 01 00 11 01 11 00 10 11 11 01 10 00 01 10 00
Debe notarse que cualquiera de las 8 primeras columnas puede ser elegida como asignación única
1. También cualquiera entre las columnas 9 a 16, puede ser la asignación única 2. La elección de
la asignación única 3 puede ser cualquier columna entre la 17 y 24. Se han elegido tres que
establezcan el estado A con nombre 00.
La siguiente tabla genera las 24 permutaciones posibles que se pueden efectuar con dos flip-flops
para colocar nombre binario a 4 estados. Se han mantenido los nombres de las columnas de la
Figura 12.13.
No es posible, debido al rápido crecimiento de aeu, intentar buscar la solución óptima para la
asignación de estados. Esto debido a que se requerirían realizar aeu diseños y seleccionar el de
costo menor. En lugar de esto se desarrollan métodos que guíen a encontrar una asignación de
estados razonablemente buena.
Ejemplo 12.5.
Estado/Entrada 0 1
A B/0 E/0
B C/0 G/0
C D/0 F/0
D A/1 A/0
E G/0 C/0
F A/0 A/1
G F/0 D/0
El ejemplo ilustra que no todas las asignaciones conducen a redes combinacionales de bajo costo.
La asignación 2 resulta bastante más costosa que la asignación 1.
La codificación one-hot emplea un flip-flop por estado, de este modo el diseño de las funciones
combinacionales de próximo estado resultan más sencillas. Esta forma de codificación presenta
ventajas cuando se implementa en FPGA, dispositivos que tienen bastantes flip-flops y
generadores de funciones de ancho limitado. Por ejemplo para tres estados, los códigos binarios
serían: 001, 010, 100.
En la codificación de contadores, pueden asociarse los estados a las salidas del dispositivo,
haciendo innecesarias las redes combinacionales de salida.
Debido a que no existen algoritmos polinomiales para enfrentar este problema se han desarrollado
algunas heurísticas.
Estados que tienen iguales estados próximos, para una entrada dada, se los debe asignar como
lógicamente adyacentes.
Estado/Entradas xi xj Si Sj
Si S
....
Sj S xi xi
Est. Próximo S
Estado/Entradas xi xj S
S Si Sj
....
xi xj
Est. Próximo
Si Sj
Estados con la misma salida para una entrada dada, se los debe asignar como lógicamente
adyacentes.
Estado/Entradas xi xj
Si S1/z
....
Sj S2/z
Est. Próximo/Salidas
Si Sj
xi/z xi/z
S1 S2
En la siguiente matriz de transiciones, según la primera regla, debemos asignar los estados S1 y
S2 como adyacentes. Esto debido a que tienen estados próximos iguales para la misma entrada. Si
asignamos S1= 010 y S2= 011, tendremos, asumiendo que el próximo estado tiene nombre binario
101:
Q2Q1Q0 x1x0=01
S1=010 101/0
S2=011 101/0
Q2+,Q1+,Q0+/z
Con lo cual se logra, agrupando solamente los unos que se indican en el diagrama, para las
funciones de próximo estado:
En la siguiente matriz de transiciones, según la segunda regla, debemos asignar los estados S1 y
S2 como adyacentes. Esto debido a que son estados próximos de un mismo estado S, para
entradas adyacentes. Si asignamos S1= 101 y S2= 100, tendremos, asumiendo que S tiene código
binario 010:
Q2+,Q1+,Q0+/z
Con lo cual se logra, agrupando solamente los unos que se indican en el diagrama, para las
funciones de próximo estado:
Observamos que en todos los casos, menos uno, se cancelará una variable de entrada en las
expresiones para los estados próximos. En el caso del ejemplo, la expresión para Q0+ contendrá
las dos variables de entrada; la expresión de Q2+ no contendrá a la variable x1.
De los dos casos particulares anteriores, puede concluirse que la regla de alta prioridad producirá
mayor minimización que la regla de prioridad media. Razón por la cual se les da estos nombres.
Ejemplo 12.6.
Estado/Entrada 0 1
A C/0 D/0
B C/0 A/0
C B/0 D/0
D A/1 B/1
Si se ubican en un mapa los nombres de los estados que deben ser adyacentes, cumpliendo la
primera regla, se tiene:
Q0
Q1 0 1
0 1
0 A
0 B
0
2 3
1 C
0 D
0
Estado/Entrada 0 1
A = 00 10/0 11/0
B = 01 10/0 00/0
C = 10 01/0 11/0
D = 11 00/1 01/1
Estado Actual x
Q1Q0 0 1
00 10/0 11/0
01 10/0 00/0
11 00/1 01/1
10 01/0 11/0
Q1+Q0+/z
Resultan 15 entradas (en dos niveles). Debido a que existe el producto xQ0' que es común a
ambos flip-flops.
Para este caso, puede buscarse la asignación óptima, efectuando los diseños con todas las
asignaciones únicas de estado. Se tienen:
Estado/Entrada 0 1
A = 00 10/0 01/0
B = 11 10/0 00/0
C = 10 11/0 01/0
D = 01 00/1 11/1
Estado/Entrada 0 1
00 10/0 01/0
01 00/1 11/1
11 10/0 00/0
10 11/0 01/0
Estado/Entrada 0 1
A = 00 11/0 01/0
B = 10 11/0 00/0
C = 11 10/0 01/0
D = 01 00/1 10/1
Se comprueba entonces que, en este caso, las reglas para la asignación de estados llevan a una
asignación razonablemente buena. En la situación planteada es la óptima.
Asignación one-hot.
Para la matriz de transiciones de la Figura 12.19, puede efectuarse la asignación de tipo one-hot,
en la cual cada estado tiene un nombre binario con un solo 1. Esto se muestra en la Figura 12.26a.
Si A es el estado inicial, la operación de reset, es ahora levemente más compleja.
Las variables de estado son las salidas de los flip-flops: Q3, Q2, Q1, Q0.
x
Q3Q2Q1Q0 0 1
A=0001 0100/0 1000/0
B=0010 0100/0 0001/0
C=0100 0010/0 1000/0
D=1000 0001/1 0010/1
Q3+Q2+Q1+Q0+/z
Deben considerarse superfluas todas las combinaciones que tengan más de un uno en su nombre
binario. En la Figura 12.26b, puede observarse los mapas de Karnaugh de 5 variables, para las
variables de próximo estado Q3+ y Q2+.
Q3Q2
Q3Q2
00 01 11 10 Q1Q0 00 01 11 10
Q1Q0 8
8 4
00 d 1
4
d 00 d d
1 1
01 1 d d d 01 1 d d d
11 d d d d 11 d d d d
2 2
10 d d d 10 1 d d d
Minimizando empleando las condiciones superfluas, pero cubriendo sólo los mintérminos
presentes, se obtienen:
Deben evaluarse los diseños alternativos, basados en producto de sumas. Si se agrupan los ceros
de Q3+ se obtiene: (Q3+)’=Q2’Q0’x’ que equivale a: Q3+=Q2+Q0+x. Existiendo soluciones
similares para el resto de las variables.
Ejemplo 12.7.
Asignar estados para un reconocedor de secuencias de largo de tres bits, que tenga salida 1
cuando se tienen en la entrada las secuencias: 010 y 110; y salida cero en el resto de los casos. La
señal externa reset debe llevar la máquina al estado inicial.
Una vez eliminados los estados equivalentes, se obtiene la siguiente matriz de transiciones, con
E0 como el estado inicial:
Estado/Entrada 0 1
E0 E1/0 E1/0
E1 E2/0 E3/0
E2 E0/0 E0/0
E3 E0/1 E0/0
Estados que tienen iguales estados próximos, para una entrada dada, se los debe asignar como
lógicamente adyacentes. En este caso E2 y E3 debe ser adyacentes, tanto para entrada 0, como
para entrada 1, desde los estados 2 y 3 se va al estado 0.
Estados próximos de un estado presente, bajo entradas lógicamente adyacentes, se los debe
asignar como lógicamente adyacentes. Nuevamente implica asignar E2 y E3 como adyacentes,
ya que estando en E1 va estado 2 con entradas 0 y a E3 con entrada 1.
La regla que intenta minimizar la función de salida implica que E0, E1 y E2 deben ser adyacentes
ya que hay salida 0 para entrada cero. Además E0, E1, E2, E3 debe ser adyacentes ya que se tiene
salida cero para entrada 1.
Para obtener una función simple de reset se escoge el estado inicial E0 como 00.
La asignación 1 deja E0 como estado inicial, cumple E2 a distancia uno de E3, cumpliendo así las
dos primeras reglas en forma completa.
De la tercera regla cumple: E0 con E2, E0 con E1, E1 con E3. No pueden cumplirse: E1 con E2
del grupo con salida y entrada 0; tampoco pueden cumplirse: E0 con E3, y E1 con E2 del grupo
con entrada 1 y salida cero.
Q0 Q0 Q0
Q1 0 1 Q1 0 1 Q1 0 1
0 1 0 1 0 1
0 E0
0 E2
0 0 E0
0 E3
0 0 E0
0 E1
0
2 3 2 3 2 3
1 E1
0 E3
0 1 E1
0 E2
0 1 E2
0 E3
0
La asignación 2 deja E0 como estado inicial, cumple E2 a distancia uno de E3, cumpliendo así las
dos primeras reglas en forma completa.
De la tercera regla cumple: E0 con E3, E0 con E1, E1 con E2. No pueden cumplirse: E1 con E3
del grupo con salida y entrada 0; tampoco pueden cumplirse: E0 con E2, y E1 con E3 del grupo
con entrada 1 y salida cero.
La asignación 3 deja E0 como estado inicial, cumple E2 a distancia uno de E3, cumpliendo así las
dos primeras reglas en forma completa.
De la tercera regla cumple: E0 con E1, E0 con E2, E1 con E3. No pueden cumplirse: E1 con E2
del grupo con salida y entrada 0; tampoco pueden cumplirse: E0 con E3, y E1 con E2 del grupo
con entrada 1 y salida cero. Además esta asignación resulta ser equivalente en costo a la
asignación 1, ya que deviene de ésta por intercambio de columnas.
2 3
1 E3
0 E2
0
Asignación 4
En resumen cualquiera de las asignaciones 1 a 4 puede ser una elección razonable, ya que
cumplen con las dos primeras reglas: tener E2 adyacente con E3, y el máximo posible de
cumplimiento de la tercera regla.
Reconocedor de secuencias de largo 4. Salida uno cuando llegan: 0110 y 1010; salida cero en el
resto de los casos. El comando externo reset, debe llevar al estado inicial.
El diagrama reducido de estados es el siguiente:
Estado/Entrada 0 1
E0 E1/0 E2/0
E1 E3/0 E4/0
E2 E4/0 E3/0
E3 E5/0 E5/0
E4 E5/0 E6/0
E5 E0/0 E0/0
E6 E0/1 E0/0
Q2Q1
Q0 00 01 11 10
0 E0 E3 E6
1 E1 E4 E5 E2
Primero asignamos E3 adyacente con E4, y E5 con E6, ya que figuran en la primera y segunda
regla. Después E1 con E2.
Q2Q1
Q0x 00 01 11 10
0 4 12 8
00 0010 1110 0001
1 5 13 9
01 1010 1110 0000
3 7 15 11
11 0110 1100 0000 0100
2 6 14 10
10 0100 1110 0000 0110
Q2+,Q1+,Q0+,z
Problemas resueltos.
Problema 12.1.
0/0 1/0
b c
0/0 1/0 0/0 1/0
d e f g
0/0 1/0 0/0 1/1 0/1 1/0 0/0 1/0
Solución.
a) Analiza secuencias de largo tres, determinando con salida 1 la llegada de las secuencias: 011 ó
100; para el resto de las posibles secuencias de tres bits la salida es cero.
b)
P0 = { a, b, c, d, e, f, g}
P1 = {e}, {f}, {a, b, c, d, g}
P2 = {e}, {f}, {b}, {c}, {a, d, g}
P3 = {e}, {f}, {b}, {c}, {a}, {d, g}
P4 = P3
Por lo tanto d es equivalente con g. Se elimina g.
x=0 x=1
Q2Q1
a b/0 c/0 Q0 00 01 11 10
b d/0 e/0 0 2 6 4
c f/0 d/0 0 a d e
d a/0 a/0
e a/0 a/1 1 3 7 5
f a/1 a/0 1 b
Con las asignaciones dadas, que se ilustran en el mapa, se cumplen automáticamente que: d es
adyacente con e, de la primera regla; y d con a y b con a de la tercera regla; y sólo se puede
cumplir una de las dos siguientes: e con f o f con d.
c1) Si se elige f=011, f adyacente con d, no se puede cumplir que e sea adyacente con f; en este
caso a c debe asignarse 101, para cumplir la regla de media prioridad.
c2) Si se elige f=111, f es adyacente con e, y no puede cumplirse que f sea adyacente con d. En
este caso con c=101 se logra c adyacente con b (segunda regla). Es mejor asignar, en este caso c=
011, ya que además logra c adyacente con d, de la tercera regla.
c3) Si se elige f=100, f es adyacente con e, y no puede cumplirse que f sea adyacente con d; en
este caso conviene c=011, ya que logra b con c y además c con d de la tercera regla.
Para c2) quedan dos estados sin asignar, a los cuales pueden colocarse próximo estado y salida
superfluos. Resulta la siguiente tabla de transiciones.
Q2+Q1+Q0+/z
Figura P12.4. Mapa de matriz de transiciones Problema 12.1.
Se obtienen:
Se tiene:
Secuencia 0 1 2 3 4 5 6 7
Contador 0 1 2 0 1 2 0 1
Qa 0 1 0 0 1 0 0 1
Qb 0 0 1 0 0 1 0 0
Registro Q1 0 x0 x1 x2 x3 x4 x5 x6
Q0 0 0 x0 x1 x2 x3 x4 x5
Entrada x0 x1 x2 x3 x4 x5 x6 x7
En la tabla anterior, el número de secuencia indica los cantos de reloj que han ocurrido hasta el
momento.
Después del primer canto del reloj, el contador pasa a la cuenta 1 (Qa=1 y Qb =0).
Ha llegado la secuencia 011 o la secuencia 100 en la cuenta dos del contador, se logra con:
z = (Q0’Q1x + Q0Q1’x’)QbQa’
El diseño del contador módulo tres, queda especificado por la siguiente tabla.
QbQa
00 01
01 10
10 00
11
Qb+Qa+
x D1 Q1 D0 Q0
Secuencia 0 1 2 3 4 5 6 7
Contador 0 1 2 0 1 2 0 1
Qa 0 1 0 0 1 0 0 1
Qb 0 0 1 0 0 1 0 0
Registro Q2 0 x0 x1 x2 x3 x4 x5 x6
Q1 0 0 x0 x1 x2 x3 x4 x5
Q0 0 0 0 x0 x1 x2 x3 x4
Entrada x0 x1 x2 x3 x4 x5 x6 x7
x D2 Q2 D1 Q1 D0 Q0
Problema 12.2.
Q1 z
D1
Q1’
Q0
D0
Q0’
Solución.
a) Se tienen: D1 = x’Q1’Q0’ + x Q0; D0 = Q1’ + x’ Q0’; z = Q1Q0’ +Q1’Q0 (Moore)
De los flip-flops Ds se tienen: Q1+ = D1 y Q0+ = D0
Estado x z x
Q1 Q0 0 1 Estado 0 1
0 0 11 01 0 A=00 C B 0
0 1 01 11 1 B=01 B C 1
1 1 00 10 0 C=11 A D 0
1 0 01 00 1 D=10 B A 1
Q1+Q0+ Estado + z
x z
x Q z Q 0 1
D
Q’ 0 0 1 0
1 1 0 1
Q+
Con tipo JK: Se tiene xQ’ +x’Q = JQ’ +K’Q con lo que se obtiene: J = x; K = x
J Q
z
x
K Q’
Problema 12.3.
Solución:
P0 = {E0, E1, E2, E3, E4, E5, E6 }
P1 = {E0, E1, E2, E4, E6 } { E3, E5 }
S0(E0E1E2E4E6)=(E1E3E5E0E0) S0(E3E5)=(E0E0)
S1(E0E1E2E4E6)=(E2E4E6E0E0) S1(E3E5)=(E0E0)
P4 = P3
P5 = P4 y así sucesivamente.
Problema 12.4.
Mayor Prioridad: Estados con estados próximos iguales para igual entrada.
Mediana Prioridad: Próximos Estados para entradas adyacentes
Baja Prioridad: Estados con Iguales salidas para igual entrada.
Solución:
Mayor prioridad:
A adyacente con D, ya que con entrada 0 van al estado A.
C adyacente con D, ya que con entrada 1 van al estado D.
Mediana prioridad:
A adyacente con C, ya que son estados próximos de A, para entrada 0 y 1 respectivamente.
D adyacente con B, ya que son estados próximos de B, para entrada 0 y 1 respectivamente.
B adyacente con D, ya que son estados próximos de C, para entrada 0 y 1 respectivamente.
A adyacente con D, ya que son estados próximos de D, para entrada 0 y 1 respectivamente.
Baja Prioridad.
B adyacente con C, ya que tienen salida 1 para entrada 0 y 1.
A adyacente con D, ya que tienen salida 0 para entrada 0 y 1.
Q0 Q0 Q0
Q1 0 1 Q1 0 1 Q1 0 1
0 1 0 1 0 1
0 A
0 D
0 0 A
0 B
0 0 A
0 B
0
2 3 2 3 2 3
1 B
0 C
0 1 D
0 C
0 1 C
0 D
0
Índice general.
CAPÍTULO 12 .............................................................................................................................................. 1
EQUIVALENCIA Y ASIGNACIÓN DE ESTADOS. ............................................................................... 1
12.1. ESTADOS EQUIVALENTES. .................................................................................................................. 1
12.2 MÉTODO DE REDUCCIÓN DE ESTADOS POR INSPECCIÓN. .................................................................... 1
12.3. REDUCCIÓN DE ESTADOS EN MÁQUINAS COMPLETAMENTE ESPECIFICADAS. ...................................... 2
12.3.1. Método de Reducción de Moore. Método de las Particiones. .................................................... 2
Ejemplo 12.1 ....................................................................................................................................................... 3
Algoritmo de las particiones de Moore. .............................................................................................................. 4
Ejemplo 12.2. ...................................................................................................................................................... 5
Ejemplo 12.3. ...................................................................................................................................................... 6
Ejemplo 12.4. ...................................................................................................................................................... 6
12.3.2. Método del diagrama de implicación......................................................................................... 8
12.3.3. Minimización de estados en máquinas incompletamente especificadas. ................................. 10
12.4. ASIGNACIÓN DE ESTADOS. ............................................................................................................... 10
12.4.1. Análisis del problema de asignación. ...................................................................................... 10
Ejemplo 12.5. ....................................................................................................................................... 14
12.4.2. Estrategias de asignación. ....................................................................................................... 15
12.5 REGLAS PARA LA ASIGNACIÓN DE ESTADOS...................................................................................... 15
Regla de Alta prioridad: ...................................................................................................................... 15
Regla de Prioridad Media: .................................................................................................................. 16
Regla de Baja Prioridad: ..................................................................................................................... 16
Análisis de las reglas. .......................................................................................................................... 17
Ejemplo 12.6. ....................................................................................................................................... 18
Asignación one-hot. ............................................................................................................................. 21
Ejemplo 12.7. ....................................................................................................................................... 23
Ejemplo 12.8. ....................................................................................................................................... 25
12.6 DESCOMPOSICIÓN DE MÁQUINAS SECUENCIALES. ............................................................................ 26
PROBLEMAS RESUELTOS. .......................................................................................................................... 27
Problema 12.1. ..................................................................................................................................... 27
Problema 12.2. ..................................................................................................................................... 31
Problema 12.3. ..................................................................................................................................... 32
Problema 12.4. ..................................................................................................................................... 34
ÍNDICE GENERAL. ...................................................................................................................................... 36
ÍNDICE DE FIGURAS ................................................................................................................................... 37
Índice de figuras
Capítulo 13
13.1. Contadores.
En los diagramas de estados de contadores, no suelen anotarse las entradas, el cambio de estado
se produce con el canto del reloj; es decir, se cuentan los cantos del reloj.
La asignación de estados se elige de tal manera que el estado refleje la cuenta; debido a esto son
máquinas de Moore.
Los diseños pueden efectuarse con JK, y también con D. Las ecuaciones con flip-flops de tipo D
pueden implementarse directamente con lógica programable.
Pueden clasificarse según la forma de contar en contadores binarios, bcd, o en contadores con
secuencias especiales. También pueden ser progresivos o regresivos, si cuentan en forma
ascendente o descendente respectivamente.
2 3
1 10 00
Q1+ Q0+
Figura 13.2. Matriz de transiciones contador módulo 4.
reset’
rst rst
J Q0 J Q1
K K
clk clk
clk
reset
000
Q2Q1
Q0 00 01 11 10 111 001
0 2 6 4
0 001 011 111 101
1 3 7 5 110 010
1 010 100 000 110
Notar que en el diagrama de estados, no hay señal de entrada asociada a las transiciones. El
cambio de estado se produce con el canto del reloj. La salida es el estado, y el diagrama
corresponde a un modelo de Moore.
Resultan:
Q2+ = Q1Q0Q2' + Q2(Q1' + Q0') = J2Q2' +K2'Q2 = D2
Q1+ = Q0Q1' + Q0'Q1 = J1Q1' +K1'Q1 = D1
Q0+ = 1Q0' + 0 Q0 = J0Q0' +K0'Q0 = D0
En el caso de emplear flip-flops de tipo D, los programas resultan por simple lectura del mapa
de la matriz de transiciones, ya que: Di = Qi+
Para diseño con JKs, conviene leer los mapas buscando los factores de Qi y Qi'. Y luego
comparar los coeficientes de las ecuaciones características para encontrar los Ji y Ki'.
Se logran:
J2 = Q1Q0 K2 = Q1Q0
J1 = Q0 K1 = Q0
J0 = 1 K0 = 1
Usando flip-flops JKs, el diseño puede representarse por el esquemático de la Figura 13.5:
+Vcc
reset’
clk
Notar que los flip-flops operan con el canto de bajada del reloj.
Se destaca un reset asincrónico: cuando la señal reset' (de lógica negativa) tiene un canto de
bajada, se activa. Entonces, en ese momento, todos los flip-flops van a cero (ver marcador 1 en
la Figura 13.6), y se tiene al contador en el estado inicial. Permanece en ese estado hasta que se
desactiva la señal reset'; es decir cuando reset' = 1, luego de lo cual, en el próximo canto de
bajada del reloj, se pasará al próximo estado 001. El pequeño círculo que está en la entrada de
reset, indica que es una señal de lógica negativa; y es convencional describirla con el nombre
negado: reset'.
Las formas de ondas muestran el tiempo de propagación de los flip-flops (ver marcador tf en la
Figura 13.6); es decir el tiempo que transcurre desde el canto hasta que se tiene nivel estable en
las salidas Q de los flip-flops.
Nótese que todas las salidas cambian en el mismo momento, y que permanecen estables entre
cantos de bajada del reloj.
rst'
clk
Q2
Q1
Q0
1 tf
Figura 13.6. Formas de ondas contador módulo 8.
1 5 13 9
01 0010 0110 1110 1010
3 7 15 11
11 0100 1000 0000 1100
2 6 14 10
10 0011 0111 1111 1011
Resultan:
Q3+ = Q1Q0Q2Q3' + (Q2'+ Q1' + Q0') Q3 = J3Q3' +K3'Q3 = D3
Q2+ = Q1Q0Q2' + Q2(Q1' + Q0') = J2Q2' +K2'Q2 = D2
Q1+ = Q0Q1' + Q0'Q1 = J1Q1' +K1'Q1 = D1
Q0+ = Q0' = J0Q0' +K0'Q0 = D0
+Vcc
reset’
clk
Las formas de ondas de Q0, Q1, Q2, Q3, clk y rst se ilustran a continuación:
Q0
Q1
Q2
Q3
clk
rst
Si los períodos del reloj, de Q0, Q1, Q2 y Q3 son: Tc, T0, T1, T2 y T3 respectivamente, se
tienen:
T0 T1 T2 T3
Tc
2 4 8 16
+Vcc
reset’
clk
Este diseño, sigue siendo sincrónico, pero aumenta el período mínimo que puede tener el reloj
para el funcionamiento correcto de Q3. Ahora se tiene que el período mínimo queda dado por:
(tf +2 tc + tsu+ tskew), el cual implica una frecuencia máxima menor que la del diseño anterior.
reset’
clk
A continuación se muestran las formas de ondas. Los tiempos en que este contador permanece
en cada estado no son regulares.
clk
Q0
Q1
Q2
Q3
rst'
Figura 13.12. Formas de ondas contador ripple.
reset’
clk
Debe notarse que el primer flip-flop requiere un set asincrónico para iniciar el funcionamiento
del contador. Además, como puede observarse en las formas de ondas, los estados por los que
pasa el contador están restringidos a una secuencia determinada. Pasa para la configuración de
la Figura 13.13, por: 0001, 0010, 0100, 1000.
Q0
Q1
Q2
Q3
clk
rst
Una variación, que permite duplicar los estados del "ring counter", es el contador de Johnson.
Debe notarse que Q3 se conecta a K0, y que Q3' se conecta a J0. Este contador pasa por ocho
estados:
0000, 0001, 0011, 0111, 1111, 1110, 1100, 1000.
reset’
clk
Q0
Q1
Q2
Q3
clk
rst
En la familia TTL existen diversos tipos de contadores. Uno muy versátil es el 74163, que tiene
señales de carga y clear sincrónicas. Lo cual permite cargar un valor de cuenta inicial y también
dejar en cero en forma sincrónica con el reloj. También se dispone de una señal que está alta
cuando se está en el estado más alto; es decir cuando el contador pasa al estado 1111, la señal se
denomina RCO (ripple carry output).
Los controles anteriores permiten diseñar contadores especiales. Por ejemplo uno que cuente
desde un valor inicial hasta 1111 (se logra conectando rco a la señal load).
Similar esquema suele emplearse en los temporizadores de procesadores y microcontroladores,
donde además de los recursos habituales de aritmética y lógica se agrega un contador, con
controles sincrónicos, denominado usualmente “timer”.
Otro contador, que puede implementarse con estos controles, es uno que cuente desde 0000
hasta un valor dado; para ello se requiere decodificar el estado y con esto alimentar la señal
clear.
No es recomendable emplear las entradas asincrónicas de los contadores para diseños como los
descritos antes; en este caso debe restringirse el uso de los controles asincrónicos sólo para
establecer el estado inicial.
load’
PE
TE
clear’
P0 Q0
74163
P1 Q1
P2 Q2
P3 Q3
RCO
clk
Los controles clear’ y load’ se definen de lógica negativa, esto implica que la limpieza a cero
del estado del contador se logra con el canto de bajada de clear’. Como este control es
sincrónico, el instante preciso, en que se produce la acción, es el canto de subida del reloj luego
de que clear tiene un canto de subida. La Figura 13.17a, muestra la especificación del contador
mediante una tabla de verdad.
De los diseños de los contadores binarios módulos 4, 8 y 16, pueden inducirse las siguientes
ecuaciones, sin efectuar desarrollos. Lo mismo puede decirse para contadores módulo una
potencia de dos: 64, 128, etc.
000
Q2Q1
Q0 00 01 11 10 001
0 2 6 4
0 001 011 000 101
111 010
1 3 7 5 110
1 010 100 110
Q2Q1 000
Q0 00 01 11 10 001
0 2 6 4
0 001 011 101 111
110 010
1 3 7 5
1 010 100 000
101 011
Q2+ Q1+ Q0+ 100
Resultan:
Q2+ = Q1Q0Q2'+Q0'Q2 = J2Q2' +K2'Q2 = D2
Q1+ = Q2'Q0Q1' + Q0'Q1 = J1Q1' +K1'Q1 = D1
Q0+ = Q0' + 0 Q0 = J0Q0' +K0'Q0 = D0
En la familia TTL existen contadores asincrónicos como el 7493 que pueden contar en módulo
8 ó 16. Y el 7490 que puede contar en módulo 5 o por décadas (Módulo 10).
Se denomina registro a una serie de flip-flops agrupados, con reloj y señales de control común.
En los de desplazamiento se transfiere información de una celda (o flip-flop) hacia la adyacente,
dentro del mismo registro. Esta operación se llama corrimiento (shift). El corrimiento puede ser
Debe considerarse en forma especial los bordes. Indicando con qué se llena el hueco que se
produce; y especificando que se hace con el bit que sale del registro.
13.2.1 Usos.
Se desea efectuar un corrimiento a la derecha. Es decir, con el canto del reloj, el contenido del
flip-flop Q0 pasa a Q1. Alternativamente, lo que se desea es que el próximo estado de Q1 sea el
valor actual de Q0.
J0 Q0 J1 Q1
x
K0 K1
Q0' Q1'
clk
Se logran: J0 = x; K0 = x'
reset’
rst rst rst rst
x
J Q0 J Q1 J Q2 J Q3
K K K K
clk clk clk clk
clk
x
rst
clk
Q3
Q2
Q1
Q0
La componente 7491 es un 8-bit shift register, serial-in serial out gated input.
Funciones 74LS194.
CLR S1 S0 CLK SL SR A B C D QA QB QC QD Función
L X X X X X X X X X L L L L Clear
H X X L X X X X X X Qa Qb Qc Qd Hold
H H H ↑ X X a b c d a b c d Load
H L H ↑ X H X X X X H Qa Qb Qc Shift R
H L H ↑ X L X X X X L Qa Qb Qc Shift R
H H L ↑ H X X X X X Qb Qc Qd H Shift L
H H L ↑ L X X X X X Qb Qc Qd L Shift L
H L L ↑ X X X X X X Qa Qb Qc Qd Hold
Con: SR shift right serial input; SL shift left serial input; A, B, C, D entrada paralela; QA,
QB, QC, QD salida paralela. S0 y S1 entradas de control. La señal CLR es un control
asincrónico, que coloca en cero los flip-flops. El evento que sincroniza las transferencias es el
canto de subida de la señal CLK.
A partir del esquemático de la Figura 13.23, se obtienen las siguientes ecuaciones, asumiendo
flip-flops Ds, en lugar de SRs. Debe notarse que el estado hold se logra pasando por una
compuerta el reloj externo. Las ecuaciones siguientes permiten una descripción a nivel de
compuertas y flip-flops.
13.3. Registros.
Se denomina registro a una colección de flip-flops con lógica y controles similares. Suelen
compartir el reloj, y las líneas asincrónicas de set y clear.
D Q0 D Q1 D Q2 D Q3
clk
In D Q0 D Q1 D Q2 D Q3
clk
Si se agrega un decodificador, que tenga como entradas a las salidas del registro de la Figura
13.25, puede generarse un detector de una secuencia de 4 bits, cada vez que ésta se presente.
entradas
direcciones contenidos
clk
Usar un dispositivo programable con salidas de registro; con esta arquitectura, las
realimentaciones del estado son internas.
PLD
entradas salidas
clk
Este esquema se emplea para diseñar unidades de control en firmware, o de lógica alambrada.
13.4.3. Secuenciador.
Una variante del esquema basado en ROM, es emplear, para registrar el estado, un contador
sincrónico con funciones de carga paralela, clear e incrementar; y programar la función de
próximo estado en función de estas señales.
Este esquema se denomina de microsecuenciación y se emplea en diseños de la unidad de
control de procesadores.
Ejemplo 13.1.
0000
inc
0001
load load
x= 0 load load load x= 4 x= 5
x=1 x= 2x= 3 load
0100 0110 1000 1011 0011 0010
inc inc
inc 1001 1100
inc
inc
El contador registra el estado, y sus salidas están conectadas a las direcciones de la memoria. El
contenido de la memoria son los bits: C, I, L que están conectadas a las señales Cero,
Incrementar y Cargar del registro; además pueden grabarse en la memoria, los diversos bits de
salida que se requieran asociados a cada estado (esquema de Moore).
Nótese que los nombres binarios de los estados se eligen para ocupar lo más eficientemente que
sea posible la señal de cuenta o incremento del contador.
Al estado 0000, se llega después del reset inicial. Si la naturaleza del proceso secuencial es
repetitiva, al terminar los diferentes recorridos de estados se retorna al estado inicial. Para esto
se emplea la señal Cero.
Esta información puede codificarse en una ROM pequeña, o implementarse mediante un PLD.
Debe notarse que en la ROM del secuenciador no se almacena el próximo estado. Esto puede
significar un ahorro importante de memoria, si existe un pequeño número de estados con
múltiples bifurcaciones.
En caso de existir varios nodos con bifurcaciones, es preciso definir otras señales de carga, una
por cada nodo con bifurcaciones, y también igual número de tablas de Despacho. La señal Load
del contador es activada por el or de las señales de carga de las tablas de despacho.
L C Inc I C L Salidas
Entradas
Un uso frecuente de las máquinas secuenciales sincrónicas es ejercer control sobre dispositivos
asincrónicos con los que se desea intercambiar datos. Un ejemplo de esta situación es la
conexión de un sistema sincrónico con memorias o periféricos.
Para ilustrar consideraremos un dispositivo que genera datos. En la Figura 13.33, se muestra un
diagrama de bloques, indicando las señales de entrada y de salida.
comando
habilita datos
ocupado
Se envía un pulso de comando que inicia la actividad del periférico, luego de un tiempo el
dispositivo indica que está procesando el requerimiento con la señal ocupado; cuando los
nuevos datos generados por el dispositivo están listos para ser usados, se habilita la salida,
permitiendo de este modo que los datos estén disponibles en el bus de salida. Cuando la salida
está deshabilitada el bus de datos está en un estado de alta impedancia, lo cual permite que
varios dispositivos compartan el bus de datos.
El primer paso del diseño consiste en estudiar la hoja de datos del dispositivo, analizando los
requerimientos temporales. En la Figura 13.34 se muestran las formas de ondas con sus
especificaciones de tiempo.
Luego del canto de bajada del pulso de comando, transcurre un tiempo de retardo hasta que el
dispositivo inicia su actividad, sea tr = 700 ns. Este tiempo es el máximo indicado por el
fabricante.
Luego del canto de bajada de ocupado, debe habilitarse la salida, pero los datos estarán
disponibles luego de transcurrido el tiempo de acceso al bus, sea este tiempo tb = 250 ns. Luego
de esto se tienen nuevos datos válidos en el bus de salida, y se podría proceder a su captura. Una
vez almacenados los datos se deshabilita el bus, subiendo la señal habilita. El dispositivo aún
mantiene los datos en el bus un tiempo antes de entrar en flotación, sea este tiempo tf = 150 ns.
comando
ta
ocupado
tr tp
habilita
tb tf
datos validos
Por otro lado se dispone de un sistema sincrónico que opera con un reloj de 5 MHz, lo cual
implica un período de reloj de 200 ns.
La Figura 13.35, muestra el entorno del controlador. El sistema sincrónico genera las señal de
reset, para colocar en un estado inicial al controlador; la señal lea para iniciar la lectura; y recibe
datos
clk
Debe notarse que las señales que interactúan entre el controlador y el sistema si bien están
sincronizadas por el mismo reloj, lo hacen en cantos diferentes. Esta elección se realiza para
garantizar el cumplimiento de las reglas de sincronización de los flip-flops del controlador y del
sistema, tanto en el tiempo de setup como en el de mantenimiento (hold). Lo cual se ilustra en el
diagrama de la Figura 13.36.
A la izquierda se muestran las señales lea o reset como pulsos de un ancho del reloj de
duración, sus cambios ocurren en los cantos de bajada del reloj, de este modo los flip-flops del
controlador tomarán muestras de sus entradas en los cantos de subida del reloj, instante en que
ambas señales estarán estables. A la derecha se ilustra que el registro que almacena los datos
tendrá su habilitación estable en el canto de bajada del reloj, ya que la señal capture, que
proviene del controlador, cambia entre cantos de subida del reloj.
clk
lea
comando
E0 E1 E2 E3
Para lograr el requerimiento de ancho mínimo del pulso comando, debemos mantener baja esta
señal dos períodos del reloj, de este modo la señal tendrá un ancho de 400 ns, que es levemente
mayor al requisito de 350 ns como ancho mínimo. Lo anterior implica disponer de dos estados
E1 y E2, durante los cuales la señal comando esté en 0. La Figura 13.38, muestra la parte del
diagrama de estados que controla la generación de la señal comando, la cual se muestra con la
letra c, en el interior del estado del diagrama de Moore.
reset
E0
lea=0 c=1
lea=1
a
E1
c=0 ocupadoS=0
b
E2 E3
c=0 d c=1
Los estados E1 y E2 se emplean para temporizar, por esta razón no se requieren cambios de las
entradas para el cambio de estado. Los instantes en que se producen los cambios al estado E2 y
E3, se muestran con los marcadores temporales b y d, en la Figura 13.37.
El estado E0 se usa para esperar el canto de subida de lea; el estado E3 se emplea para esperar el
canto de subida de ocupadoS, donde esta señal representa la sincronización de la señal ocupado,
generada por el dispositivo asincrónico que se desea controlar. La señal ocupadoS en el peor
caso tiene un retardo de dos períodos de reloj respecto de la señal ocupado, ya que para
sincronizarla se la pasa por dos flip-flops Ds.
La Figura 13.39 muestra la transición al estado E4, en el canto marcado con el identificador e.
Que corresponde al siguiente canto de subida en el que se ha sensado ocupadoS en alto.
e f g
clk
ocupadoS
habilita
capture
E3 E4 E5 E6 E0
Permanece en E4 hasta que llegue el canto de bajada de ocupadoS; luego en el canto de subida
del reloj, se pasa al estado E5, en el cual se genera el control habilita=0. Se decide generar la
señal capture en el estado siguiente E6, ya que como los datos se graban con el canto de bajada
del reloj, esto ocurrirá 300 ns luego del instante denominado f en el diagrama. Lo cual garantiza
que se tendrán datos válidos en el bus de tercer estado del dispositivo. Finalmente se requiere
deshabilitar la salida y terminar el registro de los datos, esto puede lograrse si el estado inicial
produce los controles: capture=0 y habilita =1. Esto permite la especificación del diagrama de
estado completo del controlador, que se muestra en la Figura 13.40.
reset
E0 E6
capture=1
lea=0 c=1 h=0
lea=1 g
a
E5
E1
h=0
ocupadoS=0
c=0
ocupadoS=0 f
b
E2 E3 e E4
c=0 d c=1 ocupadoS=1 h=1
ocupadoS=1
// Estados internos
reg [2:0] estado;
reg [2:0] proximoestado;
// Declaraciones de estado
parameter E0 = 0;
parameter E1 = 1;
parameter E2 = 2;
parameter E3 = 3;
parameter E4 = 4;
parameter E5 = 5;
parameter E6 = 6;
module test_v;
// Inputs
reg clk;
reg reset;
reg lea;
reg ocupado;
// Outputs
wire capture;
initial begin
// Initialize Inputs
clk = 0; reset = 0; lea = 0; ocupado = 0;
// Wait 100 ns for global reset to finish
#100;
endmodule
Problemas resueltos.
1 3 7 5
1 010 100 ΦΦΦ ΦΦΦ
Q2+Q1+Q0+
1 3 7 5
1 000 010 ΦΦΦ 100
Q5+Q4+Q3+
La siguiente tabla muestra el estado de los contadores, los valores de los decodificadores de
cuenta igual a tres (C3), e igual a uno (C1). También se ilustra el estado de la salida,
considerando que desde el canto de subida de C3 la salida Z toma valor 1, y que Z toma valor
cero desde el canto de subida de C1.
Mod5 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3
Mod7 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5
C3 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
C1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0
Z 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 1
También se considera correcta la siguiente tabla que muestra los cambios de Z con los cantos de
bajada de las señales C3 y C1.
Mod5 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3
Mod7 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5
C3 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
C1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0
Z 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0
c1) Observando un valor de uno de los contadores (por ejemplo la cuenta 4 del contador módulo
5), se aprecia que Z a veces es uno y otras es cero, ya que depende del valor anterior de Z.
c2) Si puede construirse una matriz de transiciones y Z+ depende del valor actual de Z.
En el caso que Z+ no dependiera de Z se trataría de una situación combinacional.
C3C1
z 00 01 11 10 0 ,11
Z=0
0 2 6 4
0 0 0 0 1
1 3 7 5 1 10
1 1 0 0 1
Z=1
0
z+
d) La implementación anterior conduce a las siguientes formas de ondas, donde z cambia con
los cantos de bajada de las señales C3 y C1. El próximo estado se calcula con los valores
actuales y toma su valor después del canto sincronizante.
clk
C3
C1
Alternativamente las señales C3 y C1 pueden emplearse para comandar un latch de nor (que
opera con cantos de subida), y tal que el comando set sea C3C1’, y el comando reset sea: C1.
clk R
C1 Z
C3
S
C1
C3C1’
En el largo plazo la señal z es periódica, después de 35 (5*7) pulsos del reloj, ambos contadores
pasan por cero simultáneamente.
Mod5 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0
Mod7 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0
Problema 13.2.
inicial 1/1
A 0/0
B
0/0
1/0
0/1
C
1/0
Solución.
a) Se genera un uno en la salida después de una secuencia, de cualquier largo, de ceros o de
unos de la entrada.
Más específicamente, se genera salida uno cuando llega un:
uno en secuencias de uno o más ceros seguidos 01, 001, 0001, 00001, ....
cero en secuencias de uno o más unos seguidos 10, 110, 1110, 11110, ....
b) Se tiene
x
Estado 0 1
A B/0 C/0
B B/0 A/1
C A/1 C/0
Estado+
Existen dos asignaciones posibles, que cumplen todas las reglas, excepto que B y C sean
adyacentes:
Asig 1 x Asig 2 x
Q1Q0 0 1 Q1Q0 0 1
A=00 01/0 10/0 A=00 10/0 01/0
B=01 01/0 00/1 C=01 00/1 01/0
11 dd/d dd/d 11 dd/d dd/d
C=10 00/1 10/0 B=10 10/0 00/1
Q1+Q0+/z Q1+Q0+/z
Q1+ = x Q0’; Q0+ = x’Q1’ Q1+ = x’ Q0’ ; Q0+ = xQ1’
z = x’ Q1 + x Q0 z = x’Q0 +x Q1
Se obtiene:
x
Q1
D1
Q1’
Q0
D0
Q0’
Problema 13.3.
Contador binario
Diseñar un contador binario con salidas sincrónicas, que cuente en forma ascendente si
C = 1; y en forma descendente si C = 0. Si M = 0 debe contar en módulo 5; si M = 1, debe
contar en módulo 7.
Si se cambian los controles, debe ir a la cuenta siguiente, en caso que ésta exista; si la cuenta no
existe debe ir a la cuenta 0.
Solución:
a)
111 1 , 00
000 1
0, 11 001
0
01 01 1
00 0
10
110 010
10
01
0 1
11
101 0 0 011
11 100
1
Q2Q1Q0
CM
CM
Q2Q1Q0 00 01 11 10
000 100 110 001 001
001 000 000 010 010
011 010 010 100 100
010 001 001 011 011
110 000 101 000 000
111 000 110 000 000
101 100 100 110 000
100 011 011 101 000
Q2+Q1+Q0+
c)
Q2Q1
Q0 00 01 11 10
0 2 6 4 Q2+ = Q2Q1’ +Q2’Q1Q0 = J2Q2’+K2’Q2
0 001 011 000 101
Q1+ = Q1’Q0 +Q2’Q1Q0’ = J1Q1’+K1’Q1
1 3 7 5
010 100 000 110 Q0+ = Q2’Q0’+Q1’Q0’ = J0Q0’+K0’Q0
1
J2 = Q1Q0 K2 = Q1
J1 = Q0 K1 = Q2 + Q0
J0 = Q2’ + Q1’ K0 = 1
Estando L en cero, sólo pasa a uno cuando llega a la cuenta 3; estando en estado uno el latch
pasa a cero cuando entra a la cuenta cero. Se tiene entonces la matriz de transiciones siguiente:
Q2Q1Q0
L 000 001 011 010 110 111 101 100
0 0 0 1 0 0 0 0 0
1 0 1 1 1 1 1 1 1
L+
Q2’ S’ L
Q1
Q0
Q2’ R’
Q1’
Q0’
Problema 13.4.
x
T Q1 D Q0
Flip-flop T Flip-flop D
clk
clk
t=0
Solución:
Del esquemático, se tienen:
T = X +Q0 ; D = Q1 ; Z = X + Q1
Ecuaciones de los flip-flops: Q1+ = T Q1 ; Q0+ = D
Reemplazando en las ecuaciones de los flip-flops, se obtienen:
Es un modelo de Meely.
Como los flip-flops operan con cantos de subida, se tiene la siguiente secuencia de entrada:
X = {0, 1, 0, 0, 1, 0 ..}
Se genera la secuencia de estados y salida:
Q1Q0/Z = 00/0, 10/1, 11/1, 01/1, 10/1, 11/1..}
x
Q1Q0 0 1
00 00/0 10/1
01 10/0 10/1
11 01/1 01/1
10 11/1 01/1
Q1+ Q0+/Z
Las formas de ondas de Q1 y Q0 muestran los retardos de propagación a través de los flip-flops.
El cual se considera despreciable respecto del período del reloj.
La forma de Z, ilustra la dependencia de la salida con la entrada, y también asume que el retardo
a través de la compuerta or, es despreciable respecto del período del reloj. Debe notarse que Z
cambia entre cantos de subida del reloj; es decir, no es una señal sincrónica, lo cual es
característico del modelo de Meely.
clk
t=0
Q1
Q0
Solución.
Matriz de transiciones:
Q2Q1
Q0C 00 01 11 10
0 4 12 8
00 001 011 111 101
1 5 13 9
01 001 110 111 000
3 7 15 11
11 011 010 101 100
2 6 14 10
10 010 100 000 110
Para D1:
Q1+ = Q1Q0'+Q2'Q0C+Q1'Q0C' =D1
Índice general.
CAPÍTULO 13 ............................................................................................................................................1
BLOQUES BÁSICOS SECUENCIALES.................................................................................................1
13.1. CONTADORES. ..................................................................................................................................1
13.1.1. Contador sincrónico binario módulo 4. ...................................................................................1
13.1.2. Contador sincrónico binario módulo 8. ...................................................................................3
13.1.3. Contador sincrónico binario módulo 16. .................................................................................5
13.1.4. Contador binario de ripple, con salida asincrónica. ...............................................................7
13.1.5. Contador de anillo (ring counter). ...........................................................................................8
13.1.6. Contador de Johnson. ..............................................................................................................9
13.1.7. Contador integrado 74163. ....................................................................................................10
13.1.8. Contador sincrónico binario módulo 32. ...............................................................................12
13.1.9. Contador sincrónico módulo 7. ..............................................................................................12
13.1.10. Contador sincrónico módulo 6. ............................................................................................13
13.2. REGISTROS DE DESPLAZAMIENTO. ..................................................................................................13
13.2.1 Usos. .......................................................................................................................................14
13.2.2. Ejemplo de diseño. .................................................................................................................14
13.2.3. Registro de desplazamiento a la derecha de largo 4. ............................................................15
13.2.4. Registros de desplazamiento TTL ..........................................................................................15
13.2.5. Registro universal 74194A. ...................................................................................................16
13.3. REGISTROS. ....................................................................................................................................18
13.3.1. Registro de almacenamiento. .................................................................................................18
13.3.2. Registro de desplazamiento....................................................................................................19
13.3.3. Diseño de máquinas en base a registros ................................................................................19
13.4. ALTERNATIVAS DE DISEÑO DE MÁQUINAS SECUENCIALES. ...........................................................19
13.4.1. Diseño basado en ROM. ........................................................................................................19
13.4.2. Diseño basado en PLD...........................................................................................................20
13.4.3. Secuenciador. .........................................................................................................................20
Ejemplo 13.1. .....................................................................................................................................20
13.5. DISEÑO DE CONTROLADORES. ........................................................................................................23
Especificación del dispositivo. ...........................................................................................................23
Especificación del sistema sincrónico................................................................................................24
Diseño del controlador. .....................................................................................................................25
Descripción del controlador en Verilog.............................................................................................28
Simulación del controlador. ...............................................................................................................29
PROBLEMAS RESUELTOS. ........................................................................................................................32
Problema 13.1. Contador...................................................................................................................32
Problema 13.2. ...................................................................................................................................35
Problema 13.3. ...................................................................................................................................37
Problema 13.4. ...................................................................................................................................40
Problema 13.5. ...................................................................................................................................43
ÍNDICE GENERAL. ....................................................................................................................................44
ÍNDICE DE FIGURAS .................................................................................................................................45
Índice de figuras
Capítulo 14
Se estudiarán algunos circuitos asincrónicos simples que son la base para construir los
diferentes tipos de flip-flops; mostrando las técnicas para lograr la sincronización mediante una
señal de reloj. Luego se analizan los multivibradores aestable y monoestable.
Se analizan en mayor profundidad las carreras y la forma de evitarlas; para finalmente ilustrar
las técnicas de diseño asincrónico basadas en diagramas de flujo y de estado.
Puede almacenarse un nivel lógico como carga en un condensador. El transistor nmos permite
cargar y descargar el condensador, el esquema tiene la ventaja de usar un solo transistor, pero
debido a las fugas (por no ser el dieléctrico ideal) se requiere refrescar la carga cada cierto
tiempo. Es la configuración que se emplea como base de las memorias dinámicas (DRAM).
Vin
C
Vref
VDD
Vin
Otra forma de analizar los inversores realimentados puede lograrse dibujando las características
de transferencia de cada transistor, en un solo par de ejes coordenados.
Vin2 Vout1
Vout2
Vin1
La probabilidad de que en una transición se llegue exactamente al estado inestable es muy baja.
14.1.1. Metaestabilidad.
Vout
V
Vout Vin Vin
R
A C
t
Con Vin(0) diferente de cero. T
lineal
Cuya solución es: Vin(t) = Vin(0) e t/ con = RC/(A-1). Además, en general Vout será mayor
que Vin, debido a la amplificación. Por esta razón si el voltaje de entrada aumenta, también lo
hará el de salida y se tendrá que después de un tiempo la tensión de salida satura al
amplificador.
A pesar que el circuito tiene realimentación positiva podría suceder que una determinada
conmutación no se produzca en un tiempo predeterminado. Para estudiar esto suponemos un
modelo simplificado lineal, antes que se sature el amplificador. En ese caso, tendremos:
Vin(T) = Vin(0) e T/
Vout(T) = A Vin(0) e T/ = V es decir, la salida se satura en T = ln( V/( AVin(0) ).
Con Vin(0) < V e -T/ /A, la salida Vout se saturará en un tiempo mayor que T. Entonces la
probabilidad de no llegar a un estado estable en un tiempo T, es el cuociente entre las
Se asume que Vin(0) tiene una distribución de probabilidad uniforme entre 0 y V. Puede
imaginarse un gran número de experimentos, algunos de ellos comenzarán con un valor menor
del voltaje inicial que el calculado antes y tomará un tiempo mayor que T para que la salida se
sature en un valor estable, esto se considera un ensayo fallido; los experimentos que comienzan
con un valor mayor se consideran exitosos.
Por otra parte, en un determinado intervalo las conmutaciones se producen en una fracción del
tiempo; esto contempla que no todo el tiempo se están efectuando transiciones. Sea f la fracción
del período del reloj durante la cual el voltaje de entrada esté sufriendo una transición. f se
expresa como el cuociente de lo que dura una transición, dividido por el intervalo entre
transiciones, y es la probabilidad que el voltaje de entrada esté efectuando una transición.
Entonces la probabilidad que en una transición, no se llegue a estado estable en un tiempo T,
queda dada por: p(transición no estable en T) = f e -T/ /A
Con los siguientes valores: A = 10 (una ganancia razonable), con una constante de tiempo de 1
nseg, con f = 0,1; y una frecuencia de cambios de 100MHz puede calcularse el valor de T para
cumplir con cierta probabilidad.
Si asumimos un caso en un año, en que no se alcance el estado estable en T, podremos calcular
el tiempo T. Se asume 100*106 cambios por segundo (sólo cantos de subida o de bajada), en
un año se tendrán: 365*24*60*60 segundos, y por lo tanto:
p = 1/ (3,15 *1015) resulta T = 31 ns.
Con una frecuencia de 100 MHz, y esperando 100 ns, se puede calcular que habrá un caso en
que no se llegue a estabilidad en 1030 años. Puede concluirse que con "buena" probabilidad no
se entra al estado inestable.
14.1.2. Latchs.
Entonces tenemos que dos inversores forman una celda de memoria estática, lo que resta es un
método para almacenar valores lógicos en la celda:
El siguiente esquema ilustra la forma de hacer llegar valores y guardarlos en una celda estática.
cargar
dato valor almacenado
grabar
Figura 14.5 Lectura y escritura.
Existen dos circuitos que cumplen los requerimientos anteriores, y se denominan latch (cerrojo,
picaporte, pasador); uno en base a NAND , el otro en base a NOR. La denominación de las
entradas se explicará más adelante.
S' R
Q Q
Q' Q'
R' S
Los siguientes diagramas muestran valores estables almacenados en las celdas estáticas de 1 bit,
o latchs.
1 1 1 0 0 0
1 0
0 1 1 0 0 1
1 0
14.2.1. Esquemático.
Qn
Se emplea el nombre latch para referirse a una memoria de un bit, y cuando no existe una señal
de reloj. En éstos, las salidas cambian cuando las entradas cambian. En flip-flops las salidas
cambian respecto al reloj.
Apenas ocurran cambios en las entradas de las compuertas (R', S', q y qn) se producirán
simultáneamente los cambios en las salidas Q o Qn, ya que se asume que estas compuertas no
tienen retardo.
El próximo valor que toma q, después de S, será el valor de Q. Dicho de otra forma: el valor
presente de Q será el próximo valor que tome q. Análogamente para Qn.
Analíticamente: Gráficamente:
Q(t)
Q(t) = q(t + S)
Qn(t) = qn(t + R) to t
q(t)
Denominaremos:
estado presente al conjunto: {q, qn}
estado próximo al conjunto: {Q, Qn}
Salida al estado presente (máquina de Moore).
Debido a que, como se verá, los eventos que inician los cambios están asociados a los cantos de
bajada de las señales de entrada, se las denomina S´ y R´, siguiendo el convenio general para
identificar a señales de lógica negativa.
En el esquema general de máquina secuencial:
x FPE FS
Y y z
Se destaca que los retardos pueden considerarse como una memoria de corto plazo.
Memorizan el valor anterior de una entrada al bloque de retardo, durante segundos.
14.2.3. Ecuaciones.
En el caso del latch de nand, se tienen las siguientes ecuaciones asociadas a la red
combinacional ideal:
Q = (S' qn)' = S''+qn' = S + qn'
3 7 15 11
11 11 10 00 01
2 6 14 10
10 11 10 10 11
Q, Qn
Figura 14.11 Matriz de transiciones del latch de NAND.
Si las entradas no cambian, se está en una de las columnas. Un cambio de una de las entradas
implica un cambio de columna. En una determinada columna, si el próximo estado es igual al
estado presente, se dice que ese estado es estable. En caso contrario, se produce una transición
o cambio de estado.
Si dos o más variables de estado deben cambiar, se dice que se produce una “carrera”.
Si la carrera origina diferentes transiciones (dependiendo de qué entrada cambia primero), pero
finalmente se llega a un mismo estado estable, la carrera se denomina no crítica. Si se llega a
estados estables diferentes es una carrera crítica.
01 00,10 00,01
10
11
00
11,10,01,00
11
00
Con la condición S'+R'=1, el sistema sólo puede estar en uno de los dos estados estables, que
llamaremos set y reset. En este caso, y una vez terminadas las transiciones, se cumple que qn es
q'.
set = {q = 1, qn = 0}
reset = {q = 0, qn = 1}
Nos interesa estudiar secuencias de las entradas, que llevan de un estado estable al otro. Y que
no se ocupe el estado estable 11, ya que en este caso qn no es la negación lógica de q.
a) Transición set a reset
S'R' S' t
q qn 00 01 11 10
0 4 12 8
00 11 11 11 11 R' t
1 5 13 9
01 11 11 01 01 Q
t
3 7 15 11
11 11 10 00 01 Qn t
S
2 6 14 10 q
10 11 10 10 11 t
qn
R t
Q, Qn
R S
set | | reset
.
Figura 14.13 De set a reset.
Estando en reset, un canto de subida en R', no produce cambios. Tampoco se producen cambios
de estado con pulsos en R'. Sólo responde al primer canto de bajada en R', estando en set.
b) Transición de reset a set
Estado inicial: q=0, qn=1. Entradas en S' = 1, R' = 1. Se analiza cuando ocurre un canto de
bajada en S'.
R'
S'R' t
q qn 00 01 11 10
0 4 12 8 S'
00 11 11 11 11 t
1 5 13 9
01 11 11 01 Qn
01 t
3 7 15 11 Q
11 11 10 00 01 t
S
2 6 14 10 qn
t
10 11 10 10 11 R
q
t
Q, Qn
S R
reset | | set
Figura 14.14 De set a reset.
R'
mayor que S
R'
mayor que R
R'
Si se excitan ambas variables de estado a la vez, dependiendo de los retardos de las compuertas
puede que una u otra cambie primero, (pero no se queda en un estado estable) ya que
inevitablemente se producirá el cambio de la más lenta. En cualquier caso se llega a un estado
inestable en que ambas variables de estado vuelven a excitarse, generando una oscilación.
En los casos c1 y c2 (con tiempo entre cantos de subida menores que los retardos) también se
producen problemas; ya que las entradas cambian durante las transiciones internas. Para evitar
esta incertidumbre, se suele evitar el estado 11. Esto se logra con la condición S'+R'=1. (Es
decir, que ambas entradas no estén simultáneamente en cero). Además, en estas circunstancias
(caso c), el latch cambia con cantos de subida.
Normalmente se ocupan 8 de los 16 casilleros de la matriz de transición. Las transiciones de set
a reset y viceversa que se analizaron antes.
S'R'
q qn 00 01 11 10
0 4 12 8
00
1 5 13 9
01 11 01 01
3 7 15 11
11 10 01
2 6 14 10
10 10 10 11
Q, Qn
Figura 14.18. Matriz de transiciones en modo confiable.
Nótese que esta expresión puede obtenerse a partir de: Q = S + qn’ y Qn = R + q’ deducidas
anteriormente, si se hace Qn = qn, y se eliminan estas variables.
Si está en reset: permanece en reset si ocurren pulsos en R'; pasa a set con canto de bajada de S'.
Si está en set: permanece en set si ocurren pulsos en S'; pasa a reset con canto de bajada de R'.
b a >
Q' R'
b >
R’
Q = S+ R
Normalmente S' y R' están en uno lógico, un pulso de corta duración en una de las entradas
produce el correspondiente cambio de estado. La duración del pulso debe ser mayor que el
retardo de ambas compuertas. El evento que inicia la conmutación es el canto de bajada.
Ambas entradas no pueden ser ceros.
Puede inferirse el funcionamiento del latch de NAND, mediante un análisis simplificado, éste
consiste en asumir una sola variable de estado:
R' S'
Q
S
R
q
1 2 7 5
1 1 1 1 0
Q+
Figura 14.23. Matriz de transiciones con un solo retardo.
11,01,00
11/10
0 00,01 1
10
Figura 14.24. Diagrama de estados simplificado.
Sin embargo esta simplificación no muestra los problemas del estado 11, y los riesgos de
oscilación al tener ambas entradas bajas. Esto se debe a que el efecto de la carrera entre las
entradas no se puede observar con un modelo obtenido con sólo un retardo de propagación, en
el cual sólo puede observarse Q. Puede restringirse la columna 00, y colocar próximos estados
superfluos.
La simulación de estos circuitos, presenta problemas a los programas simuladores. Pero puede
emplearse el siguiente esquema:
V1
Init
S' Q
V2
1
Qn
V3 R'
1
Si se marca el cuadro de mostrar el estado de las líneas, se verán todas no iniciadas o en tercer
estado, esto en el simulador. Si se hiciera correr la simulación, mostraría una oscilación en el
estado.
Init
Qn
Q
R'
S'
1 2 3 4 5
Figura 14.26. Formas de ondas generadas en la simulación.
Un pulso en R, inicia el cambio de estado (2). La simulación muestra los retardos entre las
señales que conmutan. Posteriores pulsos en R, no modifican el estado. No importa la duración
de estos pulsos.
Un canto de bajada en S', inicia el cambio a set (3). Posteriores pulsos en S, no modifican el
estado. No importa la duración de estos pulsos (4).
Estando en set, un pulso angosto de reset (5), en el caso de la figura de un tic, que también es la
propagación de una compuerta, confunden al simulador y se inicia una oscilación. Sucede que
Init
Qn
Q
R'
S'
1 2 3
Figura 14.27. Oscilación en latch de NAND.
Una aplicación común del latch de NAND es eliminar los rebotes mecánicos que se producen
en un interruptor. El siguiente circuito ilustra el funcionamiento.
5V
S'
2.2k
1 Q
S1 5V
2.2k Qn
R'
1
Se colocan resistencias de pull-up para fijar un uno lógico en las entradas al aire. Se emplea un
interruptor de dos posiciones. Se denomina SPDT (polo simple, doble garganta), es decir existe
un punto común, por donde se ingresa la señal, y normalmente un contacto está cerrado
(obviamente el otro está abierto). Se marcan NO (normaly open) y NC (normaly closed).
Este elimina rebotes requiere un interruptor de tres terminales, que suele denominarse SPDT.
Existen otros diseños, basados en interruptores de dos terminales (SPST simple polo, simple
throat), que pueden conectar o desconectar dos puntos.
El esquema siguiente ilustra cómo se agrega un reloj a un latch SR, en base a NAND.
Mientras enable esté bajo, las señales S' y R' estarán en uno, por lo que cumplen las condiciones
para funcionamiento normal del latch.
Se ilustran señales de preset' y clear', de lógica negativa, que permiten dejar en un estado inicial
al latch. Su operación sobrepasa a las excitaciones S' y R', en este sentido se dicen que son
asincrónicas con ellas, apenas ocurra un canto de bajada en estas señales, el latch permanecerá
en un estado determinado hasta liberar el control asincrónico, llevándolo a uno. Al igual que con
las señales R’ y S’, debe evitarse mantener preset’ y clear’ en cero al mismo tiempo.
preset'
Set
S'
Q
enable
Q'
R'
clear'
Reset
También puede pensarse que enable es una señal de reloj, que sincroniza al latch. En esta
situación, las entradas Set y Reset deben ser estables antes de un canto de subida del reloj. En el
canto de subida se inspeccionan las entradas y después de un tiempo de propagación, ocurre el
canto de bajada en S' o R'. Lo cual implica que para funcionamiento determinístico, no pueden
estar altas ambas entradas externas. Si se cumplen estas condiciones, sólo podrá existir un canto
de bajada en S' o R', garantizando la operación del latch SR.
clk
Set
S'
14.4.1. Esquemático.
q
Qn
S
Denominaremos:
estado presente al conjunto: {q, qn}
estado próximo al conjunto: {Q, Qn}
Salida al estado presente (máquina de Moore).
14.4.3. Ecuaciones.
Qn = (S + q )' = S'q'
SR
q qn 00 01 11 10
0 4 12 8
00 11 01 00 10
1 5 13 9
01 01 01 00 00
3 7 15 11
11 00 00 00 00
2 6 14 10
10 10 00 00 10
Q, Qn
Figura 14.32. Matriz de transiciones latch de nor.
En el diagrama se aprecian tres estados estables. Si el objetivo es usar el circuito para emplearlo
como elemento de memoria, y por lo tanto que q y qn sean el complemento la una de la otra, no
deberá usarse el estado estable 00; para lo cual basta restringir que ambas entradas puedan ser
uno simultáneamente.
00,01
00/10
10 01
10 11,01 11,10
01
00
11
11,10,01,00
00
11
Con la condición SR=0, el sistema sólo puede estar en uno de dos estados estables, que
llamaremos set y reset. En este caso, y una vez terminadas las transiciones, se cumple que qn es
q'.
set = {q = 1, qn = 0}
reset = {q = 0, qn = 1}
Nos interesa estudiar secuencias de las entradas, que llevan de un estado estable al otro. Y que
no se ocupe el estado estable 00, ya que en este caso qn no es la negación lógica de q.
La figura ilustra algunas secuencias:
S
R
Q'
Q
1 4 5
2 3
Estando en estado 00, un cambio simultáneo de las entradas a cero, produce una oscilación (4),
la cual se detiene al llevar el latch a reset. Finalmente en (5) se coloca en modo normal.
El diagrama de transiciones, marcando como superfluas los estados por los cuales nunca se
pasará, si se cumplen las restricciones para operación normal, se indica a continuación:
SR
q qn 00 01 11 10
0 4 12 8
00 01 10
1 5 13 9
01 01 01 00
3 7 15 11
11
2 6 14 10
10 10 00 10
Q, Qn
Formando grupos: (8, 10, 12, 14) y (2, 3, 10, 11), se logra:
Q+ = Sqn' + R' q
El mintérmino 8, que cubre la expresión que contiene qn', ocurre sólo durante la transición. En
estado estacionario se tiene qn = 0, por lo tanto, la ecuación característica puede plantearse
según:
S R Q(k+1)
0 0 Q(k)
1 0 1
0 1 0
1 1 ?
Figura 14.36. Tabla característica, latch de NOR.
Con SR = 0
No cambia estado con entradas bajas. Pasa a set con canto de subida en S.
Pasa a reset con canto de subida en R. Entradas altas causan indeterminación.
Q(k) Q(k+1) S R
0 0 0
0 1 1 0
1 0 0 1
1 1 0
Si está en reset: permanece en reset si ocurren pulsos en R, pasa a set con canto de subida de S.
Si está en set: permanece en set si ocurren pulsos en S; pasa a reset con canto de subida de R.
Normalmente S y R están en cero lógico, un pulso de corta duración en una de las entradas
produce el correspondiente cambio de estado. La duración del pulso debe ser mayor que el
retardo de ambas compuertas. Ambas entradas no pueden estar altas. El evento que inicia la
conmutación es el canto de subida. Este latch recuerda la última entrada que tuvo un canto de
subida.
Puede inferirse el funcionamiento del latch de NOR, mediante un análisis simplificado, éste
consiste en asumir una sola variable de estado:
R S Q
0.33k
S1 S Q'
0.33k
La señal G (por gate) habilita la entrada de cantos de subida hacia el latch de nor, y garantiza el
funcionamiento normal de éste. La entrada D se copia hacia la salida Q cuando G, que actúa
como reloj, está en nivel alto. Cuando G está en nivel cero, el latch mantiene el estado
almacenado. Se dice también que es un latch sensible al nivel.
R Q
G
D
Q'
S
Q(k) Q(k+1) S R
0 0 0
0 1 1 0
1 0 0 1
1 1 0
K R
Q
J Q'
S
J
K
S
R
Q
Q'
1 2 3 4
El latch de nor inicialmente está en set. En (1) llega un canto de subida en K, el cual origina un
canto de subida en el control interno del latch de NOR, llevando a uno la excitación R; lo cual
hace cambiar a Q y luego a Q'. El cambio de Q también origina un canto de bajada en R, lo cual
deja en condiciones normales al latch de NOR.
En (2) se aprecia una orden de set, en J. Lo cual lleva a excitar S, que inicia la conmutación del
latch interno; y el cambio de Q' lleva a cero a S, dejando en condiciones predecibles al latch.
En el instante (3) se inicia el modo toggle, que se detiene al llevar a modo hold al JK, en (4)
En el modo toggle, con J y K iguales a uno, se puede dejar pasar sólo una de las entradas hacia
el latch. Esto puede lograrse dejando pasar K si Q=1, ya que esto implica resetear el flip-flop.
Y dejar "pasar" J si Q=0.
K R
Q
K
R
clk
Q'
J S
J S
Este diseño tiene restricciones del ancho de pulso del reloj. Como puede comprobarse esta
restricción se produce en el modo toggle; es decir con J y K iguales a uno. Para el análisis se
asume que el flip-flop está en modo reset.
Cuando el reloj sube, habilita la excitación S, después de J. A su vez este cambio desencadena
la conmutación del latch, bajando Q' después de S, y luego subiendo Q después de R. Al
mismo tiempo que se levanta Q, se inicia la propagación, a través de la compuerta habilitada por
K y el reloj de un canto de subida en R, lo cual ocurre después de K. Si se llega a producir la
excitación R, el latch volverá a conmutar; salvo que el reloj sea angosto y baje antes que Q suba.
Es decir ancho del pulso del reloj debe ser menor que : S + J+ R
Q'
J
S R K
Figura 14.46. Formas de ondas conmutación JK.
En estos flip-flops, pueden cambiarse las entradas y salidas en el mismo pulso del reloj.
El pulso angosto del reloj se obtiene mediante redes de disparo; que básicamente derivan un
pulso de entrada. En estos circuitos, se requiere buena pendiente del reloj (no un pulso angosto),
para operación correcta.
Diseños de este tipo se encuentran en el chip 7470.
También puede explicarse el funcionamiento de los disparados por canto mediante un circuito
que genera un reloj muy angosto, que se produce asociado a un canto. El ancho del reloj
generado debe ser de menor ancho que S+ J+ R; si esto es así, cuando ya haya pasado por
estado 00 el reloj comenzará a estar en bajo, y no se activará R.
Con fines didácticos se muestra cómo puede lograrse un reloj angosto con una perturbación:
clk
cp
Generador
1
1
clk
cp
Figura 14.48. Formas de ondas.
Una variante de la idea anterior, es generar un pulso angosto asociado al canto de bajada del
reloj, luego de producirse el evento: canto de subida en J.
En este caso, con J=1, S’=clk + clk’, con clk’ atrasada respecto de clk; se produce perturbación a
la salida del OR, en el canto de bajada del reloj.
J J
S’
clk
J
J
clk
J
J’+clk’
S’
De este modo pueden generarse pulsos adecuados para el latch de nand, que registra los
cambios.
J S’ Q’
J
S
clk
Q
K R
K
R’
Los flip-flops JK suelen tener entradas asincrónicas de set y reset, que sobrepasan las entradas
sincrónicas. De esta forma la ecuación característica para un JK:
init
J Rmt Rsl
r v Q
Ssl Q'
K Smt
r v
clk clk'
Se ilustra la señal init, que inicia los latch, para la simulación, puede considerarse como una
señal asincrónica de preset.
1 3 4 5
2
a
En (4) se ingresa a modo hold, donde se advierte que no cambia el latch maestro, y que en el
latch esclavo se generan pulsos de set, que no cambian las salidas.
Desde (5) se inicia modo toggle. Donde se aprecian las secuencias de set, reset, set y reset del
maestro y las correlativas reset, set, reset, y set en el esclavo.
Los flip-flops de tipo maestro esclavo tienen asociado un pequeño pulso en la señal clock en la
tabla de funcionamiento. Algunos ejemplos: 7471, 7472, 7473, 7476.
Puede comprobarse que si una señal de entrada está alta durante el reloj será interpretada como
uno en la salida, cuando los latch son en base a NOR. (se denomina captura de unos). Estos
flip-flops no pueden ser alimentados con salidas que tengan perturbaciones de cero. Lo dual
ocurre para latch en base a NAND, en que se capturan ceros.
J
K
clk
Smtr
Rmt
r
clk'
Sslv
Rslv
Q
Q'
2
1
En (1), estando el reloj alto y en modo set, se captura un uno en la entrada K. Esto podría ser
una perturbación en cero de dicha entrada. Esto ocasiona la conmutación del flip-flop master-
slave.
Nótese que el latch maestro puede estar en cero o en uno, por esta razón en cada canto de subida
de clk' se origina un cambio de estado del latch esclavo.
En (2) se aprecia una captura de un uno en la entrada J, estando en reset la perturbación que
viene en la entrada J hace conmutar al flip-flop.
Para un correcto uso de este tipo de flip-flops las entradas no deben tener perturbaciones en
cero, si son en base a latch de NOR, y en uno si los latchs son de NAND. Los flip-flops
maestro-esclavo no tienen requerimiento de pulsos angostos, ni de pendiente del reloj.
Los flip-flops disparados por cantos no tienen la dificultad de los anteriores, pero requieren que
el tiempo de levantamiento (en los disparados por cantos de subida) o el de bajada (en los
disparados por canto de bajada) cumpla cierta pendiente mínima; en caso contrario la derivada
no genera un pulso de suficiente magnitud para comandar los cambios internos.
Tiene la ventaja de no capturar unos o ceros. Ver: Paul Horowitz. “The Art of Electronics”.
1989.
init
D
Rmt Rsl
r v Q
Ssl Q'
Smt
r v
clk clk'
El siguiente circuito implementa un flip-flop sincrónico tipo D en base a tres latch de NAND.
Este diagrama es la descripción lógica del 7474, su diseño interno es en base a redes de disparo.
preset’ Dset
t
1
S Q
clear’
1
1
QN
clk
R
1
1
Dclr
D
1
Se tienen las siguientes formas de ondas que ilustran las conmutaciones internas:
preset
clea
clkr
D
Dset
Dcl
Sr
R
Q
QN
1 2 7
3 4 5 6
S
Q
1
1
clk Q
R N
1
1
Dclr
D
1
Se tienen las siguientes ecuaciones, considerando como variables de estado a las señales: s, r,
dset, dclr, que se producen después de un retardo, respecto de las salidas de las compuertas que
se asumen ideales:
S = (dset clk )' R = ( clk dclr s )'
Dset = ( dclr s )' Dclr = ( D r)'
clk D
s r dset dclr 00 01 11 10
0000 1111 1111 1111 1111
0001 1111 1111 1111 1111
0011 1111 1111 0111 0111
0010 1111 1111 0111 0111
0110 1111 1110 0110 0111
0111 1111 1110 0110 0111
0101 1111 1110 1110 1111
0100 1111 1110 1110 1111
1100 1111 1110 1110 1111
1101 1101 1100 1000 1001
1111 1101 1100 0000 0001
1110 1111 1110 0110 0111
1010 1111 1111 0111 0111
1011 1101 1101 0001 0001
1001 1101 1101 1001 1001
1000 1111 1111 1111 1111
S, R, Dset, Dclr
Cuando el reloj está bajo, las órdenes S y R al latch de salida están en 1, y por lo tanto éste está
en hold.
Con el reloj en bajo, existen dos estados estables, uno asociado a la entrada D=0 y el otro a
D=1. Lo cual establece los valores de los latchs de entrada; si la entrada D está en 0, se tienen
Dset=0 y Dclr=1. Con D=1 se tienen Dset= 1 y Dclr=0.
Si con el reloj bajo, cambia la entrada D, se cambia del estado 1101 al 1110 y viceversa. El
cambio de estado dura dos tiempos de propagación.
Estando el reloj alto, D puede cambiar, esto no afecta al valor ya registrado, ya que no se
activan ni S ni R. En caso que D cambie de 0 a 1, habiendo grabado previamente un cero,
permanece en estado 1001. Si se hubiera grabado en la salida un uno, se cambia de 0110 a 0111,
activando un cambio en Dclr.
Luego de los posibles cambios anteriores, el reloj debe volver a cero, lo cual reestablece
valores normales, en uno lógico, para R y S. Quedando en estado 1101 ó 1110 según sea el
valor de D.
D
1 Q D Q
0
G
Cuando G está alto: Q sigue a D, en forma transparente; en caso contrario, Q permanece estable.
El circuito se denomina Latch D estático, ya que mantiene el dato en Q, mientras G esté
inactivo, no importando cuánto tiempo permanezca bajo (siempre y cuando las fuentes
permanezcan aplicadas).
Cuando D está alto (y después de un tiempo, Q también estará alto), al ocurrir un canto de
bajada en G, se produce una perturbación (un falso cero) en Q. Esto debido a que las señales R y
S conmutan en tiempos diferentes. Esta perturbación puede afectar a los circuitos conectados a
la salida del latch.
Sin embargo existen dos dificultades importantes, una de ellas es si el ancho del pulso G es
demasiado angosto, esto implicaría que el latch no alcanzaría a setearse. Otra dificultad, y más
importante, es si D cambia casi al mismo tiempo que el latch (candado) se cierra, con el canto
de bajada de G. En este caso no puede determinarse cual será el valor que será capturado.
El siguiente análisis permite determinar el tipo de transiciones cuando se cambian las entradas.
Para esto se plantean las ecuaciones a las salidas de las compuertas:
Luego se representan las ecuaciones en una tabla de transiciones. Después se procede a estudiar,
a partir de un estado estable, las transiciones que se producen cuando cambia una sola de las
entradas.
a) Al llegar un canto de bajada en G se produce una carrera entre p y s, lo cual origina una
oscilación en q y en r, o dependiendo de los retardos podría estabilizarse en uno de los dos
estados estables de la columna. Esta transición es conflictiva.
Con GD=10, con un canto de subida en D, se producen las transiciones: 0001, 0101. Si se
produce canto de bajada en G, se pasa por 1000, y queda estable.
Con GD=00, al cambiar las entradas a 01 ó 10, se producen transiciones a estados estables.
Con GD=01, al cambiar entradas a 00 permanece en estado estable; al cambiar a 11, se
presentan carreras en p y s; pero no es una carrera crítica, y finalmente se llega al estable 0101.
pqrs GD
00 01 11 10
0000 1000 1000 0001 0000
0001 1100 1100 0101 0100
0011 1100 1100 0101 0100
0010 1100 1100 0101 0100
0110 1100 1100 0101 0100
0111 1100 1100 0101 0100
0101 1100 1100 0101 0100
0100 1000 1000 0001 0000
1100 1010 1010 0011 0010
1101 1110 1110 0111 0110
1111 1110 1110 0111 0110
1110 1110 1110 0111 0110
1010 1100 1100 0101 0100
1011 1100 1100 0101 0100
1001 1100 1100 0101 0100
1000 1000 1000 0001 0000
PQRS
Por estas razones, el diseño de dispositivos secuenciales debe garantizar que las entradas sean
válidas y estables durante los períodos en que éstas pueden influir sobre el cambio de estado.
Para el circuito analizado, estas restricciones son:
ancho pulso
G
set-up hold
Figura 14.59. Restricciones temporales.
La señal G debe permanecer activa por el tiempo que sea suficiente para que el latch pueda
capturar el dato. Esto requiere un ancho mínimo para el pulso G.
El tiempo de set-up debe garantizar que el valor de D se haya propagado a través del lazo de
realimentación antes de que se cierre el latch.
El tiempo de hold debe garantizar que el latch esté cerrado y Q estable antes de permitir
cambios en la entrada D.
pqrs GD
00 01 11 10
0000 1000 1000 1001 0000
0001 1100 1100 1101 0100
0011 1100 1100 1101 0100
0010 1100 1100 1101 0100
0110 1100 1100 1101 0100
0111 1100 1100 1101 0100
0101 1100 1100 1101 0100
0100 1000 1000 1001 0000
1100 1010 1010 1011 0010
1101 1110 1110 1111 0110
1111 1110 1110 1111 0110
1110 1110 1110 1111 0110
1010 1100 1100 1101 0100
1011 1100 1100 1101 0100
1001 1100 1100 1101 0100
1000 1000 1000 1001 0000
PQRS
Se producen carreras con GD=11 al pasar las entradas a 10, pero no es crítica. También estando
con GD=10, al cambiar las entradas a 11 se produce una carrera no crítica.
Enable
Enable
D
S
R
Q
QN
1 2 3 4 5
transparente
Figura 14.61. Formas de ondas latch figura 19.60.
Registros en base a flip-flops disparados por cantos (por ejemplo: 74LS374) cambian sus salidas
con el canto del reloj, y no anticipan como el latch que se acaba de explicar.
El ancho mínimo del pulso Enable debe ser mayor que S + R. Esto para esperar que hayan
terminado las transiciones de estados internos.
La Figura 14.61a, muestra un latch activado por cantos de bajada del control G.
D
0 Q D Q
1
G
G
Figura 14.61a. Latch transparente negativo.
La Figura 14.61b, muestra un flip-flop de tipo maestro esclavo, implementado con un par de
latchs. El canto de subida del primer latch, deja pasar o muestrea la entrada. Con el canto de
subida del reloj, se toma una muestra de la salida del primer latch (el maestro) que se encuentra
estable, y se la copia al esclavo; capturándola en el canto de bajada, en el segundo latch.
D
0 Qm
1 Qs
1
0
clk clk
La señal Init se ha agregado para dejar en un estado inicial al multivibrador. Esto es importante
para simular en diseño. En un armado de laboratorio, al aplicar la polarización, se producirá una
oscilación naturalmente.
Init X Y Z
x y
Donde se aprecia un solo estado estable (101), con Init = 0. Si Init está en cero, después de
algún tiempo, no importando cual es el estado inicial, el sistema queda en estado 101.
Cuando llega un canto de subida en Init, se pasa a próximo estado 001 (sin carreras, ya que sólo
cambia una variable de estado), debe ir a cero la variable x. Esto se produce después de x.
Habiéndose establecido el estado 001, debe efectuarse la transición a 011, nuevamente sin
carreras y después de y debe subir a uno la variable y. Y así sucesivamente hasta llegar al
estado 101, donde el ciclo de transiciones inestables vuelve a repetirse.
Init
Z
Y
X
Se muestra un período de la oscilación. En el ciclo ocurre tpHL y tpLH para cada compuerta. Si
las compuertas son iguales, el período resulta: T = 3 ( tpHL + tpLH) .
Similares comportamientos tienen un número impar de inversores, donde la salida del último es
la entrada del primero. En el caso de desear simular el circuito, es preciso colocar una señal de
Init, de tal modo de, después de algunos ticks, llevar todas las salidas a valores lógicos estables.
Este dispositivo permite generar un pulso de ancho programable. Se suele emplear para generar
temporizadores, que desencadenen eventos después de un tiempo dado.
Consisten en incorporar un retardo, generalmente mayor que el de propagación, pudiendo ser el
ancho del pulso generado del orden de los microsegundos. (ver circuito 74LS123).
R
Q
Q'
S
Con la señal R se inicia el multivibrador. La componente que genera el retardo, suele ser una red
RC, que se intercala después del inversor (y en forma externa al chip). Para fines de simulación
se agrandó el tiempo de propagación del inversor.
S
R
Q'
Q
1 2 Disparo 3 4
El tiempo que el multivibrador genera es la señal Q'. Este tiempo se muestra entre los
marcadores (3) y (4), el evento que dispara al multivibrador es el canto de subida de R.
Para operar correctamente debe reponerse a cero la señal R.
Algunos multivibradores son redisparables, esto implica que si existen pulsos en R, mientras se
está generando la banda de tiempo, que es propia del multivibrador (entre (3) y (4)), vuelve a
comenzar la medición del tiempo. Los no redisparables, imponen que hasta que Q' no haya
bajado, no tienen efectos los pulsos en R.
El análisis anterior está basado en usar los conceptos del latch. Sin embargo, puede efectuarse
un análisis asincrónico, como se verá a continuación.
Análisis:
Si se denomina Y a la salida del inversor; se tendrá una nueva variable de estado, se tendrán:
R
q qn y 0 1
000 111 011
001 101 001
010 011 011
011 001 001
100 100 000
101 100 000
110 000 000
111 000 000
Q+, Qn+, Y
Con estado inicial 100, y entrada R = 0. El canto de subida inicia la transición a 000 sin
carreras. Luego del retardo R pasa a estado inestable 000, el que inicia otra transición; esta
vez con carreras de las variables qn e y. En el caso del multivibrador, se asume Y mucho
mayor que S. Debido a esto llega primero al estado 010, el cual sostiene la transición de y que
aún está en curso; llegando finalmente después de Y (a partir del canto de bajada de q) al
estado, también inestable: 011.
Lo cual excita a la variable qn que baja a cero después de S. Lo cual lleva al estado estable
001. Finalizando el ciclo del monoestable.
La entrada es R, la salida es qn. En R se aplica un canto de subida, y se inicia una ventana de
tiempo, de largo Y, en qn.
El armado del multivibrador consiste en reponer la entrada R a cero, lo cual después de algunas
transiciones coloca a la máquina en estado 100. Y puede volver a emplearse el temporizador,
para ello, debe esperarse un tiempo algo mayor que Y.
El cambio de dos o más variables de estado se denomina carrera; los cambios dentro de una
columna de la tabla de transiciones se propagan por vías alternativas. Los cambios de dos o más
señales a través de redes combinacionales; dependiendo de la duración de los retardos de
propagación, ocasionan diferentes transiciones a través de estados inestables. Si finalmente se
llega a un mismo estado estable, se dice que la carrera no es crítica; en caso contrario se tiene
una carrera crítica, lo cual introduce incertidumbre. En algunos casos esto puede evitarse
efectuando una asignación binaria de los estados que esté libre de carreras; en otros pueden
agregarse estados intermedios que den confiabilidad al diseño.
Si una red asincrónica tiene múltiples entradas, pueden ocurrir carreras entre éstas. En estos
casos, para realizar el análisis, se requiere restringir los cambios de las entradas. No se aceptan
cambios de las entradas cuando están ocurriendo transiciones de estados, y además deben tener
una mínima separación temporal, de tal modo que se logre determinar con certeza los cambios
de estado.
d
a
x
c
b
Considerando un retardo individual para cada compuerta se tienen cuatro variables de estado.
a+ = d + b; b+ = x + c; c+ = ba’; d+ = xa’
A partir de las ecuaciones se desarrolla la tabla de transiciones, se marcan en ésta los estados
estables. Se tienen los estados estables: 0000 y 1100, uno en cada columna. Se observa que
estando en el estado estable 0000, al cambiar la entrada x a uno, se excitan cambios en b y d, lo
cual implica una carrera entre esas variables.
x
abcd 0 1
0000 0000 0101
0001 1000 1101
0010 0100 0101
0011 1100 1101
0100 1010 1111
0101 1010 1111
0110 1110 1111
0111 1110 1111
1000 0000 0100
1001 1000 1100
1010 0100 0100
1011 1100 1100
1100 1000 1100
1101 1000 1100
1110 1100 1100
1111 1100 1100
a+b+c+d+
En la Figura 14.69 se ha agregado la señal r que permite dejar en cero la señal c, y a su vez dejar
en cero la salida b, cuando x=0. De este modo, con x=0 y r=0 puede dejarse, al sistema en
estado 0000.
El siguiente módulo permite simular las transiciones. Se simula primero una propagación lenta
de la señal que genera b.
Con orden para el estado dado por (a, b, c, d) se tienen las siguientes transiciones: 0000, 0001,
1001, 1101, 1100, con los retardos asignados a cada compuerta, que se muestran en el módulo
anterior. En la simulación, luego del reset se tiene un tiempo hasta quedar en estado inicial
0000.
Con los retardos del módulo que se muestra a continuación, d se propaga más lento que b, se
tienen las siguientes transiciones: 0000, 0100, 1110, 1111, 1101, 1100.
or #2 G2 (a, d, b);
or #2 G4 (b, c, x);
and #5 G1 (d, x, ap); //d se propaga más lentamente
and #2 G3 (c, b, ap, r);
not #1 G5 (ap, a);
endmodule
En ambas situaciones se llega finalmente al estado estable: 1100, mostrando que la carrera no es
crítica.
Cuando se baja x a cero, se retorna al estado 0000, sin carreras. Se pasa de 1100 a 1000,
cambiando sólo b, y luego a 0000 cambiando a.
La siguiente matriz de transiciones ilustra una carrera crítica. Se tienen tres estados estables: 00
en la columna con x=0, y dos estados estables en la columna con x=1: 11 y 10. Se tienen las
ecuaciones: a+ = ax + bx; b+ = abx + a’b’x.
x
ab 0 1
00 00 01
01 00 10
11 00 11
10 00 10
a+b+
Cuando x es cero, se tiene el estado estable 00, no es necesaria ahora una señal de reset. Cuando
x pasa a 1, después del retardo de propagación de la señal b, se pasa al estado inestable 01, en
este estado inestable se excitan cambios simultáneos en a y b, generándose una carrera.
endmodule
Las carreras pueden evitarse con una adecuada asignación de estados. Si en la tabla de
transiciones de la Figura 14.73, se reemplazan los códigos binarios por símbolos se obtiene:
x
ab 0 1
A A B
B A D
C A C
D A D
a+b+
Luego de cada estado estable se marcan las transiciones en un diagrama de transiciones entre
estados, cuando se cambia sólo una de las entradas. Estando en estado estable A, con entrada
x=0, se cambia x a 1, desde A se pasa a B, y de B al estable D. Del estado estable C, cuando x
B C
B C
E
La tabla de transiciones agregando c, una variable de estado adicional, ya que ahora se tienen
más de 4 estados:
x
abc 0 1
A A B
B A D
C A C
D E D
E A -
a+b+c+
Asignando estados binarios de tal modo que estén a distancia uno: A con B; B con D; D con E;
A con E; y finalmente C con A, se obtiene:
x
abc 0 1
000 000 001
001 000 011
100 000 100
011 010 011
010 000 -
a+b+c+
Se desea diseñar un sistema asincrónico que produzca en las salidas, en forma alternada un
pulso de reloj.
f1
clk
Distribuidor
f2
clk
f1
f2
Se identifican los estados estables, como los intervalos en los cuales no se producen
transiciones. Se tienen cuatro estados, que se han identificado con las letras A, B, C y D.
clk
f1
f2
A B C D A
clk
Presente 0 1 f1f2
A A B 00
B C B 10
C C D 00
D A D 01
Próximo
Se describen las transiciones entre estados, mediante un diagrama de transiciones. Se anotan las
transiciones, desde un estado estable a otro, cuando se cambia una de las entradas. Los estados
entre los cuales existe una transición deben codificarse adyacentes, es decir a distancia uno. De
esta manera al producirse la transición sólo se excitará una variable de estado, y no se
producirán carreras.
A
B D
Código binario
Estado ab
A 00
B 10
C 11
D 01
clk
ab 0 1 f1f2
00 00 10 00
10 11 10 10
11 11 01 00
01 00 01 01
a+b+
Se diseñan las redes combinacionales libres de perturbaciones, para esto se cubren implicantes
adyacentes con términos de consenso.
q2q1
q0 00 01 11 10
0 A F E
1 B C D
x
q2q1q0 0 1
A 000 000 001 00
B 001 011 001 01
C 011 011 111 01
D 111 110 111 10
E 110 110 010 10
F 010 000 010 00
- 101
- 100
q2+q1+q0+ z1z0
Mediante un mapa del próximo estado, que se muestra en la Figura 14.91, se efectúa la
minimización considerando las condiciones superfluas y de tal modo que no se produzcan
perturbaciones.
xq2
q1q0 00 01 11 10
q2+q1+q0+
El término q2q0 en q2+, cubre los implicantes anteriores, cuando ocurre un evento en la
entrada. En la función para q1+, se emplea el término q1q0 para eliminar perturbaciones,
cubriendo implicantes adyacentes.
q0 00 01 11 10
0 00 00 10
1 01 01 10
z1z0
La asignación de estados se efectúa empleando código Gray, de tal modo que los estados
adyacentes en la Figura 14.93, estén a distancia 1. Se elige que el estado A esté asociado al
código 000; en el ejemplo, F queda con código binario 111, y debe pasar al estado A; esto
implica cambio de tres variables. Se emplean los estados inestables G y H para transitar sin
carreras desde estado F hasta el estado A.
H 1
00
G
00
1 1
1 A F 0
00 10
0 0
0 B E 1
00 10
1 1
1 C D 0
01 0 01
Se dejan dos estados próximos sin especificar: estando en G con entrada 0, y estando en H con
entrada 0, que pueden emplearse como condiciones superfluas.
x
q2q1q0 0 1
A 000 001 000 00
B 001 001 011 00
C 011 010 011 01
D 010 010 110 01
E 110 111 110 10
F 111 111 101 10
G 101 - 100 00
H 100 - 000 00
q2+q1+q0+ z1z0
La Figura 14.95 muestra un mapa del próximo estado, construido a partir de la tabla de la Figura
14.94. Minimizando las funciones de próximo estado, libres de perturbaciones, se obtienen:
xq2
00 01 11 10
q1q0
q2+q1+q0+
q2q1
00 01 11 10
q0
0 00 01 10 00
1 00 01 10 00
z1z0
Se obtienen:
z1 = q2q1; z0 = q2’q1
La Figura 14.97 muestra las formas de ondas de los cambios de estado relativas a los pulsos
asincrónicos de la entrada x. Se han enumerado los diferentes cambios de las señales, x y q0, en
un período.
C D E F G H A B
x 1 2 3
q2
q1
q0 1 2
z1
z0
Problema 14.1.
Qn
Y
Figura P14.1.
Determinar:
T1 T2
Figura P14.2.
Solución.
a) Q = (Xqn)’ = X’ + qn’; Qn = Y + q
x
a
Figura P14.3.
b) El estado inicial se obtiene considerando que luego de un tiempo de tener aplicada las
entradas XY = 00, se llega al estado estable qqn = 11.
c) Cuando ocurre el canto de subida de Y, XY = 01, permanece en qqn = 11. Por lo cual no hay
restricciones para T1 (salvo que sea mayor que cero), tiempo que debe transcurrir antes de
cambiar la entrada X a 1. No hay transiciones.
Luego cuando se produce XY = 11, se excita sólo la variable q (no hay carreras), la cual pasa a
cero después de x; llegando al estado estable qqn = 01.
Por lo tanto se requiere T2 > x para modo fundamental de operación; es decir, el cambio de la
entrada Y se efectúa luego de haberse realizado las transiciones de estado, que demoran x en
este caso.
Y
x
T1 T2
qn
período
y
Figura P14.4.
El período de la oscilación es: 2( x + y). Se asume que los retardos de propagación para
cambios de la salida de alto a bajo y viceversa son iguales.
Problema 14.2.
d) Indicar los retardos entre los cambios de Q con respecto al evento que los produce.
x
A
y
Q
B
z
Figura P14.5.
Solución.
a) Ecuaciones: X = Aq ; Y = AB ; Z = Bq ; Q = x + y + z
Estado AB
xyzq 00 01 11 10
0000 0000 0000 0100 0000
0001 0000 0010 1110 1000
0011 0001 0011 1111 1001
0010 0001 0001 0101 0001
0110 0001 0001 0101 0001
0111 0001 0011 1111 1001
0101 0001 0011 1111 1001
0100 0001 0001 0101 0001
1100 0001 0001 0101 0001
1101 0001 0011 1111 1001
1111 0001 0011 1111 1001
1110 0001 0001 0101 0001
1010 0001 0001 0101 0001
1011 0001 0011 1111 1001
1001 0001 0011 1111 1001
1000 0001 0001 0101 0001
XYZQ
Figura P14.6.
c) Si ambas entradas están en cero, luego de un tiempo se estará en estado estable 0000.
Las entradas (AB) siguen la secuencia: 00, 10, 11, 01, 00, 01, 11, 10, 00
A
B
Q
y+ q z+ q y+ q x+ q
Figura P14.7.
Observación: El circuito se conoce como Elemento C de Muller. Cambia a uno sólo cuando
ambas entradas son unos y permanece en ese estado hasta que ambas entradas son cero, instante
en el que va a cero; y permanece en cero hasta que ambas entradas sean iguales a uno.
Detecta la igualdad de las entradas.
A B Q+
0 0 0
0 1 Q
1 0 Q
1 1 1
Figura P14.8.
Problema 14.3.
Figura P14.9.
Determinar:
a) Ecuaciones para X, Y, Z
b) Circuito
c) Estados Estables
Solución:
a) Deben plantearse tres ecuaciones, y la implementación debe realizarse con tres compuertas,
ya que cada compuerta aporta una variable de estado.
X = x’zA +xzA = Az
Y = x’zB + xzB = Bz
Z = x’ + y’ = (xy)’
b)
A
X x
X
Z z
Z
B Y Y
y
Figura P14.10.
g) Las tres variables de estado oscilan. Se producen carreras entre las variables x e y.
001 101 111 110 000 001 111 ......
Problema 14.4.
Solución.
El latch de nand opera con cantos de bajada de las señales S’ y R’, además debe cuidarse que
ambos controles no queden simultáneamente en cero.
Se tienen, las salidas de los circuitos combinacionales, que detectan cuando el contador módulo
nueve pasa por las cuentas 8, 3 y 0, respectivamente:
C8=Q3
C3 = Q3’Q2’Q1Q0
C0 = Q3’Q2’Q1’Q0’
En la Figura P14.11, se advierte que se puede emplear C3’, tal que su canto de bajada setee el
latch. Para resetear el latch no puede emplearse el canto de bajada de la señal C8, ya que se
viola la condición para funcionamiento confiable del latch. Puede notarse que la señal C0’
cumple las especificaciones de funcionamiento del latch y además establece correctamente la
duración de la salida z.
C3
C8
C0
C3’
C0’
Finalmente:
S’=C3’ z
R’=C0’
Ejercicios propuestos.
Ejercicio 14.1.
B z
x
A
Figura E14.1.
T1 T2 T3
A
B
x
y
z
Figura E14.2.
Ejercicio 14.2.
x
a
Figura E14.3.
Ejercicio 14.3.
Para el siguiente módulo descrito en Verilog, identificar el tipo de carreras. Si son críticas,
eliminarlas mediante rediseño de la codificación binaria de los estados.
module ej(x,r,a,b,c,d,e);
input x,r;
output a,b,c,d,e;
wire ap,bp;
not #1 G1 (ap,a);
not #1 G2 (bp,b);
and #2 G3 (c,ap,x);
and #2 G4 (d,a,b,r);
or #6 G5 (b,d,c); //G8=2 G5=6. b más lento => llega a 11
and #3 G6 (e,bp,x);
or #2 G8 (a,e,d); //G8=6 G5=2. a más lento => llega a 01
endmodule
Ejercicio 14.4.
b
Y
Figura E14.4.
Índice general.
CAPÍTULO 14 ........................................................................................................................................... 1
MÁQUINAS SECUENCIALES ASINCRÓNICAS. ............................................................................... 1
14.1 BASES ELECTRÓNICAS PARA ALMACENAR BITS. ............................................................................... 1
14.1.1. Metaestabilidad. ...................................................................................................................... 3
14.1.2. Latchs. ..................................................................................................................................... 4
14.2. LATCH ASINCRÓNICO S-R. (LATCH DE NAND) .............................................................................. 5
14.2.1. Esquemático. ........................................................................................................................... 5
14.2.2. Variables. ................................................................................................................................ 6
14.2.3. Ecuaciones. ............................................................................................................................. 7
14.2.4. Matriz de transiciones. ............................................................................................................ 7
14.2.5. Modo fundamental de operación. ............................................................................................ 8
14.2.6. Diagrama de estados. .............................................................................................................. 8
14.2.7. Secuencias de interés ............................................................................................................... 9
a) Transición set a reset ................................................................................................................................... 9
b) Transición de reset a set............................................................................................................................. 10
Análisis del estado 11 en latch S-R ................................................................................................................ 10
14.2.8. Funcionamiento restringido. ................................................................................................. 11
14.2.9. Análisis simplificado. ............................................................................................................ 13
14.2.10. Simulación de circuitos asincrónicos. ................................................................................. 15
14.2 ELIMINA REBOTES (DEBOUNCE) ...................................................................................................... 16
14.3 SINCRONIZACIÓN DE UN S-R .......................................................................................................... 17
14.4. LATCH ASINCRÓNICO S-R. (LATCH DE NOR) ............................................................................... 18
14.4.1. Esquemático. ......................................................................................................................... 18
14.4.2. Variables. .............................................................................................................................. 19
14.4.3. Ecuaciones. ........................................................................................................................... 19
14.4.4. Matriz de transiciones. .......................................................................................................... 19
14.4.5. Diagrama de estados. ............................................................................................................ 19
14.4.6. Secuencias de interés. ............................................................................................................ 20
14.4.7. Funcionamiento simplificado. ............................................................................................... 21
14.4.8. Resumen Latch de NOR. ........................................................................................................ 22
14.4.9. Análisis simplificado, con un retardo. ................................................................................... 22
14.9.10. Latch positivo D .................................................................................................................. 23
14.5. DISEÑO DE LATCH JK EN BASE A LATCH DE NOR......................................................................... 24
14.6. DISEÑO DE UN FLIP-FLOP JK SINCRÓNICO. ..................................................................................... 25
14.7. FLIP-FLOPS DISPARADOS POR CANTOS ........................................................................................... 27
14.8. MASTER SLAVE. MAESTRO-ESCLAVO............................................................................................ 28
Master Slave de tipo D. ..................................................................................................................... 31
14.9. FLIP-FLOP SINCRÓNICO D. ............................................................................................................ 31
14.10. LATCH TRANSPARENTE. ............................................................................................................... 35
14.11. ANÁLISIS DE MULTIVIBRADOR AESTABLE. .................................................................................. 40
14.12. MULTIVIBRADOR MONOESTABLE................................................................................................. 42
Análisis:............................................................................................................................................. 43
14.13. CARRERAS. .................................................................................................................................. 45
14.13.1. Carrera no crítica. .............................................................................................................. 45
Índice de figuras
Capítulo 15
15.1. Registros.
Se denomina registro a una serie de flip-flops agrupados y con señales de control común. Se
considera que se leerán o escribirán como una unidad.
S
D Q
_
CP Q
R
S
D Q
_
CP Q
R
S
clk D Q
_
CP Q
R
Reset
S
D Q
_
CP Q
R
Set
D3
Q3
D Q
_
CP Q’
D2
Q2
D Q
CP Q’
D1
Q1
Q
D
_
Q’
CP
D0
Q0
D Q
_
CP Q’
WE
clk
En la práctica las señales de control de los registros son generados en una máquina de estados
con modelo de Moore.
En este caso, se ingresa a un estado con el canto del reloj, y se mantienen las salidas asociadas
al estado hasta el próximo canto de subida del reloj.
Estado 1
WE=1
Estado 2
WE=0
Durante el estado 1, la máquina de estados habilita la escritura del registro, activando WE.
Notar que la señal efectivamente se activa después del canto de subida del reloj, y es sincrónica
con el reloj.
En el estado 1, las señales Di se propagan a través de las compuertas y llegan a niveles estables
en las entradas de los flip-flops.
En el estado 2, se captura la información en el registro y permanecerá hasta que se inicie otro
ciclo de escritura en el registro.
Nótese que antes y durante el Estado 1, la salida del registro contiene la información que se
haya escrito anteriormente. A partir del estado 2, tiene nueva información.
clk
WE
Habilitación Escritura
Estado 1 Estado 2
Que se interpreta así: Cuando WE esté alto y cuando llegue el canto del reloj, entonces capture
en el registro R, lo que esté estable en A, tsetup antes del canto del reloj. Suele no indicarse el
reloj, en la ecuación RTL (Register Transfer Level).
WE
WE: R = A
A
clk
R1 R2 R3
Red Com- R. Comb.
binacional.
Tc1 Tc2
A Tm1 Tm2
Se considera el tiempo de variabilidad del reloj, o tiempo de corrimiento (skew), debido a que
en dos lugares distintos no puede tenerse la misma señal. Éstas viajan a través de cables y
debería asumirse que el reloj que llega al registro 2, puede estar adelantado (clk2a) respecto a
clk1 o atrasado (clk2b) respecto de él, como se muestra en la gráfica a continuación.
clk1
clk2a
clk2b
Corrimiento clk. ( tskew)
Con:
Tf1 = Tiempo desde el canto de subida de clk1 hasta tener salidas estables en las salidas de R1.
Tc1 = tiempo de propagación a través de la ruta crítica en la red combinacional 1. Es decir,
cuando haya tomado nivel estable la señal que se propaga más lentamente a través de la red, a la
salida de R1.
Tm1 = tiempo mínimo de propagación a través de la red combinacional 1. Es decir, cuando
haya tomado nivel estable la señal que se propaga más rápidamente a través de la red que
alimenta a R2.
Tsu2 = Tiempo de setup-up de los flip-flops del registro R2.
Thold2 = Tiempo de sostenimiento de los flip-flops del registro R2.
Para que la captura de información sea confiable en el registro 2 debe cumplirse que el período
del reloj debe ser mayor que: T(clk2 ) > Tskew + Tf1 + Tc1 + Tsu2
T(clk2)
clk2
clk1
Tsu2
Tskew Tf Tc
1 1
Se considera el peor caso, ya que se asume que clk1 está atrasado respecto de clk2. En caso de
estar adelantado, se podría tener una frecuencia de funcionamiento sincrónica mayor, ya que en
este caso se requiere un T(clk2) menor.
Para que las entradas permanezcan estables un poco después del canto de subida en el registro 2,
debe cumplirse: Thold2 < Tf1 +Tm1 + Tskew
Thold
2
clk2
clk1
Tskew
Tf Tm1
1
Figura 15.9. Requerimientos de hold para el registro 2.
También se ha considerado el peor caso para determinar que se cumpla el requerimiento del
tiempo de sostenimiento de las entradas después del canto; se asume que el clk1 está atrasado
respecto del clk2. En general este requerimiento es más fácil de cumplir que el de tiempo de
setup.
Si se desea usar el mismo reloj, para efectuar transferencias entre registros, deben cumplirse los
requerimientos de estableciemiento (setup) y sostenimiento (hold) de todos los registros del
sistema. Esto implica que la etapa más lenta es la que determina la frecuencia del reloj.
Asumiendo que las señales WE1, WE2 y WE3 son salidas de una máquina secuencial de
Moore, controlada por el mismo reloj, se tendrá que es posible efectuar concurrentemente las
operaciones:
R1 = A; R2 = f1(R1); R3 = f2(R2)
Durante el ciclo en que están habilitadas las señales WE, los valores de A, R1 y R2 permanecen
estables (son los que figuran a la derecha en las ecuaciones anteriores). Al terminar dicho ciclo,
se establecen los nuevos contenidos de estos registros; los nuevos valores serán asignados a las
variables que figuran a la izquierda en las ecuaciones anteriores.
R1 = A; R3 = f2(f1(R1))
Con ello se tiene una red combinacional más compleja, y posiblemente resulte una frecuencia
sincrónica menor, debido a que aumentan los tiempos de propagación, si las funciones
combinacionales deben efectuarse en secuencia. No obstante, el tiempo de propagación entre A
y la salida de R3 se reduce.
Lo cual puede lograrse con un multiplexor, comandado por la señal de control C, la cual
también es generada por la máquina secuencial que genera los WE. En este caso la frecuencia
máxima queda determinada por la función combinacional que tenga propagación más lenta.
Obviamente debe agregarse al tiempo que toma realizar las acciones, el tiempo que adiciona el
multiplexor.
WE C WE
1 3
R1 f1( ) R3
1
A
f2( ) 0
Se denomina así a las formas empleadas para conectar los recursos, en este caso los registros.
Existen varias estrategias que se diferencian entre sí por los recursos empleados y el tiempo que
demoran en efectuarse las transferencias.
Cuando el camino de datos soporta transferencias simultáneas se requerirán menos estados para
realizar las acciones requeridas.
Esta estrategia requiere conexiones entre cada registro fuente y cada registro destino. Es decir si
deseamos conectar punto a punto a tres registros, se requiere que las tres salidas estén
conectadas con las tres entradas.
En el desarrollo actual los registros suelen ser de 32 bits, y se dispone de un número elevado
de ellos, sobre 32.
R
0
0
1
2
M1 WE1
R
0 1
1
2
M2 WE2
R
0 2
1
2
Las transferencias R0 = R1, R1 = R2 también pueden realizarse. Nóte que en ésta, se lee R1 y
se escribe R1 en el mismo ciclo.
La operación de intercambio de dos registros puede también efectuarse en un mismo ciclo. Esto
puede verse analizando el caso anterior, con: R0 = R1, R1 = R0.
Se emplea bus para un grupo de cables que efectúa determinados recorridos, transportando los
datos, y que son compartidos por varias fuentes de datos.
La siguiente estructura emplea un bus de escritura que es compartido por las erntradas de los
registros. Ahora se tiene un solo multiplexor. Si se considera el costo de un multiplexor de 3
vías de 32 bits cada una; más aún si se tienen 32 registros, ya que en este caso debería ser un
mux de 32 vías de entrada con 32 bits cada una, podrá estimarse que esta configuración emplea
menos recursos de hardware que la conexión punto a punto( es decir, mucho menos compuertas
o productos).
Al existir el bus, éste solo puede ser empleado para una transferencia por ciclo. Se estudiarán
transferencias similares a las vistas antes, para poder comparar los aumentos de tiempo que
derivan de ocupar menos espacio de silicio.
R
0
Bus
B WE1
R
0 1
1
2
WE2
R
2
Las transferencias R0 = R1, R1 = R2 demandan dos ciclos, pero importa el orden en que se
activen los controles. Ya que primero debe leerse R1 y escribirse en R0; luego puede
sobreescribirse R1 con el contenido de R2. Lo cual se logra con los controles: WE0 = 1, B = 1
en el primer ciclo; luego: WE1 = 1, B = 2 en el segundo ciclo de reloj.
En general en esta estructura sólo puede efectuarse una escritura en un registro por ciclo de
reloj. Debe compartirse el bus.
En lugar del multiplexor puede emplearse registros que tengan habilitación de la salida en tercer
estado, suele denominarse OE (output enable) a esta señal. Entonces un simple decodificador
de 2 a tres vías, en este caso, permite alimentar a una y sólo una señal habilitadora de tercer
estado. Ver por ejemplo el 74LS173.
Para implementar operaciones diádicas resulta útil disponer de salida dual del arreglo de
registros. Es decir que cada registro puede alimentar dos buses diferentes, sean éstos los buses
de salida A y B. Los buses A y B suelen alimentar una red combinacional que es capaz de
realizar operaciones diádicas; es decir con dos operandos. Dicha red combinacional se
denomina unidad aritmética.
Además para escribir en el arreglo de registros puede disponerse de un bus de escritura, sea éste
el bus C. Esta arquitectura limita la escritura a un solo registro por ciclo. Lo que esté
alimentando al bus C, en el esquema la señal WReg, se escribe en un registro del arreglo.
En un mismo ciclo pueden realizarse transferencias simultáneas a los buses de salida, y una
escritura, por ejemplo:
A = 0 ; B = 2; WE1 =1;
Incluso puede escribirse en un registro que se esté leyendo. Esto es posible, ya que la señal WEi
habilita el camino desde el bus C hasta la entrada del registro i, pero el contenido de éste no
cambia hasta el próximo canto del reloj. Y en el mismo ciclo, puede estarse leyendo en forma
estable la salida actual del registro i.
Si las señales WE se implementan con un decodificador, se asegura que sólo una de ellas estará
activa. Esto en el caso que se desee escribir solamente en un registro.
El esquema de buses múltiples se muestra a continuación:
A
R
0
Bus C 0
1
2 Bus A
WE1 f(A,B)
R
1
WReg
B
Bus B
0
WE2 1
2
R
2
Desde un punto de vista lógico una memoria tiene un bus unidireccional de direcciones, un bus
bidireccional de datos y señales de control. En general se asume una comunicación asincrónica
entre la memoria y los registros del sistema sincrónico; esto permite adaptarse a memorias con
diferentes tiempos de acceso.
Desde que se coloca la dirección en el bus de direcciones, transcurre un tiempo hasta que en la
salida se tiene datos válidos en el bus de datos, esto en una operación de lectura; también
transcurre un tiempo para que, lo que se ha colocado en el bus de datos, sea grabado en la
dirección de memoria, esto en una operación de escritura. Ese tiempo se denomina de acceso.
Las memorias estáticas asincrónicas no necesitan que se les suministre un reloj, y para su
control disponen de tres señales que las manejan:
Chip Enable (E’): Con esta señal en nivel bajo se habilita la memoria.
Write Enable (W’): Cuando está baja (y la memoria está habilitada), los valores en el bus de
datos son escritos en la localización seleccionada por el bus de direcciones.
Output Enable (G’): Cuando está baja (y la memoria está habilitada), el bus de datos es
alimentado con el valor de la localización de memoria seleccionada por el bus de direcciones.
Cuando está alta, el bus de datos interno de salida queda en un estado de alta impedancia.
Memoria
ADD[n..0]
Estática
E’ D[m..0]
W’
G’
Para una memoria de 8KB, se tiene que m es 7, y n es 12. Es decir 8 bits de datos y 13 de
direcciones, ya que 8K equivale a 8x1024=213.
Los fabricantes establecen los requerimientos temporales de las señales de control. Indicando
las secuencias que deben cumplir las formas de ondas de las señales de control, y una tabla con
valores mínimos y máximos para los parámetros.
Los valores corresponden a una memoria con tiempo de acceso igual a 12 ns, que suele
indicarse al final de las siglas que identifican la memoria.
El ciclo de lectura comienza cuando E’ y G’ están bajas. Los datos son válidos luego del tiempo
de acceso en lectura. Luego de que E’ o G’ suben, los datos se mantienen en la salida, hasta que
ésta entra en flotación.
El tiempo de ciclo es el tiempo mínimo que debe transcurrir entre dos requerimientos a la
memoria. Esto implica que no se puede cambiar el bus de direcciones durante una operación.
tc
direcciones
ta
Chip enable E’
tae
tb tf
datos validos
Los datos son capturados en la celda de memoria cuando W’ tiene un canto de subida, en ese
momento los datos del bus deben estar estables. Además el bus de direcciones debe estar estable
antes del canto de bajada de W’ (setup), y luego del canto de subida de W’ (hold). Los glitches
en el bus de direcciones pueden producir cambios de estado no deseados en la memoria.
tc
direcciones
tas tah
Chip enable E’
tw
Write enable W’
th
ts
datos validos
Luego de establecida la nueva dirección, no puede activarse el canto de bajada de write enable
hasta tas segundos después. El ancho del pulso de escritura debe tener un mínimo de tw. Los
datos que serán escritos en la celda, no deben cambiar durante el tiempo de setup, ts segundos
antes del canto de subida del pulso de escritura, y deben mantenerse th segundos después del
canto de subida del pulso de escritura. También no puede cambiarse el bus de dirección,
debiendo mantenerlo estable tah segundos luego del canto de subida del pulso de escritura.
Se desea diseñar un controlador que permita conectar una memoria a un sistema sincrónico. Los
controles read y write, sincronizados por cantos de bajada, desencadenan las secuencias de
señales de control, que permiten leer y escribir en la memoria. La Figura 15.21, muestra el
ambiente de diseño.
add direcciones
la Memoria
reset E’
W’
read
controlador
G’
write
ld cd doe’
datos
Din
dw
Dout
clk
Dout = M[add]
M[add] = Din
Din
Memoria Dout
Controlador
clk clk
Para cumplir con los requerimientos temporales de la memoria, basta que dos períodos del reloj
sean mayores que el tiempo de acceso. Esto puede comprobarse, en el esquema de las señales de
control de la Figura 15.23, ya que transcurren dos ciclos desde que se tiene una nueva dirección
hasta que se graba en el registro de lectura.
clk
read
la
Ep
aGp
Cd
E0 E4 E5 E6 E0
La Figura 15.24, desarrolla las secuencias de escritura en tres ciclos del reloj.
clk
write
ld la
Ep
aWp
doep
E0 E1 E2 E3 E0
La Figura 15.25 ilustra el diagrama de estados del controlador. Sólo se muestran las señales la y
cd asociadas a los estados del diagrama de Moore; el resto de los valores se ilustran en las
Figuras 15.23 y 15.24.
E4 E5 E6
la=1 cd=1
reset
read=1
E0
read=0
write=0
write=1
E1 E2 E3
la=1
Mediante las especificaciones de las Figuras 15.23, 15.24 y 15.25, resulta sencillo especificar el
diseño en Verilog.
module MSE(clk, reset, read, write, Din, Dout, add, direcciones, Ep, Wp, Gp, doep, la, ld, cd,
datos);
input clk, reset, read, write;
input [7:0] Din;
output [7:0] Dout;
input [12:0] add;
output [12:0] direcciones;
output Ep, Gp, Wp, doep, la, ld, cd;
inout [7:0] datos;
// Asignación de estados
parameter IDLE = 0;
parameter write1 = 1;
parameter write2 = 2;
parameter write3 = 3;
parameter read1 = 4;
parameter read2 = 5;
parameter read3 = 6;
// Outputs
wire [7:0] Dout;
wire [12:0] direcciones;
wire Ep;
wire Wp;
wire Gp;
wire doep;
wire la;
wire ld;
wire cd;
// Bidirs
wire [7:0] datos;
initial begin
// Initialize Inputs
clk = 0; reset = 0; read = 0; write = 0; Din = 0; add = 0;
// Wait 100 ns for global reset to finish
#100;
add=13'b0000000000111;
Din=8'b00001111;
write=1; clk=0; #100; clk=1; #100;
write=0; clk=0; #100; clk=1; #100;
clk=0; #100; clk=1; #100;
clk=0; #100; clk=1; #100;
clk=0; #100; clk=1; #100;
clk=0; #100; clk=1; #100;
clk=0; #100; clk=1; #100;
end
endmodule
El procedimiento de lectura de memorias flash o EEPROM es el mismo que para las memorias
estáticas SRAM. Estas memorias disponen de un circuito interno que genera el voltaje de
programación de tipo 12 V, y además tienen una máquina secuencial de estados internas que
permite escribirlas. Las señales de escritura deben cumplir los requerimientos temporales de la
máquina de estados, y usan las mismas señales de control.
CAPÍTULO 15 ........................................................................................................................................... 1
REGISTROS. BUSES. MEMORIAS. ...................................................................................................... 1
15.1. REGISTROS. ..................................................................................................................................... 1
15.2. REGISTRO CON HABILITACIÓN DE ESCRITURA. ................................................................................. 1
15.3 FUNCIONAMIENTO SINCRÓNICO. TRANSFERENCIAS ENTRE REGISTROS. ........................................... 4
15.3.1. Requerimientos de tiempo. ...................................................................................................... 5
15.3.2. Operaciones posibles. ............................................................................................................. 7
15.3.3. Operaciones combinacionales alternativas. ............................................................................ 7
15.4. CAMINO DE DATOS. ......................................................................................................................... 8
15.4.1. Conexiones punto a punto. ...................................................................................................... 8
15.4.2. Bus simple. ............................................................................................................................ 10
15.4.3. Estructura multibus. .............................................................................................................. 12
15.5. MEMORIA RAM ESTÁTICA. ........................................................................................................... 14
15.5.1. Ciclo de lectura. .................................................................................................................... 14
15.5.2. Ciclo de escritura. ................................................................................................................. 16
15.5.3. Control de memoria ram estática. ......................................................................................... 17
15.3.4. Memorias flash o EEPROM. ................................................................................................. 24
15.3.5. Memorias sincrónicas. .......................................................................................................... 24
ÍNDICE GENERAL. ................................................................................................................................... 25
ÍNDICE DE FIGURAS................................................................................................................................. 26
Apéndice 1
ALGEBRA DE BOOLE
A1.1 Introducción
En 1847, George Boole desarrolla el álgebra, que lleva su nombre, como un análisis
matemático. Su objetivo era describir las operaciones mentales mediante las cuales se realizan
razonamientos.
A1.2. Postulados
P.1 Definición:
P.2 Igualdad.
Dos expresiones son iguales si una puede ser substituida por la otra.
a 0 a (P3)
a 1 a
Si a y b pertenecen a B:
a b b a (P4)
a b b a
P.5 Asociatividad.
Si a, b y c pertenecen a B:
a (b c) (a b) c (P5)
a (b c) (a b) c
P.6 Distributividad.
Si a, b y c pertenecen a B:
a (b c) (a b) (a c) (P6)
a (b c) (a b) (a c)
P.7 Complementariedad.
a a' 1 (P7)
a a' 0
Observar que, con la formulación de postulados, se pueden demostrar como teoremas las
siguientes proposiciones:
1 0
0 1
a a
Ejemplo A1.1.
Teorema. Complemento de 1.
Se tienen:
a 1=a ; P3 Elemento único 1.
0 1=0 ; P2 Sustitución de a por 0.
(i) 1 0 = 0 ; P4 Conmutación del producto.
Y también:
a+0=a ; P3 Elemento único 0.
(ii) 1 + 0 = 1 ; P2 Sustitución de a por 1.
Ejemplo A1.2.
Teorema de involución.
a a (A1.1)
a a' 1 (A1.3)
a a' 0
a' a 1 (A1.4)
a' a 0
Comparando (A1.2) y (A1.4), y empleando P2, se demuestra que puede substituirse (a’)’ por
a.
Ejemplo A1.3.
b) Notar que el operador and no suele escribirse entre las letras de las variables.
AB AB AC AB AB BC
A1.4. Dualidad
Dada una ecuación lógica, la ecuación dual se obtiene: reemplazando los operadores: + por ·
y · por +; reemplazando las constantes: 1 por 0 y 0 por 1; y dejando las variables sin cambios.
Antes de obtener el dual de una expresión, conviene asociar los operandos con los
operadores que les corresponden, mediante el uso de paréntesis: A B + C debe
interpretarse, según convenios algebraicos tradicionales, como: (A B) + C; en este caso,
la expresión dual es: (A + B) C. Si se determina directamente la expresión dual,
mediante el procedimiento de cambiar el or por and y viceversa, se obtendría
erróneamente: A + B C.
A1.5. Teoremas
T.8 Idempotencia.
a a a (T8)
a a a
a 1 1 (T9)
a 0 0
T.10 Absorción.
a ab a (T10)
a ( a b) a
a ab a b (T11)
a (a b ) ab
T.12 De Morgan
a b ab (T12)
ab a b
Puede emplearse la inducción perfecta para demostrar en forma más simple las leyes de De
Morgan. Basta desarrollar las tablas de verdad.
Inducción completa o perfecta.
Aristóteles, y otros después de él, emplearon este nombre para designar un razonamiento
cuyas premisas enumeran todos los miembros de la clase a la que se refiere su conclusión. La
conclusión deriva necesariamente de las premisas, ya que sólo expresa lo que en éstas se hallaba
contenido. Se trata, pues, de una deducción.
Se basa en la enumeración completa, en la que se deben contar todos los casos de una clase
determinada y enunciar sus resultados en una conclusión general. La conclusión acerca de todos
los elementos de una clase se deduce a partir de premisas que se refieren a los casos
observados. La inducción perfecta permite obtener información fidedigna.
Sin embargo, en la solución de la mayoría de los problemas no puede emplearse este tipo de
enumeración ya que no es posible examinar todos los casos a que se refiere una conclusión;
esto se hace evidente al aumentar el número de variables, ya que el número de renglones crece
en forma exponencial con el número de variables.
El empleo de tablas de verdad es un ejemplo de aplicación de inducción perfecta.
Demostración de la segunda proposición de T12, mediante tabla de verdad.
a b a’ b’ (ab)’ a’+b’
0 0 1 1 1 1
0 1 1 0 1 1
1 0 0 1 1 1
1 1 0 0 0 0
T.13 Consenso.
ab a c bc ab a c (T13)
(a b)(a c)(b c) (a b)(a c)
T.14 Fusión.
ab ab a (T14)
(a b)(a b ) a
T.15 Factorización
ab ac ( a c)(a b) (T15)
(a b)(a c) ac a b
Los teoremas más frecuentemente empleados son: T.8, T.9, T.10, y T.12.
En los diagramas de Venn los conjuntos se muestran como áreas. El '1' es el conjunto
universal, y el '0' es el conjunto vacío.
A B A B
AB
A+B
Unión Intersección
(A+B)’ (A B)’
a a1 a+0
a’
La Figura A1.3. ilustra los dos términos del lado derecho del teorema.
a b a b
ab c a’c c
La parte derecha de la Figura A1.4 muestra la suma lógica de ab+a’c, en la cual se puede
advertir que el término bc queda incluido. Una parte de bc está en ab; la otra parte de bc está en
a’c.
a b a b
c ab + a’c c
bc
Se puede decir que bc está incluido en ab+a’c; y también que bc es un término denominado
consenso entre ab y a’c.
Se destaca que la implicación condicional es una expresión que puede ser falsa.
Si se considera que 1 es mayor que 0, también puede tratarse como p q.
La Figura A1.6 desarrolla que: p q equivale lógicamente con (p'+q). Esto debido a que
tienen iguales tablas de verdad.
p q p’ p’+q p q
1 1 0 1 1
0 0 1 1 1
0 1 1 1 1
1 0 0 0 0
p q q’ p’ q+p’ q’ p’
1 1 0 0 1 1
0 0 1 1 1 1
0 1 0 1 1 1
1 0 1 0 0 0
Ejemplo A1.4a.
Por lo anterior se tendrá que si p es verdadero y q es falso, tendremos una contradicción. Sin
embargo esto se debe a una modelación incompleta del diagrama; el cual no contempla que la
ampolleta esté buena ( r ) y que la batería que alimenta al sistema tenga la suficiente carga ( s ).
Considerando estas condiciones adicionales, puede expresarse: q = r s p
p
r s
q
Contrapositiva: Si no q entonces: no r o no s.
“Si la ampolleta no está encendida, entonces: r no está cerrado o s no está cerrado”.
1) p’ q = p + q
2) p q = (pq’ )’ Si la premisa es verdadera y la conclusión es falsa, la premisa p q es
falsa.
3) p q = q’ p’ Transposición.
4) pq = ( p q’ )’
El profesor es justo y el profesor es generoso, es equivalente a: No es cierto que si el
profesor es justo esto pruebe que el profesor no es generoso.
Si dos hechos son ciertos, uno no puede desaprobar al otro.
5) pq = ( q p’ )’
6) (pq) (p q) = 1 Si p y q son válidos se puede usar uno de ellos para probar el otro.
7) (p q’)’ (p q) =1 Si p no desaprueba q entonces p puede usarse para probar q. Si no
existe hecho que pueda probar que algo no es, entonces cualquier hecho puede solamente probar
que él es.
8) p (qr) = (p q) (p r) Distribución de implica en el producto.
Aún si un hecho asumido como cierto, prueba que un segundo es verdadero, esto no significa
que podemos concluir que el segundo hecho prueba que el primero es verdadero; el segundo
puede ser verdadero, aunque no el primero. O el segundo puede ser probado, quizá por un
tercero.
Cuando p q es verdadero, para que q sea verdad es condición suficiente que p sea verdad.
Pero no es condición necesaria, ya que q puede ser verdad, aún siendo p falso.
Cuando p q es verdadero, para que p sea verdad es necesario que q sea verdad.
Para que el razonamiento sea válido la expresión p q, debe ser una tautología.
Una regla de inferencia transforma una sentencia válida en otra sentencia válida.
Si puede derivarse la conclusión de un argumento a partir de sus premisas, empleando una
secuencia de reglas de inferencia válidas, entonces el argumento es válido.
Ejemplo:
No estoy cansado.
Si hago mucho deporte, entonces estoy cansado.
Por lo tanto: No hago mucho deporte.
Transitividad. Silogismo hipotético.
En esta forma de razonar debe demostrarse que (p q) (q r) (p r) es una
tautología. También se denomina silogismo hipotético.
Ejemplo:
Si estudio mucho entonces aprobaré el curso.
Si apruebo el curso entonces me sentiré feliz.
Si estudio mucho entonces me sentiré feliz.
Inferencia de la alternativa. Silogismo disyuntivo.
Debe demostrarse que: (p+q) p’ q es una tautología.
Si p o q es verdadera, y además sabemos que p es falsa, entonces se infiere que q es
verdadera. Suele denominarse a esta tautología silogismo disyuntivo.
"Una vez eliminado lo imposible, lo que queda, por improbable que parezca, debe ser la
verdad" Arthur Conan Doyle.
Simplificación.
Si se tiene la premisa pq se infiere p.
Conjunción.
Si se tienen las premisas: p, q se infiere pq.
Adición.
Si se tiene p puede inferirse p+q. Donde q puede ser cualquier premisa.
Dilema constructivo.
Dadas las premisas: (p=>q)(r=>s) y p+r, entonces: q+s
Conmutatividad
Asociatividad
Distributividad
Doble negación: p=(p’)’
Leyes de De Morgan
Idempotencia o Tautología: p=p+p o p=pp
Trasposición o contrapositiva: p=>q = q’=>p’
Implicación material: p=>q = p’+q
Equivalencia material: p q = (p=>q)(q=>p) o alternativamente: p q = (pq)+(p’q’)
Exportación: (pq)=> r = p=>(q=>r)
Las reglas de reemplazo pueden emplearse en ambas direcciones y pueden reemplazar parte
de una sentencia. Las de inferencia se emplean sólo en una dirección, es decir importa el orden
de las premisas; y se aplican a sentencias completas.
Nótese que la equivalencia lógica puede describirse por el símbolo ; antes al definir los
postulados y teoremas empleamos simplemente el signo = para denotar la equivalencia lógica.
Ejemplo A1.5
Se tiene el siguiente argumento:
a’=>Z, a=>b, c+b’, c’ Z.
Deducir Z.
Solución.
Luego de las premisas se coloca una barra diagonal y luego de ésta la conclusión. Para
efectuar la deducción, se aplican las reglas de inferencia, agregando como comentarios las
reglas de inferencia o equivalencia que se aplican.
5. b’ 3 y 4: Silogismo disyuntivo
6. a’ 5 y 2 : Modus Tollens
7. Z 6 y 1 : Modus Ponens
Ejemplo A1.6.
Probar validez de Modus Tollens
A => B
B’
A’
Prueba:
1. A => B P
2. B’ P / A’
3. A’+B 1 Implicación material
4. A’ 2, 3 Silogismo Disjuntivo
Prueba:
1. A => B P
2. A P / B
3. A’+B 1 Implicación material
4. B 2, 3 Silogismo Disjuntivo
Ejemplo A1.7.
Deducir la regla Dilema Constructivo.
1. (p=>q)(r=>s) P
2. p+r P / q+s
3. r=>s 1 Simplificación
4. p’=>r 2 Implicación matrial
5. p’=>s 4 y 3 Transitividad.
6. s’=>p’’ 5 Transposición
7. s’=>p 6 Doble negación
8. p=>q 1 Simplificación
Charles Lutwidge Dodgson (1832-1898), conocido por su seudónimo Lewis Carroll, diseñó
numerosos puzzles para entrenar a las personas en el razonamiento sistemático.
Su mayor interés fue aumentar el entendimiento de las personas, tratando de que esto fuera
un juego.
Nuestro objetivo es emplear razonamiento transitivo todas las veces que sea necesario,
usando todos los elementos de las premisas, formando una cadena de implicaciones.
Específicamente el tipo de problema anterior es clasificado como sorite. Que puede definirse
como una forma de argumentación en la cual se ordenan una serie de silogismos incompletos de
tal modo que el predicado de cada premisa sea el sujeto de la próxima. Finalmente el
antecedente de la primera se une al predicado de la última formando la conclusión. Los
silogismos son incompletos, ya que solamente están presentes las premisas.
A1.10 Silogismo.
Forma de razonamiento utilizado en lógica por la que del contraste de dos proposiciones o
premisas se extrae una conclusión.
No se requiere ningún otro término o premisa para hacer la consecuencia necesaria.
Las dos primeras proposiciones se llaman premisas; la tercera se denomina conclusión. Los
dos términos que entran en las premisas y en la conclusión se llaman extremos (mayor y
menor), y el que sólo entra en las premisas recibe el nombre de medio o eliminando.
Se llama premisa mayor, a la que contiene el término mayor; y se llama premisa menor, a la
que contiene el término menor. El término que está presente en ambas premisas se denomina
término del medio y se simboliza por M; y no está presente en la conclusión.
Formas categóricas.
E
P
S
S P
Ejemplo A1.9
y
x
z
Deducción:
1. x=>y P
2. z=>y’ P / z=>x’
3. y=>z’ 2 Transposición
4. x=>z’ 1 y 3 Silogismo Hipotético
5. z=>x’ 4 Transposición.
El silogismo es válido.
Ejemplo A1.10
y
x z
El silogismo es válido.
Se denomina disposición del silogismo a la secuencia de tres de las letras anteriores (A, E, I,
O), y que representan la premisa mayor, menor y conclusión del silogismo.
Por ejemplo el siguiente es silogismo AAA.
M M M
P P P
S
S S
La posición del término del medio puede estar de cuatro formas diferentes. Se denominan
con cifras desde 1 a 4.
Silogismo AAA-1 P
Silogismo EAE-1
Ningún M es P. M P
Todos los S son M S
Ningún S es P.
Silogismo AII-3
Todos los M son P. P
S
Algún M es S. M
Algún S es P.
Silogismo AII-2
S
Todos los P son M.
Algún S es M. M
M
Algún S es P. P S
P
La premisa menor, puede dibujarse de dos formas. La Figura A1.16 izquierda ilustra que el
silogismo AII-2 es inválido.
A I E O
P P S P S P
S S
x x
Para probar los silogismos se dibujan tres círculos que se intersectan; se representan primero
las premisas universales (A, E), luego las particulares (I, O); éstas últimas en zonas que no estén
previamente achuradas.
EIO-3
Ningún M es P.
Algún M es S. S P
Algún S no es P
x
EOO-2
S P
Ningún P es M.
x
Algún S no es M.
Algún S no es P.
Como el tipo de premisa puede repetirse: la premisa mayor puede escogerse de cuatro
formas, la menor también de cuatro formas y la conclusión de cuatro formas, resultan 64 tipos
de silogismos. Pero como además el término medio puede ocurrir de cuatro formas, se tienen en
total 256 silogismos.
Pero sólo se tienen quince formas válidas. Existen palabras latinas, en las cuales el orden de
aparición de las vocales indica el tipo de premisa categórica de las premisas mayor, menor y
conclusión. Los siguientes son silogismos incondicionalmente válidos.
La primera letra de los modos siguientes indica a cual modo con cifra 1 puede ser reducido.
Si luego de una letra de modo aparece s, la reducción es simple conversión; si es p la
conversión es parcial; si es m entre las dos primeras vocales se aplica transposición. La letra c
después de una de las dos primeras vocales indica que la premisa debe ser reemplazada por su
negación para efectuar la conversión.
Los silogismos AAI-1, EAO-1, AEO-2, EAO-4 son condicionalmente válidos si S existe.
Si M existe: son condicionalmente válidos: EAO-3 y 4. Si P existe es válido: AII-4.
Silogismo EAO-4 P
Ningún P es M.
Todos los M son S. S
Algún S es no P. M
Para algunos modelos geométricos (el punto, la línea), y físicos (masa puntual, componentes
de parámetros concentrados) que son ampliamente usados no se tiene evidencia de su existencia
física.
A1.11 Falacias.
Si se asume que la lógica trata sobre el razonamiento correcto se la puede usar para probar
que una argumentación no es válida. Una falacia es un argumento que puede parecer válido,
pero que en realidad es falso.
Existen innumerables tipos de falacias, tantos como lo errores que el hombre puede cometer.
Sin embargo algunas de ellas son tan comunes que se las reconoce con nombres latinos:
Argumentum ad Ignorantiam, Argumentum ad Populum, etc.
Ejemplo A1.11
"Una mala sesión de clases es mejor que una buena sesión de clases, ya que una mala sesión
de clases es mejor que nada, y nada es mejor que una buena clase"
Se advierte que se tienen dos términos medios. Por lo tanto no es un silogismo del tipo
EAA-1. Pertenece a las falacias de cuarto término.
Problemas resueltos
Problema A1.1
Solución:
Problema A1.2
Expresar, con el mínimo número de literales, como suma de productos empleando teoremas.
Indicando los teoremas o postulados que emplee en cada paso de su desarrollo.
Solución:
Resulta entonces:
f(a, b, c, d) = a + ( a’ b’ c)(b’ + c’d’ + cd) Por P2.
f(a, b, c, d) = a + a’b’cb’+ a’b’cc’d’ + a’b’ccd por Distributividad
Se tienen:
a’b’cb’ = a’b’b’c por conmutatividad = a’b’c por idempotencia
a’b’cc’d’ = a’b’0d’ por complemento único = 0 por T9. Luego se aplica P3.
a’b’ccd = a’b’cd por idempotencia.
Otra solución:
f(a, b, c, d) = a + a’ b’ c b’ + a’ b’ c ( c d)’ = a + a’ b’c(1 + ( c d)’) = a + a’ b’c
f(a, b, c, d) = a + b’ c
Problema A1.3
Sea un circuito eléctrico, que se muestra en la Figura PA1.1, en el cual una fuente de tensión
V está conectada a través de los interruptores C y C2 a una ampolleta L:
V
C L
C2
Se denomina proposición condicional ya que ésta afirma que un hecho es cierto bajo la
condición de que otro hecho sea verdadero.
La proposición luego del si, se denomina antecedente, la ubicada luego del entonces se llama
consecuencia.
La premisa C L puede ser verdadera o falsa, dependiendo de los valores que tomen C y L.
C L C L
1 1 1 Si el interruptor C está cerrado debe ser cierto que la ampolleta L está
encendida.
0 0 1 Si la ampolleta L está apagada debe ser cierto que el interruptor C está abierto.
0 1 1 Si el interruptor C está abierto, y la ampolleta L está encendida debe ser por
causa de otro interruptor (C2 cerrado en el diagrama anterior).
1 0 0 Cuando el interruptor C está cerrado, y la ampolleta L está apagada la premisa
es falsa.
Como se puede plantear una implicación material entre dos proposiciones simples
cualesquiera, la implicación por sí misma puede no reflejar la realidad.
“Si los leones son carnívoros, entonces las uvas contienen azúcar”.
Problema A1.4
Solución.
El universo es el conjunto de todos mis hijos.
Variables:
Gordo: Este niño mío es gordo.
Hombre: Este niño mío es un muchacho.
Glotón: Este niño mío es un glotón.
Sano: Este niño mío es sano.
No_ejercicio: Este niño mío no hace ningún ejercicio.
Problema A1.5
Problema A1.6
1. a => (b=>c) P
2. d => (b∙a) P / d’+c
3. (a∙b) => c 1 Exportación
4. (b∙a) => c 3 Conmutación
5. d => c 2, 4 Silogismo Hipotético
6. d’+c 5 Implicación material
1. (a ∙ b) + (c => d) P
2. (a ∙ b)’ P
3. d’ P / c’
4. c => d 1, 2, Silogismo disjuntivo
5. c’ 3, 4, Modus Tollens
Ejercicios propuestos.
Ejercicio A1.1
c) Demostrar identidad
( A B) ( A C ) ( B C D) ( A B) ( A C )
A B A B C C D A B C D
A B B C A C ( A B) ( B C ) ( A C )
d) Demostrar
1. Si A=B entonces A B A B 0
2. A B A C B C A B A C
3. A B ( A B) ( A B)
e) Minimizar usando teoremas:
1. a'b'c'd' +ab'c'd' + a'b'cd' + ab'cd'
2. a'bc + abc´+ bc'd +bc
Ejercicio A1.2
Ejercicio A1.3
Ejercicio A1.4
Ejercicio A1.5
Referencias.
http://www.lewiscarroll.org/carroll.html.
http://philosophy.lander.edu/logic/index.html
Índice general
APÉNDICE 1 .................................................................................................................................. 1
ALGEBRA DE BOOLE ................................................................................................................. 1
A1.1 INTRODUCCIÓN ..................................................................................................................... 1
A1.2. POSTULADOS ....................................................................................................................... 1
P.1 Definición: ......................................................................................................................... 1
P.2 Igualdad............................................................................................................................. 1
P.3 Elementos únicos. ............................................................................................................... 1
P.4 Conmutatividad. ................................................................................................................. 2
P.5 Asociatividad. .................................................................................................................... 2
P.6 Distributividad. .................................................................................................................. 2
P.7 Complementariedad. .......................................................................................................... 2
A1.3 SOBRE LAS DEMOSTRACIONES DE TEOREMAS. ........................................................................ 3
Ejemplo A1.1. ........................................................................................................................... 3
Ejemplo A1.2. ........................................................................................................................... 3
Ejemplo A1.3. ........................................................................................................................... 4
A1.4. DUALIDAD ........................................................................................................................... 4
A1.5. TEOREMAS........................................................................................................................... 5
T.8 Idempotencia. ..................................................................................................................... 5
T.9 Unión con el Universo e Intersección con el vacío. .............................................................. 6
T.10 Absorción. ........................................................................................................................ 6
T.11 Absorción del complemento. ............................................................................................. 6
T.12 De Morgan ....................................................................................................................... 6
Inducción completa o perfecta. ............................................................................................................ 7
T.13 Consenso. ......................................................................................................................... 8
T.14 Fusión. ............................................................................................................................. 8
T.15 Factorización ................................................................................................................... 8
A1.6. DIAGRAMAS DE VENN .......................................................................................................... 9
Ejemplo A1.4. Visualización de teoremas mediante diagramas de Venn. .................................. 10
A1.7. IMPLICACIÓN MATERIAL O CONDICIONAL. ........................................................................... 10
Ejemplo A1.4a. ....................................................................................................................... 11
A1.7.1. Formas de enunciar implicaciones. ............................................................................. 13
A1.7.2. Teoremas relativos a implicaciones. ............................................................................ 13
A1.7.3. Condiciones suficientes y necesarias. .......................................................................... 14
A1.7.4. Razonamiento Deductivo. ........................................................................................... 14
A1.8. DEDUCCIÓN NATURAL. FORMAS DE RAZONAMIENTO........................................................... 14
1.8.1. Reglas de inferencia. ..................................................................................................... 14
Modus ponens. ................................................................................................................................. 14
Modus tollens. .................................................................................................................................. 15
Transitividad. Silogismo hipotético. .................................................................................................. 15
Inferencia de la alternativa. Silogismo disyuntivo. ............................................................................. 15
Simplificación. ................................................................................................................................. 15
Conjunción. ...................................................................................................................................... 15
Adición. ........................................................................................................................................... 15
Dilema constructivo. ......................................................................................................................... 15
Índice de Figuras
Apéndice 2
Uso de Abel
A2.1 Introducción
Luego viene una sección que describe las ecuaciones lógicas de las salidas en función de las
entradas. Para el operador lógico and se emplea el símbolo ampersand &. Para el or se emplea el
#. Para el operador unario not se emplea el símbolo ! como prefijo. Para el xor se emplea el
símbolo $.
Ejemplo A2.1.
EQUATIONS
YA = A0 & A1;
YB = B0 & B1;
YC = C0 & C1;
YD = D0 & D1;
END
Las descripciones anteriores permiten obtener las ecuaciones minimizadas del diseño. El
siguiente listado muestra dichas ecuaciones como suma de productos y productos de sumas.
Equations:
YA = (A0 & A1);
YB = (B0 & B1);
YC = (C0 & C1);
YD = (D0 & D1);
Reverse-Polarity Equations:
!YA = (!A0 # !A1);
!YB = (!B0 # !B1);
!YC = (!C0 # !C1);
!YD = (!D0 # !D1);
Además puede agregarse un segmento con vectores de pruebas, éstos son estímulos que
aplicados en las entradas permiten revisar funcionalmente las salidas del diseño (simulación
funcional) y también realizar una simulación temporal en la que se aprecian las formas de ondas
de las entradas y salidas con los retardos promedios que tienen las diferentes compuertas.
Para el caso del 7408 un conjunto de vectores de prueba para un and podría describirse
según:
Test_vectors
( [A1, A0 ] -> [YA])
[0, 0] ->[ 0 ];
[0, 1] ->[ 0 ];
[1, 0] ->[ 0 ];
[1, 1] ->[ 1 ];
La simulación funcional aplica en las entradas los estímulos y calcula mediante las
ecuaciones los valores de las salidas; y revisa que éstos coincidan con las salidas asignadas a
cada uno de los vectores. Al final da un resumen si las diferentes pruebas pasaron o no.
AA Y
01A
V0001 0 0 L
V0002 1 0 L
V0003 0 1 L
V0004 1 1 H
4 out of 4 vectors passed.
Efectuada la simulación temporal puede obtenerse la forma de onda de la salida, para los
estímulos descritos en los vectores, las cuales muestran el retardo de propagación del canto de
subida de la señal de salida (YA):
Ejemplo A2.2.
El esquema siguiente ilustra, para una función de tres variables completamente especificada,
la definición de la función mediante tablas de verdad.
EQUATIONS
truth_table ( [a, b, c]->f )
[0, 0, 0]-> 0;
[0, 0, 1]-> 1;
[0, 1, 0]-> 0;
[0, 1, 1]-> 1;
[1, 0, 0]-> 0;
END
Ejemplo A2.3.
El siguiente programa, permite obtener las ecuaciones minimizadas para una función de seis
variables, descrita por sus mintérminos:
EQUATIONS
truth_table ( [a, b, c, d, e, f ]-> g)
0-> 1; 2-> 1; 6-> 1;
7-> 1; 8-> 1; 10-> 1;
12-> 1; 14-> 1; 15-> 1; 41-> 1;
!g = (a & !c) # (d & !e & f) # (a & e) # (!a & !d & f) # (!c & d & !e) # (b) # (a & !f)
Con 23 entradas para producto de sumas.
Puede generarse una simulación temporal, que permite obtener las siguientes formas de
ondas:
Para lograr las formas de ondas, se generan los siguientes vectores de prueba:
Ejemplo A2.4.
MODULE V7442
TITLE 'Decodificador de BCD a Decimal. '
EQUATIONS
!Y0 = (BCD == ^h0); "el prefijo ^h indica un número hexadecimal.
!Y1 = (BCD == ^h1);
!Y2 = (BCD == ^h2);
!Y3 = (BCD == ^h3);
!Y4 = (BCD == ^h4);
!Y5 = (BCD == ^h5);
!Y6 = (BCD == ^h6);
!Y7 = (BCD == ^h7);
!Y8 = (BCD == ^h8);
!Y9 = (BCD == ^h9);
END
Puede expresarse mediante una tabla de verdad el producto (con 2n bits) de un multiplicando
por un multiplicador de n bits cada uno.
Consideremos el algoritmo de multiplicación para papel y lápiz que se emplea para los
números decimales. Sea Q el multiplicando, formado por los bits: Q2, Q1, Q0. Y R el
multiplicador, formado por los bits: R2, R1 y R0. Resulta un producto P, formado por los bits:
P5, P4, P3, P2, P1 y P0.
R0Q2 R0Q1 R0Q0
R1Q2 R1Q1 R1Q0
R2Q2 R2Q1 R2Q0
P5 P4 P3 P2 P1 P0
Cada producto individual RiQi puede expresarse como la operación and de sus términos. Es
decir, RiQi = Ri & Qi, ya que sólo la multiplicación de 1 por 1 da 1.
Empleamos el siguiente símbolo para un sumador completo de dos bits(Ai, Bi) más una
reserva de entrada(Ci). El sumador tiene dos salidas: la suma(Si) y la reserva de salida(Co).
Ai Bi
C + Ci
o
Si
Las ecuaciones para el sumador, pueden describirse según:
Si = (Ai $ Bi) $ Ci; Co = (Ai & Bi) # (Ai & Ci) # (Bi & Ci);
+ + + 0
c4 c2 c1
R2Q1
s3 s2
R2Q2 R2Q0
+ + c3
+ 0
c5
P5 P4 P3 P2 P1 P0
Si crece el número de bits de los operandos, no resulta adecuado plantear las ecuaciones a
partir de un diagrama. Las siguientes ecuaciones realizan al multiplicador combinacional, de
una manera más compacta, y pueden modificarse para tratar operandos mayores. Se deja al
compilador Abel la tarea de minimizar las ecuaciones.
R = [R2..R0];
Q = [Q2..Q0];
P = [P5..P0];
PP0 = R0 & [0, 0, 0, Q2, Q1, Q0];
PP1 = R1 & [0, 0, Q2, Q1, Q0, 0];
PP2 = R2 & [0, Q2, Q1, Q0, 0, 0];
equations
P = PP0 + PP1 + PP2;
0/0
1/0 0/0
A B
B C D
0/0 1/0
1/1
0/0
Entrada 0 1 0 1 1 0 0 1 1 ....
Salida 0 0 0 1 0 0 0 0 0 ....
Pxo. B C D C A B B C A ….
Estado
Luego se declara el registro de estado (sreg), en función de las salidas de los flip-flops.
También se efectúa un mapeo de nombres lógicos a físicos. Esto también se denomina
asignación de estados. El estado inicial, será el estado A; cuyo nombre binario será [0, 0].
En las ecuaciones se indican las señales de entrada que ingresan al reloj (clock), a la
habilitación de la salida (enab, no se usa enable ya que es palabra reservada) y al reseteo
asincrónico de la macrocelda (reset).
MODULE estado1
sreg = [q1,q0];
"Valores de los estados
A= 0; B= 1; C= 2; D= 3;
equations
[q1,q0,zs].clk= clock;
[q1,q0,zs].oe = !enab;
[q1,q0,zs].ar = reset; "Con reset va a [0, 0](el estado A).
q0.OE = (!enab);
q0 := (!x);
q0.AR = (reset);
q0.C = (clock);
zs.OE = (!enab);
zs := (q1.FB & q0.FB & x);
zs.AR = (reset);
zs.C = (clock);
En la Figura A2.6 se ilustra la notación empleada para las variables asociadas a cada salida
registrada. Nótese que cuando q1 aparece al lado izquierdo de la asignación, está representando
a la entrada D del flip-flop, es el próximo estado que tomará dicha variable; es decir q1(k+1),
con la notación empleada en clases.
Cuando aparece en el lado derecho el término q1.FB (por feed-back) se lo interpreta como la
salida del flip-flop.
clock
enable
reset Q.AR
AR Q.OE
D Q
clk
Q.C
x
Q.FB Q.PIN
in
Nótese que la expresión booleana para la salida asincrónica z es idéntica a la de zs, que es
salida de flip-flop.
La salida del reporte de simulación muestra los estímulos y respuestas debidos a los vectores
elegidos.
c r
l e e
on s
ca e qqz
kb tx 10s
V0001 C 0 1 0 ZZZ
C010 LLL
C010 LLL
C010 LLL
V0002 C 0 0 1 LLL
C001 LLL
C001 LLL
V0003 C 0 0 0 LLL Clock = 0
C000 LHL Clock = 1
C000 LHL Clock = 0
V0004 C 0 0 1 LHL
C001 HLL
C001 HLL
V0005 C 0 0 0 HLL
C000 HHL
C000 HHL
V0006 C 0 0 1 HHL
C001 HLH
C001 HLH
C001 HLH
V0007 C 0 0 1 HLH
C001 LLL
C001 LLL
V0008 C 0 0 0 LLL
Debe notarse que cada vector genera tres estímulos (esto debido al pulso definido con .c.).
Los vectores generan las siguientes formas de ondas:
V003 V006
asincrónica
La señal z cambia entre dos cantos de subida del reloj, por esto se dice que es asincrónica
respecto de éste. Mientras que la señal zs, que se obtiene como salida de un flip-flop será
sincrónica con éste.
La salida z cambia en la transición, apenas se produce la condición que la genera. La señal zs
ocurre generalmente un poco después, ya que se activa cuando ocurre el siguiente canto de
subida del reloj.
La señal z, es una salida de una máquina de Mealy, y depende de las entradas; lo cual puede
verse ya que interviene la entrada x en la ecuación: z = (q1.FB & q0.FB & x);
Si esta salida está conectada como entrada a otra máquina secuencial, que ocupe el mismo
reloj, podría no cumplir las condiciones para operación sincrónica. Por lo tanto es recomendable
emplear la salida sincronizada zs.
Con dispositivos programables conviene emplear el modelo de Moore. En este caso las
salidas están sincronizadas con el reloj.
Con entrada x y salida z; la salida se activa cada vez que se presenta la secuencia 010, y
mientras que la secuencia 100 no se haya presentado, en cuyo caso la salida se desactiva
permanentemente.
reset S0
0
0 1
0 S1 S4
1
0 0
...0 ...1
1 0
1
S2 1 S5
...10
0 0
...01
0 1 0
S3 S6 0/1
1 0
...010 ...100
MODULE fsm010
TITLE 'fsm010'
"Activa Z cada vez que llega 010 y mientras no llegue 100.
"si llega 100 se activa Y, y permanece en ese estado.
"Declaraciones
"Pines de entrada
clk, Xin, RESET pin;
"Pines de Salida
Q0, Q1, Q2 pin istype 'reg';
Z, Y pin istype 'com';
"Registro de Estado
SREG = [Q0, Q1, Q2];
"Definicion de Estados
S0 = [0,0,0]; " Estado Inicial. (Reset state)
S1 = [0,0,1]; " secuencias tipo ...0
S2 = [0,1,0]; " secuencias tipo ...01
S3 = [0,1,1]; " secuencias tipo ...010
S4 = [1,0,0]; " secuencias tipo ...1
S5 = [1,0,1]; " secuencias tipo ...10
S6 = [1,1,0]; " secuencias tipo ...100
equations
[Q0,Q1,Q2].clk= clk;
[Q0.ar, Q1.ar, Q2.ar] = RESET; "Con Reset va a S0
" Z=!Q0&Q1&Q2; Y=Q0&Q1&!Q2;
"Modelo de Moore
state_diagram SREG
state S0: Z=0; Y=0; if Xin then S4 else S1;
state S1: if Xin then S2 else S1;
state S2: if Xin then S4 else S3;
state S3: Z=1; if Xin then S2 else S6;
state S4: if Xin then S4 else S5;
state S5: if Xin then S2 else S6;
state S6: Y=1; goto S6;
END fsm010;
Q1 := (!Q0.FB & Q1.FB & !Xin) # ( !Q0.FB & Q2.FB & Xin) # (Q0.FB & Q1.FB & !Q2.FB)
# (Q0.FB & !Q1.FB & Q2.FB);
Q1.AR = (RESET);
Q1.C = (clk);
Con estas ecuaciones, podría haberse efectuado el diseño sin emplear diagrama de estados.
MODULE cntgray
TITLE 'Contador en Gray'
"Pines de Entrada
clk, M, RESET pin 1, 2, 3;
"Pines de Salida
Z0, Z1, Z2 pin istype 'pos, reg';
"Registro de Estado
SREG = [Z0, Z1, Z2];
S0 = [0,0,0];
S1 = [0,0,1];
S2 = [0,1,0];
S3 = [0,1,1];
S4 = [1,0,0];
S5 = [1,0,1];
state_diagram SREG
state S0: goto S1;
state S1: if M then S3 else S2;
state S2: if M then S6 else S3;
state S3: if M then S2 else S4;
state S4: if M then S0 else S5;
state S5: if M then S4 else S6;
state S6: goto S7;
state S7: if M then S5 else S0;
test_vectors ([clk, RESET, M] -> [Z0, Z1, Z2])
[0,1,.X.] -> [0,0,0];
[.C.,0,0] -> [0,0,1];
[.C.,0,0] -> [0,1,0];
[.C.,0,1] -> [1,1,0];
[.C.,0,1] -> [1,1,1];
[.C.,0,1] -> [1,0,1];
[.C.,0,0] -> [1,1,0];
[.C.,0,0] -> [1,1,1];
end cntgray
Z0 := (Z0.FB & !Z1.FB & !M) # (Z0.FB & !Z2.FB & !M) # (Z0.FB & Z2.FB & M)
# (!Z0.FB & Z1.FB & Z2.FB & !M) # (Z1.FB & !Z2.FB & M);
Z0.AR = (RESET);
Z0.C = (clk);
Z1 := (!Z0.FB & Z2.FB & M) # (!Z1.FB & Z2.FB & !M) # (Z1.FB & !Z2.FB);
Z1.AR = (RESET);
Z1.C = (clk);
Z2 := (!Z0.FB & !Z1.FB & M) # (Z0.FB & Z1.FB & M) # (!Z2.FB & !M);
Z2.AR = (RESET);
Z2.C = (clk);
Ejemplo A2.8.
Q
D DQ
J Q.f
K b
reloj
Índice general
APÉNDICE 2 .........................................................................................................................................1
USO DE ABEL ......................................................................................................................................1
A2.1 INTRODUCCIÓN ...........................................................................................................................1
A2.2 LENGUAJE ABEL. .......................................................................................................................1
A2.3. SISTEMAS COMBINACIONALES...................................................................................................1
Ejemplo A2.1. .................................................................................................................................1
Ejemplo A2.2. .................................................................................................................................3
Ejemplo A2.3. .................................................................................................................................4
Ejemplo A2.4. .................................................................................................................................5
Ejemplo A2.5 Multiplicador combinacional. .................................................................................6
A2.4. DISEÑO DE MÁQUINAS SECUENCIALES. ........................................................................................8
Ejemplo A2.5. Detector secuencia 0101. .......................................................................................8
Ejemplo A2.6. Reconocedor de un patrón finito. Modelo de Moore ............................................13
Ejemplo A2.7. Contador sincrónico con control de modo M. ......................................................15
Ejemplo A2.8. ...............................................................................................................................17
ÍNDICE GENERAL ...............................................................................................................................18
ÍNDICE DE FIGURAS ...........................................................................................................................19
Índice de Figuras
Apéndice 3
Uso de espresso
A3.1 Introducción
Para resolver problemas reales, con elevado número de variables y funciones, es necesario
disponer de una aplicación computacional para enfrentar el diseño lógico.
Puede ejecutarse en forma interactiva bajo Unix, Linux o Windows en una ventana DOS,
ocupando 160KB. Si bien tiene una interfaz simple, aún hoy es una herramienta suficientemente
poderosa para ser empleada en un curso básico de Sistemas Digitales.
Los algoritmos heurísticos empleados por espresso obtienen una cobertura de la función
mediante implicantes, pero no necesariamente la función mínima; salvo que se emplee la opción
–Dexact. En este último caso la ejecución puede ocupar mucho tiempo.
La comprensión de las ideas en que está basado espresso implican familiarizarse con nuevos
conceptos asociados a funciones booleanas.
Este apéndice no profundiza en los conceptos en que está basado espresso, sino en su uso a
través de ejemplos.
Se logra con el siguiente texto, que suponemos almacenado en el archivo ej1.pla. Se agregan
comentarios de línea y de fin de línea con el símbolo #.
.i 4 # número de entradas
.o 1 # número de salidas
.ilb A B C D # nombre de las entradas
.ob Z # nombre de la salida
# Los mintérminos presentes se especifican con valor 1.
# ON-set
0000 1
0011 1
0101 1
1100 1
1101 1
# Los mintérminos superfluos se especifican con -. DC-set
0001 -
0010 -
1111 -
.e #se termina con end.
La ejecución del comando: espresso ej1.pla > ej1.out, produce el siguiente archivo:
.i 4
.o 1
.ilb A B C D
.ob Z
.p 3
-101 1
00-- 1
110- 1
.e
El resultado, entrega, en el mismo formato de entrada, los implicantes, productos o cubos que
son una cobertura de la función.
Sólo basta reemplazar, mediante un editor de texto, los ! por ~. Además agregar el comando
assign.
Con la opción –Dexact efectúa una minimización exacta. La opción –t efectúa traza, la que va
mostrando estadísticas de ejecución.
espresso -Dexact -t ej1.pla
Con la opción –Dqm se realiza una heurística para resolver la tabla de implicantes, consistente
en elegir un cubo para resolver la tabla cíclica, y no se vuelve atrás para comparar. Las letras qm
provienen de "quasi-minimal".
espresso -Dqm -t ej1.pla
A3.2.3. Costos.
La opción –t genera un listado con la duración de la etapa en segundos y el costo una vez
completa la fase.
En el costo se indica el número c de productos o cubos; seguido de in, la suma del número de
entradas a las compuertas ands; luego out que es la suma de las entradas a las compuertas or de
salida; finalmente el total tot que corresponde a la suma de entradas del diseño.
En el formato pla tipo fd, del resultado, se cuentan los unos y ceros de la tabla de entrada, éstos
corresponden a in; los unos de la tabla de salida corresponden a out.
La columna inicial READ, indica el costo sin minimización, la última columna da el tiempo
total y el costo con la minimización ya realizada.
Una forma alternativa de ingresar los datos a espresso es mediante ecuaciones. En este formato
cada ecuación se separa de la siguiente con puntos y comas. El operador or se simboliza con +,
a una variable complementada se le agrega una comilla simple; dos literales adyacentes
simbolizan el operador and, también puede escribirse un asterisco. Además: != simboliza la
operación xor; == representa a not xor. La construcción !(..) niega el contenido de la frase
entre paréntesis.
Si se escriben sumas de productos, el operador complemento tiene mayor precedencia que el
and, el cual a su vez tiene mayor precedencia que el or. Pueden usarse paréntesis.
.i 3
.o 2
.ilb a b ci
.ob sum cout
.p 8
111 10
101 10
010 10
100 10
111 01
011 01
101 01
110 01
.e
El programa sis, Sequential Interactive System, tiene muchas opciones que serán expuestas en el
Apéndice 6.
La descripción del archivo con formato pla, para describir multifunciones puede explicarse a
través del siguiente ejemplo.
Sean dos funciones de tres variables: con 3 entradas (a, b, c) y 2 salidas (f1, f2), cuyas tablas de
verdad se muestran a continuación:
a b c f1 f2
0 0 0 1 0
0 0 1 1 1
0 1 0 0 0
0 1 1 0 0
1 0 0 0 -
1 0 1 1 1
1 1 0 1 1
1 1 1 1 0
Un "0" en un campo de salida significa que el cubo no contribuye a esa salida; es decir, el 0 en
la salida no está indicando que el cubo pertenece al conjunto off de la función.
La minimización simultánea y exacta, origina los siguientes cubos.
.i 3
.o 2
.ilb a b c
.ob f1 f2
.p 4
1-0 01
00- 10
11- 10
-01 11 #el cubo b’c es compartido por ambas funciones.
.e
.i 4
.o 3
.ilb a b c d
.ob f1 f2 f3
0010 110
0011 110
0101 110
0110 011
0111 111
1000 101
1001 101
1010 110
1011 110
1101 101
1110 011
1111 111
.e
Los mintérminos presentes en cada función se marcan con un 1; cuando no están presentes se
marcan con ceros. En el ejemplo, se tiene que:
f1 m(2,3,5, 7,8,9,10,11,13,15)
Como no existen condiciones superfluas, se desprende que los ceros de la función, quedan
dados por:
f1 ' m(0,1, 4, 6,12,14)
Se tienen cinco implicantes que son compartidos por las tres funciones. Esta forma resulta
útil empleando dispositivos programables PLD, ya que se obtiene el menor número de
productos que minimizan todas las funciones.
Con la opción –Dso (single output) se logra la minimización individual de las funciones. De
esta forma se obtiene la forma equivalente, en términos de ocho productos:
.ilb a b c d
.ob f1 f2 f3
10-- 100
-01- 100
-1-1 100
01-1 010
--1- 010
1-01 001
100- 001
-11- 001
Para obtener minimizaciones en forma de producto de sumas, puede emplearse la opción: -epos
(product of sums).
f=a+a'b, g=a'b.
El comando: espresso –Dopo –Dso file.pla, obtiene el siguiente diseño con 4 entradas:
f=a+b, g=a'b.
X Z D3 Q3
Q2 D2 D2 Q2
D1 D1 Q1
Q1
Q0 D0 D0 Q0
clk
Figura A3.1
d2 = (!q2&q0) | (q2&!q0);
d1 =(!x&!q2&!q1&q0)|(x&!q2&!q0)|(!x&q2&!q0)| (q1&!q0);
d0 = (!q0);
z = (x&q1) | (!x&!q1);
Debido a que espresso minimiza funciones multivaluadas puede emplearse para obtener las
ecuaciones de próximo estado a partir de una descripción del diagrama de transiciones.
La metodología de asignar estados en la que se emplea un bit diferente para cada estado (one
hot), logra que el próximo estado dependa de solo un bit, lo cual produce lógica combinacional
más simple y rápida; esto a costa de un mayor número de flip-flops.
Para efectuar esta asignación de estados se agrega la palabra reservada .kiss.
0 s0 s1 0
1
1 1
s3 1 s2
0 0
Figura A3.2
Asumiremos un modelo de Moore, con salida uno asociada al estado s3; el resto de los
estados tienen salida cero. Se tienen entonces cuatro variables: la entrada x es una variable
binaria; el estado presente y el próximo estado son variables simbólicas multivaluadas, pueden
tener cuatro valores cada una; y la variable de salida z, binaria en el caso del ejemplo.
La descripción del archivo no emplea los controles .i y .o; a cambio se describen las entradas
y salidas empleando .mv. La primera cantidad, después de .mv, es el número de variables;
luego el número de entradas binarias; luego el número de valores que pueden tomar las
variables simbólicas, y finalmente el tamaño de la variable de salida.
.mv 4 1 -4 -4 1
.ilb x
.ob z
.kiss
0 s0 s0 0
1 s0 s1 0
0 s1 s1 0
1 s1 s2 0
0 s2 s2 0
1 s2 s3 0
0 s3 s3 1
1 s3 s0 1
.mv 3 1 4 5
.ilb x
.ob s0 s1 s2 s3 z
.label var=1 s0 s1 s2 s3
.p 8
0 1000 10000
1 1000 01000
0 0100 01000
1 0100 00100
0 0010 00100
1 0010 00010
1 0001 10001
0 0001 00011
.e
Se reconocen ahora tres variables: la entrada que se considera binaria, la segunda que puede
representar por 4 bits, y la salida de tamaño 5. El programa agrega un rótulo con el orden de las
variables.
Si este archivo se modifica para variables booleanas, puede aplicarse la metodología vista en
A3.5, para obtener las ecuaciones de diseño.
#.mv 3 1 4 5
.i 5
.o 5
.ilb x q0 q1 q2 q3
.ob s0 s1 s2 s3 z
#.label var=1 s0 s1 s2 s3
.p 8
0 1000 10000
1 1000 01000
0 0100 01000
1 0100 00100
0 0010 00100
1 0010 00010
1 0001 10001
0 0001 00011
.e
Se ilustra la generación de una tabla que realiza la suma de dos operandos binarios sin signo,
de seis bits cada uno. La salida o resultado se expresa en 7 bits.
#include <stdio.h>
#define DIGITOS 16
static char bufc[DIGITOS + 1];
char * prtint(int i, int largo)
{ int j;
char *p = bufc;
for (j=DIGITOS-1; j>=0; j--) if((1<<j)&i) *p++='1'; else *p++='0';
return (bufc+DIGITOS-largo);
}
int escribe_archivo(void)
{ FILE *stream;
/* Abre stream para escritura, en modo texto. */
if ((stream = fopen("salida.pla", "w")) == NULL) {
fprintf(stderr, "No pudo abrir archivo de salida.\n");
return 1;
}
int main(void)
{ escribe_archivo();
return 0;
}
Problemas resueltos.
Problema PA3.1
Basta especificar que la función será 1 cuando el vector de las entradas tenga un número
impar de unos.
.i 3
.o 1
.ilb a b c
.ob f
001 1
010 1
100 1
111 1
.e
Problema PA3.2.
.i 4
.o 1
.p 4
111- 1
11-1 1
1-11 1
-111 1
.e
.i 5
.o 1
.p 20
0-111 1
01-11 1
011-1 1
0111- 1
1011- 1
101-1 1
10-11 1
-0111 1
1101- 1
110-1 1
1-011 1
-1011 1
1110- 1
11-01 1
1-101 1
-1101 1
111-0 1
11-10 1
1-110 1
-1110 1
.e
Problema PA3.4.
Problema PA3.5.
f(a, b, c, d, e, f) = xor (xor ( xor ( xor ( xor (a, b), c), d), e), f).
Referencias
http://www-cad.eecs.berkeley.edu
Índice general.
APÉNDICE 3 .........................................................................................................................................1
USO DE ESPRESSO ............................................................................................................................1
A3.1 INTRODUCCIÓN ...........................................................................................................................1
A3.2 MINIMIZACIÓN DE UNA FUNCIÓN ................................................................................................1
A3.2.1. Formato PLA. ....................................................................................................................2
A3.2.2. Tipos de minimizaciones. ...................................................................................................3
A3.2.3. Costos.................................................................................................................................3
A3.2.4. Formato eqn. ......................................................................................................................4
A3.3 MINIMIZACIÓN CON MÚLTIPLES SALIDAS ....................................................................................5
A3.4 MINIMIZACIÓN DE PRODUCTO DE SUMAS ....................................................................................7
A3.5. OPTIMIZACIÓN DE FASES............................................................................................................8
A3.6 MINIMIZACIÓN DE FUNCIONES DE PRÓXIMO ESTADO ..................................................................8
A3.7 MINIMIZACIÓN DE DIAGRAMAS DE ESTADO ..............................................................................11
A3.8 GENERACIÓN AUTOMÁTICA DE TABLAS EN FORMATO PLA. .......................................................13
PROBLEMAS RESUELTOS. ...................................................................................................................14
Problema PA3.1 ...........................................................................................................................14
Problema PA3.2. ..........................................................................................................................14
Problema PA3.3. ..........................................................................................................................15
Problema PA3.4. ..........................................................................................................................15
Problema PA3.5. ..........................................................................................................................16
EJERCICIOS PROPUESTOS DE MINIMIZACIÓN ......................................................................................16
REFERENCIAS ....................................................................................................................................17
ÍNDICE GENERAL. ..............................................................................................................................18
ÍNDICE DE FIGURAS ...........................................................................................................................19
Índice de Figuras
Figura A3.1.................................................................................................................................. 10
Figura A3.2.................................................................................................................................. 11
Apéndice 4
Circuitos de Conmutación
Circuitos Lógicos.
S2 S1
L
S1 S2 L
Interruptor cerrado: 1
0 0 0 Ampolleta encendida: 1
0 1 0
1 0 0
1 1 1
Para representar la situación mediante el algebra de Boole, las variables deben tomar
solamente dos valores. Estos valores físicos deben ser asociados o mapeados a los valores
lógicos 0 ó 1. Puede comprobarse que si al valor físico, interruptor cerrado se asocia el valor
lógico 0; y a interruptor abierto se asocia un 1 lógico, manteniendo la asignación para la
variable ampolleta, se tendrá ahora la siguiente tabla, que resume el comportamiento del sistema
anterior:
S1 S2 L Interruptor cerrado: 0
0 0 1 Ampolleta encendida: 1
0 1 0
1 0 0
1 1 0
S1 S2 L
0 0 0 Interruptor cerrado: 0
0 1 1 Ampolleta encendida: 0
1 0 1
1 1 1
Lo cual ilustra que las expresiones booleanas dependen de la forma en que se efectúe la
asignación de valores lógicos relativa a los valores físicos.
S1
Figura A4.7 Red or con interruptores.
S1 S2 L
0 0 0
Ampolleta encendida = 1
0 1 1
Interruptor cerrado = 1
1 0 1
1 1 1
La Figura A4.8 representa el circuito que se emplea en las escaleras para encender y apagar,
desde dos lugares diferentes, la misma ampolleta.
En este caso se emplean interruptores con tres terminales, uno de ellos se denomina común.
Si cuando el común se conecta con el terminal izquierdo decimos que el interruptor está en valor
lógico verdadero, y falso en caso contrario, tendremos:
V
S1 S2 L
0 0 1
0 1 0
1 0 0 S1
L S2
1 1 1
A4.3 Relés.
V nc
no
+ común
Para construir sistemas en base a relés se conectan las salidas de contactos en las entradas del
próximo elemento, el circuito con las bobinas. Suele emplearse la siguiente asignación lógica:
bobina energizada equivale a 1 lógico, contacto cerrado equivale a 1 lógico.
Una alternativa es colocar la fuente en el lado de los contactos. De este modo el contacto
normalmente cerrado coloca la tensión de fuente en la línea.
Existe un diagrama simplificado que muestra solamente los contactos, no las bobinas. A
continuación se ilustra la simbología que suele emplearse en redes de conmutación, en base a
relés:
NC NO
f
x’ y z
Una representación esquemática más simple aún, es la que muestra la Figura A4.12:
a b'
f
c' d
Donde la ecuación lógica para f se obtiene como la suma lógica de todas las vías posibles de
conexión. En la Figura A4.12 existe una vía de transmisión si ab' toma valor 1 lógico; esto
ocurre cuando el contacto a está cerrado y cuando el contacto b' está cerrado; es decir b abierto.
También existe una vía alternativa de transmisión si c´d toma valor 1 lógico.
También puede obtenerse la ecuación lógica para f, como el producto lógico de todas las
posibles aperturas de la vía.
Para la Figura A4.12 existe una apertura si (a + c') toma valor lógico 0. Esto ocurre si a está
abierto y c' esta abierto; es decir si c está cerrado.
Puede notarse que cada una de las aperturas está formada por los elementos que constituyen
un conjunto de corte.
Ejemplo A4.1
En caso de relés, pueden efectuarse conexiones como la siguiente:
a b
e f
c d
Figura A4.13 Conexión puente empleando relés.
E2 E3 E0
E0
E1 E3 ( )
E1 A
A E2
Gnd
Diagrama Escalera
Diagrama Eléctrico.
Figura A4.14 Diagramas lógicos para PLC.
Si las salidas de estas redes se conectan en las entradas de otras similares, las caídas de
voltajes a través de los diodos van degradando significativamente los niveles de los voltajes en
las salidas. Si se conectan, por ejemplo, varias compuertas and, en cascada, y los diodos
conducen, la salida de la etapa final tendrá un voltaje cada vez mayor (no podrá asociarse con
un cero lógico). Una solución es aumentar el voltaje de las fuentes y redefinir los rangos de
voltajes para el cero y uno lógico, esto además de aumentar el consumo de energía no soluciona
el problema de conectar varias componentes en cascada. Adicionalmente no puede
implementarse un inversor, empleando diodos y resistencias solamente. Por esta razón se
emplean componentes activas, en el diseño de las compuertas lógicas.
Vc
Vb
NPN
Un voltaje alto en la base satura al transistor, y el voltaje del colector queda en una tensión
cercana a 0,2 (voltaje bajo). Cuando se aplica un voltaje bajo en la base, el transistor se corta y
la salida adquiere un valor alto a través de la resistencia de pull-up. El circuito opera como un
inversor lógico.
Nuevamente pueden definirse rangos de voltajes que pueden ser considerados 0 y 1 lógicos.
Combinando el circuito and en base a diodos, con el inversor en base a un transistor, se logra
un circuito NAND. La familia DTL, fue empleada hasta comienzos de la década de 1970, en
Vc
A Vb
B N
PN
En esta configuración un 0 lógico está representado por un voltaje menor que 0,7[V]; el 1
lógico está sobre 4[V].
Para que el transistor conduzca, el voltaje Vb debe ser mayor que 1,4[V]. Si es menor, el
transistor estará cortado y la salida tomará valor alto (cercano al voltaje de polarización a través
de la resistencia de pull-up).
Fan-out.
Si la salida baja de un nand está conectada a varias entradas, éstas le inyectan corriente a
través de los diodos que conducen, lo cual podría sacar de saturación al transistor. Se denomina
fan-out, al máximo número de entradas que pueden conectarse a una salida, manteniendo los
voltajes dentro de los rangos asignados a la lógica.
La implementación de compuertas nand y nor mediante lógica DTL es sencilla de realizar. Y
debido a que éstas son funcionalmente completas pueden diseñarse todas las funciones lógicas
solamente empleado nands o solamente nor.
Wired-and.
Una ventaja adicional de la configuración es que permite conectar directamente las salidas,
lográndose mediante la conexión la función lógica and (se denomina wired-and; es decir, un
and debido al alambrado.)
Si suponemos dos salidas f1 y f2 conectadas, se tendrá que basta que una de ellas esté en 0
(es decir, que tenga el transistor asociado saturado) para que la salida f (el punto de conexión)
también esté en voltaje bajo. Sólo cuando ambas salidas están altas (ambos transistores
cortados) la salida f será alta.
f1
f = f1 and f2
f2
El transistor con dos emisores, reemplaza a los tres diodos del circuito NAND DTL. El
circuito simplificado se ilustra a continuación:
+V +V
R1 R2
Vc
A
NPN
B Multiemisor
Cuando una de las entradas A o B está baja, la corriente que circula a través de R1 hacia el
colector no alcanza para hacer conducir al transistor de salida, y éste estará cortado; con lo cual
la salida estará alta a través de R2, la resistencia que fija el valor alto. Cuando ambas entradas
están altas circula corriente (en modo activo inverso) hacia la base del transistor de salida
saturándolo. De este modo el voltaje de salida será tipo 0,2 (valor bajo).
+
R3
V
R1 R2
Q3
A
Q2
B Q1 Q4
R4
La Figura A4.20 muestra un Nand TTL de dos entradas. El transistor Q3 y Q4 forman una
configuración denominada totem, Q3 introduce una constante de tiempo menor para producir la
salida alta.
Los valores de las componentes se diseñan de tal modo que se cumplan las especificaciones
siguientes:
VOH = 2,4[V] ; VOL = 0,4[V] ; VIH = 2[V] ; VIL = 0,8[V]
Donde VIH es el mínimo voltaje de entrada que puede ser considerado como 1 lógico; VIL es
el máximo voltaje de entrada que es reconocido como 0 lógico.
Similarmente: VOH es el mínimo voltaje de salida que se reconoce como 1 lógico; y VOL es el
máximo voltaje que es considerado un 0 lógico.
Si una salida está en VOH y se conecta a una entrada, en ésta se permite un VIH que es 0,4
volts menor; es decir la señal de salida puede degradarse en nivel y aún ser reconocida como un
valor lógico 1.
Si una salida está en VOL y se conecta a una entrada, en ésta se permite un VIL que es 0,4
volts mayor; es decir la señal de salida puede contaminarse con ruido externo, y aún ser
reconocida como un valor lógico cero. Las diferencias entre dichos niveles se denominan
márgenes de ruido de la familia.
Interruptores MOS.
Funciona como interruptor si el voltaje de compuerta (gate) es levemente mayor o menor que
el voltaje del terminal fuente (source): Se establece una vía conductora entre la fuente y el
sumidero (drain).
G G
S D S D
Transistor nfet.
nfet
R
G D S Lineal: VGS VT 0,8 V
0 VDS < VDSsat = VGS - VT
D S R
Saturación: VGS VT 0,8 V
D S
VDS > VDSsat >0
VGS=0
VDS
Cuando conduce un nfet deja pasar limpiamente un nivel cero. El sustrato está conectado
siempre a tierra.
Transistor pfet.
pfet R
G Lineal: VGS VT -0,8 V
D S
VDS > VDSsat = VGS - VT
D S R
D Saturación: VGS VT -0,8 V
S
VDS VDSsat
VG
S=0 -VDS
Cuando conduce un pfet deja pasar limpiamente un nivel uno. El sustrato está conectado
siempre a VDD.
Construcción nfet.
Canal
Compuerta(gate)
(capa de inversión de tipo n)
óxido
Fuente(source) Sustrato silicio Sumidero(drain)
Fuente S
Figura A4.25 Diagrama físico transistor nfet.
Operación.
La conducta del transistor nfet, es como sigue: Cuando se aplica un voltaje positivo en la
compuerta los electrones son atraídos hacia el canal (la región, inicialmente no conductora,
entre la fuente y el sumidero y muy cercana a la superficie del oxido de silicio). Los electrones
libres se recombinan con los huecos del material p y comienzan a circular electrones desde la
fuente al sumidero. Cuando el voltaje de compuerta es suficientemente alto muchos electrones
pasan al canal, y se establece conducción entre la fuente y el sumidero. Se crea una delgada
capa de material tipo n próxima al dióxido de silicio, que se denomina capa de inversión tipo n
(es el canal). La tensión mínima que crea el canal se denomina VGS (umbral), que dependiendo
de los materiales empleados puede estar entre 1 y 5 volts.
Si el voltaje de compuerta es muy bajo, prácticamente no hay electrones en el canal (salvo
los electrones libres producidos, en el material p, por activación térmica) y puede considerarse
que no existe flujo apreciable de corriente entre la fuente y el sumidero, se dice que el canal no
conduce. Este comportamiento es diferente al fet de juntura o al de empobrecimiento.
Este dispositivo puede estar en corte, o conducir. En caso de hacerlo se comporta como una
resistencia (similar a la zona de saturación en un transistor bipolar) o como fuente de corriente
(similar a la zona activa de un bipolar). Debido a la existencia de un voltaje umbral y su alta
impedancia de entrada son dispositivos ideales para implementar sistemas lógicos.
En un pfet, las regiones de difusión están positivamente cargadas, y el sustrato de silicio está
negativamente cargado. En éste, cuando se aplica un voltaje bajo, el canal conduce y cuando se
aplica un voltaje alto el canal se considera que no conduce, o que está abierto.
Los símbolos para los tipos de transistores recuerdan el modo de operación, el pequeño
círculo del pMOS recuerda que el transistor conduce cuando la compuerta es activada por lógica
negativa.
La siguiente red ilustra un inversor, implementado con una resistencia y un nfet. Con una
tensión menor que la umbral, se asume que la entrada es baja. Si la entrada es baja, el transistor
está cortado, y la salida estará en alto a través de la resistencia y la fuente. Cuando la tensión de
entrada es mayor que el umbral del nfet, éste conduce, y debe diseñarse tal que la resistencia
externa sea mucho mayor que la del fet en conducción, ya que en este caso la tensión de salida
será baja.
Inversor RTL
in out
Inversor CMOS.
Una compuerta típica CMOS estática está construida con dos redes complementarias:
Una red que fija el cero (pull-down, tira para abajo) compuesta de nfets, con fuentes
conectadas a tierra. Esto lleva a VOL = 0.
Una red que fija el uno (pull-up, tira para arriba) compuesta de pfets, con fuentes conectadas
a VDD. Esto lleva a VOH = VDD.
Solamente una de estas redes puede estar conduciendo en un determinado tiempo. La salida
será conectada a tierra o a VDD; pero no a ambas. Si ambas redes conducen simultáneamente,
La más simple de las compuertas CMOS, es el inversor, formado por un nfet y un pfet.
Como se verá otros tipos de compuertas requieren más transistores.
VDD
Pull- a b
Up
in out
in out out
Pull-
Down
Inversor
Compuerta CMOS
NAND
genérica
Las redes pull-up y pull-down son siempre duales. Para construir una red dual, se efectúan
las siguientes transformaciones:
Intercambiar nfets por pfets (y vice versa)
Intercambiar conexiones serie por conexiones paralelo (y vice versa)
La red de pull-up representa el cálculo de una función con salida alta; y la de pull-down
calcula salidas bajas. Un pfet en la red de pull-up es activado por entradas bajas, mientras que
un nfet en la red de pull-down es activado por entradas altas. Entonces, deben colocarse
transistores en serie para representar condiciones and; y en paralelo, para representar
condiciones or.
Por ejemplo, en el nand que se mostró antes, que calcula (ab)’, la salida es cero cuando las
entradas a y b están ambas altas; por lo tanto la red de pull-down está formada por una conexión
serie. En forma alternativa (dual) la función de salida es alta cuando a o b están bajas, entonces
la red de pull-down es una conexión paralelo.
El retardo de una compuerta estática CMOS se mide viendo cuan rápido puede conmutar su
salida. En un modelo simplificado se asume que todos los transistores cambian de estado on a
off cuando sus compuertas pasan por VDD/2. El retardo de una compuerta es medido desde el
instante en que el voltaje de compuerta pasa por VDD/2 hasta el instante en que la salida pasa
por el valor VDD/2.
Veremos cómo una compuerta conmuta su salida. En cualquier instante la red de pull-up o
de pull-down está conduciendo, creando con esto una trayectoria eléctrica desde VDD o GND
(respectivamente) hacia la salida. Esta trayectoria es una fuente de corriente que carga o
descarga la capacitancia de carga conectada a la salida. Es decir la capacidad de los cables o de
las entradas conectadas a esa salida. Debe considerarse que las entradas de compuertas CMOS
estáticas son las compuertas (gates) de los transistores que pueden tratarse como condensadores.
La conmutación de la salida de una compuerta puede ser modelada por una red RC. La
resistencia es el transistor conduciendo, y el condensador proviene de las compuertas que están
conectadas a esa salida.
in out in out
in out
A
en
0 Z 0 0 1 Z 1 1
0 1 0 1
Figura A4.31 Operación de compuerta de transmisión CMOS.
El transistor pMOS funciona bien transmitiendo un voltaje alto, sin pérdida de señal, pero
cuando se aplica un nivel 0, en el otro extremo se tendrá un nivel un poco mayor que cero. El
nMOS, funciona bien dejando pasar el nivel 0, pero degrada el 1.
En los circuitos lógicos, vistos antes, un pMOS deja pasar los unos en la red de pull-up; y los
nMOS en las redes de pull-down, dejan pasar los ceros.
Inversor CMOS.
En el siguiente diagrama, que emplea dos transistores MOS complementarios: Cuando X es
0V (valor lógico 0), el transistor p conduce, y el transistor n está abierto. Cuando X es 3V
(valor lógico 1), el transistor p está abierto, el n conduce.
3v
X Y
0 1
Y
1 0
Y = X'
0v Inversor
0 1
VDD
X
0v 0v VGS(umbral)
Gd Vin
Sd VTp VTn VDD
a b
3V a b f
0 0 1
0 1 1
f 1 0 1
1 1 0
0V f = (XY)' Nand
1 1
0 1
3V
3V
0
1
0V
0V
NOR CMOS.
Cuando a e b son ceros, ambos transistores p conducen estableciendo un voltaje alto en la
salida f.
a b
a b f
3V 0 0 1
0 1 0
f 1 0 0
1 1 0
0V f = (X+Y)' Nor
0 0 1 0
3V 3V
1 0
0V 0V
B C
F
Figura A4.40 Diseño del pull-up.
Luego se combinan las redes de pull-up y pull-down, para formar la compuerta CMOS
(complementaria).
B C
E
OE
OE'
S E S
OE
V V
E= X E
1 0
S=Z S=E'
0 1
Ejemplos de buffers de tercer estado también se encuentran en la familia TTL, ver por
ejemplo los buffers 74240 y 74244.
A'
in out
x Con A = 0 z = x
A' Con A = 1 z = y
A'
z
y
A
Figura A4.45. Multiplexor de 2 vías a una.
y
Con A = 0 y= x
A'
x Con A = 1 z = x
A'
La dificultad del diseño anterior, es el valor que toma z cuando A es cero (z tomaría un valor
que no es uno ni cero; sería una entrada en alta impedancia).
Para evitar esto: se especifica que con A = 0, se tiene que z = 0; y con A = 1, se tiene y = 0.
y Con A = 0 y = x; z = 0
A' Con A = 1 z = x; y = 0
A'
x 0
A A'
A
A'
0
A
Las explicaciones simplificadas del funcionamiento de los arreglos, en base a diodos, son
con fines ilustrativos de conceptos solamente. La tecnología implementa los fusibles
programables (diodos) empleando MOSFET. Como se ilustra a continuación.
Vcc Vdd
pfet configurado como
resistencia de pull-up
a
a
Si línea horizontal está
alta el nfet fija el cero
en la línea vertical.
La estructura de las PROM y PLA, en base a MOSFET son similares. En la PROM el arreglo
de AND es un decodificador de direcciones (las líneas horizontales son las líneas de palabra, y
sólo una puede estar a tierra para una determinada entrada); en una PLA cada línea horizontal es
una línea de producto. El número de líneas verticales da el ancho de la palabra en una PROM;
en una PLA genera el OR de los productos.
Vdd Vdd
Vdd
Vdd
Vdd
Si una variable de entrada está baja, la línea vertical está alta, el nmos fija la línea horizontal
en bajo. Todas las líneas de entrada deben estar altas (todos los nmos conectados están abiertos)
para que la línea horizontal esté alta.
Basta que una línea horizontal esté alta para que la salida esté baja, ya que el nmos conduce.
Si todas las líneas horizontales están bajas, la tensión de salida estará alta. Esto implementa la
función nor, por esta razón se agrega un inversor, para generar el or.
La Figura A4.50, describe dos funciones booleanas de tres variables. Realizando un diseño
convencional, se obtienen las ecuaciones minimizadas para el diseño.
El archivo jedec, que contiene el diseño y generado por un programa, es como sigue:
Type: PAL22V10
*
QP24* QF5828* QV1024*
F0*
L0044 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 *
L0088 11 11 10 11 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 *
L0132 11 11 01 11 01 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 *
L0176 11 11 11 11 11 11 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 * fusibles
L0440 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 *
L0484 11 11 01 11 01 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 *
L0528 11 11 11 11 10 11 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 *
L5808 11 11 11 11 11 11 11 11 11 11 *
C2770*
88
132
D
A
Se destacan los fusibles que quedan con un cero, que identifican las variables en cada
producto.
L0484 11 11 01 11 01 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 *
L0528 11 11 11 11 10 11 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 *
A B
A’ B’
C’
Los productos que habilitan el tercer estado están todos abiertos (L0044 y L0440)
L0044 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 *
L0440 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 *
Para el caso del ejemplo, la estructura del vector tiene 24 caracteres por línea. Uno por cada
pin del dispositivo.
Vector: "0",A,B,C,"0000000N000000000",(E,D)L,"N"
Para el caso del ejemplo, se generan todas las combinaciones posibles para tres entradas, y se
establecen los valores que deben tener las salidas en cada caso.
V00001 00000000000N000000000HHN*
V00002 00010000000N000000000LHN*
V00003 00100000000N000000000LHN*
V00004 00110000000N000000000LLN* vectores
V00005 01000000000N000000000HHN*
V00006 01010000000N000000000LLN*
V00007 01100000000N000000000HHN*
V00008 01110000000N000000000HHN*
A289
En el programa Maple (versiones anteriores a 6) existe una biblioteca lógica para manipular
expresiones booleanas. Para emplearla debe usarse with(logic); antes de invocar a las funciones.
Se dispone de los siguientes operadores: &and, &or, ¬, &iff, &nor, &nand, &xor, y
&implies.
Para obtener información detallada sobre la biblioteca, puede invocarse Help, y luego:
Introduction. Estando abierta la ventana, en el primer nivel se elige Programming, en el
segundo: logic. En el tercer nivel del árbol puede seleccionarse Boolean, o Logic package.
Luego ver las funciones disponibles.
Para invocar ayuda específica se escribe: ?logic, función.
Las expresiones boolenas se escriben precediendo los operadores con el signo &.
Bequal(b1, b2); retorna valor verdadero si dos expresiones lógicas b1 y b2 son equivalentes.
canon(b, alpha, forma) retorna la forma canónica de la expresión b, con los valores de la
lista de variables; y si el argumento forma es CNF (retorna la forma conjuntiva) y si es DNF
retorna la forma disyuntiva.
Índice general.
APÉNDICE 4 ........................................................................................................................................ 1
CIRCUITOS DE CONMUTACIÓN .................................................................................................. 1
CIRCUITOS LÓGICOS. ..................................................................................................................... 1
A4.2 INTERRUPTORES MANUALES....................................................................................................... 1
A4.2.1 Circuito and. ...................................................................................................................... 1
A4.2.2 Circuito or. ......................................................................................................................... 2
A4.2.3 Circuito escalera. ............................................................................................................... 3
A4.3 RELÉS......................................................................................................................................... 4
A4.3.1. Función de transmisión. .................................................................................................... 4
A4.3.2. Función de apertura. ......................................................................................................... 5
Ejemplo A4.1............................................................................................................................................. 5
A4.3.3. Controladores lógicos programables(PLC) ...................................................................... 6
A4.4 CIRCUITOS LÓGICOS EMPLEANDO DIODOS. ................................................................................ 6
A4.5 TRANSISTOR BIPOLAR. ............................................................................................................... 7
A4.6 COMPUERTA NAND DTL. (DIODE TRANSISTOR LOGIC). ............................................................ 7
Fan-out. ......................................................................................................................................... 8
A4.7 COMPUERTAS TTL. .................................................................................................................... 9
Niveles lógicos TTL ..................................................................................................................... 10
A4.8 COMPUERTAS CMOS ............................................................................................................... 10
Interruptores MOS. ...................................................................................................................... 10
Transistor nfet.............................................................................................................................. 11
Transistor pfet.............................................................................................................................. 12
Construcción nfet. ........................................................................................................................ 12
Operación. ................................................................................................................................... 13
Inversor MOS RTL. ...................................................................................................................... 14
Inversor CMOS. ........................................................................................................................... 14
Retardo de conmutación. ............................................................................................................. 16
Compuertas CMOS de transmisión. ............................................................................................ 16
Operación de compuertas CMOS. ............................................................................................... 18
Inversor CMOS. ...................................................................................................................................... 18
Diseño electrónico inversor CMOS ......................................................................................................... 18
NAND CMOS ......................................................................................................................................... 19
NOR CMOS. ........................................................................................................................................... 20
Ejemplo A4.2. .............................................................................................................................. 21
Buffer inversor de tercer estado, en base a transistores CMOS. ................................................. 22
Mux con compuertas de transmisión. .......................................................................................... 23
Matriz de diodos con Mosfet. ....................................................................................................... 25
A4.9. FORMATO JEDEC PARA DISPOSITIVOS PROGRAMABLES. ........................................................ 26
Relación entre la información que suministra el compilador y la arquitectura de la GAL. ........ 27
A4.10 USO DE MANIPULADOR DE EXPRESIONES SIMBÓLICAS. MAPLE.............................................. 31
ÍNDICE GENERAL. .............................................................................................................................. 33
ÍNDICE DE FIGURAS........................................................................................................................... 34
Índice de Figuras
Apéndice 5
Uso de verilog
A5.1 Introducción
Las herramientas CAD soportan el ingreso de diseños digitales en base a esquemáticos, los
cuales se arman conexionando componentes básicas o de bibliotecas en un ambiente visual.
Sin embargo a medida que el sistema aumenta su tamaño, cada vez es más difícil la
descripción por esquemáticos. Los esquemáticos describen la conectividad y por lo tanto el
armado del sistema, pero no destacan o enfatizan la funcionalidad de éste.
Debido a que los módulos pueden reutilizarse, y los subsistemas más frecuentemente
utilizados pueden estar prediseñados, la programación a través de lenguajes toma cada vez más
importancia en el diseño de sistemas digitales.
Los lenguajes HDL deben permitir la simulación, cuyos objetivos son: verificar que el
diseño es funcionalmente correcto; es decir que se cumplan las especificaciones lógicas; y
además que se cumplan las especificaciones temporales; es decir que los tiempos de
propagación a través de las componentes y de los caminos que permiten la interconexión
cumplan las especificaciones de setup y hold de los registros, en caso de sistemas secuenciales
sincrónicos. Como deben considerarse todos lo casos, es difícil asegurar que la simulación
entregará la solución definitiva, ya que el conjunto de estímulos, para los cuales se realiza la
simulación, puede no ser completo. Al mismo tiempo los lenguajes deben realizar la síntesis
lógica; es decir traducir el programa a una serie de compuertas y flip-flops; también deben
efectuar minimizaciones, y permitir mapear a los bloques tecnológicos disponibles; para
finalmente colocar y enrutar de forma conveniente los bloques en el dispositivo programable.
Verilog existe desde el año 1984, luego de varios años de uso se ha estandarizado y su última
versión es del año 2001. Es un lenguaje similar a C, y dentro de los HDL, además de las
Diseño conceptual
Síntesis lógica-optimización
Diseño físico
Simulación temporal
No
Diseño correcto?
Si
Programación dispositivo
Figura A5.1
Permite representar una red lógica mediante sus ecuaciones. Para esto se emplean funciones
lógicas básicas para representar compuertas.
Los operadores and, or not, en minúsculas, son palabras reservadas, y se emplean como
nombres de funciones.
La función and [nombre de compuerta] (salida, entrada1, entrada2); describe un and de dos
entradas. Donde el nombre de compuerta puede ser opcional. Importante es destacar que estas
compuertas pueden tener “muchas” entradas.
La función or(x, ~a, b, ~c); representa a la compuerta or de tres entradas que puede
describirse por la ecuación lógica: x a b c
Las compuertas definidas son: and, nand, or, nor, xor, xnor, buf, not. La salida es el primer
argumento de la lista.
Para representar un sistema se requiere definir un módulo, el que se describe como una
función del lenguaje C; en la cual los argumentos son los nombres de las variables de entrada,
de salida y bidireccionales del módulo.
Los identificadores de variable deben comenzar con una letra o el carácter „_‟. Cuando se
definen identificadores se consideran distintas las letras minúsculas y mayúsculas.
La Figura A5.2 representa una red lógica con dos salidas y cuatro entradas. Su descripción
puede efectuarse mediante un módulo.
a f1
bloque
b
c
d f2
Figura A5.2
La ecuación se puede traducir en el módulo siguiente, notar el empleo de los nodos internos: n1,
n2 y n3 para formar la salida Z.
Con fines de simulación puede asociarse un retardo de propagación a cada compuerta. Por
ejemplo, la descripción: and #10 (x, y, z) indica que esa compuerta and tiene asociado un
retardo de 10 unidades de tiempo de simulación. También puede darse un nombre a cada
compuerta, escribiéndolo antes de la lista de las señales.
En un proceso de síntesis no es recomendable asociar retardos a las compuertas, ya que los
algoritmos pueden aumentar su tiempo de ejecución buscando satisfacer los requerimientos de
tiempo de las compuertas. Algunos programas de síntesis no consideran estos retardos en el
proceso de síntesis.
Ejemplo A5.2.
Mux de dos vías a una, implementado mediante compuertas.
x0 n0
x1 out
n1
c0
Figura A5.3
La ecuación del mux de la Figura A5.3, como suma de productos, puede expresarse según:
out(c0, x1, x0) = c0 x1 + c0' x0
endmodule
Una señal con tipo de datos de modo wire representa la actualización continua, en circuitos
combinacionales, de las salidas respecto a cambios de las entradas. Otro tipo de datos, que
suele estar asociado a salidas de flip-flops es reg, que es abreviatura de registro.
in out
ground
Figura A5.4
La Figura A5.4, muestra las señales empleadas en el módulo. Los tipos de conexiones o
nets: supply1 y supply0 conectan señales a un voltaje de polarización y a tierra,
respectivamente.
Los transistores cmos se especifican con tres argumentos (salida, entrada, control), y se
dispone de las formas nmos y pmos.
endmodule
Ejemplo A5.4.
Multiplexor basado en compuertas de transmisión.
ctrl’
ctrl’
in out in out
ctrl
ctrl
Figura A5.5
La Figura A5.6 muestra un multiplexor de dos vías a una. Cuando ctrl=1, se tiene que
out=in2; y cuando ctrl=0 se tendrá out=in1.
ctrl
C1
in1
ctrl’
ctrl’
out
in2
C2
ctrl
Figura A5.6
endmodule
Cuando son numerosas las ecuaciones de la red puede ser muy laboriosa la descripción de la
estructura mediante compuertas.
Los lenguajes permiten una descripción más abstracta, y a la vez compacta, de las redes
booleanas, ya que puede representarse el comportamiento o la conducta de la red.
Se describe lo que debe efectuar el sistema, empleando sentencias del lenguaje; es decir, la
red booleana se describe como un programa.
Lo que el programa describe en este nivel son los registros y las transferencias y
transformaciones de vectores de información entre los registros; este nivel se denomina RTL
(Register Transfer Level).
Este lenguaje permite describir con precisión la funcionalidad de cualquier diseño digital.
endmodule
endmodule
Operadores.
Los operadores al bit del lenguaje C: ~ para el complemento a uno, & para el and, | para el
or, y ^ para el xor, efectúan la operación bit a bit del o los operandos. Además se dispone de los
siguientes operandos: ~& para el nand, ~| para el nor, y: ~^ o ^~ para la equivalencia o not xor.
Se dispone de operadores unarios que efectúan la reducción del operando a un bit. Lo que
efectúan es aplicar el operador a todos los bits de la señal. Se tienen: & para la reducción AND, |
para la reducción OR, ^ para la reducción XOR, ~& para la reducción NAND, ~| para la
reducción NOR, y ~^ para la reducción XNOR.
Dentro del bloque pueden usarse las sentencias de control: if-then-else, case, while, for.
Importa el orden en que se efectúan una serie de asignaciones bloqueantes; ya que las
acciones dentro de un bloque de un proceso se ejecutan secuencialmente. Cuando se tiene una
serie de asignaciones nobloqueantes, no importa el orden en que son escritas.
Cada bloque always define un hebra de control. Si hay varios bloques always en un
módulo, se considera que están corriendo concurrentemente.
Las acciones dentro del bloque o proceso son evaluadas en orden secuencial. En esta
construcción puede tenerse uno o más bloques always dentro del módulo; y por lo menos una
acción en uno de los bloques always. Si dentro del procedimiento se asigna valores a una de las
señales, ésta debe ser declarada de tipo reg.
always @(A or B or C or D)
begin
Z = (B & ~C & D) | ( ~A & ~B) | (A & B & ~C );
end
endmodule
En forma similar se dispone de initial que crea un proceso que se realiza sólo una vez, lo
cual permite inicializar variables y generar estímulos para simulaciones. El proceso always se
ejecuta siempre.
La diferencia fundamental entre el tipo net y reg es que a este último se le asignan valores en
forma explícita. El valor se mantiene hasta que se efectúe una nueva asignación. Las salidas de
flip-flops serán de tipo reg.
No debe confundirse el tipo reg de Verilog, con un registro formado por flip-flops.
Dentro de un módulo se pueden tener procesos y asignaciones continuas.
El mux visto en los Ejemplos A5.2 y A5.6, puede describirse mediante un proceso, según:
Sentencias.
En la sentencia case no son necesarios los break; en los casos pueden colocarse valores con x
ó z, y sólo si sintonizan exactamente, se realiza la acción asociada al caso.
La ejecución de una acción puede ser retardada hasta que una condición se haga verdadera.
Esto se logra con la construcción: wait (condición) acción;
Se dice que la sentencia wait es sensible a los cambios de nivel, a diferencia de los eventos
controlados por @, que disparan la acción con los cantos de las señales de la lista.
Se evalúa la condición del wait, y si es falsa la acción se detiene; es decir se espera hasta que
la condición sea verdadera, momento en el cual se realiza la acción.
Ejemplo de uso:
Cuando se habilita la escritura, con WEnable=1, se transfiere el contenido del busA al
registro regA, puede escribirse:
Acciones en paralelo.
Entre las palabras fork y join las acciones se consideran de ejecución paralela. Los
separadores begin, end encierran sentencias secuenciales. Si las sentencias tienen retardos, en
un conjunto de acciones en paralelo, éstos se consideran respecto del inicio del bloque.
a b cin
sumadorcompleto
cout sum
Figura A5.7
El sumador de 4 bits, puede estar en otro archivo, en el cual se incluye la definición del
módulo básico. Se le da un nombre a cada instancia, etapai en el ejemplo, el que debe estar
precedido por el nombre del módulo básico.
En la Figura A5.8, se ilustran las instancias y las correspondencias de los nombres de las
puertas de cada etapa con los nombres del módulo básico. Con este diagrama resulta sencillo
efectuar las instancias dentro del módulo.
fulladder4
a3 b3 c3 a2 b2 c2 a1 b1 c1 a0 b0 Cin
etapa4 etapa2 etapa1 etapa0
Figura A5.8
module fulladder4 (Cin, a3, a2, a1, a0, b3, b2, b1, b0, sum3, sum2, sum1, sum0, Cout);
input Cin, a3, a2, a1, a0, b3, b2, b1, b0;
output sum3, sum2, sum1, sum0, Cout;
wire c1, c2, c3;
sumadorcompleto etapa0 (Cin, a0, b0, sum0, c1);
sumadorcompleto etapa1 ( c1, a1, b1, sum1, c2);
sumadorcompleto etapa2 ( c2, a2, b2, sum2, c3);
endmodule
El lenguaje debe proveer facilidades para generar estímulos, medir respuestas, y efectuar
despliegues de los datos.
Empleando programación jerárquica un esquema que mantiene separado el módulo del
diseño con el módulo de test, se visualiza en la Figura A5.9. La ventaja de esto es que el
módulo con el diseño debe luego sintetizarse; de esta forma todas las sentencias que tienen que
ver con la simulación quedan definidas dentro del módulo test; la finalidad de éste es generar los
estímulos y grabar los resultados de los test. El módulo test podría describir un elemento de
hardware, por ejemplo si se generaran los estímulos posibles mediante un contador o una
memoria.
Debe notarse que las salidas del módulo test (estímulos) son las entradas del módulo que se
está diseñando; y que las entradas del módulo test (respuestas) son las salidas del módulo que se
está diseñando.
La activación del diseño y test se logra con un tercer módulo denominado Banco de prueba
ubicado en el tope de la jerarquía, en el diagrama de la Figura A5.9.
Banco de Prueba
Test Diseño
Figura A5.9.
En la confección del test del semisumador, cuyo texto se encuentra a continuación, se define
un bloque que sólo se efectuará una vez. Esto se logra con la palabra reservada initial. El
símbolo: #10 b=1; indica efectuar un retardo de 10 (unidades de tiempo de simulación) y
luego efectuar la asignación. Con la secuencia dada se generan los estímulos para las entradas
del semisumador, con valores para ab: 00, 01, 11, 10. La palabra finish termina la generación de
estímulos.
El comando monitor muestra en la salida estándar, en formato similar a printf, los valores de
la lista de variables; las comas adicionales se interpretan como espacios.
Cuando cambia uno de los valores de la lista del comando monitor, se produce impresión de
una línea. Los valores se imprimen cuando todos los eventos del paso se han producido; es decir
se imprime al final de un intervalo de simulación. El formato %b despliega en binario, %d en
decimal, %h en hexadecimal. Sólo un monitor puede estar activo.
initial
begin
$monitor("t=",$time,,"a=%b, b=%b, suma=%b, cout=%b", a, b, suma, cout);
a=0; b=0;
#10 b=1;
#10 a=1;
#10 b=0;
#10 $finish;
end
endmodule
module BancoDePrueba;
wire a, b, su, co;
semisumador sm(a, b, su, co);
testsemisumador ts(su, co, a, b);
endmodule
Cuando, para un intervalo de tiempo de simulación, no quedan eventos activos por ser
atendidos, se procesa la cola de eventos de asignaciones nobloqueantes, pasando al lado
izquierdo los valores ya calculados.
Luego de lo cual se procesan los eventos de monitor, los comandos strobe y monitor.
Después de esto se pasa a procesar los eventos asociados al siguiente intervalo de tiempo.
Cuando un proceso está en ejecución sólo se detiene al encontrar un retardo (#) o un evento
de una lista de sensibilidad (@) o el comando wait, este último comando espera hasta que su
variable argumento sea verdadera.
Un bloque always o proceso debe contener alguno de los elementos de control de tiempo
para que la simulación se detenga. El bloque continúa su ejecución: cuando transcurre el
retardo, o cuando cambia una de las señales de la lista de sensibilidad o cuando ocurre el evento
que espera wait. Un evento produce otros eventos. Son éstas las únicas instancias en que se
Los eventos son itinerados para tiempos específicos y son colocados en una cola de espera,
ordenados en el tiempo, para ser atendidos. Los primeros eventos quedan al frente, los últimos
al fondo. Estando en el intervalo presente pueden procesarse varios eventos, no importando el
orden; una vez atendidos todos los eventos asociados al intervalo presente, se pasa al siguiente.
Durante el procesamiento pueden generarse nuevos eventos, que son ubicados en los lugares
temporales que les corresponden para su posterior procesamiento.
// Estímulos para verificar el inversor CMOS nivel de transistores del Ejemplo A5.3.
module stimulus;
reg in; // se escribe en in. Se le da tipo reg.
wire out;
initial begin
in=0; $display("%b, %b, t=%0d", in, out, $time);
#1 in=1'b1; $display("%b, %b,t=%0d",in, out, $time);
#4 in=1'b0; $display("%b, %b,t=%0d",in, out, $time);
#5 in=1'b1; $display("%b, %b,t=%0d",in, out, $time);
#5 in=1'b0;
#5 $finish;
end
endmodule
En Verilog, los tipos de datos net y reg pueden ser declarados como vectores. Existen
mecanismos de acceso a partes o a la totalidad del vector
Puede convenirse en establecer el bit más significativo del vector como el que se escribe
primero; además importa el orden con el que se declara el ancho del bus.
Valores.
De esta forma puede inicializarse un registro en forma parcial, asignado un valor a los
primeros cuatro bits de la variable out, mediante:
out[7: 4] = 4'b1010;
La operación concatenación, agrupa los elementos separados por comas en una lista
definida entre paréntesis cursivos.
out = {A[3:0], 4‟b0101};
El operador monádico, al bit, se aplica a cada uno de los bits, formando el complemento uno.
~(4‟b0101) = {~0,~1,~0,~1} = 4‟b1010
Los operadores de reducción realizan la operación sobre cada uno de los elementos del
vector.
&(4‟b0101) = 0 & 1 & 0 & 1 = 1‟b0
Si la expresión es con signo (se agrega s antes de la base) el número se extiende con signo.
3‟sb1 se extiende a 3‟sb111; 3‟sb0 se extiende a 3‟sb000
Si es unsigned se extiende con ceros. 3‟b1 se extiende a 3‟sb001
El nombre de una variable puede tener componentes. En este caso se define un arreglo.
reg datos[31:0]; // define a datos como un arreglo de 32 bits.
Puede tenerse acceso individual a los bits, por ejemplo: datos[5]=1‟bz;
Notar que en la definición del arreglo los corchetes van después del nombre del arreglo.
El siguiente módulo modifica el del Ejemplo A5.12, cambiando las entradas y salidas, de un
alambre, por un bus de 8 señales.
// Multiplexer nivel proceso abstracto. Multiplexer 2 vías a una de 8 bits cada una.
// Cuando c=1, out=x1; y cuando c=0, out=x0
wire c;
wire [7:0] x1, x0;
reg [7:0] out;
always @(*)
if (c==1) out=x1; else out=x0;
endmodule
Debe notarse que una descripción estructural, en base a compuertas, sería muy costosa en
términos de representación. Nótese que el segmento anterior puede ser generalizado a buses de
mayor ancho.
Para esto puede emplearse una declaración de constantes:
parameter <constante>=<valor>;
wire [1:0] c;
wire [7:0] x3, x2, x1, x0;
reg [7:0] out;
always @(*)
if (c==3) out=x3;
else if (c==2) out=x2;
else if (c==1) out =x1;
else out= x0;
endmodule
El proceso anterior también podría describirse mediante una sentencia switch case.
module mux4to1 (input x0, x1, x2, x3, c1, c0, output out);
assign out = c1 ? (c0 ? x3 : x2) : (c0 ? x1 : x0);
endmodule
c1 c0
x3
x2
out
x1
x0
always @(X or c)
if (c = = 0) out = X[0];
else if (c = = 1) out = X[1];
else if (c = = 2) out = X[2];
else if (c = = 3) out = X[3];
endmodule
Dibujar un esquemático, empleando como componente al mux de 4 vías a una, es una buena
manera de representar la arquitectura de un mux de 16 vías a una.
El diagrama ayuda a escribir el módulo de un mux de 16 vías a 1, en base a cinco muxes de 4
vías a una, mediante el empleo de vectores, puede escribirse:
endmodule
Sin embargo una representación compacta del mux de 16 a 1, mucho más simple, puede verse a
continuación.
module mux16a1 (out, c, x);
output out; // mux output de 1 bit
input [3:0] c; // 4 líneas de control
input [15:0] x; // mux input de 16 bits
wire [1:0] c;
wire [3:0] x;
wire out;
assign out=x[c];
// 74381 ALU
module alu(s, A, B, F);
input [2:0] s;
input [3:0] A, B;
output [3:0] F;
reg [3:0] F;
always @(s or A or B)
case (s)
0: F = 4'b0000;
1: F = B - A;
2: F = A - B;
3: F = A + B;
4: F = A ^ B;
5: F = A | B;
6: F = A & B;
7: F = 4'b1111;
endcase
endmodule
endmodule
Una de las ventajas de las descripciones mediante lenguajes, es que las estructuras que son
repetitivas pueden ser planteadas dentro de un lazo for dentro de un proceso.
// Las señales que son escritas dentro de un procedimiento deben ser declaradas reg.
reg [n-1:0] sum;
reg Cout;
reg [n:0] c; //reservas intermódulos
integer k; //variable entera para índice de for
endmodule
Empleando el operador que realiza la suma puede describirse un sumador binario en forma
muy compacta. La operación de concatenación de registros permite generar Cout correctamente.
La señal overflow considera operandos con signo.
endmodule
Las dos últimas columnas de la tabla de la Figura A5.13, muestran la generación de la señal
overflow, sin emplear la entrada C31. Se ilustra la señal LT (less than) para operandos con
signo.
y2
Enable y3
Figura A5.14.
endmodule
`define input_width 8
module paritygen (in, par);
input [`input_width - 1:0] in;
output reg par;
integer i;
endmodule
OE
X Y
Figura A5.15.
input A, B;
output W, Z;
reg W, Z;
always @(A or B )
begin
if (A= =1) Z=B;
else W=A;
end
En el caso del ejemplo, es preferible emplear Z<=B y W<=A, para las asignaciones, de esta
forma la simulación y la síntesis darán iguales resultados.
En el proceso de simulación, del Ejemplo A5.21, se considera a Z y W como variables
combinacionales, pero en el proceso de síntesis se las considerará secuenciales.
Otro riesgo es la interpretación literal de las condiciones. Por ejemplo: Se tienen 4 líneas en la
entrada y se desea obtener el código binario de la línea que tenga valor uno. En caso de tener
dos o más líneas activas la salida debe generar valor desconocido “x”.
La síntesis lleva a una cascada de muxs, ya que las condiciones de los if, se forman con los
bits individuales.
Figura A5.15a.
Mejores resultados se obtienen generando condiciones con evaluación “en paralelo” de las
cuatro entradas.
i2 i1
e1 e1
i3 i0
i1 i2
e0 e0
i3 i0
Figura A5.15b.
El siguiente código minimizado por espresso (ver Apéndice 3, sobre Uso de espresso),
permite obtener los diseños de la Figura A5.15b.
.i 4
F2 F1 F0 Función
0 0 0 A+B
0 0 1 A+1
0 1 0 A-B
0 1 1 A-1
1 0 x A*B
Figura A5.15c.
El siguiente diagrama RTL, ilustra una solución posible, quizás no la de menor costo, pero
directamente basada en la descripción abstracta anterior.
A B
32‟d1 32‟d1
F[0] 0 1 F[0] 0 1 15
15
+ - *
F[2:1] 00 01 10
Figura A5.15d.
module add32(i0,i1,sum);
input [31:0] i0,i1;
output [31:0] sum;
assign sum = i0 + i1; //descripción abstracta de comportamiento
endmodule
module sub32(i0,i1,diff);
input [31:0] i0,i1;
output [31:0] diff;
assign diff = i0 - i1;
endmodule
Una forma de estructurar acciones de acuerdo a los valores que toma una expresión es la
sentencia case. A diferencia con el lenguaje C, las sentencias break son implícitas; si se
encuentra un valor de entre los casos igual al valor de la expresión, se realiza la acción asociada,
y termina la “pasada” por el case.
Permite la representación tabular de operaciones mutuamente excluyentes como las que ocurren
en máquinas de estados finitos. Existen versiones casez y casex, pero no se recomiendan para la
síntesis.
La construcción siguiente:
case (expresión)
case_item1 : acción1;
case_item2 : acción 2;
case_item3 : acción 3;
case_item4 : acción 4;
default : acción_por_defecto;
La expresión y los valores de los ítems pueden ser cualquier expresión de tipo wire o reg. En
general la expresión se evalúa a un valor en bits, el cual es comparado con los especificados
enlos casos. No conviene emplear enteros para los valores de los casos, se recomienda
especificar los bits de los valores. La expresión puede ser una constante, por ejemplo: 1‟b1.
Las acciones asociadas pueden ser compuestas, en este caso deben estar entre un begin y un end.
La acción por defecto se realiza si el valor de la expresión es diferente de los casos
especificados; ésta no es necesaria si los valores de los casos cubren todos los posibles.
Si todos los posibles valores de la expresión sintonizan con a lo menos un valor de los casos o
con el caso por defecto siempre que en éste se asignen todas las salidas, se denomina un caso
completo. Si no se especifica un caso en forma completa, la síntesis empleará latchs. Esto
último no es deseable en la descripción de situaciones combinacionales.
Si los valores de los casos son mutuamente excluyentes se tendrá que la expresión sólo puede
tomar uno de los valores asociados a los casos. Se dice que es un caso paralelo; una entre varias
vías posibles.
Si el estado actual puede ser S0, S1, S2, S3, el siguiente segmento que genera la salida asociada
al estado, sintetizará con un latch la salida z, ya que el segmento establece que si el estado actual
es S3, el sistema recuerda el valor anterior de z.
always @(EstadoActual)
case (EstadoActual)
P
R
Figura A5.16.
//latch proceso.
module latchp(input D, clk, output Q);
reg Q;
always @(D or clk)
if (clk==1) Q = D;
else Q = Q;
clk
Figura A5.17.
Note que las asignaciones son bloqueantes, ya que se está representando un sistema cuya
salida puede cambiar entre cantos del reloj.
D Q
clk
Figura A5.18.
La tabla característica del latch, que muestra el próximo estado en función de las entradas, se
muestra en la Figura A5.19.
clk D Q(k+1)
0 x Q(k)
1 0 0
1 1 1
Figura A5.19.
La Figura A5.20, muestra diferentes casos de secuencias de las entradas D y clk. Cuando el
reloj tiene un canto de subida se deja pasar la entrada hacia la salida, cuando el reloj está bajo
los cambios de la entrada no afectan al latch. Si ocurren cambios de la entrada con el reloj en
alto, éstos son considerados.
Note en el intervalo t3, la caída de Q cuando baja D. También debe advertirse que en el
intervalo t4, estando el reloj bajo, un pulso en D no alcanza a ser registrado por el latch. Luego
de t4, estando el reloj alto, un canto de subida de D es capturado por el latch.
t1 t2 t3 t4
Clk
Figura A5.20.
El siguiente módulo genera estímulos y despliega los resultados al ser aplicados los
estímulos de la Figura A5.20 a las implementaciones del latch transparente basadas en
compuertas y en un mux.
reg clk, D;
initial //proceso que permite grabar en archivo las formas de ondas.
begin
$dumpfile("latcht.vcd");
$dumpvars(0, $time, clk, D, Q);
end
module BancoDePrueba;
wire D, clk, Q, co;
latchc l1(D, clk, Q);
// latchp l1(D, clk, Q);
testlatch t1(Q, clk, D);
endmodule
Figura A5.21.
Para el basado en mux, puede obtenerse una visualización de las formas de ondas, a partir de
un archivo en formato estándar vcd; existen aplicaciones de software libre para visualizar estos
archivos. Ver referencias.
Figura A5.22.
La Figura A5.23 muestra un flip-flop D disparado por cantos de subida del reloj. El módulo
en Verilog, emplea la condición posedge para definir el evento canto de subida. La asignación a
Q es no bloqueante.
El nombre de la función posedge recuerda positive edge (canto de subida, en español).
D Q
Q‟
Clk
Figura A5.23.
t1 t2 t3
Clk
Figura A5.24.
D Q
Q‟
Clk
Figura A5.25.
T Q(k+1)
0 Q(k)
1 Q‟(k)
Figura A5.26.
Los sistemas secuenciales sincronizados por cantos se caracterizan por tener procesos always
cuya lista de sensibilidad contiene negedge o posedge. Notar además, que si una de las señales
de la lista contiene posedge o negedge, el resto de las señales de la lista también debe tenerlas.
T Q
Q‟
Clk
Figura A5.27.
D Q
Q‟
Clk
Figura A5.28.
endmodule
R
D Q
Clk
Figura A5.29.
Como se define que en la simulación que realiza Verilog, los procesos pueden ser itinerados
en cualquier orden. Luego de un pulso de reset, las variables y1 e y2 podrían estar ambas en
cero o ambas en uno. Situación que define una carrera.
reg y1, y2;
Debido a que las asignaciones son nobloqueantes, no importa el orden en que están escritos
los corrimientos individuales de los bits.
Q
x
Clk
Figura A5.30.
Sin embargo la notación preferida, por ser simple y compacta, para describir registros de
desplazamiento es una descripción del corrimiento a la derecha, empleando la operación
concatenación:
{Q, Q[0]} = {x, Q};
Una señal de lógica negativa se considera activada por cantos de bajada. En los diagramas
lógicos suele denominarse en forma complementada, y su lugar de entrada al bloque pasa por un
pequeño círculo. En la Figura A5.31 se muestra la señal con nombre complementado.
Clk
Figura A5.31.
Ejemplo A5.35. Contador con reset, carga paralela y habilitación para contar.
C
Q
Clk
Figura A5.32.
En un contador interno Cnt va contando, desde 0 hasta (Divisor-1) veces el reloj de alta
frecuencia clk. Cuando cuenta el pulso Divisor mantiene durante un pulso, del reloj de alta
frecuencia, un uno en el reloj de baja frecuencia; en el resto de las cuentas de cnt el reloj de baja
frecuencia permanece en cero.
endmodule
initial
begin
$monitor("reset=%b, clk=%b, clkd=%b t=%d", reset, clk, clkd, $time);
reset=0; clk=0;
#5 reset=1;
//alternativa para generar una cantidad finita de pulsos de reloj.
//for(k=0;k<30;k=k+1) #10 clk<=~clk; $finish; End
module BancoDePrueba;
La Figura A5.33 muestra el período del reloj de baja frecuencia, se cumplen las relaciones,
con T el período del reloj de alta frecuencia.
Clk
Clkd
Divisor
Td Divisor T
Td
Figura A5.33.
El siguiente módulo emplea una asignación bloqueante para actualizar la señal clk. Este
cambio se produce dentro del paso de simulación y no generará nuevos eventos; por lo tanto no
oscila. La construcción correcta es con una asignación nobloqueante.
d q1 q2 q3
D Q D Q D Q
Clk Clk Clk
clk
Figura A5.34.
presetn
preset’ preset’ preset’
q0
D Q q1 Q q2
D Q D
nodo
clk
Figura A5.35.
initial
begin
$dumpfile("lfsr3.vcd");
$dumpvars(0, $time, Load,carga, clk, q);
end
initial
begin
$monitor("Load=%b carga=%b clk=%b salida=%b t=%d", Load, carga, clk, q, $time);
Load=0; clk=0;carga=0;
#10 Load=1;
#10 carga=1;
#10 Load=0;
module BancoDePrueba;
wire Load, clk;
wire [0:2] c;
wire [0:2] q;
Figura A5.36.
La señal reset‟, al activarse coloca en 1 el flip-flop q0, mediante la señal S (set); y en cero el
resto de los flip-flops, mediante la señal C (clear).
reset’
qn-1 C q1 C q0 S
Q D … Q D Q D
clk
Figura A5.37
resetn
Para identificar los parámetros actuales en cada instancia, se precede con un punto el
parámetro formal, y luego entre paréntesis el actual. En esta situación, no importa el orden en
que se pasen los argumentos. Esta modalidad resulta útil en sistemas con varios módulos y con
listas de varios argumentos.
module BancoDePrueba;
wire clk,resetn;
wire [3:0] cuenta;
ripple_counter rc ( clk, resetn, cuenta);
test t1 (clk, resetn, cuenta);
endmodule
Se generan las formas de ondas siguientes, las que muestran la naturaleza asincrónica del contador.
El contador MSI 74163 puede ser descrito, por el siguiente módulo. Debe notarse que se
dispone de señales clear y load de tipo sincrónicas y de lógica negativa, y que el AND de P y T
habilitan el contador. Se dispone de una salida RCO ripple carry out, que favorece la
implementación de contadores en cascada.
En la práctica las salidas de los diferentes flip-flops no cambian simultáneamente, esto lleva
a que el circuito combinacional que genera RCO tendrá salidas espúreas debidas a carreras en
las entradas. El módulo Verilog, podría evitar estos “glitches” sincronizando la salida RCO.
Para una máquina de Moore, se tendrán tres procesos, los cuales se describen en la Figura
A5.38.
Reset’
x P1 P2 P3
z
Y y
D Q
Clk
Figura A5.38
El diagrama de estados, de la Figura A5.39, describe una máquina que cuando detecta dos o
más unos seguidos en la entrada x entrega salida z=1; en caso contrario la salida será z=0.
A B
z=0 z=0
x=0 x=0
x=1
x=0
C
z=1
x=1
Figura A5.39
module BancoDePrueba;
wire Clk, Resetn, x, z;
moore m1 (Clk, Resetn, x, z);
test t1 (Clk, Resetn, x, z);
endmodule
El esquema general de la Figura A5.38, tiene ciertas dificultades prácticas y es que es posible
que se produzcan perturbaciones (glitches), debidas a carreras en las entradas de la red
combinacional de salida. Esto se debe a que los tiempos de propagación, entre el canto del reloj
y el cambio de las salidas, no puede ser idéntico para los diferentes flip-flops. Una forma segura
de tener salida libre de glitches, es generar la función combinacional de salida a partir del
próximo estado, y registrar la salida. El esquema general se muestra en la Figura A5.40.
zs
P3
D Q
Clk
Reset’
x P1 P2
y
D Q
y(k+1) Clk
Figura A5.40
Básicamente se mueve el código asociado a P3, que calcula la salida, dentro del proceso
always P2. Adicionalmente se calculan las salidas respecto al próximo estado.
Se ilustra el ejemplo anterior, con las modificaciones para obtener salida registrada libre de
perturbaciones, debidas a las carreras ocasionadas por el cambio de estado.
x P1 z P2
Y y
DQ
Clk
Figura A5.41
El diagrama de estados de Mealy, se muestra en la Figura A5.42, con un estado menos que el
similar de Moore.
Reset
x=1
z=0
A B
x=0
x=0 z=0 x=1
z=0 z=1
Figura A5.42
// Proceso registro. P2
always @(negedge Resetn or posedge Clk)
endmodule
Compara las entradas x1 e x2, si durante cuatro pulsos de reloj, se tienen secuencias iguales
se produce salida z=1; en caso contrario la salida es cero.
Árbitro de bus.
Las Figuras A5.42 y A5.43, ilustran una máquina secuencial para arbitrar un bus.
reset
r1 g1
r2
Árbitro g2
r3 g3
clk
Figura A5.42
reset 000
r1r2r3
Idle
0xx 1xx
gnt1/g1=1
01x
x0x 1xx
gnt2/g2=1
xx0 x1x
001
gnt3/g3=1
xx1
Figura A5.43
A5.9. Memorias.
La última versión de Verilog (2001), permite seleccionar cualquier elemento, bit o parte de
cualquier arreglo. Los cuales pueden ser de varias dimensiones.
integer n, m;
wire [31:0] PalabraA = ArregloBid [n][m]; // selecciona una palabra del arreglo
wire [7:0] ByteA = ArregloBid [n][m][31:24];//selecciona un byte de una palabra del arreglo
wire Bit0 = ArregloBid [n][m][0]; // selecciona un bit de una palabra del arreglo
A5.9.2. Simular RAM.
Las tareas del sistema: $readmemb y $readmemh, leen y cargan datos desde un archivo de
texto hacia la memoria. Estas tareas pueden ser invocadas en cualquier instante dentro de la
simulación. La sintaxis del comando es:
$readmemh("<NombreArchivo>", <NombreMemoria>, <DirecciónInicial>, <DirecciónFinal>);
El archivo de texto debe contener solamente: blancos (espacios, tabs, fin de línea),
comentarios, y los datos en forma de números binarios (para readmemb) o hexadecimales (para
readmemh).
Para una RAM de 8x8, el siguiente segmento, inicia el contenido, y luego define la ram.
initial
$readmemb("contenido.out", mem, 0, 7); // inicia memoria. Lee archivo ascii
always @(posedge clk)
begin
if (write) mem[addr] <= din; // escritura sincrónica de la memoria
end
assign # 5 dout = mem[addr]; // Lectura asincrónica de la memoria.
module top();
reg [15:0] data;
// instancia de paridad para palabras de 16 bits.
paridad #(16) p0 (y, data); //se cambia size a 16.
Se dan algunos ejemplos de sistemas asincrónicos. Mostrando las capacidades del lenguaje
para describirlos y simularlos.
endmodule
setn
G1 q
G2 qprima
resetn
Figura A5.44
La siguiente serie de estímulos genera diferentes recorridos. Si ambos controles pasan por
cero, no puede asegurarse el estado del latch.
initial
begin
$monitor("s=%b r=%b q=%b q'=%b", setn, resetn, q, qprima, $time);
setn=1;resetn=1;
#2 setn=0;
#2 setn=1;
#4 setn=0;
#4 setn=1;
#12 resetn=0;
#4 resetn=1;
#10 setn=0;resetn=0;
#4 setn=1;
#4 setn=0;
#4 setn=1;
#4 setn=0;
$finish;
end
r
G3
clk s
r G1
q
G4
d s1
G2
G6 s q‟
s1
r1
G5
clk r
Figura A5.45
R
R‟ Q
Clk
Q
S‟
S
Figura A5.46
El proceso de síntesis describe las etapas para convertir, la descripción HDL (Verilog o
VHDL) de un sistema digital, a una forma que pueda ser armada, manufacturada o descargada a
un dispositivo.
El o los elementos en los que será implementado el diseño, se denomina sistema tecnológico
objetivo (target), normalmente es de tecnología semiconductora. Se denomina ASIC
(Application-Specific Integrated Circuit), a los dispositivos que se construyen especialmente
para soportar un diseño particular. En los dispositivos programables como FPGAs y CPLDs el
diseño es descargado al chip, que suele ser reprogramable.
Una metodología que puede emplearse es efectuar una descripción del comportamiento lo
más abstracta posible, luego preparar una serie de estímulos que al ser aplicados al diseño, en
una simulación, confirmen su funcionalidad. La preparación cuidadosa de un banco de pruebas
suele ser más difícil que el diseño mismo.
Puede ser que algunas descripciones abstractas no puedan ser sintetizadas, ya que el
programa de síntesis reconoce sólo las estructuras que se le han almacenado en su inteligencia
artificial. Si por ejemplo puede reconocer: registros, sumadores, multiplexores, comparadores,
contadores, etc., es porque se ha almacenado en bibliotecas la descripción (en Verilog) de estas
unidades en términos de compuertas y flip-flops, o en términos de los bloques básicos del
dispositivo (muxs, luts).
Una de las ventajas de Verilog, es que, por un lado, permite describir módulos en términos
de compuertas y flip-flops, lo cual posibilita llegar a niveles muy bajos de abstracción. Por el
otro extremo, a medida que se tienen más experiencias, se han desarrollado por expertos,
algunas bibliotecas o núcleos que pueden ser reutilizados, entre ellos: memorias,
multiplicadores, microcontroladores embebidos, lo cual facilita la realización de diseños
abstractos sintetizables.
Las descripciones estructurales implícitas, emplean los operadores al bit del lenguaje y el
comando assign para describir expresiones. Tampoco se emplean procesos. Estas descripciones
son más fáciles de escribir y también puede asegurarse que son sintetizables.
Algunos operadores más complejos (como la suma) suelen ser reconocidos por las
herramientas de síntesis; el operador condicional también es sintetizable ya que suele traducirse
a multiplexores.
Una de las dificultades que tiene trabajar con herramientas de ayuda al diseño es que se
pierde contacto rápidamente con el problema, en la forma en que fue escrito por el diseñador.
Esto se debe a varias causas. Los compiladores suelen proceder a través de la generación de
numerosos archivos intermedios y además usan innumerables archivos auxiliares con
información; de los archivos generados para la compilación del diseño, algunos de ellos son
binarios, otros con formatos adecuados a los datos y tablas del programa y no son legibles con
facilidad por un humano; además si existen archivos de texto, los rótulos e identificadores son
elegidos por un autómata, y son de difícil asociación para el programador. Es decir,
prácticamente se pierde control del proceso de síntesis, sólo puede verse lo que la aplicación
está diseñada para mostrar: resúmenes del proceso de síntesis, esquemas, etc.
Para ilustrar la rapidez con que la información detallada, de lo que se está realizando, se
vuelve cada vez más incomprensible, se muestra la misma información del programa anterior,
representada en un formato netlist xnf de xilinx (formato ya obsoleto), y generado por el
compilador icarus, mediante el comando: iverilog –o simple.xnf –t xnf simple.v
También se producen formatos netlist estandarizados, pero que son de difícil lectura para un
ser humano.
Si el dispositivo físico, en que será depositado el diseño, tiene celdas básicas or y and de
cuatro entradas, el módulo mapeado tecnológicamente y optimizado, resulta:
Esto debido a que f= ab + ac + ad, puede (y debería) ser minimizada a: f=a(c + b +d).
Si el sistema físico es una fpga, en base a LUTs de 4 entradas, basta una para implementar la
tabla de verdad de la función f de cuatro variables. El resultado de la síntesis de mapeo
tecnológico que realiza ISE de Xilinx, se muestra en la Figura A5.48.
I3 I2 I1 I0 O
1 1 1 1 1
1 1 1 0 0
1 1 0 1 1
1 1 0 0 0
1 0 1 1 1
1 0 1 0 0
1 0 0 1 1
1 0 0 0 0
0 1 1 1 1
0 1 1 0 0
0 1 0 1 1
El modelo conceptual de una LUT, puede visualizarse como una ROM de 16x1.
Todos los operadores que operan al bit (bitwise) son sintetizables, mediante grupos de
compuertas.
Los operadores de reducción son sintetizables, mediante compuertas que tienen salida de un
bit.
Los operadores aritméticos: +, - y * son sintetizables.
Los tipos reg y wire son sin signo a menos que se los declare con signo, mediante:
wire signed [31:0] suma;
Se realiza aritmética con signo sólo si ambos operandos son declarados con signo.
El operador módulo es sintetizable si el operando del lado derecho es una constante potencia
de 2.
assign result = a % 4;
La operación también puede describirse mediante decodificadores del número 2 y del 3. Esta
forma muestra la interpretación del operador &&.
assign c = (~a[3])&(~a[2])&(a[1])&(~a[0])&(~b[3])&(~b[2])&(b[1])&(b[0]);
always @*
if (Control)
Z = A & B;
else
Z = A | B;
wire a, b, clk;
a
d q
b
clk
Figura A5.50.
wire clk;
wire [1:0] d;
reg [1:0] q;
always @(posedge clk)
q <= d;
d[1] q[1]
d q
clk
clk
d[0] q[0]
d q
clk
Figura A5.52.
Una tabla de búsqueda puede ser tratada conceptualmente como una ROM.
Con dirección dada por: I1, I0, el espacio podría visualizarse según:
I1I0 11 10 01 00
Figura A5.53.
Un esquema que muestra el bus de direcciones (I1, I0) y el bus de salida (O), se muestra en
la Figura A5.54.
I1
LUT 2 O
I0
Figura A5.54.
Se emplea el parameter INIT para inicializar el contenido de la ROM. Cuando se crea una
instancia del modelo, puede iniciarse con los datos específicos.
A5.11.5.1. Modelos de simulación de LUTs.
Se analiza primero una descripción por primitivos y luego por una función equivalente.
Ambos modelos corresponden a las suministradas en las bibliotecas para simulación Verilog de
Xilinx.
`timescale 1 ps/1 ps
//2-input Look-Up-Table. Definida como primitiva
module LUT2p (output O, input I0, I1);
parameter INIT = 4'h0; //especifica 4 bits con el contenido de la LUT
wire O;
x_lut2_mux4 (O, INIT[3], INIT[2], INIT[1], INIT[0], I1, I0);// instancia primitivo
endmodule
primitive x_lut2_mux4 (output o, input d3, d2, d1, d0, s1, s0);
table
// d3 d2 d1 d0 s1 s0 : o;
? ? ? 1 0 0 : 1; //lee de la rom si están definidas las direcciones
? ? ? 0 0 0 : 0;
? ? 1 ? 0 1 : 1;
? 0 ? 0 x 0 : 0; //s0==0 y d2==d0
? 1 ? 1 x 0 : 1;
0 ? 0 ? x 1 : 0; //s0==1 y d3==d1
1 ? 1 ? x 1 : 1;
`timescale 100 ps / 10 ps
//2-input Look-Up-Table. Definida como función
module LUT2f (output O, input I0, I1);
always @(s)
if ((s[1]^s[0] ==1) || (s[1]^s[0] ==0)) //si están especificadas las direcciones
O = INIT[s]; //lee la rom
else if ((INIT[0] == INIT[1]) && (INIT[2] == INIT[3]) && (INIT[0] == INIT[2]))
O = INIT[0]; //si los contenidos de las cuatro celdas son iguales
else if ((s[1] == 0) && (INIT[0] == INIT[1]))
O = INIT[0];
else if ((s[1] == 1) && (INIT[2] == INIT[3]))
O = INIT[2];
else if ((s[0] == 0) && (INIT[0] == INIT[2]))
O = INIT[0];
else if ((s[0] == 1) && (INIT[1] == INIT[3]))
O = INIT[1];
I1:I0 I2 I3
LUT2
15:12
1
0
LUT2
11:8
1
O
0
LUT2
7:4
1
0
LUT2
3:0
n 2M 3
Por otro lado, como una LUT M es una memoria de 2 M bits, pueden implementarse
M 4
22 funciones diferentes. Con una LUT4 pueden implementarse 22 216 funciones diferentes
4
de 4 variables. Con 2 LUT 4, el número de funciones es: 232 (216 )(216 ) (22 ) 2 . Entonces
puede plantearse el número necesario de LUT 4 como aquel que implementa igual o superior
número de funciones que la LUT M.
4 M
(22 ) n 22
Sacando logaritmos en base 2, en ambos lados, se obtiene:
4 M
n log 2 (22 ) log 2 (22 )
n24 log 2 (2) 2M log 2 (2)
n 2M 4
En una FPGA el área dedicada a la interconexión de LUTs, es mucho mayor que el área
dedicada a las LUTs. Intentos de minimizar el área de interconexión y los retardos han
conducido a la elección de LUTs 4 como el módulo básico.
A5.11.5.3. Comparación con uso de memorias.
Una memoria estática de 64Kx1 equivale a 4K de LUTs 4, ya que cada LUT 4 almacena 16 bits.
Sin embargo, disponer de LUTs con capacidad de interconectarlas, es muchísimo más eficiente
que emplear memorias.
Algunos diseños de funciones que en su estructura presentan cierta regularidad muestran que es
preferible emplear LUTs que una memoria.
Ejemplo A5.47. Generador de paridad
Un generador de paridad para palabras de 16 bits, requiere usar la memoria anterior en forma
completa, ya que el bus de direcciones de 16 bits se ocupa en su totalidad. Sin embargo sólo se
requieren 5 LUTs 4 de una FPGA para implementar el mismo diseño.
El diseño en Verilog del generador de paridad para palabras de 16 bits, se implementa usando 5
LUTs 4:
La Figura A5.56 muestra la síntesis realizada por ISE. Mostrando 5 bloques iguales para la
implementación. Esta modularidad de la estructura se planteó antes como regularidad.
Figura A5.56.
A5.11.6.1. LUT4
Una LUT 4 puede ser empleada para generar cualquier función de cuatro variables, en este
caso se comporta como una ROM 16x1. La lectura de los bits individuales se logra con un
multiplexor de 16 a 1. La Figura A5.57, muestra una arquitectura interna posible de la LUT, en
la cual los elementos de almacenamiento se muestran como latchs; esta elección implementa la
celda de memoria con menos transistores que empleando un flip-flop disparado por cantos, y no
emplea un reloj. En el proceso de configuración inicial, usando un decodificador se van
colocando en uno o en cero los diferentes latchs; los cuales mantienen sus valores, mientras se
tenga polarización aplicada, por esto se dice que se comporta como una ROM. Una vez grabada
la LUT con la tabla de verdad correspondiente, los bits individuales se leen mediante el
multiplexor que alimenta la salida.
Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q
S S S S S S S S S S S S S S S S
A[3:0]
O
Figura A5.57
A3
A2 Lut4
A1
A0 O=f(A3,A2,A1,A0)
Figura A5.58
A3
A2 Lut4 f2 1 O=A4‟f1(A3,A2,A1,A0)+A4f2(A3,A2,A1,A0)
A1
A0
Figura A5.59
Mux 2 a 1 ancho 2.
La forma de ir componiendo funciones más complejas, en base a los componentes existentes
se denomina mapeo tecnológico. Por ejemplo en una LUT 4, puede programarse una función de
tres entradas: A0A2+A0‟A1, que se comporta como una LUT 3. Si se forma una tabla de verdad
con las variables ordenadas según A2A1A0, con valores binarios descendentes, los 8 bits de la
función leídos en hexadecimal forman el patrón E4 (11100100).
A0‟
A1
A0
A2
always @(*)
if (c==0) out=x0; else if (c==1) out=x1;
endmodule
La expansión del ancho del bus se logra agregando tantas LUT3 (E4), como se requiera. La
estructura es repetitiva, lo que implica una regularidad en la arquitectura.
Un multiplexor de 4 a 1 ancho 1.
Empleando la configuración LUT 3 (E4) se tienen:
y1= c[0]x3 + c[0]‟x2
y0=c[0]x1 + c[0]‟x0
Y con un mux adicional de 2 vías a 1, controlado por c[1], se obtiene la ecuación del mux 4 a 1,
de ancho 1 bit:
out=c[1]( c[0]x3 + c[0]‟x2) + c[1]‟(c[0]x1 + c[0]‟x0)
A3 1
A2 Lut4
A1
A0
Lut4
Lut4
Lut4
Lut4
Figura A5.64.
x7 7
x6 6
x5
2 5
x4 4 out
x3 3
x2 2
x1 1
x0 0
always @(*)
if (c==0) out=x0; else if (c==1) out=x1;
endmodule
Las LUTs están en la configuración LUT 3, y el conjunto puede simbolizarse por el diagrama
RTL, a la derecha de la Figura A5.66.
Lut4
c
Lut4
x1 0
4
out
x0 1 4
Lut4 4
Lut4
A5.11.6.4. 8 LUTs
Si se unen dos bloques similares al de la Figura A5.64, mediante un tercer mux, de dos vías a
una, se logran: Un mux de 16 a 1, cualquier función de 7 entradas, algunas funciones de hasta
39 entradas. Con las LUTs, sin multiplexores, se logra un mux de 2 vías a 1 de ancho 8 bits.
A5.11.6.5. 16 LUTs
Un cuarto nivel de multiplexores, permite el diseño de un multiplexor de 32 bits a 1, de
cualquier función de 8 variables, y algunas hasta de 79 entradas. Con las LUTs, sin
multiplexores, se logra un mux de 2 vías a 1 de ancho 16 bits.
A5.11.6.6. Operadores al bit.
La síntesis de operadores al bit, se realiza empleando una LUT 4 para cada pareja de los
operandos de entrada. Por ejemplo, la síntesis de: assign z = x & y; si los operandos son de n
bits requiere n LUTs 4.
Lut4
Lut4 Lut4
Lut4
A5.11.6.7. Potencias.
Una potencia de dos elevada a un entero x, por ejemplo 8x, puede interpretarse como 23x. A su
vez puede implementarse como 2x2x2x. Pero 2x es (1<<x). Entonces: assign z= 8**x; se logra
con el diagrama RTL:
x 23x
0 1
1 1000
2 1000000
3 1000000000
Figura A5.66.c Posiciones de los unos en 23x.
Las posiciones con ceros se logran con conexiones a tierra. El uno en la posición cero se
obtiene con: z[0]=x[1]‟ x[0]‟. El uno en posición 3, z[3]= x[1]‟ x[0].
Y también: z[6]=x[1] x[0]‟; z[9]= x[1] x[0]. Lo anterior se puede implementar con 4 LUTs 4.
La síntesis de: assign z= 2**x; se logra con una unidad de desplazamiento a la izquierda.
Observando que el resultado z, sólo tiene un uno de acuerdo al valor de x, la síntesis puede
efectuarse en forma combinacional. Con x de ancho 4, se tiene que el bit de z que debe estar
alto se logra decodificando x. Por ejemplo: z[3]= x[3]‟x[2]‟x[1]x[0].
x 2x
0 1
1 10
2 100
15 1000000000000000
Figura A5.66.d Posiciones de los unos en 2x.
Por ejemplo: assign z = x % 8; con x de ancho 5 bits, requiere 3 bits para el resultado z. Y no se
emplean los dos bits más significativos x[4:3]. Las conexiones: z[2]=x[2], z[1]=x[1], z[0]=x[0].
A5.11.6.10. Corrimiento a la izquierda.
Los corrimientos a la izquierda por una constante son implementados por conexiones.
A11.7.1. RAM
Si la estructura interna de la LUT está basada en flip-flops, en lugar de latchs, puede
emplearse como memoria RAM.
Una LUT 4 equivale a una RAM de 16x1. Con escritura sincrónica y lectura asincrónica. Si
se emplea el flip-flop asociado a la LUT, puede emplearse lectura sincrónica.
Un esquema que muestra una estructura posible para una LUT que funcione como RAM, se
muestra en la Figura A5.67. Se dispone de un reloj común, y cada flip-flop tiene una
habilitación de escritura (WE) que está conectada a un decodificador de las cuatro líneas de
entrada; lo cual permite escribir en uno de los flip-flops, en forma sincrónica. El dato de
entrada es común a todos los flip-flops. Las salidas de éstos están conectadas a un multiplexor
de 16 vías a una; del tal modo que se puede efectuar una lectura asincrónica (sin reloj), del bit
de la memoria direccionado por las líneas de entrada, que constituyen el bus de dirección de la
RAM.
A[3:0]
D WE WE WE WE WE WE WE WE WE WE WE WE WE WE WE WE
Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q
D D D D D D D D D D D D D D D D
clk
A[3:0]
O
Figura A5.68.
Si se emplean dos LUTs como memoria RAM, pueden configurarse una RAM32x1
empleando un mux adicional; o una RAM16x2 empleándolas en paralelo.
También empleando dos LUTs, puede implementarse una RAM 16x1 con dos puertas
duales. Se escribe en ambas memorias los mismos datos; una de las RAMs es read/write, la otra
de sólo lectura controlada por la dirección adicional DPRA. Se pueden leer dos direcciones
simultáneamente, en los dos puertos de salida SPO y DPO.
Din D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q
clk
A[3:0]
O
initial
begin
assign data = INIT;
while (CLK === 1'b1 || CLK===1'bX)
#10;
deassign data;
end
endmodule
Figura A5.70
Se tienen dos buses de entrada de 8 bits cada uno, y se desea generar una salida cuando la
suma de los operandos de entrada sea menor que 128 decimal.
El siguiente módulo describe con precisión una operación aritmética sencilla, mostrando la
capacidad de descripción empleando lenguajes. Sin embargo el problema no es sencillo de
sintetizar con métodos de papel y lápiz, ya que se tienen 16 entradas, lo cual implica una tabla
de verdad con 65536 entradas, o mapas de Karnaugh de 16 variables.
Se ha empleado el macro `define para parametrizar el módulo. Su ventaja, en lugar de usar
parameter, es que la definición puede ser empleada en varios módulos.
`define N 7
`define MAX 255
module aritmetica(x, a, b);
input [`N:0] a, b;
output x;
assign x= a+b < 128;
endmodule
initial
begin $dumpfile("mul.vcd"); $dumpvars(0,a,b,result); end
initial
begin
//$monitor("a=%d b=%d result=%b", a, b, result, $time); //para depuración
a=0; b=0;
errores=0; vectores=0;
for(j=0;j<`MAX;j=j+1)
begin
#10 a<=j;
for(k=0;k<`MAX;k=k+1)
begin
#10 b<=k;
vectores=vectores+1;
if(result!=((a+b)<128) )
begin
errores=errores+1;
$display("Error: a=%d b=%d result=%d Correcto=%d", a, b, result,(a+b)<128);
end
end
end
endmodule
module BancoDePrueba;
Con la ayuda de este test, se visualiza que hay problemas con el diseño, ya que se producen
demasiados errores. Si se analizan se verá que la suma se está realizando en 8 bits, de este modo
si los operandos son mayores que 128, se tendrá rebalse del sumador. Este puede corregirse si
se especifica un sumador que entregue el resultado en 9 bis, de esta manera la suma máxima:
255+255=510 no produce rebalse; es decir el máximo valor de la suma se puede representar en
9 bits, ya que 510= 1‟b111111110. Esto asumiendo números sin signo.
Nos aseguramos que la suma se efectúe en 9 bits, definiendo el bus temp, esto implica
cambios en el módulo:
La herramienta de síntesis podría haber reconocido lo anterior, y emplear dos módulos de sus
bibliotecas: un sumador de 9 bits, y un circuito comparador slt (por set less than) que genere la
señal de salida.
También este camino podría seguir un diseñador, permitiendo descomponer el diseño, en dos
módulos más simples. Según muestra el esquemático de la Figura A5.71.
128
9 temp 9
slt
1 x
Figura A5.71.
Ahora deben desarrollarse dos nuevos módulos, los cuales pueden simularse por separado
hasta verificar su funcionalidad. El sumador es posible que sea mejor sintetizado por la
herramienta CAD, ya que los sumadores son un recurso fundamental en sistemas digitales, y se
ha trabajado suficiente es su desarrollo para optimizar la velocidad de éstos.
El comparador también debe estar en las bibliotecas del sintetizador; pero podría ser bastante
más económico en espacio, el realizarlo como un módulo combinacional, ya que en este caso
sólo se tienen 9 entradas, en lugar de 18. Además el número 128=1‟b010000000, es una
potencia de dos, y se podría diseñar el módulo combinacional, considerando que los dos
primeros bits de temp deben ser ceros, para que éste sea menor que 128. Emplearemos esta idea,
que difícilmente sería realizada por un autómata de síntesis digital, definiendo un módulo
combinacional slt128 de sólo dos entradas, los dos bits más significativos del bus temp.
2 temp
slt128
1
x
Figura A5.72.
Evaluando el costo de este módulo, puede no ser necesario seguir descendiendo en el nivel
de detalle. Pero si se desea asegurar un diseño mínimo, puede escribirse a nivel de compuertas,
según:
A5.12. Conclusiones.
Conviene conocer el diseño en bajo nivel de los subsistemas típicamente usados, de esta
manera se conocerá su funcionalidad, sus alcances, la forma de generalizarlos, y su costo. Luego
las descripciones de la arquitectura pueden realizarse basada en esos módulos.
Un curso básico en sistemas digitales debe profundizar en el diseño de los bloques básicos,
y también capacitar en descomponer un problema en términos de esos bloques. Esto
garantiza plantear arquitecturas con partes que serán sintetizadas eficientemente.
La Figura A5.73, muestra el proceso de síntesis como un nivel intermedio, entre las
descripciones de arquitecturas mediante módulos sintetizables (top-down), y el desarrollo de
módulo básicos implementados mediante compuertas y flip-flops (bottom-up). Los lenguajes de
descripción de hardware, como Verilog, permiten las descripciones y simulaciones en los
diferentes niveles, dando homogeneidad al proceso de diseño.
Arquitectura abstracta
Síntesis
Bloques Básicos
Figura A5.73.
Referencias.
http://www.see.ed.ac.uk/~gerard/Teach/Verilog/manual/Intro/gatetypes.html
http://www.doulos.com/knowhow/verilog_designers_guide/
Software libre.
Índice general.
APÉNDICE 5 .........................................................................................................................................1
USO DE VERILOG ..............................................................................................................................1
A5.1 INTRODUCCIÓN ...........................................................................................................................1
A5.2 DESCRIPCIÓN ESTRUCTURAL.......................................................................................................3
A5.2.1. Nivel compuertas. ..............................................................................................................3
Ejemplo A5.1. ............................................................................................................................................ 4
Ejemplo A5.2. ............................................................................................................................................ 4
A5.2.2. Nivel transistores. ..............................................................................................................5
Ejemplo A5.3. ............................................................................................................................................ 6
Ejemplo A5.4. ............................................................................................................................................ 6
A5.3 DESCRIPCIÓN DEL COMPORTAMIENTO (BEHAVIOR). ...................................................................8
Ejemplo A5.5. Expresiones. ............................................................................................................8
Ejemplo A5.6. Mux mediante Expresiones. ....................................................................................9
Operadores. ....................................................................................................................................9
Ejemplo A5.7. Procesos..................................................................................................................9
Ejemplo A5.8. Mux mediante Procesos. .......................................................................................10
Ejemplo A5.9. Mux mediante lenguaje. ........................................................................................11
Sentencias. ....................................................................................................................................11
A5.4 DISEÑOS JERÁRQUICOS. ............................................................................................................12
A5.5. FUNDAMENTOS DE SIMULACIÓN. .............................................................................................14
Ejemplo A5.10. Banco de prueba para semisumador binario. .....................................................14
Funcionamiento del simulador. ....................................................................................................16
Ejemplo A5.11. Simulación nivel transistores. .............................................................................17
A5.6. BUSES, REGISTROS, VECTORES, ARREGLOS. VALORES CONSTANTES. .......................................18
Valores. ........................................................................................................................................18
Ejemplo A5.12. Mux con dos buses de entrada. ...........................................................................20
Ejemplo A5.13. Mux con varios buses de entrada........................................................................20
Ejemplo A5.14. Mux con operador condicional. ..........................................................................21
Ejemplo A5.15. ALU con operandos vectores. .............................................................................23
Ejemplo A5.16. Sumador completo con operandos vectores........................................................23
Ejemplo A5.17. Estructuras repetitivas. Lazos for dentro de procesos. .......................................24
Ejemplo A5.18. Descripción algorítmica, empleando operadores del lenguaje. .........................24
Ejemplo A5.19. Decodificador, empleando operadores del lenguaje. .........................................25
Ejemplo A5.19a. Generador de paridad empleando lazo for. ......................................................26
Ejemplo A5.20. Buffer de tercer estado ........................................................................................27
Ejemplo A5.21. Relación entre simulación y síntesis. ..................................................................27
Ejemplo A5.22. Interconexión de módulos y descripciones del comportamiento. .......................30
Ejemplo A5.23. Módulos con operadores relacionales. ...............................................................33
Ejemplo A5.24. Módulos con sentencias case. .............................................................................33
A5.7 SISTEMAS SECUENCIALES. ........................................................................................................35
Ejemplo A5.25. Latch transparente. (D gated latch) ...................................................................35
Ejemplo A5.26. Flip-flop D. Disparado por canto de subida.......................................................39
Ejemplo A5.27. Flip-flop D. Disparado por canto de bajada. .....................................................40
Ejemplo A5.28. Flip-flop T. ..........................................................................................................40
Índice de Figuras.
Figura A5.1.................................................................................................................................... 2
Figura A5.2.................................................................................................................................... 3
Figura A5.3.................................................................................................................................... 5
Figura A5.4.................................................................................................................................... 6
Figura A5.5.................................................................................................................................... 7
Figura A5.6.................................................................................................................................... 7
Figura A5.7.................................................................................................................................. 13
Figura A5.8.................................................................................................................................. 13
Figura A5.9.................................................................................................................................. 14
Figura A5.10................................................................................................................................ 18
Figura A5.11................................................................................................................................ 19
Figura A5.12. mux4to1. .............................................................................................................. 21
Figura A5.13................................................................................................................................ 25
Figura A5.14................................................................................................................................ 26
Figura A5.15................................................................................................................................ 27
Figura A5.15a. ............................................................................................................................. 29
Figura A5.15b.............................................................................................................................. 29
Figura A5.15c. ............................................................................................................................. 30
Figura A5.15d.............................................................................................................................. 31
Figura A5.16................................................................................................................................ 35
Figura A5.17................................................................................................................................ 36
Figura A5.18................................................................................................................................ 36
Figura A5.19................................................................................................................................ 36
Figura A5.20................................................................................................................................ 37
Figura A5.21................................................................................................................................ 38
Figura A5.22................................................................................................................................ 39
Figura A5.23................................................................................................................................ 39
Figura A5.24................................................................................................................................ 40
Figura A5.25................................................................................................................................ 40
Figura A5.26................................................................................................................................ 40
Figura A5.27................................................................................................................................ 41
Figura A5.28................................................................................................................................ 41
Figura A5.29................................................................................................................................ 42
Figura A5.30................................................................................................................................ 44
Figura A5.31................................................................................................................................ 45
Figura A5.32................................................................................................................................ 45
Figura A5.33................................................................................................................................ 47
Figura A5.34................................................................................................................................ 48
Figura A5.35................................................................................................................................ 48
Figura A5.36................................................................................................................................ 50
Figura A5.37................................................................................................................................ 50
Figura A5.37a. Contador ondulado en base a flip-flops Ds. ....................................................... 52
Figura A5.37b. Cuentas asincrónicas. ......................................................................................... 53
Apéndice 6
Uso de sis
A6.1. Introducción
En las primeras etapas de un diseño digital se requiere obtener la estructura del sistema en
términos de componentes de hardware. Se denomina síntesis lógica al proceso de generar un
circuito en términos de compuertas y flip-flops; en esta etapa suele efectuarse una minimización
del número de transistores que se emplearán (optimización espacial). Luego es necesario
efectuar minimizaciones de los retardos (optimización temporal), para esto se requiere efectuar
transformaciones de la red booleana de tal modo que la implementación final satisfaga los
requerimientos.
A medida que aumenta el tamaño del sistema estas técnicas no pueden aplicarse
manualmente y resultan indispensables herramientas computacionales.
Berkeley Logic Interchange Format especifica mediante un archivo de texto una red lógica
booleana. Cada nodo queda descrito por una función booleana en dos niveles.
.end
.model SumadorCompleto
.inputs a b cin
.outputs sum cout
.names a b cin sum
001 1
010 1
100 1
111 1
.names a b cin cout
110 1
101 1
011 1
111 1
.end
.module fulladder4
.inputs a3 a2 a1 a0 b3 b2 b1 b0
.outputs s3 s2 s1 s0 cout
.subckt sumadorcompleto a=a0 b=b0 cin=zero sum=s0 cout=cout0
.subckt sumadorcompleto a=a1 b=b1 cin=cout0 sum=s1 cout=cout1
.subckt sumadorcompleto a=a2 b=b2 cin=cout1 sum=s2 cout=cout2
.subckt sumadorcompleto a=a3 b=b3 cin=cout2 sum=s3 cout=cout
Mediante el comando .search se lee el contenido del archivo, con las declaraciones del módulo
del sumador completo.
O = a*b + !c*((d+e+f)*!(g+h));
Puede verificarse la ecuación ingresada, mediante el comando print, que muestra la ecuación
del nodo:
sis> print
{O} = a b + c' d g' h' + c' e g' h' + c' f g' h'
Puede ingresarse una red boolena en formato blif, en la cual se especifican funciones
combinacionales mediante tablas de verdad en formato pla.
# Inversor
.names int2 out
1 0
Figura A6.1
La red puede leerse y describirse mediante las ecuaciones de los nodos, con los comandos:
Se puede especificar una máquina de estados empleando formato kiss, dentro de un archivo
con extensión blif. El diagrama de estados de la Figura A6.2 representa a un verificador
(chequeador) de paridad. La entrada es serial. La salida es cero si, hasta el momento, han
llegado un número par de unos; y es uno si el número de unos es impar.
La máquina se mantiene en el estado PAR si han llegado un número par de unos; y se
mantiene en el estado IMPAR, si el número de unos que han llegado, hasta ese momento es
impar.
1/1 0/1
PAR IMPAR
0/0
1/0
Figura A6.2
0 IMPAR IMPAR 1
1 IMPAR PAR 0
.end_kiss
La cual genera, en forma automática nombres para las señales de entrada y salida, además
coloca automáticamente los nombres a las entradas y salidas de los latch:
.inputs IN_0
.outputs OUT_0
.latch v2.0 LatchOut_v1 0 //asigna nombres a la entrada y salida de un latch
.start_kiss
.i 1
.o 1
.p 4
.s 2
.r PAR
0 PAR PAR 0
1 PAR IMPAR 1
0 IMPAR IMPAR 1
1 IMPAR PAR 0
.end_kiss
.latch_order LatchOut_v1
.code PAR 0
.code IMPAR 1
.names IN_0 LatchOut_v1 OUT_0
01 1
10 1
.names IN_0 LatchOut_v1 v2.0
01 1
10 1
.end
Out_0
D Q
IN_0
v2_0 LatchOut_v1
clk
Figura A6.3
sis> print
{OUT_0} = IN_0 LatchOut_v1' + IN_0' LatchOut_v1
v2.0 = IN_0 LatchOut_v1' + IN_0' LatchOut_v1
sis> write_eqn
También se puede generar la descripción combinacional en formato pla, lo cual podría ser
utilizado para minimizar con espresso. El siguiente comando:
sis> write_pla
Out_0
LatchOut_v1
D Q
IN_0
LatchIn_[14]
clk
Figura A6.4
Ejemplo.
.model ffd # flip-flop D sincronizado con cantos de subida (“re”) del reloj c.
.inputs d
.output q
.clock c
.latch d q re c 0
.end
Una vez ingresado el circuito en alguno de los formatos: eqn, pla o blif, pueden aplicarse los
comandos para minimización multinivel.
A6.4.1. Descomposición.
sis>read_eqn ejdecomp.eqn
sis>print_stats
ejdecomop.eqn pi=5 po=1 node=1 lits(sop)=12
A6.4.2. Eliminación.
eliminate k remueve todos los vértices internos de la red cuyos valores sean menores o
iguales a k. El valor del nodo es el número de literales que se ahorran en la cuenta de literales de
la red dejando el nodo. La variable correspondiente al nodo se reemplaza en todas sus
ocurrencias; esto aumenta la cuenta de los literales. Este comando efectúa lo contrario de
decomp; y ayuda a disminuir el retardo de la red.
eliminate -1 remueve nodos que son empleados sólo una vez.
En el caso de que un nodo sólo aparezca una vez, su eliminación se logra con el comando:
eliminate -1.
La red:
f = a*b;
g = f+c;
Se simplifica a:
g = a*b+c;
A6.4.3. Simplificación.
A6.4.4. Resubstitución.
Para cada par de nodos verifica si uno es factor del otro y viceversa; si se agrega opción –a,
se emplea método de división algebraica para determinar si un nodo es factor de otro. Se intenta
con la expresión para el nodo y la expresión complementada, iterando entre los nodos de la red
hasta que la reducción del costo no siga disminuyendo.
A6.4.5. Factorización.
Extrae subexpresiones comunes entre los nodos y reescribe las ecuaciones de los nodos en
términos de las subexpresiones comunes.
A6.4.6. Limpieza.
Sweep es un comando que elimina los vértices que tienen solo una entrada y los de valor
constante.
La red siguiente tiene el nodo i, con valor constante, y el nodo f, con una sola entrada:
f = a;
g = f + c*i;
h = f + d;
i = 1;
Luego de sweep, resulta:
g = a + c;
h = a + d;
fx
resub; sweep
Pueden colocarse varios comandos, en la misma línea, separados por puntos y comas.
Se ejecuta la secuencia anterior con el comando:
source comandos.script
Ejemplo A6.4.
Sea la red de la Figura A6.5
b
q = ce +de r =q + a’ w =r+b’ x
c
y =a’d +bd +c’d+ ae’ y
d
Figura A6.5
Luego de ejecutado script.rugged con los datos de la red anterior, se logra la siguiente red:
con 6 nodos y 21 literales. Aparecen dos nuevos nodos y se eliminan p, q y r.
z = [28]*[29] + e;
w = e*[28] + !b + !a;
y = a*!e + d*b + !c*d + !a*d;
x = [29] + c;
[28] = d + c;
[29] = b + a;
print_level imprime el nivel de todos los nodos. Los de nivel cero son las entradas a la red.
Se denomina mapeo tecnológico al proceso de convertir una red lógica formada por
componentes arbitrarias a una red formada por componentes especificadas en una biblioteca
tecnológica.
Primero se forman diagramas patrones representando cada una de las compuertas de la
biblioteca por el conjunto básico de compuertas, por ejemplo nand de dos entradas e inversores.
Luego la lógica del sistema se transforma a una red formada por el conjunto básico de
compuertas, por ejemplo nand de dos entradas e inversores; luego esta red, que es independiente
de la tecnología, se minimiza.
Finalmente la red, es cubierta por un conjunto de los diagramas patrones, que son elecciones
posibles desde la biblioteca. Existen diferentes coberturas posibles; durante la cobertura, el área
o el retardo se emplean como criterios de optimización.
Ejemplo A6.5.
Se tiene la función: f=a +b’ +c’, y una biblioteca de partes constituida por compuertas:
inversor, nand, and, y or.
El conjunto de compuertas básicas está formado por nand e inversor.
a
f
b
c
Figura A6.6
La Figura A6.7 muestra los patrones de biblioteca, en base a las compuertas básicas.
Se indica el costo asociado al área, para cada elemento de la biblioteca, representado por
patrones. El tiempo de propagación a través de un inversor es 1, y a través del nand es 1.5.
inv 2
nand 3
and 4
or 5
Se van haciendo calzar los patrones de la biblioteca con partes de la red que se desea mapear.
Se reconocen los patrones hasta tener cobertura completa y se calcula el costo espacial y
temporal. Encontrar todos las calces es un problema complejo; seleccionar los calces que son
coberturas también es un problema complejo.
En general pueden obtenerse varias soluciones, debe seleccionarse la más conveniente de
acuerdo al costo espacial y temporal.
a
f
b
c
a
f
b
c
a
f
b
c
Descompone todos los nodos de la red en compuertas and o compuertas or, dependiendo del
tipo de flag que se especifique: -a, -o.
Los fan-in quedan limitados por los números and-limit u or-limit. Si no se especifican por
defecto se asumen límites en 2.
El comando map, realiza el mapeo tecnológico, previo a su ejecución debe haberse cargado
la biblioteca de compuertas.
Con opción –m 0 produce un circuito de mínima área, sin considerar límites de carga.
Con opción –m 0 –AF produce un circuito de mínima área, considerando límites de carga.
Con opción –n 1 –AFG produce un circuito de mínimo retardo, considerando límites de
carga. Pueden especificarse los requerimientos de tiempo con el comando set_delays, de este
modo el comando puede intercambiar área por tiempo.
Con flag –s se imprime estadística del mapeo.
Ejemplo de minimal.genlib
GATE zero 0 O=CONST0;
GATE one 0 O=CONST1;
GATE inv1 1 O=!a; PIN * INV 1 999 0.9 0.3 0.9 0.3
GATE nand2 2 O=!(a*b); PIN * INV 1 999 1.0 0.2 1.0 0.2
GATE nor2 2 O=!(a+b); PIN * INV 1 999 1.0 0.2 1.0 0.2
Ejemplo A6.6.
sis>read_eqn ejmap.eqn
sis>read_library minimal.genlib
sis>map
sis>print
[4]= a’ + b’
[3]= d’
[5]=[3]’ + c’
{f}=[4]’ + [5]’
sis>print_gate
[4] nand2 2.00
[3] inv1 1.00
[5] nand2 2.00
{f} nand2 2.00
a 4
b
f
c
d 5
3
Figura A6.11
Se asume que un cambio de una entrada se realiza con un retardo de 0.3. Luego la
propagación de la señal d, a través del inversor, tiene un costo temporal de: 0.9+0.3*1, que es la
suma del tiempo de levantamiento, más el debido al fan-out, que es uno en este caso. La
propagación a través de la compuerta [5] que es un nand2, tiene costo temporal: 1.0+0.2*1=1.2,
igual retardo produce el nand en la salida. En total: (0.3 + 1.2 + 1.2 + 1.2) = 3.9, que es el
tiempo de retardo de la ruta crítica, que es entregado como el máximo tiempo de arribo.
Si se ejecutan los mismos comandos, pero cambiando la biblioteca para el mapeo, por la que
se muestra a continuación, se obtiene la red de la Figura A6.12.
Nótese que en este caso se utiliza un nand de 4 entradas que ahora está disponible.
sis>print_gate
[3] inv1 1.00
[4] nand4 4.00
[f] inv1 1.00
sis>print
[3] = d’
[4] = [3]’ + a’ + b’ + c’
{f}= [4]’
Figura A6.12
Cálculo del retardo: Cada inversor: 1.2, el nand aporta: 1.4+0.4*1=1.8. La señal de entrada
se asume con un cambio de 0.3. Resulta: 0.3+1.2+1.8+1.2=4.5.
Las arquitecturas de las fpga más representativas están formadas por arreglos repetidos de
bloques lógicos idénticos. Los bloques típicos son: tablas de búsqueda y arreglos de
multiplexores.
El comando act_map realiza el mapeo sobre una fpga con arquitectura Actel. Con el flag –r
<filename> se escribe el mapeo en el archivo de nombre filename. No es necesario cargar una
biblioteca.
En la Figura A6.13 se ilustra el bloque básico, que implementa la siguiente ecuación:
out ( s0 s1 )( s A A0 s A A1 ) ( s0 s1 )( sB B0 sB B1 )
s0
s1
sA
A0 0
A1 1
0
sB out
1
B0 0
B1 1
Figura A6.13
MODEL "ejmapfpga.eqn";
TECHNOLOGY scmos;
VIEWTYPE SYMBOLIC;
ENDMODEL;
Se tiene, para la instancia 0, la ecuación del bloque, en la cual se reemplazaron las entradas:
[3] (d 0)(b 0 b c) (d 0)(1 0 1 0) bcd
Mapeo a xilinx
Los métodos descritos en el Capítulo 12, quedan restringidos a matrices de transiciones con
un número limitado de renglones y columnas.
Estado/Entrada 0 1
A E/0 D/1
B F/0 D/0
C E/0 B/1
D F/0 B/0
E C/0 F/1
F B/0 C/0
.model ej12_3.blif
.inputs IN_0
.outputs OUT_0
.latch v3.0 LatchOut_v1 0 # flip-flop con entrada v3.0 y salida v1.
.latch v3.1 LatchOut_v2 1 # flip-flop con entrada v3.1 y salida v2.
.start_kiss #la aplicación repite el código con las transiciones entre estados.
.i 1
.o 1
.p 8
.s 4
.r S1
0 S0 S3 0
1 S0 S0 0
0 S3 S0 0
1 S3 S1 0
0 S1 S2 0
1 S1 S0 1
0 S2 S1 0
1 S2 S3 1
.end_kiss
.latch_order LatchOut_v1 LatchOut_v2 #códigos asignados
.code S0 00
.code S3 11
.code S1 01
.code S2 10
.names IN_0 LatchOut_v1 LatchOut_v2 OUT_0 #ecuación de salida
101 1
Las ecuaciones que describen las redes combinacionales de salida y próximo estado, se
obtienen con el comando write_eqn.
Out_0
LatchOut_v1
v3.0
LatchOut_v2
v3.1
IN_0
clk
De blif a Verilog.
Considerando que con una señal de reset, la máquina debe ir al estado inicial S1=01, el cual
equivale a LatchOut_v1=0 y LatchOut_v2=1, puede traducirse las ecuaciones a un módulo
Verilog, considerando el esquema de procesos, tipo Mealy, de la Figura A6.15 a.
Reset’
x P1 z P2
Y y
DQ
clk
// Proceso registro. P2
always @(negedge Resetn or posedge clk)
if (Resetn == 0) begin LatchOut_v1<=0; LatchOut_v2 <= 1; end //Inicial=01
else begin LatchOut_v1<=v3_0; LatchOut_v2 <= v3_1; end
endmodule
Se han colocado los operadores booleanos de verilog, y el nombre de las señales blif v3.0 y
v3.1, por identificadores válidos verilog.
Ejemplo A6.7a.
El diagrama de estados del ejemplo 12.4, en formato kiss2:
#ej12_4.kiss2
.i 1
.o 1
.p 30
.s 15
.r a
0ab0
1ac0
0bd0
1be0
0cf0
1cg0
0dh0
1di0
0ej0
1ek0
0fl0
1fm0
0gn0
1go0
0ha0
1ha0
0ia0
1ia0
0ja0
1ja0
0ka0
1ka0
0la0
Reconocedor de secuencias de largo 4. Salida uno cuando llegan: 0110 y 1010; salida cero
en el resto de los casos. El comando externo reset, debe llevar al estado inicial E0.
Entrada
Estado 0 1
E0 E1/0 E2/0
E1 E3/0 E4/0
E2 E4/0 E3/0
E3 E5/0 E5/0
E4 E5/0 E6/0
E5 E0/0 E0/0
E6 E0/1 E0/0
1 3 7 5
1 E1 E4 E5 E2
.start_kiss
.i 1
.o 1
.s 7
.r E0
# <entrada> <EstadoActual> <ProximoEstado> <salida>
0 E0 E1 0
1 E0 E2 0
0 E1 E3 0
1 E1 E4 0
0 E2 E4 0
1 E2 E3 0
0 E3 E5 0
1 E3 E5 0
0 E4 E5 0
1 E4 E6 0
0 E5 E0 0
1 E5 E0 0
0 E6 E0 1
1 E6 E0 0
.end_kiss
.end
1 3 7 5
1 E1 E3 E5 E4
1 3 7 5
1 E2 E1 E6
Como alternativa para efectuar la asignación de estados se dispone de la aplicación Jedi. Que
permite generar la codificación binaria de entradas y/o salidas descritas en forma simbólica. A
la vez, si se describe la matriz de transiciones entre estados en forma simbólica (formato kiss),
puede efectuar la asignación de estados.
Como puede verificarse la elección de los códigos binarios puede significar un ahorro
considerable en el costo de la implementación.
Si se comunica la salida de jedi con espresso, mediante una cañería o “pipe”, puede
obtenerse el diseño minimizado de las redes combinacionales. En este caso debe agregarse la
opción –p, para generar el formato pla, que es compatible con espresso.
Por ejemplo: jedi –p ej12_8.blif | espresso > ej12.pla, genera el siguiente archivo:
v.2.0
v.1.0
v.2.1
v.1.1
v.2.2
v.1.2
v.3
v_0 clk
El comando: jedi –h, muestra las opciones de codificación que pueden emplearse. Por
ejemplo, el comando: jedi –e c ej12_8.blif, emplea una combinación de codificación de las
entradas y salidas.
En el manual de la aplicación, puede encontrarse la descripción del formato para
codificación con entradas y salidas simbólicas.
El siguiente diagrama representa a una máquina secuencial de estados finitos que tiene salida
uno cada vez que las últimas tres entradas son la secuencia 101; cero en el resto de las
secuencias de entrada.
0/0
0/0 1/0
1/1
st0 st1 st2
1/0 0/0 st3
0/0
1/0
reset
.model 101 # salida 1 cada vez que las últimas tres entradas sean 1, 0, 1
.start_kiss
.i 1
.o 1
0 st0 st0 0
1 st0 st1 0
0 st1 st2 0
Los comandos:
sis> read_blif model101.blif
sis> state_minimize
sis> state_assign
sis> write_blif
.model model101
.inputs v0
.outputs v3.2
.latch [6] v1 0
.latch [7] v2 0
.start_kiss
.i 1
.o 1
.p 8
.s 4
.r st0
0 st0 st0 0
1 st0 st1 0
0 st1 st2 0
1 st1 st1 0
0 st2 st0 0
1 st2 st3 1
0 st3 st2 0
1 st3 st1 0
.end_kiss
.latch_order v1 v2
.code st0 00
.code st1 11
.code st2 01
.code st3 10
.names v0 [6]
11
.names v0 v1 v2 [7]
-1- 1
1-0 1
.model model101
.inputs v0
.outputs v3.2
.latch [6] v1 0
.latch [7] v2 0
.names v0 [6]
11
.names v0 v1 v2 [7]
-1- 1
1-0 1
.names v0 v1 v2 v3.2
101 1
.end
v3.2
v1
[6]
v2
[7]
v0
clk
Empleando: x para la entrada, z para la salida, y con flip-flops Ds, puede escribirse:
.model model101
.inputs x
.outputs z
.latch D1 Q1 0
.latch D2 Q2 0
.names x D1
11
.names x Q1 Q2 D2
-1- 1
1-0 1
.names x Q1 Q2 z
101 1
.end
// Proceso registro. P2
always @(negedge Resetn or posedge clk)
if (Resetn == 0) begin Q1<=0; Q2 <= 0; end //Inicial=00
else begin Q1<=D1; Q2 <=D2; end
endmodule
Si se agregan los módulos siguientes puede efectuarse una simulación, con una secuencia de
entrada: 10100100.
module test(z,x,clk,Resetn);
input z;
output x,clk,Resetn;
reg x,clk,Resetn;
initial
begin
$dumpfile("model101.vcd");
$dumpvars(0, x, Resetn,clk,z);
end
initial
begin
$monitor("x=%b z=%b Resetn=%b clk=%b ", x,z, Resetn, clk, $time);
Resetn=1;clk=0;x=0;
module BancoDePrueba;
wire clk,Resetn,x,z;
model101 m1 (clk, Resetn,x,z);
test t1 (z,x,clk,Resetn);
endmodule
El siguiente diagrama de Moore representa a una máquina secuencial de estados finitos, que
tiene salida uno cada vez que las últimas tres entradas son la secuencia 101; cero en el resto de
las secuencias de entrada.
0
0 1
1
reset
.model m101Moore
.inputs x
.outputs z
.start_kiss
.i 1
.o 1
.p 8
.s 4
.r st0
0 st0 st0 0
1 st0 st1 0
0 st1 st2 0
1 st1 st1 0
0 st2 st0 0
1 st2 st3 0
0 st3 st2 1
1 st3 st1 1
.end_kiss
.model m101Moore
// Proceso registro. P2
always @(negedge Resetn or posedge clk)
if (Resetn == 0) begin Q1<=0; Q2 <= 0; end //Inicial=00
else begin Q1<=D1; Q2 <=D2; end
endmodule
module test(z,x,clk,Resetn);
input z;
output x,clk,Resetn;
reg x,clk,Resetn;
reg [1:10] sec; //variable para almacenar secuencia de entrada
integer j;
initial
begin
$dumpfile("model101.vcd");
$dumpvars(0, x, Resetn, clk, z);
end
initial
begin
sec={1'b1,1'b0,1'b1,1'b0,1'b1,1'b0,1'b0,1'b1,1'b0,1'b1}; //inicio secuencia
//for (j=1;j<11;j=j+1) $display(" %d %b", j, sec[j]);
ok
Figura A6.25. Formas de ondas. Modelo de Moore.
Requieren de una biblioteca genlib, como primer argumento. La entrada y salida pueden ser
redirigidas desde y hacia archivos.
Una compuerta de biblioteca crea una instancia de una compuerta o flip-flop dependiente de
la tecnología. Los parámetros de esas compuertas están definidos en una biblioteca con formato
genlib. Con la siguiente biblioteca, almacenada en un archivo con nombre: ejlib.genlib:
#
# library gates + flip-flop + buffer
# Mnemonic gate names
#
# --- COMBINATIONAL GATES
GATE "inv_comb" 16 O=!1A; PIN * INV 1 999 1 .2 1 .2
GATE "buffer_comb" 16 O=1A; PIN * NONINV 1 999 1 .2 1 .2
GATE "and2_comb" 32 O2=1A*1B; PIN * NONINV 1 999 1 .2 1 .2
GATE "or2_comb" 32 O1=1A+1B; PIN * NONINV 1 999 1 .2 1 .2
GATE "const1_comb" 8 O=CONST1;
GATE "const0_comb" 8 O=CONST0;
# --- EDGE_TRIGGERED FLIP FLOPS
# D-FF
LATCH "dff_re" 88 Q=D;
PIN D NONINV 1 999 1 .2 1 .2
SEQ Q ANY RISING_EDGE
CONTROL CLK 1 999 1 .2 1 .2
CONSTRAINT * .2 .2
E1n E2
E1
S1
E4
E0
E3 S0
E0n
#intro.blif
.model intro
.inputs E1, E0
.outputs S1, S0
SIGNAL E1 : BIT;
SIGNAL E1n : BIT;
SIGNAL E0 : BIT;
SIGNAL E0n : BIT;
SIGNAL E2 : BIT;
SIGNAL E3 : BIT;
SIGNAL E4 : BIT;
SIGNAL S0 : BIT;
SIGNAL S1 : BIT;
BEGIN
inst0 : "inv_comb"
PORT MAP (O => E1n, 1A => E1);
inst1 : "inv_comb"
PORT MAP (O => E0n, 1A => E0);
inst2 : "and2_comb"
PORT MAP (O2 => E2, 1A => E1n, 1B => E0);
inst3 : "and2_comb"
PORT MAP (O2 => E3, 1A => E1, 1B => E0n);
Mediante ejemplos simples se describe el uso de SIS para el diseño o síntesis de dispositivos
asincrónicos.
Ejemplo A6.13.
Se tienen dos circuitos asincrónicos que interactúan entre sí a través de las señales: x, y, z.
x
.model example
.inputs y
.outputs x z
.graph
x+ z+
x+ y+
z+ x-
x- z-
y+ z-
z- y-
y- x+
.end
El circuito a la izquierda tiene el mismo grafo, pero tiene como entradas a: x, z; con salida y.
El grafo puede almacenarse en el archivo: ex2astg.g, que se empleará más adelante.
Las listas de las señales de entrada y salida son separadas por espacios, no por comas. Un
nombre de señal seguido del símbolo + representa un canto de subida; seguido por el símbolo –
representa un canto de bajada. Puede usarse ~ para indicar conmutación. Cada línea describe un
elemento del grafo orientado, el cual se ilustra en la Figura A6.29.
z+ x-
x+ y+ z-
y-
Si se dispara x+, esta transición marca los lugares implícitos entre x+ y z+ y entre x+ e y+.
Entonces el evento x+ habilita las transiciones z+ e y+. Las transiciones z+ e y+ no comparten
precondiciones, por lo cual pueden dispararse en cualquier orden, se dice que son concurrentes.
Cuando las transiciones y+ y x- se disparan se habilita z-, ya que ambas precondiciones están
marcadas.
La representación, que es más general que el ejemplo simple que se ilustra, permite hacer
circular tokens a través del grafo, con lo cual pueden representarse las interacciones del circuito
con su ambiente. El ejemplo ilustra un caso sencillo de comunicación entre dispositivos
asincrónicos.
sis> astg_syn
El comando astg_syn sintetiza el grafo en una implementación en dos niveles. Con una
asignación de estados libre de carreras.
Las variables de estado se muestran seguidas de un underscore. Las salidas de las redes
combinacionales se muestran seguidas de next, por próximo estado.
Las ecuaciones anteriores resumen el diseño asincrónico mediante compuertas.
sis> astg_print_sg
STATE GRAPH
state 0 : (y=0 x=0 z=0 )
enabled transitions : [x+ ]
state 1 : (y=0 x=1 z=0 )
enabled transitions : [y+ z+ ]
state 2 : (y=0 x=0 z=1 )
enabled transitions : [y+ ]
state 3 : (y=0 x=1 z=1 )
enabled transitions : [y+ x- ]
state 4 : (y=1 x=0 z=0 )
enabled transitions : [y- ]
state 5 : (y=1 x=1 z=0 )
enabled transitions : [z+ ]
state 6 : (y=1 x=0 z=1 )
enabled transitions : [z- ]
state 7 : (y=1 x=1 z=1 )
enabled transitions : [x- ]
La descripción gráfica de las transiciones entre estados, del listado anterior, se muestra en la
Figura A6.30.
xyz
000
x+
z+ 100 y+
x- 101 110
y- y+ z+
001 111
y+ x-
011
z-
010
Resumiendo las ecuaciones obtenidas, en ambos diseños, se obtiene, para las variables de
estado, identificando los próximos estados con el nombre de la variable seguida del símbolo +:
x z (x y)
z x y z
y z x
a
r x
Latch transparente. Sean las siguientes formas de ondas que especifican un latch, con D y G
entradas y salida Q:
1 2 3 4
G
Para representar esta situación, puede definirse un lugar LQ1, de éste pueden gatillarse, en
cualquier orden, las transiciones G+ o D-.
El grafo de la Figura A6.35, muestra los lugares con círculos dobles, las transiciones con
círculos simples; un token como un punto negro, en el lugar LQ1. Esta marca indica que las
precondiciones se han cumplido; en el caso del ejemplo, significa que ya se produjo el canto de
bajada de G. Las diferentes instancias de G se enumeran de acuerdo a los números de la Figura
A6.34.
Cuando todas las pre-condiciones de una transición se han cumplido, ésta puede dispararse,
cambiando su valor y el token pasa a su post-condición. Los lugares con una pre-condición y
una post-condición se denominan lugares implícitos y no se dibujan. Un token sólo puede pasar
a un lugar, lo cual modela que los eventos deben producirse con una mínima separación
temporal entre ellos. Se acepta un no determinismo sólo en las entradas.
LQ0
LQ1
G+/3
D+
G+/1 D-
G-/3
G+/4
G-/1 G+/2
Q+
Q-
G-/2 G-/4
sis> astg_print_sg
STATE GRAPH
state 7 : (D=1 CLK=1 Q=1 )
enabled transitions : [CLK- ]
state 6 : (D=1 CLK=1 Q=0 )
enabled transitions : [Q+ ]
state 5 : (D=0 CLK=1 Q=1 )
enabled transitions : [Q- ]
state 4 : (D=0 CLK=1 Q=0 )
enabled transitions : [CLK- ]
state 3 : (D=1 CLK=0 Q=1 )
enabled transitions : [D- CLK+ ]
state 2 : (D=1 CLK=0 Q=0 )
enabled transitions : [CLK+ ]
state 1 : (D=0 CLK=0 Q=1 )
Q
D
Ejemplo A6.15.
Sintetizar mediante compuertas un sistema digital con dos entradas m y s, y una salida q.
s
q
La Figura A6.39 muestra las relaciones causa-efecto entre las entradas y la salida. El canto
de subida de s, coloca alta la salida q; la señal m, puede ocurrir antes o después del canto de
subida de s, y su canto de bajada (en caso de estar presente) coloca baja la salida q. Si m no está
presente, la bajada de s también pone la salida q baja. El circuito que genera las señales s y m,
además debe cumplir que el canto de bajada de s ocurre antes que el canto de bajada de la señal
m.
s 1 2
m 1 2
q 1 2
LQ1
s+/1 m+/1
q+ /1 s+/2
LQ2 q+/2
q-
s-/1 m+/2
LQ4 LQ3
m- s-/2
LQ3 s-/2
s-/2 m-
m- LQ4
LQ4 q-
q- LQ1
.end
Notar que se han definido lugares donde existen más de una transición de salida o donde
llega más de una transición de entrada. Los tres recorridos posibles del token, a través del grafo,
representan las tres situaciones ilustradas en las formas de ondas. Se han numerado los cantos,
que especifican instancias de los eventos, en la Figura A6.39.
sis> astg_print_sg
STATE GRAPH
state 5 : (s=0 m=1 q=1 )
enabled transitions : [m- ]
state 4 : (s=0 m=1 q=0 )
enabled transitions : [s+ ]
state 7 : (s=1 m=1 q=1 )
enabled transitions : [s- ]
state 6 : (s=1 m=1 q=0 )
enabled transitions : [q+ ]
state 1 : (s=0 m=0 q=1 )
q
m
s
smq 000 0
m+/1
s+/1
100 2 010 4
q+ /1 s+/2
q-
101 3 110 6
s-/1 m+/2
q+/2
001 1
m- 111 7
s-/2
011 5
x z1
z0
A 0
0 H 1
1
1
1 B G 0
0 0
0 C F 1
1 1
1 D E 0
0
Se han numerado algunos eventos, debido a que, en un período, existen cuatro cantos de
subida y bajada de x, y dos de q0. La descripción del grafo de las transiciones de las señales, se
basa en la Figura A6.45.
x 1 2 3 4
q2
q1
q0 1 2
z1
z0
Luego de lo cual puede obtenerse información de las ecuaciones y del diagrama de estados.
sis> read_astg contador.g
sis> astg_syn
sis> print
q2_next = q0_ q2_ + q0_' q1_ x' + q1_ q2_ + q2_ x
q1_next = q0_ q2_' x' + q0_' q1_ + q1_ q2_' + q1_ x
q0_next = q0_ q1_ q2_ + q0_ q1_' q2_' + q0_ x' + q1_ q2_ x + q1_' q2_' x
{q2} = q2_
{q1} = q1_
{q0} = q0_
sis> astg_print_sg
STATE GRAPH
state 11 : (x=1 q2=1 q1=1 q0=0 )
enabled transitions : [q0+ ]
state 0 : (x=0 q2=0 q1=0 q0=0 )
enabled transitions : [x+ ]
state 1 : (x=0 q2=1 q1=0 q0=0 )
enabled transitions : [q2- ]
state 12 : (x=1 q2=0 q1=0 q0=1 )
enabled transitions : [x- ]
state 13 : (x=1 q2=1 q1=0 q0=1 )
enabled transitions : [q0- ]
state 2 : (x=0 q2=0 q1=1 q0=0 )
enabled transitions : [q2+ ]
state 3 : (x=0 q2=1 q1=1 q0=0 )
enabled transitions : [x+ ]
state 14 : (x=1 q2=0 q1=1 q0=1 )
enabled transitions : [q0- ]
state 15 : (x=1 q2=1 q1=1 q0=1 )
enabled transitions : [x- ]
state 4 : (x=0 q2=0 q1=0 q0=1 )
enabled transitions : [q1+ ]
state 5 : (x=0 q2=1 q1=0 q0=1 )
enabled transitions : [x+ ]
state 6 : (x=0 q2=0 q1=1 q0=1 )
enabled transitions : [x+ ]
state 7 : (x=0 q2=1 q1=1 q0=1 )
enabled transitions : [q1- ]
state 8 : (x=1 q2=0 q1=0 q0=0 )
enabled transitions : [q0+ ]
state 9 : (x=1 q2=1 q1=0 q0=0 )
enabled transitions : [x- ]
state 10 : (x=1 q2=0 q1=1 q0=0 )
enabled transitions : [x- ]
H 1
00
G
00
1 1
1 A F 0
00 10
0 0
0 B E 1
00 10
1 1
1 C D 0
01 0 01
La asignación de estados se efectúa empleando código Gray, de tal modo que los estados
adyacentes en la Figura A6.46 estén a distancia 1. Se elige arbitrariamente que el estado A esté
asociado al código 000.
G y H son estados inestables, empleados para transitar sin carreras desde estado F hasta el
estado A. Se dejan dos estados próximos sin especificar: estando en G con entrada 0, y estando
en H con entrada 0.
x
q2q1q0 0 1
A 000 001 000 00
B 001 001 011 00
C 011 010 011 01
D 010 010 110 01
E 110 111 110 10
F 111 111 101 10
G 101 - 100 00
H 100 - 000 00
q2+q1+q0+ z1z0
La Figura A6.48 muestra un mapa del próximo estado, construido a partir de la tabla de la
Figura A6.47. Minimizando las funciones de próximo estado, libres de perturbaciones, se
obtienen:
xq2
00 01 11 10
q1q0
q2+q1+q0+
0 00 01 10 00
1 00 01 10 00
z1z0
Se obtienen:
z1 = q2q1; z0 = q2’1
La Figura A6.50 muestra las formas de ondas de los cambios de estado relativas a los pulsos
asincrónicos de la entrada x. Se han enumerado los diferentes cambios de las señales, x y q0, en
un período.
C D E F G H A B
x 1 2 3
q2
q1
q0 1 2
z1
z0
Con la información anterior puede confeccionarse un grafo de transiciones con el estado total;
en éste se identifica el estado como la suma de las entradas y los estados internos, y se muestran
las transiciones únicas entre estados como eventos asincrónicos.
0011 0111
St6 St7
01 10
q0- q0+
Los cuatro posibles recorridos del ASTG se ilustran con las formas de ondas.
Se acepta concurrencia entre las entradas. Estando x baja, puede producirse primero el canto
de a o b; similarmente estando x alta, los cantos de bajada de a y b pueden llegar en cualquier
orden. El canto de subida de x tiene dos precondiciones: que hayan llegado primero los cantos
de subida de a y b.
.model elementoC
.inputs a b
.outputs x
.graph
x- a+ b+
a+ x+
b+ x+
x+ a- b-
a- x-
b- x-
.end
x-
a+ b+
x+
a- b-
a 1 2 3 4
b 1 2 3 4
sis> astg_syn
sis> print
x_next = a b + a x_ + b x_
{x} = x_
x
b
sis> astg_print_sg
STATE GRAPH
state 1 : (a=0 b=0 x=1 )
a 1 2 3 4 5
b 1 2 3 4 5
x 1 2 3 4
b-/1 a+/2
a+/2 b+/2
b+/2 x+/2
x+/2 b-/2
b-/2 x-/2
x-/2 a-/2
a-/2 b+/3
b-/3 b+/4
b+/4 a+/4
a+/4 x+/4
x+/4 b-/4
b-/4 x-/4
x-/4 a-/4
a-/4 a+/5
a+/5 a-/5
a-/5 b+/5
b+/5 b-/5
b-/5 a+/1
.end
Finalmente, la síntesis:
sis> print
{x_next} = a b
Referencias
http://www-cad.eecs.berkeley.edu
SIS: A System for Sequential Circuit Synthesis. Ellen M. Sentovich, Kanwar Jit Singh, Luciano
Lavagno, Cho Moon, Rajeev Murgai, Alexander Saldanha, Hamid Savoj, Paul R. Stephan,
Robert K. Brayton, Alberto Sangiovanni-Vincentelli. Electronics Research Laboratory
Memorandum No. UCB/ERL M92/41, Mayo 1992.
Índice general.
APÉNDICE 6 .........................................................................................................................................1
USO DE SIS ...........................................................................................................................................1
SEQUENTIAL INTERACTIVE SYSTEM ........................................................................................1
A6.1. INTRODUCCIÓN ..........................................................................................................................1
A6.2. FORMATO BLIF. ..........................................................................................................................1
A6.3. LECTURA Y ESCRITURA DE ARCHIVOS. .......................................................................................3
Ejemplo A6.1. eqn. ........................................................................................................................3
Ejemplo A6.2. blif. .........................................................................................................................3
Ejemplo A6.3. Máquina de estados finitos. ...................................................................................5
Latch genérico. ...............................................................................................................................8
Ejemplo. ................................................................................................................................................ 8
A6.4. COMANDOS PARA MINIMIZACIÓN DE REDES MULTINIVEL. .........................................................8
A6.4.1. Descomposición. ................................................................................................................8
A6.4.2. Eliminación. .......................................................................................................................9
A6.4.3. Simplificación. ...................................................................................................................9
A6.4.4. Resubstitución. .................................................................................................................10
A6.4.5. Factorización. ..................................................................................................................10
A6.4.6. Limpieza. ..........................................................................................................................11
A6.4.7 Archivos de optimización multinivel. ................................................................................11
Ejemplo A6.4. .......................................................................................................................................... 12
A6.4.8. Otros comandos multinivel. ............................................................................................13
A6.5. MAPEO TECNOLÓGICO. ............................................................................................................13
Ejemplo A6.5. ...............................................................................................................................13
tech_decomp .................................................................................................................................15
read_library .................................................................................................................................15
map ...............................................................................................................................................15
Print_gate .....................................................................................................................................15
Print_delay ...................................................................................................................................15
Formato de bibliotecas genlib. .....................................................................................................16
Ejemplo A6.6. ...............................................................................................................................17
A6.6. MAPEO TECNOLÓGICO A FPGA. ..............................................................................................19
Arquitecturas basadas en multiplexores.......................................................................................19
Mapeo a xilinx .............................................................................................................................20
A6.7. MINIMIZACIÓN Y ASIGNACIÓN DE ESTADOS. ............................................................................21
Ejemplo A6.7. Formato kiss en Sis. ..............................................................................................21
De blif a Verilog. ..................................................................................................................................... 23
Ejemplo A6.7a. ................................................................................................................................... 24
Ejemplo A6.8. Nova ......................................................................................................................25
Ejemplo A6.9. Jedi. ......................................................................................................................28
Ejemplo A6.10. Modelo Mealy. ....................................................................................................29
De blif a Verilog. ..................................................................................................................................... 32
Ejemplo A6.11. Modelo de Moore. ...............................................................................................34
De blif a Verilog. ..................................................................................................................................... 35
Índice de figuras.
Apéndice 7
Uso de abc
Un Sistema para síntesis secuencial y verificación
7.1. Introducción
En las primeras etapas de un diseño digital se requiere obtener la estructura del sistema en
términos de componentes de hardware. Se denomina síntesis lógica al proceso de generar un
circuito en términos de compuertas y flip-flops; en esta etapa suele efectuarse una minimización
del número de transistores que se emplearán (optimización espacial). Luego es necesario
efectuar minimizaciones de los retardos (optimización temporal), para esto se requiere efectuar
transformaciones de la red booleana de tal modo que la implementación final satisfaga los
requerimientos.
A medida que aumenta el tamaño del sistema estas técnicas no pueden aplicarse
manualmente y resultan indispensables herramientas computacionales.
Se asume el tipo fd para la descripción de la tabla. En la parte de las salidas un “1” indica
que el cubo pertenece al conjunto on-set; Un “-” indica que el producto pertenece al conjunto de
condiciones superfluas; y un “0” indica que el cubo no tiene significado para la salida dada.
Cada salida se representa por un nodo lógico. Sólo están soportadas PLA binarias, esto
indica que se ignoran los cubos don’t-care.
El Ejemplo 5.5, se tiene la siguiente función Booleana, descrita por sus mintérminos:
El comando:
print_kmap f
El comando:
sop
Convierte las funciones de los nodos, de las representaciones internas, en suma de productos.
El comando:
write_pla ./ej/ej5_5ip.pla
.i 4
.o 1
.ilb a b c d
.ob f
.p 4
1110 1
1-01 1
-00- 1
-0-1 1
.e
Donde se advierte que de los 8 productos (mintérminos en el ejemplo) la minimización
reduce la red lógica a 4 cubos o productos. Forma minimizada que puede leerse según:
f(a,b,c,d) = abcd’+ac'd+b’d+b’c’
El comando:
write_eqn ./ej/ej5_5.eqn
Produce el archivo en formato eqn de Synopsys. Las ecuaciones se entregan en sus formas
factorizadas.
INORDER = a b c d;
OUTORDER = f;
f = (a * ((!c * d) + (b * c * !d))) + (!b * (!c + d));
El commando:
print_fact
Entrega las formas factorizadas en la consola.
Existen una serie de comandos de escritura en archivos. Genera archivos blif y también en
Verilog.
El comando:
write_verilog ./ej/ej5_5.verilog
Produce un modulo estructural, con las formas factorizadas de la red lógica.
module unknown ( a, b, c, d, f );
input a, b, c, d;
output f;
assign f = (a & ((~c & d) | (b & c & ~d))) | (~b & (~c | d));
endmodule
Referencias
http://www.eecs.berkeley.edu/~alanmi/abc/
Índice general.
APÉNDICE 7 ........................................................................................................................................ 1
USO DE ABC ........................................................................................................................................ 1
UN SISTEMA PARA SÍNTESIS SECUENCIAL Y VERIFICACIÓN .......................................... 1
7.1. INTRODUCCIÓN ............................................................................................................................ 1
7.2. SÍNTESIS DE SISTEMAS COMBINACIONALES. ................................................................................. 1
7.2.1. Descripción en formato pla. ................................................................................................ 1
REFERENCIAS...................................................................................................................................... 4
ÍNDICE GENERAL. ................................................................................................................................ 5
ÍNDICE DE FIGURAS. ............................................................................................................................ 6
Índice de figuras.
1. Especificación.
Se desea diseñar un sistema combinacional que tenga como entrada cuatro palabras de dos bits
cada una, denominadas a, b, c y d; y que genere dos salidas. La salida f1 debe generar una señal
alta cuando se tenga: a>b>c>d. La salida f2 debe colocarse en alto cuando a<=c o cuando a<d.
2
a
2 f1
b 2
c f2
2
d
Desde un punto de vista combinacional se tienen que realizar 2 diseños, ya que hay dos
funciones de salida, a partir de tablas de verdad que tienen 256 renglones cada una, ya que es un
espacio de 8 variables de entrada.
Con el apoyo de programas puede generarse la tabla de verdad en formato .pla. El que puede ser
procesado por el minimizador espresso.
int escribe_archivo(void)
{ FILE *stream;
/* Abre stream para escritura, en modo texto. */
if ((stream = fopen("modcomp2.txt", "w")) == NULL) {
fprintf(stderr, "No pudo abrir archivo de salida.\n");
return 1;
}
prtinfile(stream);
fclose(stream); /* close stream */
return 0;
}
int main(void)
{ escribe_archivo(); return 0;}
El archivo de datos generado tiene un peso de 4 KB. Se da un listado de los 256 renglones de la
tabla de verdad.
El comando:
Espresso –Dexact –oeqntott modcomp2.txt > modcomp.eqn
Obtiene un listado de las ecuaciones minimizadas de diseño, en dos niveles, en formato eqn.
assign f1 = (a1&a0&b1&~b0&~c1&c0&~d1&~d0);
assign f2 = (~a0&d1&d0) | (c1&c0) | (~a0&c1) | (~a1&d1) | (~a1&c0) |
(~a1&~a0) | (~a1&c1);
Endmodule
Puede notarse que la expresión lógica para la función f1, podría haberse deducido considerando
que la tabla de verdad sólo tiene un mintérmino. Ya que a>b>c>d sólo puede cumplirse para la
combinación a=3, b=2, c=1 y d=0, en decimal. Lo que permite escribir directamente:
f1 =a1a0b1b0’c1’c0d1’d0’
a
a<=c
c
f2
d
d>a
a
Ahora los mapas de los subsistemas involucran a 4 variables, y pueden escribirse directamente:
a1a0 d1d0
c1 c0 00 01 11 10 a1 a0 00 01 11 10
0 4 12 8 0 4 12 8
00 1 0 0 0 00 0 1 1 1
1 5 13 9 1 2 5 13 9
01 1 1 0 0 01 0 0 1 1
15 11 15 11
11 13 17 1 1 11 03 07 0 0
2 6 14 10 2 6 14 10
10 1 1 0 1 10 0 0 1 0
a<=c d>a
Resultando:
f2=(a0’+c1+c0)(a0’+c0+c1’)( a1’+c1) + (d1+d0)( a1’+a0’)(d0+a1’)( d1+a1’)(d1+a0’)
Con 18 literales y 28 entradas en tres niveles.
Puede compararse con el resultado obtenido con espresso, con la opción –epos, en la cual f2 se
obtiene en 2 niveles con 18 literales, 23 entradas.
La siguiente descripción Verilog, mediante el empleo de buses de dos bits cada uno, representa
las funciones buscadas. Nótese que la especificación: a>b>c>d se reemplaza por la lógicamente
equivalente, mediante operadores and. Como el resultado de una comparación entre dos
operandos binarios da como resultado un valor de un bit, pueden emplearse operadores al bit.
En este caso, la descripción también puede efectuarse empleando operadores lógicos (&& y ||,
para el and y para el or de expresiones lógicas).
c>d
b>c
a>b
a<d
a<=c
Los bloques comparadores pueden ser descritos por compuertas lógicas básicas. Determinando
de este modo expresiones booleanas de las funciones. Al descenso de la descripción abstracta a
expresiones boolenas, mediante compuertas y registros, en el caso de sistemas secuenciales, se
lo denomina nivel de transferencia de registros o RTL (register transfer level).
xor
Nótese que el xor se implementa en tres niveles. Esto se debe a que las compuertas de biblioteca
disponibles son compuertas and, or e inversores. La Figura 7, describe la expresión booleana:
Result = D1D0’ + D1’D0, empleando tres niveles.
Si los bits más significativos son iguales, la señal _n0002 luego del inversor estará en alto, en la
Figura 8. En este caso se comparan los dos bits menos significativos. Si no son iguales se
comparan los bits más significativos, generando la señal inferior del or de salida.
El descenso a nivel de compuertas, es una forma de representar las funciones por expresiones.
La Figura 8, muestra el esquemático para la función A menor que B. Que es representada por la
expresión: ALB= a1’b1 + a0’b0 (a1==b1).
Una vez descrita la red booleana por expresiones, se las minimiza, pero considerando que el
bloque mínimo de implementación física es una Tabla de búsqueda (LUT look-up table), de 4
bits de entrada y un bit de salida. Estas tablas permiten almacenar una tabla de verdad de una
función de cuatro variables. Por supuesto que este bloque también permite representar funciones
boolenas de dos y tres variables, pero en estos casos se estará perdiendo parte de la superficie
del chip.
d
f1
f2
f1=a1a0b1b0’c1’c0d1’d0’
Para f2 se tiene un mux que bajo el control de la señal a0 deja pasar la salida de la
LUT4_EAFF, con a0=0; o la de la LUT4_D5D4, con a0=1.
La LUT EAFF representa a: i0+i1i2+i3’, que en términos de las entradas resulta: c1+d1d0+a1’.
f2 = a0(a1’c1+c0c1+a1’d1+a1’c0) + a0’(c1+d1d0+a1’)
En este tipo de síntesis se obtienen las ecuaciones de la red booleana en la forma suma de
productos. Puede escogerse que se desplieguen las ecuaciones minimizadas en Verilog.
assign f1 = (b[1] && !d[1] && !d[0] && !b[0] && c[0] && a[0] && !c[1] && a[1]);
assign f2 = !((!d[1] && !c[1] && a[1]) || (!d[0] && !c[1] && a[1])
|| (!c[0] && a[0] && a[1]) || (a[0] && !c[1] && a[1])
|| (!d[1] && !c[0] && a[0] && !c[1]));
La síntesis RTL genera en este caso comparadores sin emplear las funciones xor.
Cuando se han obtenido las ecuaciones booleanas del sistema digital, desde las tablas de verdad
o mapas de Karnaugh, pueden representarse el sistema mediante un módulo estructural basado
en compuertas.
En este caso el mapeo tecnológico a FPGA, resulta igual al anterior. Pero el descenso a nivel de
compuertas es diferente, ya que no emplea los comparadores que sintetiza la descripción
abstracta. Ahora la descripción no es abstracta, ya que se da la arquitectura interna. La Figura
15 muestra los dos bloques que generan las funciones de salida.
En este caso se obtiene una minimización basada en suma de productos. Generando un esquema
RTL basado en una red booleana con nodos que implementan los productos o cubos que cubren
a las funciones. Cada producto se implementa en dos niveles, considerando la obtención de las
señales complementadas mediante inversores, dentro de los nodos.
El mapeo tecnológico de los nodos anteriores a una CPLD, se muestra en la Figura 25.
Ejercicios propuestos.
Índice general.
Índice de Figuras.
1. Especificación.
Se desea diseñar un sistema combinacional que tenga como entrada una palabra binaria de 16
bits y que genere una salida de 16 bits, la cual debe tener igual número de unos que la palabra
de entrada, pero justificados a la izquierda.
Ejemplo:
Palabra de entrada Palabra de salida
0101010000110011 1111111000000000
0100000000111111 1111111000000000
0000000000000001 1000000000000000
Desde un punto de vista combinacional se tienen que realizar 16 diseños, para cada una de las
funciones de salida, a partir de tablas de verdad que tienen 65536 renglones cada una.
Con el apoyo de programas puede generarse la tabla de verdad en formato .pla. El que puede ser
procesado por el minimizador espresso.
#define DIGITOS 16
static char bufc[DIGITOS + 1];
char * prtint(int i, int largo) //imprime en binario
{ int j, k=1;
char *p = bufc;
for (j=15; j>=0; j--) if((k<<j)&i) *p++='1'; else *p++='0';
return (bufc+DIGITOS-largo);
}
void prtstr(char * p)
{
while(*p) putchar(*p++);
}
//La siguente rutina puede modificarse para generar otras tablas de verdad
void prtinfile(FILE * stream)
{ unsigned int j,t,s;
int escribe_archivo(void)
{ FILE *stream;
/* Abre stream para escritura, en modo texto. Puede elegirse el nombre del archivo de salida*/
if ((stream = fopen("unos.pla", "w")) == NULL) {
fprintf(stderr, "No pudo abrir archivo de salida.\n");
return 1;
}
prtinfile(stream);
fclose(stream); /* close stream */
return 0;
}
int main(void)
{
escribe_archivo();
return 0;
}
El archivo generado tiene un peso de más de 2MB. Se da un listado del comienzo y del final del
archivo.
Se obtiene un listado de las ecuaciones minimizadas de diseño, en dos niveles, en formato eqn.
Se muestran sólo algunas de las ecuaciones. El archivo con las expresiones tiene un peso de
más de 2 MB.
El formato eqn, es fácilmente traducido a verilog, basta encabezar y terminar el módulo; además
de preceder con assign a las ecuaciones de salida, daremos ejemplo de esto más adelante. En
caso de ocurrir señales negadas, éstas son precedidas con el símbolo !, en el formato eqn; el cual
debe reemplazarse globalmente con el símbolo de la negación de verilog: ~.
3. Diseño modular.
Entrada 15..0
15..0
SumaUnos
4..0
TablaSuma
15..0
Salida 15..0
Si concebimos un módulo que determine los unos en una palabra de 4 bits, para su diseño se
tiene una tabla de verdad de 16 renglones y tres bits de salida, ya que el máximo número de
unos es 4, y éste se representa en binario mediante: 100.
Se requieren 4 de estos módulos; cuyas entradas se conectan a cuatro grupos de 4 bits de la
entrada. Si el módulo se denomina cuenta1, el diagrama de la Figura 2, ilustra la
descomposición:
Entrada 15..0
Salida 15..0
Se han agregado dos módulos suma1, que suman dos de las tres salidas binarias de dos módulos
cuenta1; éste es un sumador, suma1 en el diagrama de la Figura 2, en el que los operandos
llegan a un máximo de 4, en binario. Por lo tanto su salida debe expresarse en 4 bits para poder
representar la suma máxima con valor 8 decimal, que equivale a 1000 en binario.
Es preciso agregar un sumador adicional, el sumador5, con entradas con valores máximos
iguales a 8 y salida con valor máximo 16, este sumador requiere 5 bits de salida.
La estructura concatenada de los módulos implica el aumento de los niveles del diseño, y la
menor velocidad en la generación de la salida. Se economiza en número de compuertas, pero se
degrada el funcionamiento temporal.
Formato que puede traducirse al siguiente módulo verilog, empleando un editor de texto:
//cuenta unos en palabra de 4 bits.
module cuenta1(s2,s1,s0,e3,e2,e1,e0);
input e3,e2,e1,e0;
output s2,s1,s0;
assign s2 = (e3&e2&e1&e0);
assign s1 = (~e2&e1&e0) | (~e3&e2&e1&e0) | (e2&~e1&e0) |
(e3&~e1&e0) |(e2&e1&~e0) | (e3&e1&~e0) | (e3&e2&~e0);
assign s0 = (~e3&~e2&~e1&e0) | (~e3&~e2&e1&~e0) | (~e3&e2&~e1&~e0) |
(e3&~e2&~e1&~e0) | (e3&~e2&e1&e0) |
(e3&e2&~e1&e0) | (e3&e2&e1&~e0) | (~e3&e2&e1&e0);
endmodule
001000 0001
001001 0010
001010 0011
001011 0100
001100 0101
010000 0010
010001 0011
010010 0100
010011 0101
010100 0110
011000 0011
011001 0100
011010 0101
011011 0110
011100 0111
100000 0100
100001 0101
100010 0110
100011 0111
100100 1000
.e
Debe notarse que solamente se especifican los unos de la función. Las combinaciones que no
pueden presentarse se tratan como condiciones superfluas.
module suma1(a2,a1,a0,b2,b1,b0,su3,su2,su1,su0);
input a2,a1,a0,b2,b1,b0;
output su3,su2,su1,su0;
Para evitar errores en la generación de la tabla de verdad, ésta se genera mediante un programa.
Se muestra sólo la función que genera la tabla, el resto de las funciones son similares a las vistas
en el programa que se ilustró al inicio.
n2 = (!a3&!a2&a0&!b3&!b2&b1&b0) | (!a3&a2&a0&!b3&b2&b1&b0) |
(!a3&!a2&a1&a0&!b3&!b2&b0) | (!a3&a2&a1&a0&!b3&b2&b0) |
(!a3&!a2&!b3&b2&!b1&!b0) | ( !a3&a2&!a1&!b3&!b2&!b0) |
(!a3&!a2&!a1&!b3&b2&!b0) | (!a3&a2&!a0&!b3&!b2&!b1) |
(!a3&!a2&!a0&!b3&b2&!b1) | (!a3&!a2&a1&!b3&!b2&b1) |
(!a3&a2&a1&!b3&b2&b1) | (!a3&a2&!a1&!a0&!b3&!b2) |
(!a3&a2&!a1&!b3&!b2&!b1) | ( !a3&!a2&!a1&!b3&b2&!b1) |
(!a3&a2&!b2&!b1&!b0) | (!a2&!a1&!a0&!b3&b2);
assign n4 = (a3&~a2&~a1&~a0&b3&~b2&~b1&~b0);
assign n3 = (~a3&b3&~b2&~b1&~b0) | (a3&~a2&~a1&~a0&~b3) |
(~a3&a0&~b3&b2&b1&b0) | (~a3&a2&a0&~b3&b1&b0) |
(~a3&a1&a0&~b3&b2&b0) | (~a3&a2&a1&a0&~b3&b0) |
(~a3&a1&~b3&b2&b1) | (~a3&a2&a1&~b3&b1) | (~a3&a2&~b3&b2);
assign n2 = (~a3&~a2&a0&~b3&~b2&b1&b0) | (~a3&a2&a0&~b3&b2&b1&b0) |
(~a3&~a2&a1&a0&~b3&~b2&b0) | (~a3&a2&a1&a0&~b3&b2&b0) |
(~a3&~a2&~b3&b2&~b1&~b0) | (~a3&a2&~a1&~b3&~b2&~b0) |
(~a3&~a2&~a1&~b3&b2&~b0) | (~a3&a2&~a0&~b3&~b2&~b1) |
(~a3&~a2&~a0&~b3&b2&~b1) | (~a3&~a2&a1&~b3&~b2&b1) |
(~a3&a2&a1&~b3&b2&b1) |(~a3&a2&~a1&~a0&~b3&~b2) |
(~a3&a2&~a1&~b3&~b2&~b1) | (~a3&~a2&~a1&~b3&b2&~b1) |
(~a3&a2&~b2&~b1&~b0) | (~a2&~a1&~a0&~b3&b2);
assign n1 = (~a3&a1&a0&~b3&b1&b0) | (~a3&~a1&a0&~b3&~b1&b0) |
(~a3&a1&~b2&~b1&~b0) | (~a2&~a1&~a0&~b3&b1) |
(~a3&a1&~b3&~b1&~b0) | (~a3&~a1&~b3&b1&~b0) |
(~a3&a1&~a0&~b3&~b1) | (~a3&~a1&~a0&~b3&b1);
assign n0 = (~a3&a0&~b2&~b1&~b0) | (~a2&~a1&~a0&~b3&b0) |
(~a3&a0&~b3&~b0) | (~a3&~a0&~b3&b0);
endmodule
Traducida a verilog:
El en diagrama de la Figura 3, se definen los nombres de las instancias de los módulos. También
se han definido tres conjuntos de alambres para efectuar las conexiones entre los módulos.
Entrada 15..0
Tabla
Salida 15..0
scuenta1 cuenta10(sum[2],sum[1],sum[0],entrada[3],entrada[2],entrada[1],entrada[0]);
scuenta1 cuenta11(sum[5],sum[4],sum[3],entrada[7],entrada[6],entrada[5],entrada[4]);
scuenta1 cuenta12(sum[8],sum[7],sum[6],entrada[11],entrada[10],entrada[9],entrada[8]);
scuenta1 cuenta13(sum[11],sum[10],sum[9],entrada[15],entrada[14],entrada[13],entrada[12]);
suma1 suma10(sum[2],sum[1],sum[0],sum[5],sum[4],sum[3],
sum2[3],sum2[2],sum2[1],sum2[0]);
suma1 suma11(sum[8],sum[7],sum[6],sum[11],sum[10],sum[9],
sum2[7],sum2[6],sum2[5],sum2[4]);
tablasuma tabla(sum3[4],sum3[3],sum3[2],sum3[1],sum3[0],
salida[15],salida[14],salida[13],salida[12],salida[11],
salida[10],salida[9],salida[8],salida[7],salida[6],
salida[5],salida[4],salida[3],salida[2],salida[1],salida[0]);
endmodule
El diseño anterior fue minimizado en dos niveles para cada uno de los módulos. Al ser
implementado en base a fpga, mediante la aplicación, se obtienen los resúmenes de ocupación
de espacio y de velocidad.
Cell Usage :
# BELS : 83
# LUT2 :5
# LUT3 :8
# LUT4 : 68
# MUXF5 :2
# IO Buffers : 32
# IBUF : 16
# OBUF : 16
====================================================================
Speed Grade: -5
Minimum period: No path found
Minimum input arrival time before clock: No path found
Maximum output required time after clock: No path found
Maximum combinational path delay: 21.247ns
4. Diseño abstracto.
La descripción del problema, empleando verilog, permite describir lo que se desea realizar, en la
forma más abstracta posible. En este caso el módulo que suma los unos de la palabra es sencillo
de describir, y dejamos a la herramienta de síntesis que tome la iniciativa para descomponer el
problema en submódulos. Para la descripción de la tabla de salida, empleamos una sentencia
case. Resulta:
always @(*)
begin
sumau = entrada[15]+entrada[14]+entrada[13]+entrada[12]+
entrada[11]+entrada[10]+entrada[9] +entrada[8]+
entrada[7] +entrada[6] +entrada[5] +entrada[4]+
entrada[3] +entrada[2] +entrada[1] +entrada[0];
case (sumau)
5'b00000: salida = 16'b0000000000000000;
5'b00001: salida = 16'b1000000000000000;
5'b00010: salida = 16'b1100000000000000;
5'b00011: salida = 16'b1110000000000000;
5'b00100: salida = 16'b1111000000000000;
5'b00101: salida = 16'b1111100000000000;
5'b00110: salida = 16'b1111110000000000;
5'b00111: salida = 16'b1111111000000000;
5'b01000: salida = 16'b1111111100000000;
5'b01001: salida = 16'b1111111110000000;
5'b01010: salida = 16'b1111111111000000;
5'b01011: salida = 16'b1111111111100000;
La herramienta de síntesis determina que la sentencia case puede implementares con una ROM
de 5 entradas para el bus de dirección, con palabras de largo 16. La suma de los bits la
implementa en cuatro niveles de sumadores que generan reservas de salida.
Los algoritmos empleados para realizar la síntesis se alejan bastante de los postulados y
teoremas del álgebra de Boole y de los métodos basados en papel y lápiz.
Si la descripción es sintetizable podría seguirse adelante en el diseño, salvo que los tiempos de
propagación fueran excesivos; en este caso habría que intentar otra descripción verilog, en la
cual el programador debería participar en la descomposición del problema en módulos
sintetizables que logren una síntesis en menos niveles.
Macro Statistics
# ROMs :1
32x16-bit ROM :1
# Adders/Subtractors : 15
1-bit adder carry out :8
2-bit adder carry out :4
3-bit adder carry out :2
4-bit adder carry out :1
El módulo verilog, que describe la relación entre la entrada y salida, se muestra en la Figura 4.
Sumador5 Tablasuma
Suma1
Se han indicado los nombres de los bloques que se usaron en la descripción estructural, vista al
inicio.
Speed Grade: -5
Minimum period: No path found
Minimum input arrival time before clock: No path found
Maximum output required time after clock: No path found
Maximum combinational path delay: 17.324ns
En el caso del ejemplo que se está analizando, el diseño abstracto conduce a mejores resultados,
tanto en tiempo como en espacio. La explicación de esto es que los diseños optimizados en dos
niveles de compuertas, pero de numerosas entradas, no se mapean adecuadamente en los
bloques lógicos de las fpga. Además la herramienta de síntesis emplea un bloque de ROM, para
implementar la Tabla de salida.
RESOURCES SUMMARY
Macrocells Function Block
Pterms Used Registers Used Pins Used
Used Inputs Used
46/144 (32%) 551/720 (77%) 0/144 (0%) 32/81 (40%) 253/288 (88%)
RESOURCES SUMMARY
Macrocells Function Block
Pterms Used Registers Used Pins Used
Used Inputs Used
64/144 (45%) 622/720 (87%) 0/144 (0%) 32/81 (40%) 179/288 (63%)
Nivel RTL.
A partir del diseño abstracto descompone el sumador de bits, en cuatro niveles de sumadores,
como se muestra en la Figura 6.
La herramienta de síntesis produce una descripción interna de cada LUT, lo que puede verse en
la Figura 9.
7. Diseño secuencial.
Puede lograrse un diseño, que cumpla con la especificación inicial, mediante una máquina
secuencial que emplee registros de desplazamiento. Este diseño requiere especificar señales de
control y además disponer de una señal de reloj.
Índice general.
Índice de Figuras