Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DEPARTAMENTO DE ELECTRONICA
ELO211 Sistemas Digitales
Los conceptos básicos de diseño lógico, empleando sólo compuertas NAND o compuertas NOR, han sido
vistos antes. Ahora se explicarán algunos detalles prácticos.
En ciertos casos puede aplicarse una factorización, la cual reduce el costo del circuito, por la disminución
del número de literales. Se escogen literales que aparezcan en varios productos y se los factoriza. Luego si
existen factores comunes en los sumandos, se vuelve a factorizar. En caso de diseñar varias funciones de
salida, puede buscarse subexpresiones que sean comunes.
Ejemplo: Factorización.
C
D
A
f
B
E
F
Recordando que la siguiente compuerta es equivalente a un NAND :
Se tiene :
C
D
A
f
B
E
F
Nótese la inversión de las señales de entrada; y la doble complementación empleada para formar el segundo
nivel de NAND. Luego se representan todas las compuertas, usando el símbolo de los NAND . Se logra 5
compuertas y 10 entradas. Debe notarse que este método asume que se dispone de las entradas y sus
complementos.
En ciertos casos, la forma de expresión lleva a un diseño con menor número de compuertas.
Lo anterior indica que es conveniente desarrollar los dos diseños básicos y determinar cuál mes el más
conveniente.
Una implementación directa con NOR requiere: 3+2+3+4+4+5 = 21 entradas. Esto, asumiendo que se
dispone de las entradas y complementos.
Nótese que la implementación con NAND de ( b ) requiere 12 entradas. Las 2 entradas adicionales, son
debido al inversor formado por un NAND.
B
D
A
B
D f f
A
C
Esta expresión requiere de 16 entradas empleando compuertas NAND. Este circuito en dos niveles, se
forma agrupando los unos del mapa.
En este caso, el circuito más económico es el que emplea compuertas NOR. Es decir, el logrado
agrupando los ceros del mapa.
El ejemplo ilustra que deben considerarse las alternativas de diseño antes de decidir cual es la realización
más conveniente.
Los conceptos anteriores, son aplicables en situaciones de diseño con componentes integradas en pequeña
escala (SSI, Small Scale Integration).
Debe destacarse que el criterio de minimización, basado en reducir el número de circuitos integrados
requeridos, lleva a reducir la superficie dedicada a la función. Otro criterio es reducir el número de literales
de las expresiones, el cual lleva a tener menor complejidad de cableado entre las componentes.
Desde fines de la década del 60, se dispone de componentes integrados en mediana y gran escala; MSI y
LSI, respectivamente.
Disponer de primitivas más poderosas que las compuertas lógicas, hace necesario métodos adecuados de
diseño.
Para diseños combinacionales, las componentes anteriores pueden clasificarse en dos grandes grupos:
programables y no programables o fijas.
Las componentes fijas implementan una función específica; mientras que las programables pueden
representar diferentes funciones.
Los diversos fabricantes de componentes, proveen una gran cantidad de circuitos combinacionales
MSI/LSI. De estos elegiremos dos: Decodificadores y Multiplexores.
7.2.1.1. Decodificadores.
Ejemplo:
c0 z0
Decodificador z1
z2
1 de 4
c1 z3
Dependiendo de la combinación presente en la entrada, se tendrá sólo una de las salidas en alto; el resto de
las salidas serán bajas. En caso de tener : a 0 = 1, a1 = 0; se tendrá que z1 = 1, z0 = z2 = z3 = 0.
El siguiente circuito implementa un decodificador binario en base a compuertas:
z0 c1 c0 z3 z2 z1 z0
0 0 0 0 0 1
0 1 0 0 1 0
z1
1 0 0 1 0 0
1 1 1 0 0 0
z2
z0 = c1' c0'
z1 = c1' c0
z3 z2 = c1 c0'
z3 = c1 c0
c1 c0
Existen una serie de decodificadores que no están basados en el sistema binario; por ejemplo, un
decodificador muy usado es el BCD a decimal. En él, la entrada corresponde a un dígito BCD, en
paralelo; y se tienen 10 salidas. El circuito anterior debe tener, por lo menos, 16 patas. Un ejemplo de este
decodificador es el 74145.
z3
c1 c0
Como ejemplo la señal x fluye hacia el receptor, conectado en la salida z 3, si las señales de control toman
valores: c0 = 1, c1 = 1. El resto de las salidas: z0, z1 y z2 toman valor cero.
z
Para un demultiplexer con una entrada, tres señales de control y 8 salidas, se tienen las ecuaciones:
z0 = c2' c1' c0' x z4 = c2 c1' c0' x
z1 = c2' c1' c0 x z5 = c2 c1' c0 x
z2 = c2' c1 c0' x z6 = c2 c1 c0' x
z3 = c2' c1 c0 x z7 = c2 c1 c0 x
Con un decodificador binario n: 2n se pueden implementar todas las funciones de n variables. Para esto se
conectan las variables en las entradas de control, la entrada(gate) se habilita en 1 lógico, y se tendrán en las
salidas los mintérminos de la función. Luego se efectúa un or de los mintérminos presentes en la función.
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')
Se descomponen las funciones en suma de mintérminos, y luego se suman. El caso de f3, se resuelve por
De Morgan según: f3' = ABCD
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'
7 A'BCD
8 AB'C'D'
Enable = 1 4:16
9 AB'C'D
10 AB'CD' f2
11 AB'CD
DEC
12 ABC'D'
13 ABC'D
14 ABCD'
15 ABCD
f3
A B C D
Esto se ilustra a continuación con un demux de 5 : 32, implementado en base a cuatro decodificadores 3 : 8
y un decodificador de 2 : 4. Con este decodificador es posible diseñar todos los mintérminos para
funciones de cinco variables.
El primer decodificador genera, con G = 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.
0 A'B'C'D'E' 0
1 1
2 2 A'BC'DE'
3 3
3:8 DEC 4 3:8 DEC 4
5 5
6 6
7 7
S2 S1 S0 S2 S1 S0
0
G=1 2:4 DEC 1
2
3
S1 S0
0 0 AB'C'D'E'
1 1
A B 2 2
3 3
3:8 DEC 4 3:8 DEC 4
5 5
6 6
7 ABCDE 7 AB'CDE
S2 S1 S0 S2 S1 S0
C D E C D E
7.2.1.3. Multiplexer. Selector.
b) Suele existir una señal denominada enable(habilitación) que habilita 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.
c) El siguiente esquema lógico, muestra un MUX (multiplexor) de 4 vías a una, implementado con
compuertas, y también se ilustra un símbolo para el mux.
x0
x
x1
c
z
x2
z
z = c1c0 x3 + c1c0' x2 + c1'c0 x1 + c1'c0' x0
x3
c1 c
El siguiente esquema0 ilustra la confección de un switch, en base a un multiplexor y un demultiplexor:
x
cmux
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.
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.
d) Símbolos y ecuaciones:
Puede emplearse el siguiente símbolo, para un mux de 4 vías a 1. Un ejemplo de este mux es el 74151.
C0 0
C1 1
Enable E
I0 0 Mux
I1 1 4 a 1
f = Enable( c1c0 I3 + c1c0' I2 + c1'c0 I1 + c1'c0' I0 )
I2 2
I3 3
I0
I1
I2 Mux
I3 8:1
I4 8:1 f = c2c1c0 I7+ c2c1c0' I6 + c2c1'c0 I5 + c2c1'c0' I4 + c2'c1c0 I3 +
I5 c2'c1c0' I2 + c2'c1'c0 I1 + c2'c1'c0' I0
I6
I7 mux
C2C1C0
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ógico 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;
solo uno de los multiplexores impone valores lógicos en la salida; el otro, está en tercer estado.
control
tercer
estado
x0
x1
z
x2
x3
c1 c0
Ejemplos de estas configuraciones de tercer estado son: 74251, 74253, 74257
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 éstos que 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á activada(salida habilitada) la salida puede tomar los valores lógicos, de acuerdo a las entradas.
El siguiente diagrama ilustra un buffer(amortiguador entre etapas) de tercer estado, junto a su tabla de
verdad, en la cual aparecen los estados X(superfluo) y Z (de tercer estado):
O EOESX0Z010111
E
E S
Empleando buffers de tercer estado puede diseñarse un multiplexor, según se ilustra en el siguiente
diagrama: OE
E1 OES1E10E2
S
OE'
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:
E S
El siguiente circuito implementa un buffer inversor de tercer estado, en base a transistores CMOS:
E OE
E S
OE'
S
OE
Cuando la salida no está habilitada, ambos transistores ubicados en la salida quedan desconectados,
formando una salida en alta impedancia. Esto se muestra en el esquemático a la izquierda. El de la derecha
ilustra que con salida habilitada ambos transistores, ubicados al lado de la salida conducen; el pMOS deja
pasar un valor alto cuando E es un valor bajo, en este caso el nMOS conectado a tierra queda abierto.
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, por ejemplo: el 74240 y
74244.
Mux 8:1
I0 I0 mux 2:1 Mux 8:1
I1 4:1 I1
I2 mux
I3 I2 mux 2:1
2:1 I3
f 4:1 f
mux I4 mux
I4 mux 2:1
I5 4:1 I5
I6 mux I6 mux 2:1
I7
I7
C1 C0 C2 C0 C2 C1
En forma alternativa se muestra un mux de 8 vía a una, implementado con cuatro mux de 2 vías a uno, y
un mux de 4 vía a uno. Ambos diseños difieren en el número de entradas.
La expresión anterior muestra que, con un mux de 4 a 1, pueden implementarse todas las funciones
booleanas de 2 variables. Para ello, basta hacer '1' ó '0' las entradas x , de acuerdo a los mintérminos de la
función que se desee implementar.
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 del mux se aplica una de las entradas, además de unos y ceros puede verse que con un
mux de 4 vías a 1, se pueden implementar 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;
En el mapa se han marcado los grupos de mintérminos con los números de las señales de datos del mux.
y 0
x 1
1 E
z 0 Mux
z' 1 4 a 1
f
z' 2
1 3
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.
Además debe considerarse que 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.
Otra implementación para: f = x'y'z + yz' +xz' + xy es considerar la señal enable en 1, y eligiendo z como
la señal de control más significativa y la señal x como la línea de control menos significativa. La ecuación
del mux resulta, en estas variables: f(z, x, y) = zx x3 + zx' x2 + z'x x1 + z'x' x0.
Si se dibuja un mapa, y se marcan los mintérminos presentes de f, se logra:
zx
y 00 01 11 10 x 0
0 2 6 4 z 1
0 1 1 1 E
y 0 Mux
1 1 4 a 1
1 3 7 5 2
f
y'
1 1 1 1 y 3
A
I0 I2 I6 I4 1 0
1 0 1 1 D 1
0 2
1 3
1 0 0 0 D' 4
D D 5 8:1 MUX
I1 I3 I7 I5
D' 6
1 1 0 1 D' 7
C
C2 C1 C0
0 1 1 0
B
A B C
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.
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’
Se requiere sólo una pastilla: un NAND de 8 entradas, con una de las entradas a Vcc.
i out
n
A
Compuerta de Transmisión
Para un multiplexor de dos vías a uno, se puede diseñar el siguiente circuito:
Cuando A= 0 conduce la compuerta de transmisión superior; la inferior no lo hace. En este tipo de diseño
las señales de control deben activar una y sólo una vía de transmisión entre la entrada y la salida.
x Con A = 0 z= x
A' Con A = 1 z= y
A'
z
y
A
Un demultiplexer, puede diseñarse según:
A
y
Con A = 0 y= x
A' Con A = 1 z= x
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'
A' Con A = 1 z = x; y = 0
x 0
A A'
A
A'
A
7.2.2. Primitivas programables
En grandes circuitos y con funciones complejas, los diseños lógicos mediante componentes SSI, o
primitivas fijas MSI/LSI no resultan convenientes. En estos casos suelen emplearse componentes
programables. Los tipos más difundidos son: 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).
Básicamente el problema de las memorias es tener varias palabras almacenadas, y que el contenido de éstas
esté disponible en los mismos cables de salida, de acuerdo a cuál palabra sea seleccionada o direccionada.
Supongamos que deseamos tener dos palabras de 3 bits cada una. Una de ellas debe ser 101 y la otra, 001.
Una solución es:
Si la línea p1 se coloca en un voltaje alto, y la línea p0 está en cero volts, se tendrá 101 en la salida. 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.
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.
p1
Línea de
Palabra
p0
Línea de Salida
C2 C1 C0
7.2.2.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 circuitos que
se desee programar. Estos circuitos suelen usarse para: almacenar secuencias de control en un
microprograma, generador de carácteres, traductor de códigos usuales, etc..
a0 0
1
2
a1 3
C3 C2 C1 C0
No se anotan resistencias de terminación, y los diodos conectados se simbolizan por puntos gruesos:
En el ejemplo:
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 varias veces información en la
memoria. 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).
Si se tienen n líneas para establecer la dirección, y si se tienen m líneas de contenido o salida, la capacidad
total de la PROM queda dada por:
2n * m [bits]
a) Conversión de códigos.
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.
La tabla de conversión:
El resto de las combinaciones debe ser llenada 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.
1 3 7 5
1 1 1
Dec 3:8 0
1
2
a A2 3
b A1 4
c A0 5
6
7
Con una adecuada combinación de EPROM, es posible extender el largo de la palabra de salida y el
número de direcciones.
Ejemplo: Obtener una PROM de 16 bytes por 6 a partir de dos PROM de 16 bytes por 3. Esto expande el
largo de la palabra de salida.
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 archvos 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
Los siguientes caracteres representan los datos, en forma de bytes, que se almacenaran en posiciones
secuenciales a partir de la dirección inicial de la línea. the ROM. Los 16 bytes de datos de la línea que se
describe en el ejemplo son: FE, 35, 2F, CD, 45, 4B, AE, FF, E4, 3E, 5D, 55, AA, E4, 35, y EE.
: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:
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
carácteres imprimibles del código ASCII, organizado en líneas separadas por 0D, 0A (CR,LF carriege
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, y así sucesivamente.
Existe aplicación Windows llamada mapa de carácteres 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 (edbin.exe en dos y Hex WorkShop en Windows) 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 ................
00000060 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000070 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000080 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000090 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000A0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000B0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000C0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000D0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000E0 0000 0000 0000 0000 0000 0000 0000 0000 ................
000000F0 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000100 2402 FDEC 3400 FC $...4..
Note que la fuente para ver alineadas las columnas debe ser de espacio no proporcional, como courier
o similar.
La aplicación dump, pasa un archivo binario a un archivo de texto, con la información similar a la
desplegada por un editor binario(o hexadecimal).