Documente Academic
Documente Profesional
Documente Cultură
________________________________________________________________________________
5.1 ¿Por qué la realización a dos niveles no resuelve el problema del diseño
combinacional?
© los autores, 1998; © Edicions UPC, 1998. Quedan rigurosamente prohibidas, sin la autorización escrita de los titulares del "copyright", bajo las sanciones
establecidas en las leyes, la reproducción total o parcial de esta obra por cualquier medio o procedimiento, comprendidos la reprografía y el tratamiento
informático, y la distribución de ejemplares de ella mediante alquiler o préstamo públicos, así como la exportación e importación de ejemplares para su
distribución y venta fuera del ámbito de la Unión Europea.
170 Diseño digital
________________________________________________________________________________
Si se diseña pensando en una alternativa tipo "semi-custom" debemos pensar en qué módulos están
predefinidos en las librerías del fabricante. Únicamente en el caso de diseño full-custom podemos
pensar en la utilización de módulos diseñados ex-profeso para la aplicación en cuestión. En principio
el diseño de estos módulos específicos permite obtener mejores características; sin embargo, se trata
de un proceso costoso y por tanto sólo justificable cuando los volúmenes de producción son muy
grandes. Una posibilidad intermedia entre el diseño de módulos específicos y el de módulos estándar
estriba en el uso de módulos programables por el usuario. Se trata de módulos estándar y por tanto
fabricados en grandes series y a precios muy bajos pero que pueden adaptarse a las necesidades del
usuario mediante una programación que puede ser realizada por el fabricante o por el mismo usuario.
Ejemplo 5.1
Vamos a diseñar un sistema capaz de efectuar la suma aritmética de dos números enteros
codificados en binario de dos bits. En esencia, se trata de sintetizar un circuito combinacional con
cuatro entradas (a1, a0, b1, b0) y tres salidas (S2, S1, S0), correspondientes al valor de la suma
indicada.
Una segunda opción consistiría en reproducir el algoritmo de la suma binaria (ver figura 5.2.a):
cada bit de una entrada se suma con el bit de igual peso de la otra entrada y el acarreo procedente
de la suma de los bits de peso inferior, con lo que se genera un bit de suma y otro de acarreo que
transmitir a la suma del siguiente par de bits. Este algoritmo conduce a una implementación a
base de dos módulos iguales, sumadores de cada par de bits (M), más el esquema de conexión
adecuado (ver figura 5.2.b).
El diseño de M es relativamente simple puesto que se trata de un circuito con tres entradas y dos
salidas relacionadas por la tabla de verdad de la figura 5.2.c. La simplificación de Ci+1 y Si
conduce a la implementación de la figura 5.3, donde vemos que son necesarias únicamente
puertas de dos entradas.
A efectos de comparación, podemos ver que en este caso la dificultad del proceso de diseño y la
complejidad (tipos de puertas necesarias e interconexión) del circuito resultante son menores
escogiendo la segunda alternativa. También podemos ver que esta última solución es útil para
realizar circuitos sumadores de un mayor número de bits (sólo hay que añadir tantos bloques M
como bits tengan los números a sumar); en cambio, la realización de sumadores más grandes
basada en la primera opción de diseño implica rehacer totalmente éste para cada caso.
a1 a0 b1 b0
S2
S 1 = a 1a 0 b1 + a 1a 0 b1 + a 1b1 b0 +
S0
a) b) c) a i bi Ci C
C2 S2 i+1 S i
C2 C1 C0 b1 0 0 0 0 0
a1 M S1 0 0 1 0 1
b1 b0
0 1 0 0 1
+ a1 a0 C1
0 1 1 1 0
S2 S1 S0 b0 1 0 0 0 1
M S0
a0 1 0 1 1 0
C0 1 1 0 1 0
1 1 1 1 1
ai
Si = ai ⊕ bi ⊕ Ci
C i+1
bi Ci+1 = ai bi + aibi Ci + ai biCi =
= ai bi + Ci (ai ⊕ bi )
Ci Si
_________________________________________________________________________________
Ejercicio 5.1
Proponga dos implementaciones para el siguiente sistema, una a dos niveles de puertas lógicas, y
la otra, a imagen del ejemplo 5.1, basada en un algoritmo de resta binaria. El sistema, de 4
entradas, debe calcular la resta de dos números enteros codificados en binario con 2 bits. Las dos
salidas, R1 y R0, indican el resultado de la resta, caso de que ésta pueda realizarse (A•B). La
tercera salida, O, valdrá "1" cuando la resta no tenga resultado positivo (A<B).
2 2
A
Circuito R R =(A-B) si B ≤ A
2 Restador
B O O = 1 si B > A
_________________________________________________________________________________
Los módulos, con independencia de su complejidad, pueden conectarse entre sí para formar circuitos
más grandes y capaces de realizar funciones más complejas. Sin embargo, para asegurar el
funcionamiento del circuito resultante se deben tener en cuenta ciertos aspectos, tanto de orden
eléctrico como funcional, que se comentan en el apartado 5.2.1. Por su parte, el apartado 5.2.2 se
dedica a examinar algunos ejemplos de análisis y síntesis modular de circuitos combinacionales.
La correcta construcción de una red de módulos debe tener en cuenta aspectos relativos a las
características eléctricas concretas de cada módulo. En general estas características dependen de la
familia tecnológica escogida. En el Apéndice B se presentan de forma condensada distintas familias
tecnológicas y se comparan sus características definitorias, de las que se destacan a continuación las
principales:
a) La tensión de alimentación y el consumo del módulo, definidas en el capítulo 3
para una puerta lógica, y que dependen claramente de la familia tecnológica.
b) Los niveles lógicos, que relacionan los niveles de tensión con que trabajan las
entradas y salidas del módulo con los valores lógicos que representan (ver capítulo 3). Estos
niveles son característicos de cada familia tecnológica.
c) El retardo introducido para cada salida. Caracteriza el tiempo que tardan las
salidas de un módulo en alcanzar un valor estable tras una conmutación de las entradas. Dicho
tiempo es en general dependiente de la carga presente a la salida del módulo.
d) "Fan-in" o factor de carga. Para cada entrada indica la carga que ésta representa
cuando se la conecta a la salida de otro módulo. Para cada tecnología los factores de carga
están normalizados a valores enteros.
e) "Fan-out". Para cada salida indica la máxima carga que dicha salida puede
soportar bajo ciertas restricciones de consumo y/o de retraso introducido. Suele darse también
en forma de valores enteros normalizados.
Por otra parte, la correcta interconexión de módulos implica respetar, como mínimo, las siguientes
reglas básicas:
a) Los niveles lógicos de los módulos a conectar deben ser compatibles entre sí. En
caso de no serlo es necesario añadir circuitos de interfaz (es decir, adaptadores de nivel).
b) La suma de los fan-in de las entrada conectadas a una determinada salida debe
ser inferior al fan-out de ésta.
c) Si tenemos las salidas de dos módulos distintos conectadas juntas, su valor lógico
no está definido si cada una toma un valor distinto; por este motivo, como norma general cada
entrada de un módulo debe estar conectada a una única salida de otro módulo. Esto implica
que, por ejemplo, el conexionado de la figura 5.5.a es válido, y no lo es el de la figura 5.5.b.
a)
b)
M1 M3 M1 M3
M2 M2
Sin embargo, para algunas tecnologías y configuraciones concretas sí queda definido el valor
resultante en caso de conflicto. En algunos casos el valor "1" predomina sobre el "0", con lo que la
conexión de dos o más salidas se comporta como si fuera una puerta OR; esta puerta virtual recibe el
nombre de OR cableada. El caso contrario también es posible, es decir, en otras situaciones
predomina el "0" sobre el "1", con lo que resulta una puerta AND virtual o cableada. La figura 5.6
muestra el equivalente circuital en ambos casos.
f1 f1
M1 M1
F = f 1+ f 2 F = f 1 f2
M2 M2
f2 f2
Otro caso particular son las salidas "tri-state": en general la salida de un módulo es o bien "0" o bien
"1", pero en algunas tecnologías y/o configuraciones es posible dejar la salida en un valor lógico
indefinido, llamado alta impedancia, que queda determinado por los valores de los módulos restantes
conectados a dicha salida. Los circuitos que ofrecen esta posibilidad disponen de una entrada
adicional de habilitación (E, "enable") que determina si la salida adopta un valor lógico concreto o si
queda en alta impedancia. Las salidas tri-state pueden conectarse entre sí y el circuito resultante
funcionará correctamente si como máximo un único módulo está habilitado simultáneamente.
Ejemplo 5.2
Los bloques M1 y M2 de la figura 5.7 disponen de salidas tri-state gobernadas por las entradas
E1 y E2 respectivamente. La única condición a cumplir para que la interconexión funcione
correctamente es que ambas sean complementarias. La función lógica a la que equivale esta
interconexión se indica en la misma figura.
f1
M1
E1 F = f 1E + f 2E
M2
f2
E E2
_________________________________________________________________________________
Ejercicio 5.2
El layout de la figura 5.8 corresponde a una implementación CMOS tri-state. Halle su esquema
eléctrico equivalente y la función lógica que implementa. Razone, a nivel de transistores, los
posibles caminos del nodo de salida a las alimentaciones en el caso de tener dos módulos como
éste conectados tal como se muestra en la figura 5.7.
A B C E
Vdd
Vss
E
_________________________________________________________________________________
En general el análisis a nivel lógico de un circuito supone determinar la función realizada por éste. La
funcionalidad de un circuito constituido por la interconexión de diferentes módulos puede
determinarse mediante composición de las funciones realizadas por los módulos integrantes. El
ejemplo 5.3 ilustra la aplicación de este procedimiento de análisis a circuitos combinacionales.
Este concepto "modular" se puede utilizar también desde el punto de vista del diseño o síntesis:
podemos descomponer un problema de diseño relativamente complejo en varios problemas más
sencillos y la relación entre ellos. Este planteamiento supone sintetizar por separado una serie de
módulos, cada uno de ellos ligado a uno de los problemas, e interconectarlos de manera adecuada,
siendo el resultado final un circuito modular. El ejemplo 5.3 ilustra la aplicación de este
procedimiento de síntesis a un circuito combinacional.
Ejemplo 5.3
Analizar la red de la figura 5.9, dando una descripción de alto nivel de la función o funciones que
realiza. Las entradas A, B y C corresponden a números enteros codificados en binario.
A 4
x 4
4 M1 z x
B y 4 M1 z
y 4
m 4
C M3 p D
4 4
x n
4
x 4 M2 z
4 M2 z y
Q
y
x si x ≥ y x si x ≤ y m + n si Q = 0
z M1 = z M2 = p M3 =
y si x < y y si x > y m − n si Q =1
Ejemplo 5.4
4
A F = 1 si A > B
Circuito
F
B
4 Comparador F = 0 si A ≤ B
1 c3
a3 M p3
b3 c2
a2 M F
p2
b2 c1
a1 M p1
b1 c0
a0 M p0
b0
p i+1
ai
ci = pi +1aibi
ci
bi
pi = pi+1 ai ⊕ bi =
pi
= pi +1 (ai bi + ai bi )
_________________________________________________________________________________
Ejercicio 5.3
a 0b 0 a 1b 1 a 2b 2 a 3b 3 a 0b 0 a 1b 1 a 2b 2 a 3b 3
c3
Comp. 4 bits c4 Comp. 3 bits M1 c4
Donde c3 es el resultado de comparar los tres bits de menos peso, e iterando la descomposición:
a 0b 0 a 1b 1 a 2b 2 a 3b 3
c1 c2 c3
1 M1 M1 M1 M1 c4
_________________________________________________________________________________
No existe un argumento teórico que determine qué módulos deben ser considerados como estándar.
En realidad es el uso es el que consagra determinadas estructuras como las de utilización más general.
En cualquier caso la consulta de cualquier catálogo de fabricante, ya sea de circuitos integrados
discretos o de módulos prediseñados para opciones VLSI, muestra la multiplicidad de módulos que se
ofrecen como circuitos estándar.
En este apartado presentamos una selección reducida de los módulos estándar más utilizados,
siguiendo para cada uno de ellos el esquema de describir primero su funcionamiento y simbología,
cómo puede implementarse utilizando puertas y/o transistores y, finalmente, mostrando algunos
ejemplos concretos de utilización.
5.3.1 Decodificadores
Un decodificador binario es un circuito lógico combinacional con n entradas y 2n salidas, donde las
entradas pueden entenderse como la codificación binaria de un número entero (comprendido, por
tanto, entre 0 y 2n-1). La salida i-ésima estará activa (por ejemplo, valor "1") cuando el valor de la
entrada corresponda al entero i, tomando las 2n-1 salidas restantes el valor lógico contrario ("0" en
este caso). Adicionalmente suele disponerse de una entrada de habilitación y/o inhibición (E, enable),
de forma que cuando ésta vale "0" el funcionamiento del módulo queda bloqueado, con lo que
quedan inactivas todas las salidas.
La figura 5.12 muestra la estructura externa genérica de un decodificador binario n:2n (n entradas, 2n
salidas), junto con una especificación compacta (o de alto nivel) de su funcionamiento.
y
Decodificador
E 0
0
1 y
x0 0 1 1 si i = x y E =1
2 y yi =
x1 1 2 0 si i ≠ x o E = 0
...
...
n −1
xn-1 n-1 n y n para 0 ≤i ≤ 2n −1, x = ∑ x j 2 j
2 -1
2 -1
j=0
Como ejemplo concreto la figura 5.13 muestra la tabla de verdad y la implementación mediante
puertas de un decodificador binario 2:4. Es obvio que ambas son generalizables a estructuras
mayores.
E
y
0
E x1 x0 y y y y
x 0 1 2 3
0 y
1 0 X X 0 0 0 0
1 0 0 1 0 0 0
x y 1 0 1 0 1 0 0
1 2
1 1 0 0 0 1 0
y 1 1 1 0 0 0 1
3
Los catálogos de los fabricantes suelen ofrecer diferentes tipos de decodificadores en función del
código de entrada; así es habitual encontrar decodificadores binarios (n entradas, 2n salidas), BCD en
sus diversas variantes (4 entradas, 10 salidas), Gray (n entradas, 2n salidas), o correspondientes a
otros códigos de uso más o menos popular.
y
0
Decodificador
x E1 y
0 y 0
1 E2 0
1 y1
x0 0 2 y
x y 2
1 2 3 y
x1 1 3
E1 y
3
E2
También es usual encontrar variaciones en cuanto al número y tipo de entradas de habilitación de que
dispone el módulo, existiendo también variantes respecto a la forma de considerar activas las entradas
y salidas del circuito. La figura 5.14 muestra otra posible implementación de un decodificador binario
2:4 utilizando un diseño basado en puertas NAND, junto con su simbolo correspondiente.
El análisis lógico del circuito de la figura 5.14 conduce a la tabla de verdad de la figura 5.15 y a una
especificación análoga a la dada en la figura 5.12 para un decodificador binario genérico, salvo dos
diferencias: a) el módulo está habilitado para E1=0 y E2=1 y bloqueado en cualquier otro caso, b) la
salida activa lo estará con el valor lógico "0" mientras el resto estará a "1". En este caso diremos que
la entrada E1 y las salidas se activan con el nivel lógico bajo.
E1 E2 x 1 x 0 y y y y
0 1 2 3
1 X X X 1 1 1 1
X 0 X X 1 1 1 1
0 1 0 0 0 1 1 1
0 1 0 1 1 0 1 1
0 1 1 0 1 1 0 1
0 1 1 1 1 1 1 0
Esta situación (multitud de combinaciones en cuanto a salidas y/o entradas activas bajas o altas) suele
darse con mucha frecuencia en los módulos estándar disponibles en catálogos, por lo que es
conveniente habituarse a ello. En los ejemplos y ejercicios de este texto se ha optado por ir variando
el formato de salidas y entradas en los módulos utilizados.
Las entradas de habilitación son sumamente útiles para encadenar decodificadores entre sí, con lo que
se obtienen decodificadores mayores. La figura 5.16.a muestra la posibilidad de obtener un
decodificador binario 4:16 a partir de dos decodificadores 3:8. La figura 5.16.b muestra a su vez
cómo realizar el mismo módulo mediante decodificadores 2:4.
Nótese que todos los decodificadores de la figura 5.16 tienen entradas activas bajas, lo cual equivale a
decir que el código de entrada que reconocen no es el binario sino su inverso o complementado.
Nótese también que sólo la opción de la figura 5.16.b dispone de entrada de habilitación. Se propone
como ejercicio para el lector la inclusión de una entrada de este tipo en el circuito de la figura 5.16.a.
a) b)
3 y
Decod
7 y E 2 15
15
Decodificador
x3 E 6 1 1
5 0 0 y
4 12
x2 2 3
3 3 y
Decod
x1 1 2 E 11
Decod
E E 2 2
x0 0 1 x3 1 1
0 y 1 1
8 x2 0 0 0 y
0 8
7 y 3 y
7
Decod
E 7
Decodificador
E 6 2
5 x1 1 1
4 x0 0 0 y
2 3 4
1 2 3 y
Decod
E 2 3
0 1
0 y 1 1
0 0 0 y
0
Ejercicio 5.4
_________________________________________________________________________________
5.3.2 Codificadores
Como su nombre indica, un codificador es un circuito lógico combinacional que realiza la función
inversa a la de un decodificador. En consecuencia, un codificador binario tendrá 2n entradas y n
salidas, disponiendo habitualmente de una o varias entradas de habilitación. Adicionalmente suele
haber otra salida, utilizada para hacer encadenamientos, que indica cuándo está activada alguna de las
entradas con el módulo habilitado.
La figura 5.17 muestra la estructura externa genérica de un codificador binario 2n:n junto con una
descripción de su funcionamiento, incluyendo la salida adicional A, que indica cuándo hay alguna
entrada activa. Podemos ver que cuando la entrada i-ésima está activa la salida corresponde a la
codificación binaria de i.
En previsión de que haya más de una entrada activa a la vez, se puede definir una prioridad de
entradas, actuando siempre de acuerdo con la entrada activa de prioridad más alta. En la
especificación de la figura 5.17, las entradas con subíndice más alto tienen mayor prioridad.
E
0 y0
x0 0 Codificador
x1 1 y1 i si E = xi = 1 y x k = 0 ∀k > i
1
y=
... 0 si E = 0 o xi = 0 ∀ i
x2 2 n-1 y n-1
n−1
...
x n
2 -1
n
2 -1 A con y = ∑ yj 2 j
j=0
x3 x2 x1x0 E
E x3 x2 x1 x0 A y1 y0
y1
0 X X X X 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 1 1 0 0 y0
1 0 0 1 X 1 0 1
1 0 1 X X 1 1 0
1 1 X X X 1 1 1 A
Figura 5.18 Realización mediante puertas de un codificador binario 4:2 con prioridad
Ejemplo 5.5
La figura 5.19 muestra el esquema y la tabla de verdad de un codificador binario 4:2 con
prioridad cuyas entradas y salidas son activas con nivel bajo.
E X0 X1 X2 X3 A1 A2 Z1 Z0
Codificador
X3 1 X X X X 1 1 1 1
X2 Z1 0 1 1 1 1 0 1 1 1
X1 Z0 0 X X X 0 1 0 0 0
X0
0 X X 0 1 1 0 0 1
E A1 A2 0 X 0 1 1 1 0 1 0
0 0 1 1 1 1 0 1 1
La figura 5.20 muestra un encadenamiento de codificadores 4:2 como el anterior, que da lugar a
otro equivalente (igual comportamiento con señales activas bajas e igual orden de prioridades) de
dimensiones 8:3. Se recomienda al lector un análisis detallado del citado esquema.
x x EI x x
0 3 4 7
0 1 2 3 0 1 2 3
E E
A1 Cod. A1 Cod.
A2 0 1 A2 0 1
A1 y y y A2
0 1 2
_________________________________________________________________________________
Ejercicio 5.5
Proponga una implementación a nivel de puertas lógicas del codificador 4:2 especificado en el
ejemplo anterior.
_________________________________________________________________________________
5.3.3 Multiplexores
La figura 5.21 muestra la estructura externa genérica de un multiplexor de 2n canales junto con una
descripción de alto nivel de su funcionamiento. Podemos ver que cuando el módulo está habilitado y
las entradas de control corresponden al entero "i" la salida coincide con la entrada de datos i-ésima,
siendo ignorado el valor del resto de entradas.
x 0
0
xi si E =1
Multiplexor
x1 1 y=
x 2 0 si E = 0
2 y
n−1
...
x n
2 -1
n
2 -1 siendo i = ∑sj 2j
j=0
E
n-1 1 0
...
s n-1 s 1 s 0
donde mi(s) es el minterm i-ésimo de las variables de selección si. Podemos ver que esta notación
algebraica conduce a una implementación en forma de red AND-OR de dos niveles para cualquier
multiplexor. En la figura 5.22.a se muestra esta implementación para un multiplexor de dos canales.
La implementación a nivel transistor de un multiplexor también es inmediata utilizando interruptores
lógicos. La figura 5.22.b muestra un multiplexor de dos canales realizado mediante puertas de
transmisión CMOS.
s
a)
b)
E
x x
1 x 1
1
y y s y
x
x 0 x
0 0
s s
s
Ejemplo 5.6
a) E
x0 b)
x0
x1
x1
x2 y y
x2
x3 x3
s1 s0 s1 s1 s0 s0
Figura 5.23 Implementación AND-OR (a) y NMOS (b) de un multiplexor de cuatro canales
_________________________________________________________________________________
Ejercicio 5.6
4
A Circuito 4 Y=A si s=0
4 a diseñar Y
B Y=B si s=1
s
_________________________________________________________________________________
Al igual que los módulos estándar comentados anteriormente, los multiplexores pueden encadenarse
para realizar módulos equivalentes de mayor tamaño. Como ejemplo concreto, la figura 5.25 muestra
un encadenamiento de multiplexores de 4 canales para conseguir un multiplexor de 16 canales.
x x x x x x x x
0 15 12 0 11 8 0 7 4 0 3 0
s3 3210
1 E E
s2 0 Mux
Nótese que en este ejemplo se han empleado multiplexores con entrada de habilitación activa con
nivel bajo. La estructura del circuito es la de un selector a dos niveles: el primer nivel esta constituido
por tantos multiplexores como sean necesarios para cubrir el número de entradas requerido (en este
caso hacen falta 4), mientras que el segundo consta de un multiplexor con un número de canales
suficiente para poder seleccionar entre todos los de la primera etapa (en este caso también 4). Las
variables de selección de menor peso se aplican por igual a los multiplexores de la primera etapa
mientras que las de mayor peso gobiernan el de salida.
Ejercicio 5.7
s3 1 Decodificador
E E
s2 0
3 2 1 0
x x x x x x x x
15 12 11 8 7 4 3 0
_________________________________________________________________________________
5.3.4 Demultiplexores
Como su nombre da a entender, un demultiplexor es el circuito lógico que efectúa la función inversa
a la realizada por un multiplexor. En consecuencia, un demultiplexor dispondrá de una entrada (x), 2 n
salidas o canales (yi), n entradas de selección o control (si) y, eventualmente, entradas adicionales de
habilitación (E).
La figura 5.27 muestra la estructura externa genérica de un demultiplexor junto con una descripción
de su funcionamiento: si el módulo está habilitado y el valor de las entradas de control es i, entonces
la información contenida en la entrada es transferida a la salida yi.
Demultiplexor 0 y
0
1 y1 Si E = 0 → yi = 0 ∀i ∈{0,1,..,2 n −1}
x y
2 2 ys = x n−1
n
... Si E =1 →
y i≠s = 0
con s = ∑sj 2j
E 2 -1 y n j=0
2 -1
n-1 1 0
...
s n-1 s 1 s 0
7 y
E 7
Decodificador
EI 6
x 5
4
s2
2 3
s1 1 2
s0 0 1
0 y
0
Para x=E=1 el decodificador estará habilitado y se obtendrá un "1" en la salida indicada por las
entradas si, en particular si s0=s1=s2=1, entonces y7=1, es decir, se transfiere la información contenida
en x a la salida indicada por las entradas de control. Por el contrario, para x=0 y E=s0=s1=s2=1, el
decodificador está inhabiltado y todas sus salidas toman el valor "0", luego también en este caso el
valor lógico presente en x se transfiere a y7.
5.3.5 Sumadores
Cabe considerar también como módulos de uso general aquéllos que realizan operaciones de tipo
aritmético, siendo el más importante de ellos el sumador. En efecto, la mayoría de las operaciones
aritméticas básicas pueden descomponerse en sumas binarias, cambios de formato y/o
desplazamientos. No es extraño por ello que los sumadores sean componentes habituales de cualquier
circuito electrónico de cálculo.
Un sumador es un sistema lógico combinacional que tiene como entradas dos vectores de n bits (A y
B) y como salida otro vector de n bits (S), cuyo valor corresponde a la suma aritmética binaria de los
vectores de entrada. La existencia de una entrada y una salida de acarreo adicionales (Cin y Cout)
permiten el encadenamiento de sumadores. La figura 5.29 muestra un sumador básico junto con una
descripción de su funcionamiento, donde el signo "+" indica suma aritmética.
n
A
S =( A+ B + Cin )
Sumador
de n bits
n mod 2
n
n S
B
C out = n (A+ B+ C in − S)
1
Cout 2
C in
El diseño de un sumador como el descrito no es estrictamente una novedad puesto que ya se abordó
en el ejemplo 5.1: podemos construirlo como una cadena de sumadores de un bit, tal como muestra la
figura 5.30.
a a a
n-1 bn-1 1 b
1 0 b
0
El sumador de un bit, en ocasiones llamado sumador total, tendrá tres entradas, dos de ellas (ai y bi)
que representan los dos bits a sumar y la tercera (Ci) el acarreo procedente de la suma de los bits de
peso inmediatamente inferior, y dos salidas (si y Ci+1), siendo si la suma binaria de los tres bits de
entrada y Ci+1 el acarreo de salida. La figura 5.3, correspondiente al ejemplo 5.1, muestra una
expresión algebraica de las dos funciones realizadas por el sumador total junto con una
implementación con puertas de éste.
Una implementación como la propuesta en la figura 5.30, habitualmente llamada sumador con el
acarreo en serie, es conceptualmente sencilla y utillizable en sumadores de cualquier número de bits;
sin embargo, tiene un inconveniente: nótese que las sumas de cada par de bits se realizan de forma
consecutiva, es decir, es necesario que se haya generado el acarreo de salida del primer sumador para
que el segundo sumador pueda realizar la operación correctamente y generar su correspondiente
acarreo de salida, etc.; por tanto se trata de una serie de sumas encadenadas que van acumulando los
retrasos, por lo que el tiempo que transcurre hasta que se genera la salida correcta es proporcional al
número de bits a sumar, circunstancia que hace desaconsejable utilizar este tipo de sumador cuando el
número de bits es grande.
a a b a b
n-1 bn-1 1 1 0 0
....
Generador de
C C
out acarreos in
....
a
n-1 bn-1 C
n-1
a
1 b1 C
1
a
0 b
0 C
0
s s s
n-1 1 0
El diseño del generador de acarreos puede abordarse a partir de las expresiones algebraicas de las
sumas y los acarreos parciales si y Ci+1. Si tomamos las expresiones correspondientes tenemos (0•i•n-
1)
Ci+1 = ai bi + C i ( ai ⊕ bi ) = Gi + Ci Pi
si = ai ⊕ bi ⊕ Ci = Pi ⊕ Ci
C 0 = C in
C 1= G0 + C0 P0
C 2 = G1 + C1 P1 = G1 + G0 P1 + C 0 P0 P1
C3 = G2 + C2 P2 = G2 + G1P2 + G0P1P2 + C 0 P0 P1 P2 .... etc
luego es posible obtener los acarreos Ci mediante una red combinacional a partir de los términos Gi,
Pi y C0, es decir, de las entradas ai, bi y Cin.
a)
a C
0 G in C
0 0 s
b M P 0
0 P 0 b)
0
a1 G1 C
1 s
de acarreos
M
Generador
b P 1
1 P1 1
a2 G2 C
M 2 s
b P 2
2 P 2
2
a G C
3 M 3 3 s
b P 3
3 P 3
3
C
out
Figura 5.32 a) Sumador de 4 bits con acarreo anticipado. b) Realización del módulo M
La figura 5.32 muestra el esquema completo de un sumador de 4 bits que utiliza el generador de
acarreos implementado mediante puertas AND-OR de la figura 5.33; nótese que el hecho de disponer
de los términos Pi permite sustituir los sumadores totales de 1 bit por simples puertas XOR en la
obtención de los bits de suma si.
C in
G0 C0
P0
C1
G1
P1
C2
G2
P2
C3
G3
P3
Cout
El ejemplo 5.7 muestra la utilización de sumadores para realizar otros circuitos de tipo aritmético,
concretamente un multiplicador.
Ejemplo 5.7
El circuito de la figura 5.34 multiplica en formato binario una cantidad de 4 bits (a3a2a1a0) por
otra de 2 bits (b1b0), siendo el resultado un producto de 6 bits (p5p4p3p2p1p0).
a a a a
3 2 1 0
b b
1 0
a a a a
3 2 1 0
x b b
1 0
a b a b a b a b
3 0 2 0 1 0 0 0
+ a 3 b1 a 2 b1 a 1 b1 a 0 b1
Sumador Sumador Sumador Sumador
de 1 bit de 1 bit de 1 bit de 1 bit p p p p p p
5 4 3 2 1 0
p p p p p p
5 4 3 2 1 0
Tal como muestra la misma figura, el algoritmo empleado es el más inmediato imaginable: cada cifra
(bit) ai se multiplica primero por b0, después por b1, y los productos se suman entre sí efectuando un
desplazamiento a la izquierda, con la ventaja añadida de que el producto de dos bits coincide con la
función AND.
_________________________________________________________________________________
5.3.6 Comparadores
n
Comparador
El diseño de un comparador puede abordarse con métodos y resultados muy similares a los vistos
para un sumador, siendo también las soluciones de tipo modular las más empleadas.
Comparador
A 7 ... A 4 4 a
> A>B
= A=B
B 7 ... B 4 4 b < A<B
> = <
Comparador
4
A 3 ... A 0 a
>
=
4
B 3 ... B 0 b <
> = <
"1"
Ejemplo 5.8
Vamos a realizar un sumador BCD; para ello recordemos que el algoritmo de suma BCD consta
de dos pasos (ver apéndice A): 1) sumar en binario, 2) comprobar si el valor obtenido es superior
a 9, en caso afirmativo es necesario efectuar una corrección (sumar 0110), mientras que en caso
negativo no es necesario efectuarla. Hay que generar, también, un acarreo de salida.
El algoritmo expuesto puede realizarse mediante módulos estándar; así, la figura 5.37 muestra un
sumador de dos cifras BCD, donde puede verse que la corrección se efectúa cuando los cuatro
bits de menor peso de la suma binaria de A, B y Cin corresponden a un valor superior a 9 y/o
cuando dicha suma genera un acarreo no nulo (es decir, siempre que el valor de la suma de A y B
sea superior a 9).
A B
4 4
a b
C out Σ C in C in
s
Comparador
4 4
a
>
= a b
"9" 4 b <
C out Σ C in
> = < s
"1" 4
C out A+B
_________________________________________________________________________________
Ejercicio 5.8
Una posibilidad para encadenar comparadores es seguir un esquema de árbol, como se muestra en
la figura 5.38. Compruebe que, efectivamente, la realización propuesta es viable para comparar
números de 16 bits. Compare esta realización con la que se deriva de generalizar la estructura
propuesta en la figura 5.36.
... A B ... B
A15 ... A B ... B
A11 A7... A 4 B7... B 4 A3... A 0 B3... B 0
11 15 11 8 11 8
4 4 4 4 4 4 4 4
a a a a b 3 b 2 b 1b 0
> 3 2 1 0
"1" = Comparador
<
> = <
_________________________________________________________________________________
Una ALU (Arithmetic and Logic Unit) es un sistema lógico combinacional capaz de realizar diversas
operaciones, lógicas o aritméticas, con los vectores de datos de entrada. El tipo de operación concreta
a realizar se selecciona mediante unas entradas adicionales de control.
A B
n n n n n n
n n n
S0
Multiplexor S1
S m-1
n
R
Un esquema genérico, más válido desde un punto de vista conceptual o funcional que correspondiente
a una implementación real, de una ALU sería el representado en la figura 5.39, donde las entradas de
datos son A y B y las de control S0 a Sm-1, lo que permiterealizar 2m funciones distintas.
Una ALU suele ser un circuito de una complejidad apreciable con una gran versatilidad de
funcionamiento; por tanto, es posible emplearla en multitud de aplicaciones diferentes, siendo por
ello fabricadas en volúmenes grandes con un costo individual razonable. Por otro lado es habitual
utilizar una ALU como componente básico de sistemas de procesamiento de datos más complejos
(por ejemplo microprocesadores), en los cuales la operación específica a realizar es seleccionada de
forma dinámica (es decir, que el mismo circuito puede realizar en momentos distintos operaciones
distintas) por un circuito de control que a su vez actúa de acuerdo con un programa (serie de
instrucciones) generado externamente por el usuario.
Algunos de los módulos estándar presentados en el apartado anterior permiten sintetizar cualquier
función lógica. Así, por ejemplo, es posible realizar una función mediante decodificadores y puertas
OR; asimismo también es posible hacerlo mediante multiplexores. En este sentido dichos módulos
suelen denominarse universales. Esta posibilidad es útil sobre todo al sintetizar funciones
relativamente sencillas (es decir, con pocas entradas). En los subapartados 5.4.1 y 5.4.2 se ilustran los
procedimientos de diseño en ambos casos.
Adicionalmente existen otros módulos combinacionales universales, como las ROM (Read Only
Memory) y PLA (Programmable Logic Array), que también permiten la síntesis de funciones. Dado
que estos módulos presentan algunas especificidades, su presentación y discusión se realizarán más
adelante en el apartado 5.5.
2n −1
y= ∑ x i mi (s )
i= 0
donde xi es el valor lógico presente en la entrada i-ésima y mi(s) es el minterm i-ésimo de las
variables de control.
Por otra parte, una función lógica genérica de n variables xi expresada mediante la forma canónica en
suma de productos sería
2 n−1
f (x n−1, x n− 2 ,...., x1 ,x 0 )= ∑ mi (x) f (i)
i=0
Comparando las dos expresiones se observa que es posible sintetizar la función f utilizando un
multiplexor de 2n canales introduciendo las variables xi en las entradas de control y el valor f(i)
correspondiente en cada uno de los canales. Este procedimiento de síntesis se ilustra y discute en el
ejemplo 5.9.
Ejemplo 5.9
Dado que se trata de una función de tres variables, el método acabado de sugerir implica en
principio utilizar un multiplexor de 8 canales (es decir,con 3 entradas de control): hay que
conectar las variables x2, x1 y x0 a las entradas de selección e introducir en cada uno de los
canales el valor ("0" o "1") que toma la función para cada combinación de dichas variables. La
figura 5.40 presenta la tabla de verdad de la función y la implementación descrita; nótese que el
paso de una a otra es inmediato.
x 2 x 1 x0 f 0
0 0 0 0 1
Multiplexor
0 0 1 0 1 2
3
0 1 0 1 f
0 4
0 1 1 0
5
1 0 0 0 6
1 0 1 1 7
1 1 0 1 2 1 0
1 1 1 0 x
2 x1 x0
Llegados a este punto, una pregunta que podemos hacernos es si es posible implementar
funciones de n variables mediante multiplexores con menos de n entradas de control. La
respuesta es afirmativa, aunque para ello será necesario en general añadir algún módulo o
conjunto de puertas.
Vemos que la expresión resultante incluye los 4 minterms de las variables extraídas (x2 y x1) y
cuatro funciones residuales de la variable restante (x0). Estas funciones pueden evaluarse
fácilmente
f (0,0, x 0 ) = f 0 ( x0 )= 0
f (0,1, x0 ) = f1 (x 0 ) = x 0
f (1,0, x 0 ) = f 2 ( x0 )= x 0
f (1,1,x 0 )= f 3 (x 0 )= x 0
x2 x1 x0 f
0 0 0 0
Multiplexor
0 0
0 0 1 0
0 1 0 1 1
f
0 1 1 0 x 2
0
1 0 0 0
3
1 0 1 1 1 0
1 1 0 1
x2 x1
1 1 1 0
En general las funciones residuales pueden obtenerse mediante puertas lógicas o bien mediante
multiplexores. La figura 5.42 muestra una realización de f utilizando un multiplexor de 2 canales
y puertas
Multiplexor
f ( x2 ,x1 , x0 ) = x
2 0
= x1 f ( x2 ,0, x0 ) + x1 f (x 2 ,1,x 0 )= f
x
= x1( x2 x 0 )+ x1 (x 0 ) 0
1
x1
_________________________________________________________________________________
Ejercicio 5.9
Obtenga la implementación mediante multiplexores de la función del ejemplo 5.9. Hágalo con
un multiplexor de 4 canales, usando como variables de selección x1 y x0. Inténtelo también
usando x2 con un multiplexor de 2 canales. Discuta el efecto de la elección de variables de
selección sobre la realización que de ella se deriva.
_________________________________________________________________________________
El procedimiento seguido en el ejemplo 5.9 puede expresarse de forma general: una función lógica de
n variables se puede sintetizar mediante un multiplexor de 2p canales (p•n) sin más que utilizar p
variables como variables de selección, atacando las entradas del multiplexor mediante 2p funciones
residuales de las n-p variables restantes.
f0 (x n-1 ... x )p 0
Multiplexor
f1 (x n-1 ... x )p 1
f (x n-1 ... x1 x)0
...
p
f p (x n-1 ... x )p 2 -1
2 -1
p-1 1 0
...
x p-1 x1 x 0
Es claro que la complejidad del circuito resultante y por tanto el coste de su implementación
dependen de qué variables se utilicen como variables de control y cuáles se utilicen para las funciones
residuales. Para decidir qué partición de variables es óptima desde este punto de vista en general es
necesario analizar cada una de las particiones posibles y simplificar las funciones residuales.
a) 0
b)
0
x0
f x0
x0 f
x0
x0
x2 x2 x1 x1
x2 x2 x1 x1
Una particularidad del diseño basado en redes de interruptores es que con frecuencia es posible
reducir el número de ramas y transistores necesarios para implementar una función. De hecho sólo es
necesario asegurar que para cada combinación de las variables de selección conduzca únicamente una
de las ramas. Así en la función de nuestro ejemplo podemos agrupar los términos cuya entrada sea la
misma
f (x 2 , x1, x 0 ) = x2 x1 (0) + x2 x 1( x0 )+ x 2 x1 (x 0 ) + x2 x1 (x 0 )=
= x 2 x1 (0 ) + x1 (x 0 ) + x 2 x1( x0 )
resultado que conduce directamente a la estructura en tres ramas de la figura 5.44.b, donde podemos
observar una significativa reducción del número de transistores necesarios.
Al presentar los decodificadores binarios se incidía en el hecho de que cada una de las salidas
coincide algebraicamente con un minterm diferente de las variables de entrada
yi = E⋅ mi ( x) 0 ≤ i ≤ 2 n −1
Veamos por ejemplo la implementación de un generador de un bit de paridad par para un código de 3
bits. Su tabla de verdad y el mapa de Karnaugh se dan en la figura 5.45, donde puede observarse que
esta función no admite simplificación.
a b c f
0 0 0 0
0 0 1 1 a\bc 00 01 11 10
0 1 0 1
0 1 1 0 0 0 1 0 1
1 0 0 1
1 0 1 0 1 1 0 1 0
1 1 0 0
1 1 1 1
a) b)
0 0
Decodificador
Decodificador
1 1
c 0 2 c 0 2
b 1 3 b 1 3
a 2 4 f a 2 4 f
5 5
E 6 E 6
7 7
En este apartado se presentan dos estructuras estándar más, la memoria de sólo lectura (ROM, Read
Only Memory) y la matriz lógica programable (PLA, Programmable Logic Array), utilizadas con
frecuencia para implementar funciones lógicas de complejidad apreciable, es decir, con un número de
variables mediano o alto.
Como se verá más adelante estas estructuras presentan una serie de particularidades frente a los
módulos estándar vistos hasta ahora, tanto respecto a su tamaño habitual (nº de entradas y/o de
salidas) como respecto al método de trabajo con ellas (es necesario programarlas, es decir, fijar su
contenido, antes de utilizarlas), que justifican el tratamiento aparte que se les da en este texto.
Una ROM de 2nx k bits es un circuito lógico combinacional con n entradas y k salidas que
implementa k funciones lógicas de n variables. Como ya es habitual, el circuito puede disponer
también de entrada(s) adicional(es) de habilitación. La figura 5.47 muestra el esquema genérico de
una ROM junto con una descripción de su funcionamiento.
2n −1
n ROM k
zi = f i (x n−1,..,x1 , x0 ) = ∑ f i ( j)m j (x )
x z j=0
2 nx k
0 ≤i ≤ k − 1
Figura 5.47 Estructura externa y funcionamiento de una memoria ROM de 2nx k bits
La figura 5.48 muestra la posible estructura interna de una ROM de 2nx k bits, donde puede verse que
ésta consta de dos módulos o matrices: siguiendo el camino entrada-salida nos encontramos primero
con un decodificador, es decir con una etapa o matriz de 2n puertas AND que realiza todos los
productos (minterms) posibles con las variables de entrada, y luego con una etapa o matriz de k
puertas OR, que permite obtener cada una de las salidas como la suma lógica de los minterms que a
ellas se conecten.
La estructura descrita coincide formalmente con una red AND-OR de dos niveles mediante la cual se
pueden implementar de forma canónica funciones lógicas cualesquiera. También podemos asociar
fácilmente la estructura de una ROM con el método de realización de funciones con decodificadores
y puertas descrito en el apartado 5.4.2.
Decodificador
E
1 z0
x0 0 2 Matriz z1
x1
...
1 OR
...
z k-1
...
x n-1 n
n-1 2 -1
Por otra parte es posible interpretar el funcionamiento de una ROM en términos de memoria: una
ROM almacena un vector (palabra) de k bits en cada una de las 2n salidas del decodificador
(posiciones de memoria), de manera que cada combinación de entrada (dirección) implica leer, es
decir, obtener a la salida la palabra almacenada en la posición de memoria correspondiente. Desde
este punto de vista la capacidad total de una ROM es de 2nx k bits (2n palabras x k bits/palabra). El
ejemplo 5.10 ilustra los conceptos presentados para el caso de una ROM de muy pequeñas
dimensiones.
Ejemplo 5.10
El esquema de la figura 5.49.a corresponde a una ROM de 4x4 bits. El esquema de la figura
5.49.b corresponde al mismo circuito utilizando una representación abreviada para la matriz OR
(que no implica necesariamente utilizar funciones cableadas).
a) b)
Decodificador
Decodificador
0 0
x0 0 1 x0 0 1
x1 1 2 x1 1 2
3 3
z z z z z z z z
0 1 2 3 0 1 2 3
Las cuatro funciones de dos variables realizadas por el circuito vienen determinadas por las
conexiones realizadas en la matriz OR; así una conexión a una puerta OR implica un minterm en
la expresión canónica SoP de la función correspondiente o, equivalentemente, un "1" en su tabla
de verdad, tal como se muestra en la figura 5.52.
X1 X0 Z0 Z1 Z2 Z3
z0 = m 0 + m2 = x1 x0 + x1x 0 = x 0
0 0 1 1 0 1
0 1 0 1 1 0 z1 = m0 + m1 + m2 = x1x 0 + x1 x0 + x1x 0 = x1 x 0
1 0 1 1 1 0 z2 = m1 + m2 = x1x 0 + x1 x 0 = x1 ⊕ x 0
1 1 0 0 0 1
z3 = m0 + m3 = x1 x0 + x1x 0 = x1 ⊕ x0
Direcciones Palabras
La interpretación del circuito como memoria es también inmediata puesto que hay cuatro
posiciones de memoria que almacenan palabras de 4 bits. Así por ejemplo la combinación de
entrada x1=1, x0=0 (dirección 10) provoca la salida z0=1, z1=1, z2=1, z3=0, es decir la lectura de
la palabra contenida en la penúltima posición de memoria (1110).
La figura 5.51 muestra una posible realización mediante transistores del circuito de nuestro
ejemplo. Concretamente se utiliza una estructura en forma de dos bloques o matrices de puertas
pseudo-NMOS.
Aparentemente esta ROM consta de dos matrices de puertas tipo NOR (y no AND-OR), aunque
si se realiza un análisis menos superficial puede verse que las cuatro salidas de la primera matriz
NOR (A, B, C, D) coinciden con los cuatro minterms de las variables de entrada, con lo que ésta
equivale desde el punto de vista funcional a un decodificador
A= x1 + x 0 = x1x 0 = m0
B= x1 + x0 = x1x 0 = m1
C = x1 + x 0 = x1 x0 = m2
D= x1 + x0 = x1x 0 = m3
Por otra parte la segunda matriz consta de puertas NOR seguidas de inversores, con lo que
equivale funcionalmente a una matriz OR: la presencia de un transistor en una puerta NOR
equivale a un minterm en la expresión canónica de la función de salida correspondiente y a un
"1" en su tabla de verdad.
V DD
x1 x0 z z z z
0 1 2 3
Figura 5.51 ROM del ejemplo 5.10 realizada con tecnología pseudo-NMOS
_________________________________________________________________________________
Es evidente que el contenido de una memoria ROM es fijo durante su utilización como módulo dentro
de un circuito digital, pudiéndose distinguir diversos tipos en función de quién graba o en qué
momento se fija dicho contenido. Así, suele utilizarse la denominación ROM o ROM programada por
máscara cuando el contenido ha sido fijado durante el proceso de fabricación, y la denominación
PROM o FPROM (Field Programmable ROM) cuando es el mismo usuario el encargado de fijarlo a
partir de una estructura (normalmente un circuito integrado) acabada pero "vacía".
A su vez pueden distinguirse dos grandes grupos entre las memorias ROM programables: aquéllas
cuyo procedimiento de grabación es irreversible y las denominadas EPROM (Erasable PROM), cuyo
contenido puede ser grabado y borrado varias veces. En estas últimas el procedimiento más
tradicional de borrado es la exposición a luz ultravioleta, aunque también las hay borrables
eléctricamente (EEPROM, Electrically Erasable PROM).
La capacidad de las memorias ROM disponibles a nivel comercial puede ser bastante grande. Por
ejemplo, una ROM de 64Kx 4 permite implementar hasta cuatro funciones de 16 variables, por lo que
su eventual programación implica dar el valor "0" o "1" a un total de 218 bits. Ello justifica la
necesidad de utilizar herramientas informáticas que ayuden en la tarea de programar el contenido de
este tipo de memorias.
La implementación de funciones lógicas mediante ROM supone almacenar sus tablas de verdad
completas, lo cual a primera vista parece una estrategia de diseño exagerada. Sin embargo, cuando la
función es compleja y su realización mediante módulos estándar más pequeños se hace complicada, la
utilización de ROM u otros módulos lógicos programables puede suponer ventajas:
a) El coste de diseño de la estructura de una memoria ROM es bajo puesto que ésta
es conocida y regular. Asimismo, un mismo tipo de circuito ROM puede utilizarse en multitud
de aplicaciones distintas, por lo que suele ser fabricado como circuito integrado en grandes
cantidades, reduciendo su coste individual.
Una matriz lógica programable (PLA) de nx r x k es un circuito lógico combinacional con n entradas y
k salidas que implementa k funciones lógicas de n variables utilizando r productos, siendo r<2n.
Adicionalmente el circuito puede disponer de entrada(s) de habilitación.
n 2n Matriz r Matriz k
x z
AND OR
La figura 5.52 muestra la estructura interna genérica de una PLA; allí vemos que ésta se compone de
tres etapas: n inversores (que permiten disponer de las variables de entrada directas y negadas), r
puertas AND (que realizan productos de las variables de entrada) y k puertas OR (que realizan sumas
de los productos anteriores). Una PLA realiza por tanto una implementación en forma de suma de
productos no canónica de k funciones lógicas.
Ejemplo 5.11
Calcular el tamaño mínimo que debe tener una PLA para implementar un multiplicador de 2
números enteros codificados en binario de 2 bits.
El número de entradas está fijado por el enunciado, a 4, 2 para cada entrada. El número de salidas
será también de 4, ya que el valor máximo para el resultado es de 3x3=9 (1001). Para saber el
número de productos necesario, hay que simplificar las salidas en forma de suma de productos.
Dadas las expresiones simplificadas:
p3 = a1a0b1b0
p2 = a1b1b0 + a1a0 b1b0
p1 = a1a0 b1 + a1b1b0 + a1a0b1b0 + a0b1b0
p0 = a0 b0
Observamos que hacen falta 7 productos. Por tanto, el tamaño mínimo para la PLA será de
4x7x4. Podemos observar dicha implementación, representada de forma compacta en la figura
5.53.
a1
a0
b1
b0
p3
p2
p1
p0
_________________________________________________________________________________
Ejercicio 5.10
Discuta qué tamaño mínimo debe tener una PLA que implemente la función suma de dos
números enteros de 2 bits codificados en binario.
_________________________________________________________________________________
Nótese que en una PLA, a diferencia de una ROM, no se realizan todos los 2n productos posibles de
las n variables de entrada (minterms) sino solamente un máximo de r, siendo por tanto la PLA un
módulo de menor tamaño mediante el cual se pueden implementar k funciones de n variables siempre
y cuando en las expresiones algebraicas simplificadas de estas funciones no aparezcan en total más de
r productos. Esta es una diferencia sustancial con respecto a las memorias ROM, que almacenan la
tabla de verdad completa. En el caso de que el número de productos r a utilizar sea pequeño frente a
2n, la reducción en tamaño utilizando una PLA en lugar de una ROM puede ser importante.
De forma análoga a las memorias ROM, las PLA pueden ser programables o bien por el fabricante
(por máscara) o bien directamente por el usuario (en campo), siendo estas últimas las más utilizadas.
Respecto a la programabilidad de la estructura, a priori pueden encontrarse dos variantes: a) PLA con
matriz AND programable y matriz OR programable, b) matriz AND programable y matriz OR fija. El
primer caso suele denominarse genéricamente PLA, mientras que el segundo caso suele denominarse
PAL (nombre comercial patentado por Monolithic Memories Inc). Un tercer caso, matriz AND fija y
matriz OR programable, coincide de facto con una estructura ya vista anteriormente: la memoria
ROM.
Descripción y
edición
del diseño
Tablas de verdad,
expresiones
algebraicas,
Compilación y
cronogramas, etc.
optimización
Simulación lógica
y/o eléctrica
Librerías o
Elección del
catálogos de los
dispositivo
fabricantes
Generación del
conexionado Grabador
óptimo
Como se ha razonado más arriba, las ventajas de las PLA frente a las ROM derivan básicamente de su
menor tamaño, mientras que sus inconvenientes provienen de la limitación del número de productos,
que obliga a simplificar conjuntamente las funciones y que hace que no todos los conjuntos de k
funciones de n variables puedan implementarse mediante una PLA de 2nx r x k.
Cuestiones
C5.1 Discuta las ventajas e inconvenientes del diseño modular frente al de dos niveles. Nota: para
implementar un sumador de dos números de tres bits a dos niveles hacen falta: 3And2 (3 puertas
AND de 2 entradas), 6And3, 18And4, 4And5, 1Or2, 1Or6, 1Or7 1 Or16 y 6 inversores. Compare los
diseños a nivel de puertas y transistores usados(CMOS) así como del retardo asociado.
C5.2 Razone el interés del uso de módulos con salidas tri-state en el caso de conexiones a líneas de
transmisión compartidas (comúnmente llamadas buses), donde más de un módulo conectado a ellas
puede intentar forzar un "0" o un "1" lógicos.
C5.3 Analice la siguiente estructura para E=1. Si las entradas son números enteros codificados en
binario, ¿en qué código quedan a la salida?
E E
Decodificador
Codificador
y3 x3
x y2 x2 y
1 1
x0 y1 x1 y0
y0 x0
Generalice esta estructura con un codificador, un decodificador, y una matriz de conexiones, para
traducir entre cualesquiera dos códigos de n bits. ¿Qué modificaciones deberían hacerse para que
el código de salida usara más bits de los necesarios (añadiera redundancia)?
C5.4 Analizce la expresión de funcionamiento para un multiplexor en función de los minterms de las
variables de selección, dada en la sección 5.3.3.
2 −1
n
y=E ∑ x i mi (s )
i=0
Encuentre una expresión dual para un multiplexor con las salidas y entradas activas bajas, en
función de los maxterms.
C5.5 Discuta el compromiso entre retardo asociado a una función combinacional y área de silicio
ocupada por el circuito correspondiente, para las dos implementaciones propuestas para el sumador
(con y sin cálculo anticipado de acarreos).
n n
a b ( a )Ca2 + ( b) Ca2 si s=0
c=
s Bloque o ( a )Ca2 − (b )Ca2 si s =1
c
n o =1 si existe desbordamiento
C5.7 Repita la cuestión 5.5, comparando esta vez las dos estrategias propuestas en el subapartado
5.3.6 para encadenar comparadores.
C5.8 Evalue el interés del siguiente criterio para elegir las variables de selección en una
implementación de función lógica con multiplexores: Tomar las variables que más veces aparezcan
en la expresión simplificada de la función. Busque un ejemplo donde este criterio no sea el óptimo
para minimizar las puertas adicionales necesarias.
C5.9 Proponga un método de implementación de funciones con decodificadores con salidas activas
bajas y puertas AND, relacionado con la expresión canónica de producto de maxterms.
C5.10 Razone por qué con una PLA de nx rx k podría no ser posible realizar cualquier conjunto de k
funciones lógicas de n variables de entrada.
Problemas
P5.1 Para realizar un comparador de números enteros de 4 bits encadenable, se ha pensado en una
estructura modular como la de la figura. Diseñe los módulos M1. Diseñe, de forma análoga, otro
comparador, con las entradas y salidas de encadenamiento activas bajas.
a 0b 0 a 1b 1 a 2b 2 a 3b 3
E< A> B
M1 M1 M1 M1 A= B
E> A< B
P5.2 Se desea diseñar un sistema cuya entrada A es un número entero de n cifras codificado en BCD.
El sistema debe tener 4 salidas, que indiquen si dicho número es múltiplo de 2, de 3, de 4 y/o de 5.
Diseñe el sistema de forma modular. Se recomienda empezar con un número concreto de cifras, y
despues generalízelo.
A n-1 A1 A0
4 ... 4 4
P5.3 Analice la siguiente estructura, suponiendo que los módulos están siempre habilitados (E=1), y
sabiendo que el multiplexor cuádruple actúa como cuatro multiplexores con las mismas variables de
selección. Obtener una implementación equivalente con puertas AND, OR y NOT.
E
E y7 x0
a x 00 y6 x1
a x 01 z0
Decodificador
y5 x2
Cuad. Multiplexor
Multiplexor
b x 10 x0
y4 x3
b x 11 z1 x1 z o
y3 x4
x2
c x 20 y2 x5
z2
c x 21 y1 x6
x 30 y0 x7
"0" x 31 z3 s2 s1s0
E
s
d e f g
P5.4 Analice la función lógica que realiza el siguiente logigrama. Intente identificar bloques
repetidos, para analizarlos por separado y después componer las funciones.
a3
a2
a1
a0
b0 z1
b1 z0
b2
b3
P5.5 Analice la función lógica realizada por el siguiente esquema de bloques. Encuentre una
especificación de alto nivel (pensando en D y R como números enteros codificados en binario).
Proponga una implementación alternativa con menos bloques y/o puertas.
y0 x0
y1 x1 "1"
Codificador Bin.
Decodificador
y2 x2
D0 x0 y0 Ci
y3 x3
D1 x1 y4 y1 A
x4
Sumador
D2 x2 y2 R0
y5 x5
S R1
y5 x6 D0 R2
y7 x7 D1 B
E E D2 Co
"0" "1"
P5.6 Proponga dos realizaciones a nivel de transistores para un multiplexor de 8 canales sin entradas
de habilitación, una usando puertas de transmisión CMOS y, la otra siguiendo el diseño CMOS
convencional (indicando tanto la red PMOS como la NMOS). Compare ambas realizaciones en
cuanto a complejidad, retardos, versatilidad del diseño, etc.
a) Un multiplexor de 8 canales.
b) Un multiplexor de 4 canales y puertas NOR.
P 5.8 Diseñe un sumador encadenable de 2 cifras en base 3 ( x ∈{0,1, 2}) codificadas en binario
natural, con multiplexores de 8 canales y puertas NAND.
P 5.9 Proponga un encadenamiento para ROMs de 8 palabras de 4 bits, usando multiplexores, para
implementar 4 funciones que dependen de las mismas 5 variables de entrada.
P 5.10 Dado el circuito de la figura, identifique qué módulo de los presentados en éste capítulo
implementa, y en que tecnologia. Encuentre la tabla de verdad de las funciones de salida.
V DD
V DD
Z1 Z2 Z3 Z4 Z5 Z6
A B
P 5.11 Evalue el tamaño mínimo que deben tener las matrices AND y OR de una PLA que permita
obtener como resultado el cuadrado, codificado en binario natural, de una cifra BCD. ¿Cuál debería
ser este tamaño si la entrada se codifica en BCD exceso 3?
P 5.12 Una cifra BCD está formada por los bits a1a0b1b0, de pesos 8,4,2,1 respectivamente. Se desea
diseñar un circuito combinacional que haga la comparación de a1a0 con b1b0 (entendidos como
números binarios de 2 bits). Exprese las tres salidas del comparador, a>b, a=b y a<b, como suma
mínima de productos. Diseñe el circuito usando multiplexores de 4 canales y puertas lógicas.
Diséñelo encadenando 2 decodificadores de 3 entradas. Considere también la posibilidad de
realizarlo utilizando un solo decodificador, aprovechando las inespecificaciones. ¿Qué dimensiones
mínimas debería tener una PLA que permitiera implementar este circuito?