0% encontró este documento útil (0 votos)
14 vistas103 páginas

TC UD2 (Apuntes)

Los apuntes de Tecnología de Computadores de la Universidad Miguel Hernández cubren el temario del curso de 2º del Grado en Ingeniería Informática, incluyendo conceptos fundamentales como el álgebra de Boole, funciones lógicas, y circuitos combinacionales. Desarrollados por el profesor P. Pablo Garrido Abenza, estos apuntes son una herramienta de apoyo para los estudiantes, quienes deben completar ciertos apartados con información adicional. Se proporciona un contacto para resolver dudas o reportar errores en el material.

Cargado por

parajugar772
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
14 vistas103 páginas

TC UD2 (Apuntes)

Los apuntes de Tecnología de Computadores de la Universidad Miguel Hernández cubren el temario del curso de 2º del Grado en Ingeniería Informática, incluyendo conceptos fundamentales como el álgebra de Boole, funciones lógicas, y circuitos combinacionales. Desarrollados por el profesor P. Pablo Garrido Abenza, estos apuntes son una herramienta de apoyo para los estudiantes, quienes deben completar ciertos apartados con información adicional. Se proporciona un contacto para resolver dudas o reportar errores en el material.

Cargado por

parajugar772
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 103

Apuntes de Tecnología de Computadores

Universidad Miguel Hernández

18 de mayo de 2025

Resumen

Apuntes de la asignatura Tecnología de Computadores de 2◦ del Grado en Ingeniería Informá-


tica en Tecnologías de la Información de la Universidad Miguel Hernández.
Profesor: P. Pablo Garrido Abenza
Í NDICE GENERAL

Resumen 1

2 Sistemas combinacionales 2
2.1. Algebra de Boole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Funciones lógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3. Puertas lógicas y circuitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4. Simplificación de funciones lógicas: mapas de Karnaugh . . . . . . . . . . . . . . . 14
2.5. Puertas universales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6. Circuitos combinacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.7. Sumadores y restadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.8. Codificadores y decodificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.9. Multiplexores y demultiplexores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.10. Otros circuitos combinacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

Apéndices 99

Acrónimos 100

Bibliografía 101

I
ÍNDICE GENERAL 1

Resumen

Los presentes apuntes dan soporte al temario de la asignatura de Tecnología de Computadores


del Grado en Ingeniería Informática en Tecnologías de la Información de la Universidad Miguel
Hernández (UMH), y han sido desarrollados por el profesor P. Pablo Garrido Abenza.

Puede que exista algún apartado sin terminar, que el alumnado deberá completar con las expli-
caciones dadas en clase o cualquier otra fuente. Se espera que estos apuntes sean de utilidad para
un mejor aprovechamiento del curso.

Para cualquier cuestión o errata detectada puedes ponerte en contacto con el profesor por medio
del correo electrónico: [email protected].

Elche, a 18 de mayo de 2025


CAPÍTULO
2
S ISTEMAS COMBINACIONALES

En este capítulo

Algebra de Boole

Funciones lógicas

Puertas lógicas y circuitos

Simplificación de funciones lógicas: mapas de Karnaugh

Diseño de circuitos combinacionales

Sumadores y restadores

Codificadores y decodificadores

Multiplexores y demultiplexores

Otros circuitos combinacionales

2
CAPÍTULO 2. SISTEMAS COMBINACIONALES 3

2.1. Algebra de Boole


El funcionamiento de los circuitos digitales se describe mediante funciones lógicas, que tienen unos
operadores y propiedades definidas por el álgebra de Boole, o álgebra booleana. Fue desarrollada por
George Boole en dos trabajos [?] [?] publicados en 1847 y 1854, respectivamente. Sin embargo, fue
posteriormente cuando se le vio aplicación práctica, gracias a la tesis de Claude Shannon en 1938 [?],
donde se demostró que el álgebra de Boole era aplicable al diseño de los sistemas electromecánicos
de relés utilizados por aquella época en los conmutadores telefónicos, y también al diseño de circuitos
digitales.

Una función lógica, o expresión booleana, es una expresión que consta de variables lógicas unidas
por los operadores suma + y producto ·. Sin embargo, estos operadores no se utilizan como los opera-
dores aritméticos suma y producto habituales, sino que se utilizan de forma lógica, de tal manera que
la suma + equivale al operador ’O’ lógico (OR) y el producto · al operador ’Y’ lógico (AND). Estos
operadores actúan sobre dos o más valores lógicos (verdadero/falso, o true/false, o 1/0), o variables
lógicas, que son aquellas que pueden tener uno de los dos valores lógicos. Existe un tercer operador
lógico, el operador de negación o complemento (NOT), que es un operador unario que permite obtener
el inverso de una única variable lógica o expresión booleana, y se representa con una barra superior o
un apóstrofe; por ejemplo, dada la variable a , su inverso puede escribirse como a o a 0 (en estos apuntes,
normalmente se utilizará la opción de la barra superior). Por tanto, 0 = 1 y 1 = 0. La tabla 2.1 muestra
el comportamiento de las tres operaciones lógicas (AND, OR, NOT), utilizando los valores 0 para falso
(false) y 1 para cierto (true).

a b AN D(a, b) OR(a, b) NOT (a) NOT (b)


0 0 0 0 1 1
0 1 0 1 1 0
1 0 0 1 0 1
1 1 1 1 0 0

Tabla 2.1: Operadores lógicos.

Al igual que ocurre en cualquier lenguaje de programación, estos operadores tienen un orden de
prioridad a la hora de evaluar una expresión. El operador NOT tiene la máxima precedencia, seguido
del producto (AND) y después la suma (OR). Además, este orden de precedencia se puede modificar
mediante el uso de paréntesis, aunque, como se verá más adelante, no será necesario tener en cuenta
este orden.

Las operaciones suma + y producto · cumplen una serie de propiedades (postulados del álgebra
de Boole); sean tres variables lógicas a , b y c , las propiedades del álgebra de Boole se resumen en la
Tabla 2.2.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 4

Propiedad Suma + Producto ·


Conmutativa a +b = b +a a ·b = b ·a
Asociativa a + (b + c) = (a + b) + c a · (b · c) = (a · b) · c
Distributiva a + (b · c) = (a + b) · (a + c) a · (b + c) = (a · b) + (a · c)

Tabla 2.2: Propiedades del álgebra de Boole.

A partir de estos postulados, es posible deducir una serie de teoremas. Siendo a y b dos variables
lógicas, la Tabla 2.3 resume los teoremas del álgebra de Boole.

Regla Suma + Producto ·


Identidad a +0 = a a ·1 = a
Elementos dominantes a +1 = 1 a ·0 = 0
Idempotencia a+a = a a·a = a
Complemento a+a =1 a·a =0
Involutiva a=a
Ley de absorción a + (a · b) = a a · (a + b) = a
Ley del consenso a + (a · b) = a + b a · (a + b) = a · b

Tabla 2.3: Teoremas del álgebra de Boole.

Se puede comprobar que los teoremas del álgebra de Boole muestran siempre una dualidad, es
decir, que a partir del teorema para una operación (por ejemplo para la suma), siempre se puede obtener
el teorema dual para la otra operación (producto), simplemente cambiando las operaciones suma + por
producto · y viceversa, y los 0’s por 1’s y 1’s por 0’s.

Teoremas de De Morgan
Augustus De Morgan fue coetáneo de George Boole, manteniendo ambos abundante corresponden-
cia durante muchos años. De Morgan propuso dos teoremas que constituyen una parte muy importante
del álgebra de Boole (Tabla 2.1). Los teoremas de De Morgan afirman que la suma negada de 2 va-
riables es igual al producto de las 2 variables negadas individualmente; y a la inversa, que el producto
negado de 2 variables es igual a la suma de las 2 variables negadas individualmente. Lo anterior se
puede generalizar para cualquier número N de variables.

(a + b) = a · b (a + b + c + . . . ) = a · b · c . . .
(a · b) = a + b (a · b · c · . . . ) = a + b + c + . . .

Figura 2.1: Teoremas de DeMorgan: 2 variables (izq.) y N variables (dcha.).

Lo anterior puede comprobarse mediante la siguiente tabla de verdad:


CAPÍTULO 2. SISTEMAS COMBINACIONALES 5

a b a b (a + b) (a + b) a ·b (a · b) (a · b) a +b
0 0 1 1 0 1 1 0 1 1
0 1 1 0 1 0 0 0 1 1
1 0 0 1 1 0 0 0 1 1
1 1 0 0 1 0 0 1 0 0

Tabla 2.4: Tabla de verdad de comprobación de los teoremas de De Morgan.

2.2. Funciones lógicas


El funcionamiento de un circuito digital se puede describir de dos formas: (1) mediante una fun-
ción lógica, también denominada expresión booleana, y (2) mediante una tabla de verdad, de la cual
hablaremos más adelante.

Una función lógica o booleana es una función que depende de variables booleanas, o sus com-
plementarias, unidas mediante los operadores suma +, producto · y negación. El número de variables
lógicas de las que depende se denomina dominio. Por ejemplo, la siguiente función depende de tres
variables a , b y c :

f (a, b, c) = a + b + c

Sin embargo, las funciones no son una combinación arbitraria de variables lógicas con los operado-
res suma y producto de cualquier forma, sino que serán la combinación de varios términos, los cuales
podrán ser de dos tipos:

Término suma o maxitérmino: si se utiliza el operador suma. Se evaluará como verdadero (1)
cuando al menos uno de los valores lógicos sobre los que opera sea verdadero (1); como falso
(0) cuando todos sean falso (0).

Término producto o minitérmino: si se utiliza el operador producto. Se evaluará como verdadero


(1) únicamente cuando todos los valores lógicos sobre los que opera sean verdadero (1); como
falso (0) cuando al menos uno de sus valores lógicos sea falso (0).

Funciones canónicas
Además, la mayoría de veces nos interesará que los términos incluyan todas las variables del do-
minio, es decir, todas las variables de las que depende la función. A tales términos se les denomina
términos canónicos, y se dice que una función es canónica (o que está en su forma estándar) si está
compuesta únicamente por términos canónicos, o términos suma (maxitérminos) que se se multiplican,
o bien, términos producto (minitérminos) que se suman. Por tanto, nos podemos encontrar con dos
tipos de funciones canónicas, de los que mostramos un ejemplo de cada caso:
CAPÍTULO 2. SISTEMAS COMBINACIONALES 6

Función Suma de Productos, o Sum of Products (SoP):


f 1 (a, b, c) = (a · b · c) + (a · b · c) + (a · b · c)

Función Producto de Sumas, o Product of Sums (PoS):


f 2 (a, b, c) = (a + b + c) · (a + b + c) · (a + b + c)

El motivo de tener una función en forma canónica es porque se facilita el procedimiento de escribir
su tabla de verdad, y su simplificación mediante ciertas técnicas que veremos más adelante (mapas de
Karnaugh, etc.). ¿Qué ocurre si la función que tenemos no está en forma canónica? Siempre podremos
convertir cualquier función lógica no canónica de ’n’ variables a su forma canónica. Esto es lo que
afirma el teorema de expansión de Shannon. Para ello, tendremos que convertir cada término no ca-
nónico en canónico, de forma individual; se trata de aplicar sistemáticamente las siguientes propiedades
y reglas del álgebra de Boole para introducir en cada término todas las variables de las que depende
la función (dominio), y al final, eliminar los términos repetidos que pudiéramos obtener en la función
completa:

A cada término, aplicamos las reglas de identidad, complemento y distributiva (se duplicará el
término por cada variable introducida). Si x es la variable que se quiere introducir en un término:

• Términos producto: multiplicamos por 1 ya que a · 1 = a (identidad) de la forma (x + x) = 1


(complemento) y aplicamos la propiedad distributiva.
• Términos suma: sumamos 0 ya que a + 0 = a (identidad) de la forma (x · x) = 0 (comple-
mento) y aplicamos la propiedad distributiva.

A la función completa, aplicamos la regla de la idempotencia (a + a = a y a · a = a ) para eliminar


los términos duplicados que hayan aparecido.

Ejemplo 1. Dadas las siguientes funciones, convertirlas a su forma canónica:

Función Suma de Productos (SoP):


f (a, b, c) = (a · c) + (b · c)

Función Producto de Sumas (PoS):


g (a, b, c) = (a + b) · (a + c)

La primera función f es una suma de términos producto, que analizamos por separado para
convertirlos a su forma canónica:

Primer término (a · c): puesto que le falta variable b , y se trata de un término producto, mul-
tiplicamos por (b + b), que como sabemos tiene el valor 1 y no afecta al resultado, quedando:
(a · c) · (b + b) = (a · b · c) + (a · b · c). En el último paso hemos aplicado la propiedad distributiva, y
vemos como ahora tenemos dos términos que sí son canónicos.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 7

Segundo término (b · c): en este caso le falta variable a , y de forma similar multiplicamos por
(a + a), quedando: (a + a) · (b · c) = (a · b · c) + (a · b · c).

Sustituimos lo anterior en la función y podemos comprobar que tendríamos algún término repetido, que
podemos eliminar gracias a la regla de la idempotencia, quedando finalmente la función transformada
a su forma canónica equivalente suma de productos (SoP):

f SoP (a, b, c) = (a · b · c) + (a · b · c) +  · b
(a · c) + (a · b · c)

Respecto la segunda función g , es un producto de sumas y procedemos de igual forma:

Primer término (a + b): puesto que le falta variable c , y se trata de un término suma, sumamos
(c · c), que como sabemos tiene el valor 0 y no afecta al resultado, quedando: (a + b) + (c · c) =
(a +b +c) · (a +b +c). En el último paso hemos aplicado la propiedad distributiva, y vemos como
ahora tenemos dos términos que sí son canónicos.

Segundo término (a + c): en este caso le falta variable b , y de forma similar sumamos (b · b),
quedando: (a + c) + (b · b) = (a + b + c) · (a + b + c).

Podemos comprobar que en este caso también se ha generado algún término duplicado en la función
completa, que podemos eliminar gracias a la regla de la idempotencia, quedando finalmente la función
transformada a su forma canónica equivalente producto de Sumas (PoS):

g PoS (a, b, c) = (a + b + c) · (a + b + c) · (a + b + c) · 
(a
+b + c)

Las funciones lógicas en forma canónica también pueden escribirse de forma compacta sustitu-
yendo cada término por su equivalente mi o Mi de la Tabla 2.5. Además, como los distintos mi se
P
suman, también se puede expresar como un sumatorio m i ; de forma similar, como los distintos o
i
Q
M i se multiplican, también se puede expresar como un productorio i M i . A continuación mostramos
un ejemplo de cómo se procede.

a b c Minitérmino Notación Maxitérmino Notación


0 0 0 (a · b · c) m0 (a + b + c) M0
0 0 1 (a · b · c) m1 (a + b + c) M1
0 1 0 (a · b · c) m2 (a + b + c) M2
0 1 1 (a · b · c) m3 (a + b + c) M3
1 0 0 (a · b · c) m4 (a + b + c) M4
1 0 1 (a · b · c) m5 (a + b + c) M5
1 1 0 (a · b · c) m6 (a + b + c) M6
1 1 1 (a · b · c) m7 (a + b + c) M3

Tabla 2.5: Minitérminos (m ) y Maxitérminos (M ).


CAPÍTULO 2. SISTEMAS COMBINACIONALES 8

Ejemplo 2. Escribir las dos funciones canónicas del ejemplo 1 f SoP y g PoS de forma compacta.

Función Suma de Productos (SoP): para mayor claridad, escribimos debajo de cada término los
valores de las variables que lo hacen verdadero; en este caso, como los términos son productos
(miniterminos) sólo será una combinación. A continuación, sustituimos cada término producto
por su equivalente mi mirando la Tabla 2.5.

(a·b·c)
+ (a·b·c) (a·b·c) P
f SoP (a, b, c) = 111 101 + 001 = m 7 + m 5 + m 1 = i =1,5,7 m i

Función Producto de Sumas (PoS): se haría de forma similar, aunque justo al contrario. Debajo
de cada término escribimos los valores de las variables que lo hacen falso, ya que sólo habrá una
combinación; para el resto de combinaciones de valores de las variables el término será verdadero.
Además, como los términos se multiplican, no se pone un sumatorio sino un productorio.

(a+b+c)
· (a+b+c) (a+b+c) Q
g PoS (a, b, c) = 010 011 · 001 = M2 + M3 + M1 = i =1,2,3 M i

Conversión SoP ⇔ PoS

A la hora de implementar una función lógica en forma de circuito digital se utilizarán puertas
lógicas, que dependerán de los operadores que utilice la función. En ocasiones puede que nos interese
utilizar un tipo de puertas diferente para implementar una función, que tenemos expresada en una forma
canónica (por ejemplo, SoP) y quizás nos haría falta tenerla expresada en la otra forma canónica (por
ejemplo, PoS). Podemos convertir entre ambos tipos de formas canónicas mediante los teoremas de De
Morgan, y la regla involutiva del álgebra de Boole:

Regla involutiva del álgebra de Boole: a = a

Teoremas de De Morgan: (a + b) = a · b y (a · b) = a + b

Ejemplo 3. Transformar las funciones canónicas del ejemplo 1 f SoP y g PoS a su forma canónica
contraria equivalente, es decir, obtener f PoS y g SoP .

f SoP (a, b, c) = (a · b · c) + (a · b · c) + (a · b · c) =

= (a · b · c) + (a · b · c) + (a · b · c) =

= (a · b · c) · (a · b · c) · (a · b · c) =

= (a + b + c) · (a + b + c) · (a + b + c) = f PoS
CAPÍTULO 2. SISTEMAS COMBINACIONALES 9

g PoS (a, b, c) = (a + b + c) · (a + b + c) · (a + b + c) =

= (a + b + c) · (a + b + c) · (a + b + c) =

= (a + b + c) + (a + b + c) + (a + b + c) =

= (a · b · c) + (a · b · c) + (a · b · c) = g SoP

Tablas de Verdad
Una forma de representar las funciones lógicas es mediante una tabla de verdad. Se trata de una
tabla en la que se indica el valor que toma la función (salida) para todas las posibles combinaciones
de las variables lógicas de las que depende (entrada). En general, si tenemos n variables de entrada, la
tabla tendrá 2n combinaciones, que se escriben en la parte izquierda de la tabla en orden ascendente;
las combinaciones forman un número binario de tantos bits como variables, siendo el bit de la izquierda
el más significativo, o Most Significant Bit (MSB), y el de la derecha el menos significativo, o Least
Significant Bit (LSB). Opcionalmente, podemos escribir una primera columna (#) con el valor decimal
correspondiente al valor binario de las variables de entrada. En la parte derecha de la tabla se indicará
el valor de la función para cada una de las combinaciones.

Se pueden escribir varias funciones en una única tabla de verdad (multifunción), siempre y cuando
dependan de las mismas variables de entrada, pero dichas funciones son independientes unas de otras.
Por ejemplo, la tabla 2.6 muestra una tabla de verdad con dos funciones de salida independientes:
f 1 = AN D(a, b) y f 2 = OR(a, b), aunque ambas dependen de las mismas dos variables de entrada: a y
b.

MSB LSB
# a b f 1 = AN D(a, b) f 2 = OR(a, b)
0 0 0 0 0
1 0 1 0 1
2 1 0 0 1
3 1 1 1 1

Tabla 2.6: Tabla de verdad para dos funciones independientes.

A continuación vamos a explicar cómo se construye una tabla de verdad partiendo de una función
lógica, la cual deberá estar en forma canónica, ya sea suma de productos (SoP) o producto de sumas
(PoS). Cada término canónico, ya sea producto o suma, se corresponderá con una combinación de las
variables de entrada del circuito. En el caso de los términos producto, pondremos un 1 en la salida
de la función para la única combinación que lo hace verdadero (si ese término es verdadero para esa
CAPÍTULO 2. SISTEMAS COMBINACIONALES 10

combinación, la función también lo será); en el caso de los términos suma, pondremos un 0 en la salida
de la función para la única combinación que lo hace falso (si ese término es falso para esa combinación,
la función también lo será). En el resto de combinaciones que no hayamos contemplado, pondremos lo
contrario: en el caso de una función SoP habíamos estado poniendo 1’s, pues pondremos 0 en el resto;
en el caso de una función PoS, como habíamos estado poniendo 0’s, pondremos 1 en el resto.

Ejemplo 4. Vamos a construir la tabla de verdad de las dos funciones canónicas del ejemplo 1
f SoP y g PoS . En el ejemplo 2 habíamos escrito debajo de cada término la combinación de las variables
que lo hacen verdadero (términos producto) o falso (términos suma), y también habíamos escrito las
funciones de forma compacta; ambas cosas nos resultan muy útiles para construir la tabla de verdad.

(a·b·c) (a·b·c) (a·b·c) P


f SoP (a, b, c) = 111 + 101 + 001 = m 7 + m 5 + m 1 = i =1,5,7 m i
(a+b+c) (a+b+c) (a+b+c) Q
g PoS (a, b, c) = 010 · 011 · 001 = M 2 + M 3 + M 1 = i =1,2,3 M i

Para el caso de una suma de productos ( f SoP ), tendremos para cada término producto la combinación
que lo hace verdadero. Simplemente pondremos un 1 en dichas combinaciones, y 0 en el resto. Partiendo
de la forma compacta también podemos rellenar la tabla de verdad escribiendo un 1 en las combinaciones
para las que tenemos un minitérmino mi (i = 1, 5, 7), y 0 en el resto.

Para el caso de un producto de sumas ( f PoS ), tendremos para cada término suma la combinación
que lo hace falso. Simplemente pondremos un 0 en dichas combinaciones, y 1 en el resto. Partiendo
de la forma compacta, ahora podemos escribir un 0 en las combinaciones para las que tenemos un
maxitérmino Mi (i = 1, 2, 3), y 1 en el resto.

MSB LSB
# a b c f g

0 0 0 0 0 1
1 0 0 1 1 0
2 0 1 0 0 0
3 0 1 1 0 0

4 1 0 0 0 1
5 1 0 1 1 1
6 1 1 0 0 1
7 1 1 1 1 1

También podemos hacer lo contrario, es decir, a partir de la tabla de verdad, independientemente


de cómo se haya construido, podemos obtener las funciones lógicas equivalentes en forma canónica,
tanto como SoP como PoS. Si nos fijamos en cada combinación que sea 1 obtendremos un término
producto por una de ellas, que al final sumaremos y obtendremos la función lógica como SoP; si nos
CAPÍTULO 2. SISTEMAS COMBINACIONALES 11

fijamos en cada combinación que sea 0 obtendremos un término suma por cada una de ellas, que al
final multiplicaremos para obtener la función lógica como SoP.

Ejemplo 5. Vamos a obtener la función lógica de las dos funciones f y g de la tabla de verdad
del ejemplo anterior, tanto como SoP como PoS. En algunos casos deberá coincidir con las funciones
lógicas de las que partíamos en los ejemplos anteriores. En cualquier caso, a lo largo de estos ejemplos
tendremos varias funciones distintas para f ( f SoP , f PoS ), y todas ellas serán equivalentes, es decir,
podría comprobarse implementando el circuito esquemático en el simulador y se obtendría la misma
tabla de verdad; lo mismo puede decirse para la función g .

(a·b·c)
+ (a·b·c) (a·b·c) P
f SoP = 001 101 + 111 = m 1 + m 5 + m 7 = i =1,5,7 m i

(a+b+c)
· (a+b+c) (a+b+c) (a+b+c) (a+b+c) Q
f PoS = 000 010 · 011 · 100 · 110 = M0 + M2 + M3 + M4 + M6 = i =0,2,3,4,6 M i

(a·b·c)
+ (a·b·c) (a·b·c) (a·b·c) (a·b·c) P
g SoP = 000 100 + 101 + 110 + 111 = m 0 + m 4 + m 5 + m 6 + m 7 = i =0,4,5,6,7 m i

(a+b+c)
· (a+b+c) (a+b+c) Q
g PoS = 001 010 · 011 = M1 + M2 + M3 = i =1,2,3 M i

2.3. Puertas lógicas y circuitos


Para implementar una función lógica en un circuito digital se utilizan puertas lógicas que se interco-
nectan entre sí. Las puertas lógicas son circuitos electrónicos que reciben una o más señales eléctricas
de entrada y generan una señal eléctrica de salida. Son los elementos de conmutación básicos de los
circuitos digitales. Internamente están construidas con elementos analógicos (transistores) y utilizan
diferentes niveles de voltaje para representar los valores lógicos ’0’ (bajo o low) y ’1’ (alto o high).

b a +b a +b a ·b a ·b a ⊕b a ⊕b
a b NOT(b) OR(a,b) NOR(a,b) AND(a,b) NAND(a,b) XOR(a,b) XNOR(a,b)
0 0 1 0 1 0 1 0 1
0 1 0 1 0 0 1 1 0
1 0 1 1 0 0 1 1 0
1 1 0 1 0 1 0 0 1

Tabla 2.7: Puertas lógicas (tabla de verdad).

Figura 2.2: Puertas lógicas (símbolos): NOT, OR, NOR, AND, NAND, XOR, XNOR.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 12

Cada puerta lógica tiene un comportamiento determinado, cumpliendo una función lógica concre-
ta, tal como muestra la Tabla 2.7, donde podemos ver la tabla de verdad de las puertas lógicas más
habituales. Para dibujar el circuito esquemático utilizaremos una serie de símbolos (Figura 2.2).

Ejemplo 6. Vamos a implementar el circuito correspondiente a las funciones f SoP y f PoS del
ejemplo anterior.

f SoP = (a · b · c) + (a · b · c) + (a · b · c)
f PoS = (a + b + c) · (a + b + c) · (a + b + c) · (a + b + c) · (a + b + c)

a b c | f_SoP f_PoS
======+============ Ambos circuitos son equivalentes, tal y como po-
0 0 0 | 0 0 demos comprobar en la tabla de verdad; igual pa-
0 0 1 | 1 1 saría con el circuito f PoS .
0 1 0 | 0 0 Por tanto, vemos que existen varias posibilidades
0 1 1 | 0 0 a la hora de realizar una implementación real.
------+------------ Elegiremos aquella que sea más sencilla, o tenga
1 0 0 | 0 0 las puertas lógicas que nos interesen.
1 0 1 | 1 1
1 1 0 | 0 0
1 1 1 | 1 1
CAPÍTULO 2. SISTEMAS COMBINACIONALES 13

Los símbolos anteriores sólo se utilizan para realizar un diseño esquemático. Las puertas lógicas
no existen de forma individual como tal, sino que nos las podemos encontrar encapsuladas en diversos
circuitos integrados (IC). Por ejemplo:

74x04 Séxtuple puerta NOT

74x00 Cuádruple puerta NAND de dos entradas

74x10 Triple puerta NAND de tres entradas

74x20 Doble puerta NAND de cuatro entradas

74x30 Puerta NAND de ocho entradas

74x02 Cuádruple puerta NOR de dos entradas

74x27 Triple puerta NOR de tres entradas

74x25 Doble puerta NOR de cuatro entrada

74x08 Cuádruple puerta AND de dos entradas

74x32 Cuádruple puerta OR de dos entradas

74x86 Cuádruple puerta XOR de dos entradas

En una implementación física conectaremos entre sí los distintos IC utilizados de algún modo: con
cables en una placa de desarrollo (board) o mediante pistas en circuito impreso. Sin embargo, nosotros
nos vamos a abstraer de su implementación física y nos centraremos en su funcionamiento lógico.

A continuación, en la sección 2.4 vamos a estudiar un mecanismo de simplificación que nos va a


permitir obtener circuitos mucho más sencillos. Más adelante (sección 2.5) también estudiaremos el
uso de las puertas universales (NAND o NOR), para implementar circuitos utilizando únicamente un
tipo de puertas lógicas.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 14

2.4. Simplificación de funciones lógicas: mapas de Karnaugh


El objetivo de la técnica de mapas de Karnaugh [?] es simplificar una función lógica para obtener
circuitos más sencillos aunque equivalentes a nivel lógico. La técnica consiste en construir una tabla
que tiene la misma información que una tabla de verdad, aunque sus celdas están dispuestas de diferente
manera. Después, se procede realizando agrupaciones de 1’s o 0’s entre celdas adyacentes, siendo cada
grupo un término, producto o suma respectivamente, en la función simplificada. Se trata de realizar el
menor número de agrupaciones, y lo más grandes posible.

Como se acaba de decir, un mapa de Karnaugh (K-map) tiene una serie de celdas cuyo contenido es
similar al de una tabla de verdad. Por tanto, el tamaño de una mapa de Karnaugh depende del número
de variables de la función lógica a simplificar. Al igual que para las tablas de verdad, si tenemos n
variables tendremos 2n celdas, conteniendo el valor de la función lógica para cada combinación de las
variables de entrada. En la Figura 2.3 se muestra la forma que tienen los mapas de Karnaugh según
el número de variables (desde 2 hasta 5). El método de mapas de Karnaugh se utiliza para simplificar
funciones de hasta 6 variables; en caso de tener un mayor número de variables se utilizan otros métodos
como el de Quine-McCluskey.

b bc
a 0 1 a 00 01 11 10

0 0

1 1

cd cde
00 01 11 10 000 001 011 010 100 101 111 110
ab ab
00 00

01 01

11 11

10 10

Figura 2.3: Mapas de Karnaugh para 2, 3, 4 y 5 variables.

Cada celda se corresponde con el valor binario de las distintas variables, que es lo que se escribe en
la parte izquierda y superior de la tabla. Por ejemplo, para el caso de 5 variables, a la izquierda tenemos
las variables a y b (con sus 4 posibles valores), y en la parte superior las variables c , d y e (con sus
8 posibles valores), pero todas ellas forman un valor binario de 5 bits. Por ejemplo, a la primera celda
le corresponderían los valores ab =00, cd e =000, a la segunda los valores ab =00, cd e =001, y
CAPÍTULO 2. SISTEMAS COMBINACIONALES 15

así sucesivamente. A diferencia de las tablas de verdad, el orden de los valores de las variables no es
correlativo; se hace así para conseguir que de cada celda a sus celdas adyacentes sólo cambie un bit.
Por ello, cuando hay dos variables (por ejemplo, ab ), los valores siguen el orden: ab =00, 01, 11, 10,
es decir, se intercambian los dos últimos valores (dos últimas filas o columnas de la tabla); cuando hay
tres variables (por ejemplo, cd e ), los valores siguen el orden: cd e =000, 001, 011, 010, 100, 101,
111, 110, es decir, como para dos variables con un 0 delante, y luego repitiendo lo mismo pero con
un 1 delante. Para 5 variables se puede considerar que es como un edificio, en donde tenemos una tabla
de 4 variables 4 × 4 que empieza por 0 (planta 0), y encima hay otra tabla de de 4 variables 4 × 4 que
empieza por 1 (planta 1)1. Podemos comprobar que las casillas de la primera fila son adyacentes con
las de la última fila; de igual manera, las de la primera columna y la última son adyacentes también.

Para rellenar el mapa de Karnaugh se procede de forma similar como para construir una tabla
de verdad. Podemos partir tanto desde la función lógica como desde la tabla de verdad, aunque si ya
tenemos la tabla de verdad es más fácil:

Desde la función lógica en forma canónica (SoP o PoS): cada término canónico se corresponde
con una celda del mapa de Karnaugh. Para cada término producto o minitérmino (mi ), en la
casilla correspondiente a su índice i tendremos un 1, y 0 en el resto de casillas; para cada término
suma o maxitérmino (Mi ), en la casilla correspondiente a su índice i tendremos un 0, y 1 en el
resto. Por ello, sería muy conveniente expresar las funciones en su forma compacta, y que las
casillas del mapa de Karnaugh estuvieran numeradas en decimal.

Desde la tabla de verdad: se trata simplemente de trasladar los valores 0 y 1 de la salida de


la función a su celda correspondiente en el mapa de Karnaugh, teniendo presente el cambio de
orden que se utiliza en el mapa de Karnaugh (por ejemplo, para cuatro variables, las dos últimas
filas y las dos últimas columnas están intercambiadas entre sí).

Ejemplo 7. Vamos a construir el mapa de Karnaugh correspondiente a las funciones f SoP y f PoS
del ejemplo 4, tanto desde la expresión lógica en forma canónica (SoP y PoS), como desde la tabla de
verdad que habíamos obtenido en ese mismo ejemplo, y que ponemos de nuevo aquí.
(a·b·c) (a·b·c) (a·b·c) P
f SoP = 001 + 101 + 111 = m 1 + m 5 + m 7 = i =1,5,7 m i
(a+b+c) (a+b+c) (a+b+c) (a+b+c) (a+b+c) Q
f PoS = 000 · 010 · 011 · 100 · 110 = M0 + M2 + M3 + M4 + M6 = i =0,2,3,4,6 M i
1 En algunos libros se utiliza otra disposición diferente, haciendo espejo.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 16

MSB LSB Considerando la función f SoP , colocamos un 1 en las celdas co-


# a b c f rrespondientes a cada minitérmino; en el resto 0.
0 0 0 0 0 Considerando la función f PoS , colocamos un 0 en las celdas co-
1 0 0 1 1 rrespondientes a cada maxitérmino; en el resto 1.
2 0 1 0 0
3 0 1 1 0 Considerando la tabla de verdad, podemos copiarla tal cual de
arriba a abajo, teniendo en cuenta que las dos últimas columnas
4 1 0 0 0
están intercambiadas.
5 1 0 1 1
6 1 1 0 0 bc
a 00 01 11 10
7 1 1 1 1
0 0 1 0 0

1 0 1 1 0

Al igual que podíamos obtener la función lógica desde la tabla de verdad, desde un mapa de Kar-
naugh también lo podemos hacer. Si consideramos las celdas que son 1, cada una se corresponde con
un término producto, y obtendremos una función canónica en forma de suma de productos; si conside-
ramos las celdas que son 0, cada una se corresponde con un término suma, y obtendremos una función
canónica en forma de producto de sumas. Sin embargo, el propósito de un mapa de Karnaugh es ob-
tener las funciones lógicas de forma simplificada. Para ello, una vez construido el mapa de Karnaugh
se realiza el proceso de simplificación, que consiste en realizar agrupaciones de celdas adyacentes
que tengan el mismo valor lógico 1 o 0. Si realizamos agrupaciones de 1’s obtendremos una función
lógica en forma de suma de productos, aunque no canónica; si vamos a realizar agrupaciones por 0’s
obtendremos una función lógica simplificada en forma de producto de sumas, aunque no canónica. La
función simplificada obtenida podrá tener menos términos, y los términos podrán ser más pequeños, es
decir, no incluir todas las variables (no canónicos).

Las agrupaciones realizadas deben cumplir ciertas condiciones: (1) incluir un número de celdas
que sea potencia de 2 (serían válidos 1, 2, 4, 8, 16, etc., pero no sería válido, por ejemplo, un grupo
de 3 celdas); (2) deben ser rectangulares, horizontal o vertical, teniendo en cuenta que las celdas de
los extremos son adyacentes (por ejemplo, sería válido agrupar celdas de la primera fila con celdas de
la última fila, o agrupar las 4 esquinas del mapa de Karnaugh; sin embargo, no sería válido un grupo
en forma de ’L’ o en diagonal, ya que las celdas no son adyacentes; (3) si se considera agrupar los
1’s obtendremos un término producto (minitérmino) por cada grupo realizado; si se considera agrupar
los 0’s obtendremos un término suma (maxitérmino) por cada grupo realizado; (4) todos los valores
que se estén considerando (0’s o 1’s) deben quedar agrupados, aunque se permite que un valor pueda
pertenecer a más de un grupo si fuera necesario.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 17

cd cd cd
00 01 11 10 00 01 11 10 00 01 11 10
ab ab ab
00 0 1 0 0 00 0 1 1 0 00 1 1 1 1

01 1 1 0 0 01 0 1 1 0 01 0 0 0 0

11 1 1 0 0 11 1 0 0 1 11 0 0 1 0

10 0 1 0 0 10 1 0 0 1 10 1 1 1 1

cd cd cd
00 01 11 10 00 01 11 10 00 01 11 10
ab ab ab
00 0 0 1 0 00 1 0 0 1 00 0 0 1 0

01 1 1 1 1 01 1 0 1 1 01 1 0 0 1

11 0 0 1 0 11 1 0 1 1 11 0 0 0 0

10 1 0 0 0 10 1 0 0 1 10 0 0 1 0

Figura 2.4: Ejemplos de agrupaciones válidas en un mapa de Karnaugh de 4 variables.

La Figura 2.4 muestra algunos ejemplos de agrupaciones válidas utilizando un mapa de Karnaugh
de 4 variables, utilizando tanto los valores 1 (azul) como los valores 0 (rojo). La simplificación realizada
puede no ser única, es decir, según las agrupaciones realizadas se pueden obtener diferentes funciones
simplificadas; nos quedaremos con la mínima posible.

Una vez construido el mapa de Karnaugh y realizadas las agrupaciones, falta el último paso pa-
ra realizar la simplificación: obtener el término correspondiente a cada una de las agrupaciones, y
unirlos para formar la función simplificada equivalente. Como se ha dicho antes, si agrupamos por 1’s
obtendremos una función lógica en forma de suma de producto, agrupamos por 0’s obtendremos una
función lógica simplificada en forma de producto de sumas.

Por cada agrupación realizada obtendremos un término de la función simplificada, que seguramente
no será canónico; si el término es canónico indicará que sólo se ha agrupado un 1 o un 0 aislado,
es decir, que no se ha realizado simplificación. Cuando dos celdas adyacentes que tienen el mismo
valor se agrupan, lo que ocurre es que tendremos un término (en vez de dos) en el que la variable
que les diferencia se elimina del término obtenido. Por tanto, interesa realizar el menor número de
agrupaciones (para tener menor número de términos) y lo más grandes posible (para que los términos
sean más simples).

Supongamos una función de tres variables lógicas f (a, b, c) cualquiera, y sean dos celdas adyacen-
tes: abc =111 y abc =011 (sólo varía un bit entre ellas, el correspondiente al valor de a ). Si esas
CAPÍTULO 2. SISTEMAS COMBINACIONALES 18

dos celdas tienen el mismo valor (0 o 1) pueden agruparse, y en cada grupo realizado lo que estamos
haciendo es eliminar variables contradictorias, es decir, que aparecen complementadas y sin comple-
mentar dentro del mismo grupo. Formalmente estamos aplicando la propiedad distributiva y la regla de
la identidad del álgebra de Boole:

Si el valor de ambas celdas es 1, se corresponden con los términos producto (minitérminos)


(a · b · c) y (a · b · c), respectivamente. Si los sumamos podemos obtener lo siguiente:
(a · b · c) + (a · b · c) = (a + a) · (b · c) = 1
 · (b · c) = (b · c)

Si el valor de ambas celdas es 0, se corresponden con los términos suma (maxitérminos) (a+b+c)
y (a + b + c), respectivamente. Si los sumamos podemos obtener lo siguiente:
(a + b + c) · (a + b + c) = (a · a) + (b + c) = 0
 + (b + c) = (b + c)

Ejemplo 8. Suponiendo ya construido el mapa de Karnaugh de la función f del ejemplo 7, vamos


a realizar el proceso de simplificación, agrupando tanto por 1 como por 0, y obtendremos las funciones
f SoP y f PoS , respectivamente, simplificadas pero equivalentes. Primero realizamos las agrupaciones, y
a continuación, obtenemos el término equivalente a cada agrupación.

bc
a 00 01 11 10

0 0 1 0 0 Agrupando 1’s: f SoP = (b · c) + (a · c)

1 0 1 1 0 Agrupando 0’s: f PoS = (c) · (a + b)

Si comparamos estas funciones con las funciones del ejemplo 7 en forma canónica, vemos que se han
simplificado bastante, especialmente en el caso de f PoS . Estas cuatro funciones f SoP y f PoS (forma
canónica y simplificadas) son todas equivalentes. Por tanto, a la hora de implementar un circuito real
será conveniente utilizar la más simple de todas ellas.

Ejemplo 9. De los ejemplos de agrupaciones mostrados en la figura 2.4, vamos a obtener las
funciones lógicas f SoP y f PoS simplificadas para el primer caso; se puede hacer cualquiera de los otros
como ejercicio.

cd
00 01 11 10
ab
00 0 1 0 0 Agrupando 1’s: f SoP = (b · c) + (c · d )

01 1 1 0 0 Agrupando 0’s: f PoS = (c) · (b + d )

11 1 1 0 0

10 0 1 0 0
CAPÍTULO 2. SISTEMAS COMBINACIONALES 19

Indiferencias en los mapas de Karnaugh


Las funciones con las que hemos estado trabajando hasta ahora están completamente definidas, es
decir, para cada combinación de las entradas conocemos el valor de su salida. En ocasiones, a la hora
de diseñar algunos circuitos digitales hay casos en los que ciertas combinaciones de entrada no pueden
darse o no están permitidas; a tales combinaciones se las denomina indiferencias, y la función lógica
se dice que está incompletamente definida.

En las indiferencias no importa el valor que tenga la salida de la función, puede ser ’0’ o ’1’ y no
afectará al su funcionamiento, puesto que esos casos no se presentarán. Por ello, en esos casos podemos
poner como salida el símbolo ’X’, tanto en la tabla de verdad como en el mapa de Karnaugh, con la
ventaja de que haciendo uso de estas indiferencias, podremos simplificar aun más la función, ya que
podemos utilizar las ’X’ como ’0’ o como ’1’ según nos interese; además, no estamos obligados a dejar
agrupadas todas las ’X’, sólo las utilizaremos si nos interesa.

En cuanto a la forma de expresar una función con indiferencias en forma compacta se añade un
elemento adicional ’δ’ (delta) incluyendo aquellas combinaciones que son indiferentes:

+ δ(i nd i f er enci as)


P
Suma de Productos (SoP): f SoP = i =... m i

· δ(i nd i f er enci as)


Q
Producto de Sumas (PoS): f PoS = i =... M i

Ejemplo 10. Vamos a suponer que en la función lógica del ejemplo 7, la combinación abc =011
fuese una indiferencia, por lo que en la tabla de verdad podemos poner una ’X’ en lugar del ’0’ (se
elimina el maxitérmino M3 ), y sus formas compactas serían las siguientes:
(a·b·c)
+ (a·b·c) (a·b·c)
+ δ(3)
P
f SoP = 001 101 + 111 = m 1 + m 5 + m 7 = i =1,5,7 m i

(a+b+c)
· (a+b+c) (a+b+c) (a+b+c)
+ δ(3)
Q
f PoS = 000 010 · 100 · 110 = M0 + M2 + M4 + M6 = i =0,2,4,6 M i

MSB LSB bc
a 00 01 11 10
# a b c f
0 0 1 X 0
0 0 0 0 0
1 0 0 1 1 1 0 1 1 0
2 0 1 0 0
3 0 1 1 X Agrupando 1’s: f SoP = (c)
4 1 0 0 0
Agrupando 0’s: f PoS = (c)
5 1 0 1 1
6 1 1 0 0 Podemos comprobar que una función puede simplificarse mucho
7 1 1 1 1 más si consideran ciertas combinaciones como indiferentes.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 20

2.5. Puertas universales


Por lo que hemos visto, cualquier función lógica puede escribirse utilizando únicamente las opera-
ciones suma ’+’ (OR), producto ’·’ (AND) y negación o complemento (NOT). Por eso se dice que el
conjunto formado por estas tres operaciones o puertas lógicas es un conjunto completo en el álgebra
de Boole.

Una puerta NAND también es un conjunto completo, porque se puede escribir cualquier función
lógica únicamente con puertas NAND. Lo mismo ocurre con puertas NOR. Por ello, a las puertas
NAND y NOR se les llama puertas universales. Utilizar un único tipo de puertas tiene ventajas a la
hora de diseñar circuitos digitales, ya que permite utilizar menos circuitos integrados, y en concreto con
estas puertas universales NAND y NOR, más económicos y más rápidos. Primero habría que demostrar
que las tres puertas lógicas básicas (AND, OR, NOT) pueden sustituirse con sólo puertas NAND o sólo
puertas NOR (Tablas 2.8 y 2.9). De esta manera, dado cualquier circuito correspondiente a una función
lógica, siempre se podría sustituir cada puerta por su equivalencia en sólo puertas NAND o NOR.

Puerta lógica Transformación Equivalencia NAND


NOT(a) a = a·a NAND(a,a)
a = a ·1 NAND(a,1)
AND(a,b) (a · b) = (a · b) NAND(NAND(a,b),NAND(a,b))
OR(a,b) (a + b) = (a + b) = (a · b) NAND(NAND(a,a),NAND(b,b))

Tabla 2.8: Puerta universal NAND.

Puerta lógica Transformación Equivalencia NOR


NOT(a) a = a·a NOR(a,a)
a = a ·1 NOR(a,1)
AND(a,b) (a · b) = (a · b) = (a + b) NOR(NOR(a,a),NOR(b,b))
OR(a,b) (a + b) = (a + b) NOR(NOR(a,b),NOR(a,b))

Tabla 2.9: Puerta universal NOR.

Como vemos, este procedimiento de sustituir cada puerta NOT, AND y OR individual por su equi-
valencia en puertas universales NAND o NOR nos lleva a un circuito con un número muy elevado
de puertas y un nivel mucho mayor que el circuito original, por lo que antes de implementarlo habría
que simplificarlo, básicamente eliminando dobles negaciones seguidas (a = a ). Existe un teorema se-
gún el cual podemos implementar cualquier función lógica con el mismo número de puertas NAND o
NOR que con puertas NOT, AND y OR (suponiendo que ya tengamos todas las variables de entrada ya
complementadas).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 21

Podemos realizar la transformación de cualquier función lógica para que utilice únicamente un tipo
de puerta universal (NAND o NOR) mediante los teoremas de De Morgan, y la regla involutiva del
álgebra de Boole, de forma muy similar a lo que utilizábamos para convertir entre las formas canónicas
SoP y PoS (ver sección 2.2):

Regla involutiva del álgebra de Boole: a = a

Teoremas de De Morgan: (a + b) = a · b y (a · b) = a + b

Ejemplo 11. Dada la siguiente función f SoP transformarla para utilizar únicamente puertas univer-
sales de tipo NAND o NOR:

f SoP = (a · b · c) + (a · b · c)

Sólo puertas NAND:

f N AN D = (a · b · c) + (a · b · c) = (a · b · c) + (a · b · c) = (a · b · c) · (a · b · c)

Hemos complementado dos veces la función completa y después hemos aplicado el teorema de
De Morgan. Cada término es un producto negado (NAND), y la función completa también.

Sólo puertas NOR:

f NOR = (a · b · c) + (a · b · c) = (a · b · c) + (a · b · c) = (a + b + c) + (a + b + c) =

= (a + b + c) + (a + b + c)

Hemos complementado dos veces cada término por separado y después hemos aplicado el teorema
de De Morgan, también a cada término por separado, quedando una suma negada (NOR) cada
uno de ellos. Notar que este caso, al final hemos tenido que complementar dos veces la función
completa para poder tener puertas NOR en vez de OR; esto se refleja en el circuito por las dos
puertas NOR finales, siendo la primera de ellas una suma negada y la segunda simplemente el
equivalente a una puerta NOT.

Figura 2.5: Circuito utilizando puertas universales: NAND (izq.) y NOR (dcha.).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 22

Puertas universales de 2 entradas


Una vez que ya tengamos una función lógica transformada para utilizar sólo puertas universales
NAND o NOR, puede ser que no exista comercialmente un circuito integrado con el número de entradas
necesario, o nos interese utilizar sólo puertas universales de un número de entradas concreto para todas
ellas (por ejemplo, 2 entradas únicamente). La Figura 2.6 muestra cómo habría que cambiar una puerta
NAND de 3 entradas a sólo puertas NAND de 2 entradas. En la práctica, la transformación necesaria
para ello consiste únicamente en aplicar la propiedad asociativa y la regla involutiva del álgebra de
Boole (a = a ), complementando dos veces de dos en dos, ya sea variables dentro de un término o
términos completos de la función).

Figura 2.6: Puerta NAND de 3 entradas (izq.) y equivalente con NAND de 2 entradas (dcha.).

Ejemplo 12. Partiendo de las dos funciones obtenidas en el ejemplo 11 anterior f N AN D y f NOR
ya transformadas para utilizar únicamente puertas universales de tipo NAND o NOR, volver a transfor-
marlas para que las puertas utilizadas sean de 2 entradas.
f N AN D = (a · b · c) · (a · b · c))

f NOR = (a + b + c) + (a + b + c)

Sólo puertas NAND de dos entradas:

f N AN D2 = (a · b · c) · (a · b · c) = (a · b · c) · (a · b · c)

Hemos complementado dos veces cada dos variables dentro de cada término; como tenemos 3
variables, podemos hacerlo con las dos primeras o con las dos últimas, y la otra variable se queda
fuera de la doble complementación. En la función completa no ha sido necesario ya que sólo
tenemos dos términos; si tuviéramos 3 o más términos habría que volver a hacer lo mismo, es
decir, complementar dos veces cada dos términos.

Sólo puertas NOR de dos entradas:

f NOR2 = (a + b + c) + (a + b + c) = (a + b + c) + (a + b + c)

El procedimiento aquí es similar al caso anterior.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 23

Figura 2.7: Circuito utilizando puertas universales de 2 entradas: NAND (izq.) y NOR (dcha.).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 24

2.6. Circuitos combinacionales


Los circuitos digitales se pueden clasificar en dos tipos:

1. Circuitos combinacionales: compuestos principalmente por elementos discretos tales como puer-
tas lógicas. Disponen de varias entradas y una o más salidas que dependen de los valores de las
entradas en un momento dado.

2. Circuitos secuenciales: compuestos básicamente por elementos capaces de almacenar informa-


ción (biestables), y también puertas lógicas. Sus salidas dependen del valor actual de las entradas,
pero también del valor que hayan tenido las entradas en los instantes anteriores.

En lo que resta de este tema vamos a explicar el diseño de circuitos combinacionales para que cum-
plan cierta función, factores a tener en cuenta en su diseño, y estudiaremos algunos circuitos combina-
cionales conocidos: sumadores, codificadores, multiplexores, etc. Como ya se explicó anteriormente,
el comportamiento de un circuito combinacional se puede expresar de varias formas: (1) mediante una
función lógica (expresión algebraica), (2) mediante una tabla de verdad y (3) con un diseño esquemático
(diagrama lógico o circuito).

La salida de un circuito combinacional depende exclusivamente de los valores lógicos que tengan
de las entradas en un instante concreto, es decir, cada vez que se presente una combinación en las
entradas, la salida tomará el mismo valor, dependiendo de la función lógica (recordar las tablas de
verdad). Además, es necesario que transcurra cierto tiempo desde que alguna de las entradas cambia de
valor hasta que tiene efecto en las salidas, debido al retardo de cada una de las puertas lógicas (tiempo
de propagación), y la estabilización de las salidas; la suma de todos los tiempos que afectan constituyen
el retardo global del circuito.

Si un circuito combinacional tiene n entradas (E 1 , E 2 , E 3 , . . . , E n ), tendremos 2n combinaciones de


valores binarios en las entradas. Además, un circuito combinacional podrá tener m salidas (S 1 , S 2 , S 3 ,
. . . , S m ), cada una correspondiente a una función lógica diferente, aunque dependiendo de las mismas
entradas. Por eso, en general, un circuito combinacional podemos dibujarlo como se muestra en la
Figura 2.8; se muestra un símbolo de bloque o caja negra (black-box) que consiste en una caja negra
que oculta su implementación, y sólo muestra sus entradas y salidas, independientes (izq.) o agrupadas
en un bus (dcha.).

Una de las ventajas de los circuitos digitales es que podemos hacer uso del diseño descendente
o top-down, en el que podemos construir circuitos combinacionales complejos a partir de otros más
sencillos. Los circuitos más sencillos que se utilizan se ven como una caja negra, es decir, no es nece-
sario conocer exactamente su implementación interna. Esta metodología de diseño jerárquica facilita
reutilizar circuitos previamente diseñados en otros nuevos, conociendo únicamente la descripción de
sus entradas, sus salidas, su funcionalidad o lógica, y alguna otra característica física como el retardo.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 25

E1 S1
E2 S2 E S
E3 Circuito combinacional S3 / Circuito combinacional /
n m
... ...
En Sm

Figura 2.8: Circuito combinacional - símbolos de bloque.

En cuanto a la implementación de los circuitos combinacionales (interior de la caja negra), como


se ha comentado se construyen uniendo componentes discretos entre sí: puertas lógicas (AND, OR,
NOT, etc.), así como otros circuitos previamente diseñados. Sin embargo, estas conexiones no se deben
realizar de cualquier forma, y es necesario seguir ciertas reglas para que los circuitos sean válidos. En
concreto, debemos evitar las siguientes situaciones:

1. La salida de dos puertas lógicas no se pueden unir. El resultado sería impredecible si sus salidas
no tienen el mismo valor.

2. La salida de una puerta no puede conectarse a alguna de sus propias entradas o a la entrada de
otra puerta de nivel inferior (realimentación o feedback). El resultado también sería impredecible,
probablemente se producirían oscilaciones continuas. No obstante, hay ciertos bucles con reali-
mentación que sí son válidos, y son la base del funcionamiento de los biestables, los elementos
básicos de los circuitos secuenciales que se estudiarán en el próximo capítulo.

En los siguientes apartados estudiaremos algunos circuitos combinacionales existentes, disponibles


comercialmente en circuitos integrados que podrían utilizarse en otros diseños mayores.

2.7. Sumadores y restadores


Los circuitos sumadores binarios permiten realizar la suma de dos valores binarios de un cierto
número n de bits, A = an · · · a3 a2 a1 y B = an · · · a3 a2 a1 . La suma se realiza sumando cada par de bits
de ambos valores binarios de igual peso (a1 + b1, a2 + b2, . . . ), teniendo en cuenta también el acarreo
resultante de la suma del par de bits de peso inferior, es decir, la suma de n bits se realiza en etapas. Es
importante notar que, en este apartado, el operador suma ’+’ se utiliza tanto como el operador lógico
OR, como operador para sumar dos bits.

Como se ha comentado anteriormente, los circuitos combinacionales utilizan un diseño jerárquico,


donde una tarea compleja se divide en tareas más simples, reutilizándose circuitos básicos en circuitos
más complejos. En el caso de los sumadores binarios, para realizar cada una de las sumas de dos bits
de las diferentes etapas se utiliza un circuito llamado sumador completo (full-adder), el cual, a su
vez, integra otros circuitos más básicos denominados semisumadores (half-adder). A continuación
CAPÍTULO 2. SISTEMAS COMBINACIONALES 26

vamos a ir analizando cada uno de estos circuitos desde abajo hacia arriba, es decir, comenzando por
los circuitos más básicos que se integran en los circuitos más completos.

Semisumador (half-adder)
En esta apartado vamos a construir el circuito combinacional correspondiente a un semisumador
(half-adder), que es un circuito que recibe dos bits a y b como entrada, y como salidas genera su suma
S y acarreo C , tal como se muestra en el símbolo de bloque. Comenzamos escribiendo su tabla de
verdad; vemos que en realidad es como si el resultado fuese de dos bits, siendo el acarreo C el bit más
significativo (MSB), y la suma S el menos significativo (LSB).

a b C S
a S
P 0 0 0 0 0 + 0 = 010 = 002
1/2
0 1 0 1 0 + 1 = 110 = 012
b C
1 0 0 1 1 + 0 = 110 = 012
1 1 1 0 1 + 1 = 210 = 102

Por tanto, las funciones lógicas de S y C (implementando por 1’s) son las siguientes, que pueden
implementarse conjuntamente tal como se muestra en la Figura 2.9:

S = (a · b) + (a · b) = (a ⊕ b)
C = (a · b)

Figura 2.9: Semisumador - Dos posibles implementaciones.

Sumador completo (full-adder)


El sumador completo (full-adder) es un circuito que, al igual que el semisumador, recibe dos bits
a y b como entrada, pero además recibe el acarreo de la etapa de suma anterior C i n , y como salidas
genera la suma de esos 3 bits S y el acarreo C out , tal como se muestra en el símbolo de bloque. Al igual
que antes, comenzamos escribiendo su tabla de verdad, pero para obtener las funciones, en este caso
vamos a simplificarlas mediante mapas de Karnaugh.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 27

a a b Ci n C out S
S
b P 0 0 0 0 0 0 + 0 + 0 = 010 = 002
0 0 1 0 1 0 + 0 + 1 = 110 = 012
Cin Cout
0 1 0 0 1 0 + 1 + 0 = 110 = 012
0 1 1 1 0 0 + 1 + 1 = 210 = 102

1 0 0 0 1 1 + 0 + 0 = 110 = 012
1 0 1 1 0 1 + 0 + 1 = 210 = 102
1 1 0 1 0 1 + 1 + 0 = 210 = 102
1 1 1 1 1 1 + 1 + 1 = 310 = 112

S: C out :

bC i n bC i n
a
00 01 11 10 a
00 01 11 10

0 0 1 0 1 0 0 0 1 0

1 1 0 1 0 1 0 1 1 1

La función S no puede simplificarse mediante el mapa de Karnaugh, ya que no pueden agruparse


1’s ni 0’s al estar aislados. Por tanto, vamos a obtener la función lógica como SoP desde la tabla de
verdad, e intentar simplificar algo utilizando las reglas del álgebra de Boole (propiedad distributiva):

S = (a · b · C i n ) + (a · b · C i n ) + (a · b · C i n ) + (a · b · C i n ) =
h i h i
= (a · b) + (a · b) · C i n + (a · b) + (a · b) · C i n =
h i
= a ⊕ b · C i n + [a ⊕ b] · C i n = (a ⊕ b) ⊕C i n

La función de C out sí que se puede simplificar, obteniendo lo siguiente como SoP:

C out = (a · b) + (a · C i n ) + (b · C i n ) = (a · b) + (a + b) · C i n

Por tanto, las funciones S y C out obtenidas para el sumador completo son las siguientes, cuya
implementación sería la que se muestra en la Figura 2.10:

S = (a ⊕ b) ⊕C i n
C out = (a · b) + (a + b) · C i n
CAPÍTULO 2. SISTEMAS COMBINACIONALES 28

Figura 2.10: Sumador completo.

Si nos fijamos en el circuito, hay dos zonas (señaladas en gris) que son, o se parecen mucho, a
un semisumador. Con intención de reutilizar elementos ya diseñados, vamos a comprobar si podemos
sustituir esas dos zonas por semisumadores, y, en caso de que no, intentar realizar las modificaciones
necesarias para poder realizar la sustitución.

En las dos funciones S y C out que hemos obtenido hay unos términos que aparecen en color naranja,
que son los que podríamos obtener de las salidas S y C de un semisumador que sume a y b . Recordemos
que las funciones de un semisumador eran S = (a ⊕ b) y C = (a · b). Por tanto, podemos sustituir sin
ningún problema la zona indicada de la izquierda por un primer semisumador.

La función S de este sumador completo es la XOR de (a ⊕ b) y la entrada C i n , que eso justamente


es la salida S = (a ⊕ b) ⊕ C i n que nos proporcionaría un semisumador cuando recibe esas dos entradas.
Por tanto, en cuanto a la función S podríamos utilizar un semisumador también para la parte derecha.

Sin embargo, en cuanto a la función C out = (a · b) + (a + b) ·C i n de este sumador completo vamos a


tener un inconveniente. Como hemos dicho, el primer término (a · b) podría ser la salida C = (a · b) que
nos proporciona el primer semisumador, y faltaría sumar (a + b) · C i n . Si sustituyéramos la zona de la
derecha por otro semisumador, la salida del acarreo de éste sería (a ⊕ b) · C i n , que se parece mucho a
lo que nos falta sumar pero no coincide exactamente. Esto nos puede llevar a pensar que no podríamos
sustituir la zona de la derecha por un semisumador, ya que necesitamos (a + b) y con un semisumador
tendríamos (a ⊕ b), y los operadores + y ⊕ son distintos (Tabla 2.7). Sin embargo, puede demostrarse
que, en este caso concreto, sí que podría hacerse esa sustitución, eliminando la puerta XOR para la
función S y las puertas OR y AND necesarias para implementar (a + b) · C i n .

Haciendo estas dos sustituciones, la función C out del sumador completo sería simplemente la suma
(OR) del acarreo de salida de ambos semisumadores, y las funciones quedarían como sigue:

S = (a ⊕ b) ⊕C i n
C out = (a · b) + (a ⊕ b) · C i n
CAPÍTULO 2. SISTEMAS COMBINACIONALES 29

En otras palabras, si se produce acarreo en alguno de los dos semisumadores, también se producirá
acarreo en el sumador completo. De esta manera, el circuito de un sumador completo podría ser el que
se muestra en la Figura 2.11.

Figura 2.11: Sumador completo (implementado con dos semisumadores).

Demostración: Aunque podría hacerse una demos-


tración formal de por qué podemos cambiar (a + b)
(OR) por (a ⊕ b) (XOR), vamos a dar una breve expli- a +b a ⊕b

cación fijándonos simplemente en la función C out final a b OR XOR


del sumador completo: 0 0 0 0 Coinciden
0 1 1 1 Coinciden
C out = (a · b) + (a ⊕ b) · C i n
1 0 1 1 Coinciden
Las operaciones ’+’ y ’⊕’ son distintas, como pode- 1 1 1 0 No coinciden
mos observar en la tabla de verdad; ambas operaciones
coinciden en 3 de las 4 combinaciones de entrada, todas excepto para el caso a = 1 y b = 1. El motivo
de haber podido realizar esa sustitución en la función C out es que, en este caso, la combinación para la
que no coinciden las dos operaciones (a = 1 y b = 1) no afecta al resultado, ya que el término (a · b) es
1, por lo que C out también será 1, independientemente del valor del segundo término. Para el resto de
casos es al contrario, el término (a · b) es 0, por lo que el resultado dependerá del segundo término en
el que habíamos cambiado el operador, pero mirando la tabla de verdad podemos comprobar que es lo
mismo utilizar ’+’ que ’⊕’.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 30

Sumador de ’n’ bits


Un sumador de ’n’ bits es un circuito que A B
/n /n

recibe como entrada dos valores binarios de


’n’ bits A = an · · · a2 a1 y B = bn · · · b2 b1 , y A = an · · · a2 a1
genera como salida un valor binario también Cout P Cin
n bits B = bn · · · b2 b1
de ’n’ bits S = s n · · · s 2 s 1 y un acarreo C out ; 0v.
S = sn · · · s2 s1
como entrada también puede recibir un aca-
/n

rreo C i n que permite conectar en serie varios S


sumadores de ’n’ bits para construir sumado-
res de un mayor número de bits (expansión de sumador), que en caso de no utilizarse podrá estar
conectada a masa.

Aunque hay diversas implementaciones, la forma más simple de implementar un sumador de ’n’
bits es conectar ’n’ sumadores completos en serie o cascada (modo ripple), en donde cada sumador
P
completo i (etapa de sumador) genera la suma de dos bits de mismo peso s i = ai + bi con i ∈ [1..n], y
P
el acarreo C i se va propagando a la siguiente etapa de sumador i +1 (Figura 2.12). Para la suma de los
bits de menor peso (LSB) s 1 = a1 +b1 podría utilizarse un semisumador en lugar del sumador completo
P
1 en caso de no utilizar la entrada C i n , pero eso impediría poder realizar la expansión del sumador
de ’n’ bits. Esta implementación recibe el nombre de sumador de ’n’ bits con propagación de acarreo,
o también, sumador paralelo con acarreo en serie; existen otras implementaciones más rápidas, a costa
de incrementar el número de puertas.

Figura 2.12: Sumador de ’n’ bits en serie (propagación de acarreo).

Como ejemplos de sumadores disponibles comercialmente en circuitos integrados (IC), tenemos


los TTL 74LS83A y 74LS283, y el CMOS CD4008, todos ellos sumadores de 4 bits.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 31

Expansión de sumadores

Como se ha comentado antes, podemos construir sumadores de un mayor número de bits conec-
tando en serie sumadores de un menor número de bits previamente construidos; a esto se le denomina
expansión de sumadores. Hacer un sumador de ’n’ bits requiere ’n’ entradas de datos por cada valor a
sumar, más la entrada de acarreo C i n . Por ejemplo, para un sumador de 8 bits necesitamos 17 entradas
de datos, es decir, una tabla de verdad de 217 = 131072 combinaciones, lo cual es inmanejable. Sin
embargo, podemos hacer uso del diseño descendente (top-down), construyendo un sumador de ’n’ bits
a partir de sumadores de un menor número de bits.

Por ejemplo, la Figura 2.13 muestra una sumador de 8 bits construido a partir de dos sumadores
de 4 bits conectados en serie o cascada. Como podemos apreciar, la entrada C i n del sumador de menor
peso no se utiliza, por lo que la conectamos a masa, y su salida del acarreo C out se conecta a la
entrada de acarreo C i n del siguiente sumador de mayor peso; esto lo podríamos hacer tantas veces
como necesitemos para construir sumadores de un mayor número de bits.

Figura 2.13: Expansión de sumadores – Sumador de 8 bits a partir de dos sumadores de 4 bits.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 32

Semisubstractor (half-substractor)
A continuación vamos a estudiar unos circuitos similares a los sumadores estudiados en las seccio-
nes anteriores, pero que realizan la función contraria, la de restar dos bits o dos valores binarios de ’n’
bits. De igual modo que antes, comenzamos con un circuito semisubstractor que resta dos bits a y b , y
genera su resta o diferencia D y un acarreo C .

a b C D
a D
0 0 0 0 0 − 0 = 010 = 002
1/2 D
0 1 1 1 0 − 1 = 110 = 012 (negativo)
b C
1 0 0 1 1 − 0 = 110 = 012
1 1 0 0 1 − 1 = 010 = 002

Por tanto, las funciones lógicas de D y C (implementando por 1’s) son las siguientes, que pueden
implementarse conjuntamente tal como se muestra en la Figura 2.14:

D = (a · b) + (a · b) = (a ⊕ b)
C = (a · b)

Figura 2.14: Semisubstractor - Dos posibles implementaciones.

Substractor completo (full-substractor)


El substractor completo (full-substractor) es un circuito que, al igual que el semisubstractor, recibe
dos bits a y b como entrada, pero además recibe el acarreo de la etapa de resta anterior C i n , y como
salidas genera la resta de esos 3 bits D y el acarreo C out , tal como se muestra en el símbolo de bloque.
Al igual que antes, comenzamos escribiendo su tabla de verdad, pero para obtener las funciones, en
este caso vamos a simplificarlas mediante mapas de Karnaugh.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 33

a a b Ci n C out D
D
b 0 0 0 0 0 0 − 0 − 0 = 010 = 002
D
Cin Cout
0 0 1 1 1 0 − 0 − 1 = 110 = 012 (negativo)
0 1 0 1 1 0 − 1 − 0 = 110 = 012 (negativo)
0 1 1 1 0 0 − 1 − 1 = 210 = 102 (negativo)

1 0 0 0 1 1 − 0 − 0 = 110 = 012
1 0 1 0 0 1 − 0 − 1 = 010 = 002
1 1 0 0 0 1 − 1 − 0 = 010 = 002
1 1 1 1 1 1 − 1 − 1 = 110 = 012 (negativo)

D: C out :

bC i n bC i n
a
00 01 11 10 a
00 01 11 10

0 0 1 0 1 0 0 0 1 0

1 1 0 1 0 1 0 1 1 1

La función D no puede simplificarse mediante el mapa de Karnaugh, ya que todos los 1’s y 0’s
están aislados. De la misma forma que hicimos para la función S , podemos obtener la función lógica
como SoP desde la tabla de verdad e intentar simplificar algo utilizando las reglas del álgebra de Boole:
(propiedad distributiva):

D = (a · b · C i n ) + (a · b · C i n ) + (a · b · C i n ) + (a · b · C i n ) =
h i h i
= (a · b) + (a · b) · C i n + (a · b) + (a · b) · C i n =
h i
= a ⊕ b · C i n + [a ⊕ b] · C i n = (a ⊕ b) ⊕C i n

La función de C out sí que se puede simplificar, obteniendo lo siguiente como SoP:

C out = (a · b) + (a · C i n ) + (b · C i n ) = (a · b) + (a + b) · C i n

Con las funciones D y C out obtenidas, la implementación sería como la que se muestra en la
Figura 2.15. Al igual que ocurría con el sumador completo, si nos fijamos en el circuito, hay dos zonas
(señaladas en gris) que son, o se parecen mucho, a un semisubstractor. Con intención de reutilizar
elementos ya diseñados, vamos a intentar realizar las modificaciones necesarias para sustituir dichas
zonas por dos semisubstractores.

En las dos funciones D y C out que hemos obtenido hay unos términos que aparecen en color
naranja, que son los que podríamos obtener de las salidas D y C de un semisubstractor que reste
CAPÍTULO 2. SISTEMAS COMBINACIONALES 34

Figura 2.15: Substractor completo.

a y b : D = (a ⊕ b) y C = (a · b). La función D de este substractor completo podría ser la salida D


de un segundo semisubstractor que resta la salida D del primer semisubstractor y la entrada C i n (se
aplica una operación XOR a los dos bits a sumar). En cuanto a la función C out , como hemos dicho, el
primer término (a · b) podría ser la salida C del primer semisubstractor, que habría que sumar al resto
(a + b) · C i n . Por tanto, podemos insertar el primer semisubstractor en lugar de la zona indicada (en la
izquierda).

Para poder colocar el segundo semisubstractor (el de la derecha), el término (a + b) de la función


C out tendría que cambiarse por (a ⊕ b) (la salida de la puerta XOR del primer semisubstractor que resta
a y b ). Eso nos permitiría utilizar un segundo semisubstractor en lugar de tener que insertar la puerta
XOR para la función S , más las puertas OR y AND necesarias para implementar (a + b) · C i n . Aunque
el término (a + b) es distinto de (a ⊕ b), puede demostrarse que, en este caso concreto, sí que podría
hacerse esa sustitución, y las funciones del substractor completo quedarían como sigue:

S = (a ⊕ b) ⊕C i n
C out = (a · b) + (a ⊕ b) · C i n

En resumen, se trata de sumar la salida C de los dos semisubstractores: (a · b) es la salida C del


primer semisubstractor, y (a ⊕ b) · C i n la salida C del segundo semisubstractor. En otras palabras, si se
produce acarreo en alguno de los dos semisubstractores, también se producirá acarreo en el substractor
completo. De esta manera, el circuito de un substractor completo podría ser el de la Figura 2.16.

Demostración: Vamos a dar una breve explicación


de por qué podemos cambiar (a + b) por (a ⊕ b) fiján-
donos simplemente en la función C out final del subs- a b (a + b) (a ⊕ b)

tractor completo: 0 0 1 1 Coinciden


0 1 1 0 No coinciden
C out = (a · b) + (a ⊕ b) · C i n
1 0 0 0 Coinciden
1 1 1 1 Coinciden
CAPÍTULO 2. SISTEMAS COMBINACIONALES 35

Figura 2.16: Substractor completo (implementado con dos semisubstractores).

Al igual que ocurría con el sumador completo, aunque


estas operaciones son distintas, coinciden en 3 de las 4
combinaciones de entrada, todas excepto para el caso a = 0 y b = 1 (ver tabla de verdad). Sin embargo,
ese caso no afecta al resultado, ya que el término (a · b) siempre es 1, por lo que C out también será 1,
independiente del valor del segundo término. Para el resto de casos, el término (a · b) siempre es 0 y
podemos comprobar que es lo mismo utilizar (a + b) que (a ⊕ b).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 36

Substractor de ’n’ bits


Un substractor de ’n’ bits es un circuito A B
/n /n

que recibe como entrada dos valores binarios


de ’n’ bits A = an · · · a2 a1 y B = bn · · · b2 b1 , y A = an · · · a2 a1
genera como salida un valor binario también Cout Cin
D n bits B = bn · · · b2 b1
de ’n’ bits D = dn · · · d2 d1 y un acarreo C out ; 0v.
D = dn · · · d2 d1
como entrada también puede recibir un aca-
/n

rreo C i n que permite conectar en serie varios D


substractores de ’n’ bits para construir subs-
tractores de un mayor número de bits (expansión de substractor), que en caso de no utilizarse podrá
estar conectada a masa.

Una implementación de un substractor de ’n’ bits consiste en conectar ’n’ substractores completos
en serie, en donde cada substractor completo D i (etapa de substractor) genera la resta de dos bits
de mismo peso di = ai + bi con i ∈ [1..n], y el acarreo C i se va propagando a la siguiente etapa de
substractor D i +1 (Figura 2.17).

Figura 2.17: Substractor de ’n’ bits en serie.

Una forma alternativa de implementar un circuito substractor de ’n’ bits podría ser utilizando un
sumador de ’n’ bits, es decir, realizando una suma en vez de una resta de este modo:

a − b = a + (−b)

En el sistema decimal, la forma de representar un número negativo sería mediante el signo ’-’ (−b ).
En binario, se utilizan tres técnicas: (1) signo-magnitud, (2) complemento a la base menos 1 (C 1 ), y (3)
complemento a la base (C 2 ). La técnica de signo-magnitud no se utiliza en la práctica, por lo que nos
centramos en las técnicas de los complementos C 1 y C 2 . Ambas técnicas son muy similares (C 2 = C 1 +1)
y nos permiten realizar la resta utilizando los circuitos sumadores. En la Figura 2.18 podemos ver que
la forma de cambiar el signo a B es mediante el complemento a 1 C 1 (B ), es decir, invirtiendo los 0’s
P
a 1’s y viceversa, y luego sumamos 1 mediante el C i n del primer sumador completo 1, por lo que
estamos realizando la resta A − B como A +C 2 (B ).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 37

Figura 2.18: Substractor de ’n’ bits utilizando un sumador de ’n’ bits y la técnica del C 2 .

Es necesario procesar el resultado obtenido: en ambos casos, si hay acarreo final C n = 1, el resultado
es positivo (con C 1 se suma al resultado y con C 2 se desprecia; si no hay acarreo final C n = 0, el
resultado es negativo, y habrá que volver a obtener el complemento correspondiente del resultado (C 1
o C 2 ). En resumen, dependiendo de si utilizamos C 1 o C 2 procedemos según el diagrama de flujo que
se muestra en la Figura 2.19.

Figura 2.19: Diagramas de flujo para interpretar resultados mediante las técnicas C 1 (izq.) y C 2 (dcha.).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 38

Ejemplo 13. Sean dos valores A = 5 10) = 0101 2) y B = 3 10) = 0011 2) . Vamos a realizar las restas
A − B y B − A utilizando las técnicas del complemento a 1 C 1 y complemento a 2 C 2 .

A −B = 5−3 = 2
1 1 1

0 1 0 1 A 0 1 0 1 A
+ 1 1 0 0 C 1 (B ) + 1 1 0 1 C 2 (B )
1 0 0 0 1 1
 0 0 1 0 +2
+ 1
0 0 1 0 +2
B − A = 3 − 5 = −2
1 1 1

0 0 1 1 B 0 0 1 1 B
+ 1 0 1 0 C 1 (A) + 1 0 1 1 C 2 (A)
0 1 1 0 1 <0 0 1 1 1 0 <0

0 0 1 0 C 1 = −2 0 0 0 1 C1
0 0 1 0 C 2 = −2
CAPÍTULO 2. SISTEMAS COMBINACIONALES 39

Sumador-Substractor de ’n’ bits


Para terminar el apartado de sumadores, vamos a diseñar un circuito sumador-restador de dos va-
lores binarios A y B de ’n’ bits, que será muy similar a los circuitos anteriores. Se trata de añadir una
señal adicional S/R tal que cuando valga 0 el circuito actúe como sumador, y cuando valga 1 actúe
como substractor. Para ello, haremos lo siguiente:

Sumar (S/R = 0): el valor de B entrará tal cual, es decir, cada valor bi entrará a su correspondiente
P
sumador completo i sin complementar, y en el acarreo de entrada C i n del primer sumador
P
completo 1 entrará un 0 (como la Figura 2.17).

Restar (S/R = 1): el valor de B se deberá complementar, es decir, invertir cada valor bi , y en el
P
acarreo de entrada C i n del primer sumador completo 1 entrará un 1, indicando que utilizamos
C 2 (como la Figura 2.18).

De lo que se trata es de averiguar la función lógica f i de las


P S/R bi fi
entradas b de cada sumador completo i en función de la señal S/R
y del valor bi . La función lógica f i será la misma para todos los 0 0 0 b i tal cual
sumadores completos. Escribimos la tabla de verdad de la derecha, 0 1 1 b i tal cual
y obtenemos la función lógica f como: 1 0 1 b i = C 1 (b i )
1 1 0 b i = C 1 (b i )
f i = (S/R · b i ) + (S/R · b i ) = S/R ⊕ b i

El circuito final podría quedar como se muestra en la Figura 2.20.

Figura 2.20: Sumador-substractor de ’n’ bits utilizando la técnica del C 2 .


CAPÍTULO 2. SISTEMAS COMBINACIONALES 40

2.8. Codificadores y decodificadores


En esta sección vamos a estudiar los circuitos combinacionales denominados codificadores bina-
rios y los decodificadores binarios, que hacen la función contraria. Ambos permiten a las personas
interactuar con los circuitos digitales, mediante pulsadores, teclados, LEDs, displays 7 segmentos, etc.

Codificadores
Los codificadores (encoders) generan un E3 E2 E1 E0
valor binario de varios bits (tantos como sa-
lidas tenga) a partir de las entradas que estén m entradas
activadas (normalmente solo una). En gene- n salidas
AN Y
ral, tienen m entradas y n salidas, debiéndo- Codificador 4 a 2 m ≤ 2n
n
se cumplir que m ≤ 2 , es decir, para poder
codificar m entradas necesitamos al menos
n salidas. Las entradas son independientes
(MSB) S1 S0 (LSB)
unas de otras, pero las salidas forman un nú-
mero binario, debiendo estar ordenadas, por lo que tendremos un bit MSB en un extremo y otro bit
LSB en el otro. En el símbolo de bloque de la derecha podemos ver un codificador de 4 a 2, es decir,
de m = 4 entradas E 3 ..E 0 y n = 2 salidas S 1 ..S 0 , cumpliéndose la desigualdad 4 ≤ 22 .

Los codificadores pueden ser ’sin prioridad’ o ’con prioridad’. En los codificadores ’sin prioridad’
sólo una de las entradas podrá estar activa en un instante dado, que será la que se va a codificar; en
el caso de que dos o más entradas se activasen al mismo tiempo, por ejemplo, E 1 y E 2 , el resultado
sería su suma lógica (como se verá después), es decir, como si se hubiese activado la entrada E 3 . En los
codificadores ’con prioridad’ se establece algún criterio para el caso de que haya más de una entrada
activa simultáneamente, por ejemplo, considerando sólo el de mayor valor; en el ejemplo anterior, sería
considerar que se ha pulsado la entrada E 2 .

Codificador de 4 a 2 sin prioridad

Vamos a comenzar estudiando el codificador de 4 a 2 sin prioridad. Para ello, escribimos una tabla
de verdad con 4 entradas E 3 ..E 0 y 2 salidas S 1 ..S 0 , siendo S 1 el bit más significativo (MSB) del valor
binario que forman, y S 0 el bit menos significativo (LSB), teniendo en cuenta lo siguiente:

Al activar E 0 (E 3 ..E 0 = 0001) se codifica el valor 00 2) = 0 10) en las salidas S 1 S 0 = 00.

Al activar E 1 (E 3 ..E 0 = 0010) se codifica el valor 01 2) = 1 10) en las salidas S 1 S 0 = 01.

Al activar E 2 (E 3 ..E 0 = 0100) se codifica el valor 10 2) = 2 10) en las salidas S 1 S 0 = 10.

Al activar E 3 (E 3 ..E 0 = 1000) se codifica el valor 11 2) = 3 10) en las salidas S 1 S 0 = 11.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 41

En el caso de no activar ninguna entrada (E 3 ..E 0 = 0000), podemos poner S 1 S 0 = 00, o también,
indiferencias S 1 S 0 = X X . En cualquier caso, para distinguir cuándo se ha activado alguna de las en-
tradas es necesario añadir una salida adicional AN Y , que se activará en todos los casos salvo cuando
todas las entradas están desactivadas (E 3 ..E 0 = 0000). Como se trata de un codificador ’sin prioridad’,
en aquellas combinaciones en las que tengamos activas más de una entrada utilizaremos indiferencias
’X’, ya que se supone que no pueden ocurrir.

MSB LSB
E3 E2 E1 E0 S1 S0 ANY

0 0 0 0 0 0 0
0 0 0 1 0 0 1 E0
0 0 1 0 0 1 1 E1
0 0 1 1 X X 1 No puede darse

0 1 0 0 1 0 1 E2
0 1 0 1 X X 1 No puede darse
0 1 1 0 X X 1 No puede darse
0 1 1 1 X X 1 No puede darse

1 0 0 0 1 1 1 E3
1 0 0 1 X X 1 No puede darse
1 0 1 0 X X 1 No puede darse
1 0 1 1 X X 1 No puede darse

1 1 0 0 X X 1 No puede darse
1 1 0 1 X X 1 No puede darse
1 1 1 0 X X 1 No puede darse
1 1 1 1 X X 1 No puede darse

S1 = E2 + E3 S0 = E1 + E3 AN Y = E 3 + E 2 + E 1 + E 0

E1E0 E1E0 E1E0


00 01 11 10 00 01 11 10 00 01 11 10
E3E2 E3E2 E3E2
00 0 0 X 0 00 0 0 X 1 00 0 1 1 1

01 1 X X X 01 0 X X X 01 1 1 1 1

11 X X X X 11 X X X X 11 1 1 1 1

10 1 X X X 10 1 X X X 10 1 1 1 1

Figura 2.21: Codificador de 4 a 2 – Simplificación con mapas de Karnaugh de las funciones.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 42

A continuación, vamos a simplificar las funciones de las 3 salidas S 1 , S 0 y AN Y mediante mapas


de Karnaugh (Figura 2.21), partiendo de la tabla de verdad anterior (de 4 variables). Se obtienen las
mismas funciones como SoP (agrupando 1’s) que como PoS (agrupando 0’s). Como es de suponer, para
codificadores con mayor número de entradas (por ejemplo, un codificador de 8 a 3), no sería factible
realizarlo así. Lo que se hace es escribir la tabla de verdad anterior de forma más compacta eliminando
las combinaciones que no se pueden presentar (indiferencias); para el caso del codificador de 4 a 2 que
estamos estudiando, nos quedaría como se muestra. A partir de esa tabla también se podrían sacar las
funciones de salida, que hacemos también puesto que, como se ha dicho, para codificadores mayores
no podríamos escribir su tabla de verdad ni simplificar por Karnaugh, y el procedimiento sería hacerlo
de este modo.

MSB LSB
E3 E2 E1 E0 S1 S0 ANY

0 0 0 0 0 0 0 S1 = E2 + E3
0 0 0 1 0 0 1 E0
0 0 1 0 0 1 1 E1 S0 = E1 + E3
0 1 0 0 1 0 1 E2
AN Y = E 0 + E 1 + E 2 + E 3
1 0 0 0 1 1 1 E3

Figura 2.22: Codificador de 4 a 2 sin prioridad – Circuito

En la Figura 2.22 se muestra el circuito del codificador de 4 a 2 sin prioridad. Se puede observar
que E 0 no forma parte de las funciones S1 y S0 obtenidas, por lo que sería equivalente activar E 0 que no
activar ninguna entrada. Hemos colocado S 1 S 0 = 00 para el caso E 3 ..E 0 = 0000, pero lo mismo hubiera
ocurrido si hubiéramos considerado indiferencias S 1 S 0 = X X en ese caso. Se puede observar también
lo que se ha comentado anteriormente de que si se activan dos entradas simultáneamente, el resultado
sería su suma lógica; por ejemplo, si se activan E 2 y E 1, es decir, E 3 ..E 0 = 0110, las salidas tomarían el
valor S 1 S 0 = 11. Este problema se soluciona utilizando codificadores ’con prioridad’, que estudiamos
a continuación.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 43

Codificador de 4 a 2 con prioridad

Vamos a estudiar el codificador de 4 a 2 con prioridad, en el que el criterio que se sigue en caso
de activarse más de una entrada es considerar únicamente la de mayor valor. Al igual que para el caso
anterior, escribimos su tabla de verdad normal, así como la compacta.

MSB LSB
E3 E2 E1 E0 S1 S0 ANY

0 0 0 0 0 0 0
0 0 0 1 0 0 1 E0
0 0 1 0 0 1 1 E1
0 0 1 1 0 1 1 Se considera E 1

0 1 0 0 1 0 1 E2
0 1 0 1 1 0 1 Se considera E 2
0 1 1 0 1 0 1 Se considera E 2
0 1 1 1 1 0 1 Se considera E 2

1 0 0 0 1 1 1 E3
1 0 0 1 1 1 1 Se considera E 3
1 0 1 0 1 1 1 Se considera E 3
1 0 1 1 1 1 1 Se considera E 3

1 1 0 0 1 1 1 Se considera E 3
1 1 0 1 1 1 1 Se considera E 3
1 1 1 0 1 1 1 Se considera E 3
1 1 1 1 1 1 1 Se considera E 3

S1 = E2 + E3 S 0 = (E 2 · E 1 ) + E 3 AN Y = E 3 + E 2 + E 1 + E 0

E1E0 E1E0 E1E0


00 01 11 10 00 01 11 10 00 01 11 10
E3E2 E3E2 E3E2
00 0 0 0 0 00 0 0 1 1 00 0 1 1 1

01 1 1 1 1 01 0 0 0 0 01 1 1 1 1

11 1 1 1 1 11 1 1 1 1 11 1 1 1 1

10 1 1 1 1 10 1 1 1 1 10 1 1 1 1

Figura 2.23: Codificador de 4 a 2 – Simplificación con mapas de Karnaugh de las funciones.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 44

MSB LSB
La tabla de verdad en forma compacta es
E3 E2 E1 E0 S1 S0 ANY
la que se muestra a la izquierda, donde las
0 0 0 0 0 0 0 ’X’ que aparecen en la parte de las entra-
0 0 0 1 0 0 1 E0 das significan ’cualquier cosa’; por ejem-
0 0 1 X 0 1 1 E1 plo, que se se active E 3 , no afecta si el resto
0 1 X X 1 0 1 E2 de entradas están activadas o no, ya que se
1 X X X 1 1 1 E3 considerará como si solo E 3 está activa.

En la Figura 2.23 podemos ver las funciones simplificadas de las 3 salidas S 1 , S 0 y AN Y mediante
mapas de Karnaugh, aunque para la función AN Y no sería necesario ya que es similar a la del codifi-
cador 4 a 2 sin prioridad. También podemos obtener las funciones desde la tabla compacta, lo cual será
necesario para codificadores mayores. Simplificando mediante el álgebra de Boole podemos comprobar
que obtenemos lo mismo que simplificando por Karnaugh:

S 1 = (E 3 · E 2 ) + E 3 = E 2 + E 3 (Ley del consenso: a + (a · b) = (a + b))

S 0 = (E 3 · E 2 · E 1 ) + E 3 = (E 2 · E 1 ) + E 3

Para terminar, en la Figura 2.24 se muestra el circuito del codificador de 4 a 2 con prioridad.

Figura 2.24: Codificador de 4 a 2 con prioridad – Circuito


CAPÍTULO 2. SISTEMAS COMBINACIONALES 45

Codificador de 8 a 3 con prioridad

Como ampliación del codificador 4 a 2 anterior, vamos E7 E6 E5 E4 E3 E2 E1 E0


a estudiar el codificador de 8 a 3 con prioridad, que tiene 8
entradas E 7 ..E 0 y 3 salidas S 2 ..S 0 . En este caso, escribir su
tabla de verdad sería costoso porque tendríamos 28 = 256
AN Y
combinaciones; en su lugar escribimos únicamente su ta- Codificador 8 a 3
bla de verdad compacta. Por el mismo motivo tampoco
podemos simplificar por Karnaugh, por lo que obtenemos
las funciones de salida directamente desde la tabla com-
(MSB) S2 S1 S0 (LSB)
pacta.

MSB LSB
E7 E6 E5 E4 E3 E2 E1 E0 S2 S1 S0 ANY

0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 1 E0
0 0 0 0 0 0 1 X 0 0 1 1 E1
0 0 0 0 0 1 X X 0 1 0 1 E2
0 0 0 0 1 X X X 0 1 1 1 E3
0 0 0 1 X X X X 1 0 0 1 E4
0 0 1 X X X X X 1 0 1 1 E5
0 1 X X X X X X 1 1 0 1 E6
1 X X X X X X X 1 1 1 1 E7

Como tampoco podemos simplificar por Karnaugh, obtenemos las funciones de salida directamente
desde la tabla compacta en forma de SoP. En todos los casos tenemos 4 términos producto (minitér-
minos), más o menos largos, que simplificamos aplicando la Ley del consenso del álgebra de Boole:
a + (a · b) = (a + b).

S 2 = (E 7 · E 6 · E 5 · E 4 ) + (E 7 · E 6 · E 5 ) + (E 7 · E 6 ) + (E 7 ) =
h i h i
= E 7 · (E 6 · E 5 · E 4 ) + (E 6 · E 5 ) + (E 6 ) + (E 7 ) = (E 6 · E 5 · E 4 ) + (E 6 · E 5 ) + (E 6 ) + (E 7 ) =
h i h i
= E 6 · (E 5 · E 4 ) + (E 5 ) + (E 6 ) + (E 7 ) = (E 5 ·E 4 ) + (E 5 ) + (E 6 ) + (E 7 ) =

= E4 + E5 + E6 + E7
CAPÍTULO 2. SISTEMAS COMBINACIONALES 46

S 1 = (E 7 · E 6 · E 5 · E 4 · E 3 · E 2 ) + (E 7 · E 6 · E 5 · E 4 · E 3 ) + (E 7 · E 6 ) + (E 7 ) =
h i
= E 7 · (E 6 · E 5 · E 4 · E 3 · E 2 ) + (E 6 · E 5 · E 4 · E 3 ) + (E 6 ) + (E 7 ) =
h i
= E 6 · (E 5 · E 4 · E 3 · E 2 ) + (E 5 · E 4 · E 3 ) + (E 6 ) + (E 7 ) =
h h ii
= (E 5 · E 4 ) · (E 3 ·E 2 ) + (E 3 ) + (E 6 ) + (E 7 ) =
h i
= (E 5 · E 4 ) · (E 2 + E 3 ) + E 6 + E 7

S 0 = (E 7 · E 6 · E 5 · E 4 · E 3 · E 2 · E 1 ) + (E 7 · E 6 · E 5 · E 4 · E 3 ) + (E 7 · E 6 · E 5 ) + (E 7 ) =
h i
= E 7 · (E 6 · E 5 · E 4 · E 3 · E 2 · E 1 ) + (E 6 · E 5 · E 4 · E 3 ) + (E 6 · E 5 ) + (E 7 ) =
h i
= E 6 · (E 5 · E 4 · E 3 · E 2 · E 1 ) + (E 5 · E 4 · E 3 ) + (E 5 ) + (E 7 ) =
h h i i
= E 6 · E 5 · (E 4 · E 3 · E 2 · E 1 ) + (E 4 · E 3 ) + E 5 + E 7 =
h i
= E 6 · (E 4 · E 3 · E 2 · E 1 ) + (E 4 · E 3 ) + E 5 + E 7 =
h h i i
= E 6 · E 4 · (E 3 ·E 2 · E 1 ) + (E 3 ) + E 5 + E 7 =
h h i i
= E 6 · E 4 · (E 2 · E 1 ) + (E 3 ) + E 5 + E 7 =
h i
= E 6 · (E 4 · E 2 · E 1 ) + (E 4 · E 3 ) + E 5 + E 7

El circuito resultante lo podemos ver en la


Figura 2.25, que comercialmente se puede en-
contrar en el circuito integrado 74148, aunque
implementado con otro tipo de puertas lógicas y
con una señal de habilitación (enable).

Figura 2.25: Codificador de 8 a 3 con prioridad –


Circuito
CAPÍTULO 2. SISTEMAS COMBINACIONALES 47

Codificador de 16 a 4 sin prioridad

Vamos a implementar un codificador de 16 a 4 sin E15 .. E5 E4 E3 E2 E1 E0


prioridad, que es más sencillo que con prioridad, como
hemos podido observar con el codificador de 8 a 3. Tiene
16 entradas E 15 ..E 0 y 4 salidas S 3 ..S 0 . Al igual que antes, AN Y
no podemos escribir su tabla de verdad ya que tendríamos Codificador 16 a 4
216 = 65536 combinaciones; en su lugar escribimos úni-
camente su tabla de verdad compacta, y obtendremos las
funciones lógicas de las salidas desde ella. (MSB) S3 S2 S1 S0 (LSB)

MSB LSB
E 15 E 14 E 13 E 12 E 11 E 10 E9 E8 E7 E6 E5 E4 E3 E2 E1 E0 S3 S2 S1 S0 ANY

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 E0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 E1
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 E2
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 E3
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 E4
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 E5
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 1 E6
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 E7
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 E8
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 E9
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 E 10
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 E 11
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 E 12
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 E 13
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 E 14
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 E 15

Las funciones lógicas implementando por 1’s (SoP) son las siguientes; notar que E 0 no participa en
las funciones, ya que se trata de un codificador sin prioridad.

S 3 = E 8 + E 9 + E 10 + E 11 + E 12 + E 13 + E 14 + E 15

S 2 = E 4 + E 5 + E 6 + E 7 + E 12 + E 13 + E 14 + E 15

S 1 = E 2 + E 3 + E 6 + E 7 + E 10 + E 11 + E 14 + E 15

S 0 = E 1 + E 3 + E 5 + E 7 + E 9 + E 11 + E 13 + E 15

Diseñar un codificador 16 a 4 sin prioridad es relativamente sencillo, pero con prioridad se complica
bastante. De hecho, no existe comercialmente ningún circuito integrado que implemente un codificador
de 16 a 4.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 48

Expansión de codificadores

Con los ejemplos anteriores se ha podido volver a comprobar que la complejidad a la hora de dise-
ñar un circuito combinacional va en aumento conforme se requiere hacer circuitos mayores. Podemos
construir un codificador de un mayor número de entradas a partir de otros más sencillos (expansión de
codificadores). Por ejemplo, podemos disponer de un codificador de 16 a 4 conectando dos codificado-
res 8 a 3 mediante mediante 4 puertas NAND (74x00) o 4 puertas AND (74x08); para más detalles se
puede consultar el datasheet del IC 74148, de donde se ha obtenido el esquema de la Figura 2.26.

Figura 2.26: Codificador 16 a 4 con prioridad a partir de dos codificadores 8 a 3.

En la figura vemos que se utiliza puertas NOR en las que se niegan también las entradas, en lugar
de puertas AND. Ambas puertas son equivalentes, tal como se puede averiguar si escribimos la tabla
de verdad de ambas opciones, pero resulta conveniente utilizar puertas universales (NAND y NOR):
CAPÍTULO 2. SISTEMAS COMBINACIONALES 49

Aplicaciones

Los codificadores pueden tener diversas aplicaciones:

Conversores a binario: para traducir valores decimales a binario y poder realizar alguna operación
aritmética.

Codificadores de teclados: para reducir el número de cables, transmitiendo los códigos de tecla
pulsados.

Codificadores posicionales: con un codificador de 8 a 3 se puede transformar una dirección an-


gular desde una brújula a un código de 3 bits: 0-Norte, 1-Noreste, 2-Este, 3-Sureste, 4-Sur, 5-
Suroeste, 6-Oeste, 7-Noroeste.

Detección de interrupciones, o Interrupt Requests (IRQ): un microprocesador (CPU) puede ser


interrumpido por algún dispositivo (teclado, ratón, impresora, unidad de disco, etc.) para ser
atendido por él, en lugar de que el microprocesador esté continuamente (cada cierto tiempo)
comprobando o sondeando si cada uno de ellos necesita ser atendido (polling). Cada dispositi-
vo (puerto o interface) tiene asignada una prioridad: reloj (IRQ0), teclado (IRQ1), puertos serie
(IRQ3 e IRQ4), disco duro (IRQ5), disquette (IRQ6), puerto paralelo (IRQ7), etc. Una vez aten-
dida la interrupción, el procesador vuelve a la actividad que estuviera realizando en el momento
de la interrupción. Esto podría implementarse con codificadores 8 a 3 (74148), aunque existen
IC específicos para esta tarea, como el 8259A (Programmable Interrupt Controller).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 50

Decodificadores
Los decodificadores (decoders) son otro (MSB) E1 E0 (LSB)
tipo de circuito combinacional que realizan
la función contraria de los codificadores: re- n entradas
ciben un valor binario de varios bits y activan m salidas
H
una de sus salidas (aunque pueden también Decodificador 2 a 4 m ≤ 2n
activar varias). En general, tienen n entradas
y m salidas, debiéndose cumplir la misma re-
lación que para los codificadores, m ≤ 2n , es
decir, para poder decodificar n entradas ne- S3 S2 S1 S0
cesitamos al menos m salidas. En este caso,
las entradas forman un número binario, y tendremos un bit MSB en un extremo y otro bit LSB en el
otro, mientras que las salidas son independientes unas de las otras. Además, los decodificadores suelen
tener una señal de habilitación o enable H , tal que cuando está activa H = 1 es cuando funciona, y
cuando no está activa H = 0 el decodificador no funciona (se dice que está activa a nivel alto). Sin
embargo, esta señal también puede estar activa a nivel bajo, escribiéndose H , de tal manera que cuando
H = 0 funciona el decodificador y cuando H = 1 no. En el símbolo de bloque de la derecha podemos
ver un decodificador de 2 a 4, es decir, de n = 2 entradas E 1 ..E 0 y m = 4 salidas S 3 ..S 0 , cumpliéndose
la desigualdad 4 ≤ 22 .

Decodificador de 1 a 2

Aunque prácticamente no se va a utilizar, comenzamos estudiando el decodificador de 1 a 2 por ser


el más sencillo. Como entradas tenemos la señal de habilitación H , y un valor binario (1-bit) E 0 ; como
salidas tenemos las dos S 1 ..S 0 .
E0

H E0 S1 S0

H
0 0 0 0 Deshabilitado
Decodificador 1 a 2 S1 = H · E0
0 1 0 0 Deshabilitado
1 0 0 1 Habilitado S0 = H · E0
1 1 1 0 Habilitado
S1 S0
En general, lo que hace un decodificador es activar úni-
camente la salida correspondiente al valor binario que recibe;
en este caso en particular, si la entrada E 0 = 0 activará la sali-
da S 0 , y si E 0 = 1 activará la salida S 1 . Esto será así siempre y
cuando la señal de habilitación H esté activa; suponiendo que
trabaja a nivel alto, lo anterior será cuando H = 1, y cuando
Figura 2.27: Decod. 1 a 2 – Circuito
no esté activa H = 0, todas las salidas estarán a 0.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 51

Decodificador de 2 a 4

Vamos a obtener su circuito de un decodificador de 2 a 4. Para ello, procedemos como antes,


escribiendo una tabla de verdad y obteniendo las funciones lógicas desde ella, para finalmente dibujar el
circuito esquemático correspondiente. Como entradas tenemos la señal de habilitación H (suponemos
que trabaja a nivel alto), y las dos entradas E 1 ..E 0 ; como salidas tenemos las cuatro S 3 ..S 0 .

MSB LSB
H E1 E0 S3 S2 S1 S0

1 0 0 0 0 0 1 Habilitado S3 = H · E1 · E0

1 0 1 0 0 1 0 Habilitado S2 = H · E1 · E0
1 1 0 0 1 0 0 Habilitado
1 1 1 1 0 0 0 Habilitado S1 = H · E1 · E0

0 X X 0 0 0 0 Deshabilitado S0 = H · E1 · E0

Desde la tabla de verdad podemos obtener las 4 funciones lógicas para S3..S0, siendo cada una
de ellas simplemente un término producto (minitérmino) correspondiente al único 1 que aparece en su
columna. Para simplificar la tabla de verdad, a partir de ahora no pondremos las condiciones para las
que la señal de habilitación está desactivada H = 0, salvo una genérica; se supone que para todas esas
combinaciones todas las salidas S3..S0 valen 0. Vemos que un decodificador genera todos los posibles
minitérminos para las variables de entrada (junto con la señal de habilitación H ), por lo que podría
utilizarse como generadores de funciones, como se detallará en la sección 2.8.

Figura 2.28: Decodificador de 2 a 4 – Circuito

El circuito resultante lo podemos ver en la Figura 2.28, que comercialmente se puede encontrar en
el circuito integrado 74139 (dual); en este IC la señal de habilitación funciona a nivel bajo H .
CAPÍTULO 2. SISTEMAS COMBINACIONALES 52

Decodificador de 3 a 8

Como ampliación del ejemplo anterior, vamos a estudiar ahora el decodificador de 3 a 8. Se podrá
observar que es muy similar, obteniendo también todos los posibles minitérminos, en este caso 8.

(MSB) E2 E1 E0 (LSB)

H
Decodificador 3 a 8

S7 S6 S5 S4 S3 S2 S1 S0

Figura 2.29: Decodificador de 3 a 8 – Circuito

MSB LSB
H E2 E1 E0 S7 S6 S5 S4 S3 S2 S1 S0

1 0 0 0 0 0 0 0 0 0 0 1 Habilitado
1 0 0 1 0 0 0 0 0 0 1 0 Habilitado
1 0 1 0 0 0 0 0 0 1 0 0 Habilitado
1 0 1 1 0 0 0 0 1 0 0 0 Habilitado
1 1 0 0 0 0 0 1 0 0 0 0 Habilitado
1 1 0 1 0 0 1 0 0 0 0 0 Habilitado
1 1 1 0 0 1 0 0 0 0 0 0 Habilitado
1 1 1 1 1 0 0 0 0 0 0 0 Habilitado

0 X X X 0 0 0 0 0 0 0 0 Deshabilitado

A partir de la tabla de verdad podemos obtener las 8 funciones lógicas para S7..S0, siendo cada
una de ellas simplemente un término producto (minitérmino) correspondiente al único 1 que aparece
en su columna. En el circuito tenemos una puerta AND para cada uno de ellos, que incluye una entrada
adicional para la señal de habilitación H ; cuando esta señal es H = 0, ninguna de las puertas AND
podrá activarse, por lo que todas las salidas estarán desactivas S7..S0 = 0, independientemente del valor
de las entradas E 1 ..E 0 .
CAPÍTULO 2. SISTEMAS COMBINACIONALES 53

S7 = H · E2 · E1 · E0

S6 = H · E2 · E1 · E0

S5 = H · E2 · E1 · E0

S4 = H · E2 · E1 · E0

S3 = H · E2 · E1 · E0

S2 = H · E2 · E1 · E0

S1 = H · E2 · E1 · E0

S0 = H · E2 · E1 · E0

Comercialmente, un decodificador de 3 a 8 se puede encontrar en los circuitos integrados 74138


(salidas a nivel bajo) y 74238 (salidas a nivel alto).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 54

Decodificador de BCD (4) a Decimal (10)

En esta sección vamos a construir un decodificador de BCD (4 bits) a decimal (10 líneas de salida),
es decir, tendremos como entradas la señal de habilitación H y el código BCD en E 3 ..E 0 , y 10 salidas
S 9 ..S 0 . Construimos la tabla de verdad, y desde ella podemos obtener fácilmente las 10 funciones, y
cada función S i tendrá solo un término producto (minitérmino) de las 5 variables de entrada.

(MSB) E3 E2 E1 E0 (LSB)

H
Decodificador BCD a Dec

S9 S8 S7 S6 S5 S4 S3 S2 S1 S0

Figura 2.30: Decodificador de 4 a 10 – Circuito.

MSB LSB
H E3 E2 E1 E0 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0

1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 Habilitado
1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 Habilitado
1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 Habilitado
1 0 0 1 1 0 0 0 0 0 0 1 0 0 0 Habilitado
1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 Habilitado
1 0 1 0 1 0 0 0 0 1 0 0 0 0 0 Habilitado
1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 Habilitado
1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 Habilitado
1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 Habilitado
1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 Habilitado
1 1 0 1 0 X X X X X X X X X X Indiferencia
1 1 0 1 1 X X X X X X X X X X Indiferencia
1 1 1 0 0 X X X X X X X X X X Indiferencia
1 1 1 0 1 X X X X X X X X X X Indiferencia
1 1 1 1 0 X X X X X X X X X X Indiferencia
1 1 1 1 1 X X X X X X X X X X Indiferencia

0 X X X X 0 0 0 0 0 0 0 0 0 0 Deshabilitado
CAPÍTULO 2. SISTEMAS COMBINACIONALES 55

S9 = H · E3 · E2 · E1 · E0

S8 = H · E3 · E2 · E1 · E0

S7 = H · E3 · E2 · E1 · E0

S6 = H · E3 · E2 · E1 · E0

S5 = H · E3 · E2 · E1 · E0

S4 = H · E3 · E2 · E1 · E0

S3 = H · E3 · E2 · E1 · E0

S2 = H · E3 · E2 · E1 · E0

S1 = H · E3 · E2 · E1 · E0

S0 = H · E3 · E2 · E1 · E0

También podríamos simplificar ligeramente las funciones mediante mapas de Karnaugh, gracias a
la existencia de indiferencias para las combinaciones de entrada no válidas en BCD (10..15); no era
el caso del decodificador 3 a 8 anterior. Se podría hacer considerando sólo las 4 variables E 3 ..E 0 y el
resultado multiplicarlo por la entrada H . No obstante, comentar que si se produjese alguna de dichas
combinaciones en las entradas, con las funciones anteriores sin simplificar no se activaría ninguna
salida (hemos considerado las indiferencias como 0’s), pero en las funciones simplificadas utilizando
las indiferencias, el resultado podría ser diferente para esas combinaciones.

Existen comercialmente diversos IC para un decodificador BCD a decimal, en los que no se han
simplificado las funciones, y se han implementado con puertas universales (NAND o NOR). En tecno-
logía TTL tenemos el 7442 (salidas a nivel bajo), y en CMOS el 4028 y 74x42 (salidas a nivel alto).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 56

Expansión de decodificadores

Igual que hemos hecho con otros circuitos combinacionales, los decodificadores también pueden
agruparse para construir otros con mayor número de entradas y salidas. En este apartado vamos a
utilizar decodificadores 1 a 2 y 2 a 4, que ya estudiamos anteriormente, para construir un decodificador
3 a 8 o 4 a 16.

Los símbolos de bloque y tablas de verdad de los decodificadores 1 a 2 y 2 a 4 eran los siguientes:
E0
H E0 S1 S0

1 0 0 1 Habilitado
H
Decodificador 1 a 2 1 1 1 0 Habilitado

0 X 0 0 Deshabilitado

S1 S0
MSB LSB
(MSB) E1 E0 (LSB)
H E1 E0 S3 S2 S1 S0

1 0 0 0 0 0 1 Habilitado
H 1 0 1 0 0 1 0 Habilitado
Decodificador 2 a 4
1 1 0 0 1 0 0 Habilitado
1 1 1 1 0 0 0 Habilitado
S3 S2 S1 S0 0 X X 0 0 0 0 Deshabilitado

La técnica para realizar la agrupación de decodificadores es la siguiente:

Colocamos en un primer nivel uno de los decodificadores que estemos utilizando como bloques
de construcción (1 a 2, 2 a 4, etc.). Este tendrá como entradas las entradas E i , comenzando desde
las entradas de mayor peso (MSB) hasta las de menor peso (LSB) y considerando tantas como
sean necesarias.

Las salidas del decodificador de primer nivel irá a la entrada de habilitación H de otro decodifi-
cador de segundo nivel; por tanto, pondremos tantos decodificadores en el segundo nivel como
salidas tenga el decodificador del primer nivel. Todos ellos tendrán como entradas las siguientes
de las E i aun no consideradas (siempre de mayor a menor peso), las mismas en todos.

Así sucesivamente hasta que se hayan considerado todas las entradas E i del decodificador que
estamos construyendo, cuyas salidas serán todas las salidas de los decodificadores del último
nivel. El número de niveles podrá variar según los decodificadores utilizados como bloques de
construcción.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 57

Ejemplo 14. Vamos a construir un decodificador de 3 a 8 utilizando decodificadores 1 a 2 y 2 a 4.


En la Figura 2.31 se puede ver que hemos partido de un decodificador 1 a 2 para el primer nivel, y luego
hemos necesitado 2 decodificadores de 2 a 4 para el segundo nivel; también se podría haber hecho al
contrario. En el esquema puede verse que este circuito funciona en su conjunto como un decodificador
de 3 a 8. Por ejemplo, si las entradas son E 2 E 1 E 0 = 010, la salida que se activa es S 2 , suponiendo que la
entrada de habilitación esté activa H = 1; podría probarse con cualquiera de los otros casos.

Figura 2.31: Decodificador de 3 a 8 a partir de decodificadores 1 a 2 y 2 a 4.

Se deja al lector la implementación de los siguientes decodificadores utilizando esta técnica:

1. Decodificador de 3 a 8 utilizando decodificadores 2 a 4 y 1 a 2 (diferente del ejemplo anterior).

2. Decodificador de 3 a 8 utilizando decodificadores 1 a 2 únicamente.

3. Decodificador de 4 a 16 utilizando decodificadores 2 a 4 únicamente.

4. Decodificador de 4 a 16 utilizando decodificadores 1 a 2 y 3 a 8.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 58

Controlador de teclado 4 × 4

Como sabemos, los codificadores permiten obtener el código de la entrada que


se ha activado, codificando en binario el número de entrada activada. Por eso, uno
de los usos de los decodificadores sería obtener el código del pulsador (microswitch)
o tecla de un teclado que se ha pulsado.

Sin embargo, cuando tenemos un cierto número de teclas se nos pre-


sentan ciertos inconvenientes. Por ejemplo, si queremos averiguar la tecla
que se ha pulsado de un teclado numérico 4 × 4, una primera solución
sería utilizar un codificador de 16 entradas E 15 ..E 0 y 4 salidas S 3 ..S 0 . De
esta manera, al pulsar una tecla se activaría una entrada, y el decodifica-
dor nos proporcionaría el código binario correspondiente (0 a 15). Como
se vio anteriormente, aunque no existe comercialmente un codificador de
16 a 4, podríamos utilizar expansión de codificadores para construirlo (sección 2.8). No obstante, para
teclados mayores, como por ejemplo, el de un PC que tiene 102 teclas (o más), sería muy complicado
disponer de un codificador de tal tamaño. Además, para el teclado anterior de 16 teclas sería necesario
16 conductores entre el teclado y el codificador, o 102 para el teclado de un PC, lo cual sería inviable.

Para solucionar este problema se utilizan unos controladores específicos para gestionar el teclado
de forma matricial, como por ejemplo el IC MM74C922 para un teclado numérico de 4 × 4 teclas.
A continuación vamos a estudiar este controlador de teclado numérico, cuyo símbolo de bloque se
muestra en la Figura 2.32. La idea básica es la de averiguar la fila Y (1..4) y columna X (1..4) de la
tecla que se está pulsando, codificando ambos valores en binario con 2 bits cada uno (00..11), que
juntos formarían el código de 4 bits de la tecla pulsada.

Figura 2.32: Símbolo de bloque del IC MM74C922.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 59

Este IC se conecta al teclado matricial por las patillas ROW Y 1..Y 4 y COLU M N X 1..X 4, por
donde se recibe el estado de las 4 filas y 4 columnas, respectivamente. La salida (código de la tecla
pulsada) se puede consultar por las patillas ’D AT A OU T A..D ’ cuando la señal D AT A AV AI L AB LE
indica que hay una tecla pulsada. En ese momento es cuando se puede activar (a nivel bajo) la señal
OU T PU T E N AB LE = 0, la cual activa la señal de habilitación de los 4 buffers tri-estado correspon-
dientes a los 4 biestables que almacenan el código de la tecla pulsada (4 bits). Otra patilla importante es
la OSC I LL AT OR , que es por donde entra la señal de reloj del sistema. Por último, estarían las patillas
V cc (tensión) y G N D (masa) que tienen todos los IC para su funcionamiento.

El diagrama esquemático se muestra en la Figura 2.33 (obtenido de su hoja de características o


datasheet). Consta de ciertos elementos que ya hemos estudiado (decodificador 2 a 4, codificador 4 a 2,
etc.), así como otros nuevos que aun no se han explicado pero que describimos brevemente en la Tabla
2.10 (reloj, buffers tri-estado, contador de 2 bits, biestables D, etc.); en el próximo tema se estudiarán
con más detalle. Conociendo al menos la funcionalidad de todos los elementos del circuito, vamos a
explicar con un ejemplo concreto lo que sucede al pulsar una tecla y cómo se genera su código.

Símbolo Descripción

Generador de reloj del sistema (oscilador). Elemento externo a este IC que genera
una señal periódica 0-1-0-1-. . .

Contador de 2 bits. Circuito secuencial que cuenta de forma cíclica valores binarios
de 2-bits: 00-01-10-11-00-. . . Cada vez que recibe un pulso de reloj avanza la cuenta,
siempre y cuando no se haya inhibido.

Elemento que inhibe el contador en caso de tener pulsada una tecla, para evitar rebo-
tes o ’desconexiones’ de la tecla que se mantiene pulsada.

Biestable D. Es un elemento que se utiliza en los circuitos secuenciales para almace-


nar 1 bit; al recibir un pulso de reloj (CK) se almacena el bit de la entrada de datos
(D).

Buffer tri-estado. Elemento que actúa como un buffer (YES), es decir, transmite a la
salida lo mismo que recibe a la entrada, pero sólo cuando la señal de habilitación está
activa; en caso contrario, el valor de la salida no es 0 ni 1, sino otro estado llamado
’alta impedancia’ o ’no conectado’. Se utiliza para extraer los datos almacenados en
los 4 biestables al mismo tiempo.

Tabla 2.10: Nuevos símbolos del circuito esquemático del IC MM74C922.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 60

Figura 2.33: Diagrama esquemático del IC MM74C922.

El circuito recibe del exterior la señal de reloj que hace avanzar al contador de dos bits, siguiendo
la cuenta 00-01-10-11 y vuelta a empezar. El valor actual del contador va hacia un decodificador de 2
a 4, que activa una de sus salidas, la correspondiente a una columna del teclado, por lo que mientras no
se pulse una tecla, este proceso seguiría sin fin ’barriendo’ una y otra vez las 4 columnas. Simplemente
ese valor nos indicará la columna que se está comprobando, a falta de la fila, que sólo podremos saber
cuando se pulse una tecla. En ese momento, se cerrará el circuito y la tensión pasará hacia una de
las entradas del codificador 4 a 2, la correspondiente a la fila de la tecla pulsada, y éste genera en
binario su índice. Simultáneamente, la señal AN Y del codificador 4 a 2 se activa, permitiendo inhibir
el contador (para que no cambie de columna mientras se tenga pulsada esa tecla) y avisar de que hay
una tecla pulsada al exterior por la patilla D AT A AV AI L AB LE . Esa misma señal actúa como señal
de reloj de los 4 biestables, almacenándose los 2 bits de la columna y los dos bits de la fila, todos al
mismo tiempo. Si no se inhibiese el contador, éste seguiría contando, es decir, cambiando de columna,
que sería equivalente a dejar de pulsar la tecla y volver a pulsarla de forma intermitente. Una vez se
suelte la tecla pulsada, la señal AN Y del codificador pasaría a 0, dejando de inhibir el contador, y éste
continuaría de nuevo con la cuenta y el barrido de las 4 columnas.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 61

Aplicaciones

Los decodificadores pueden tener diversas aplicaciones:

Conversores desde binario: para traducir valores binarios a decimal y poder activar algún indica-
dor LED o mostrarlo en un display de 7 segmentos.

Generador de funciones: hemos visto que un decodificador genera todos los posibles minitérmi-
nos para las variables de entrada, que si se suman con una puerta OR (o una puerta NAND si
las salidas son a nivel bajo) tendríamos cualquier función lógica en forma de suma de produc-
tos (SoP). En las entradas E m ..E 1 iríamos asignando las distintas combinaciones de la tabla de
verdad de la función, y en la señal H el valor de la función para esa combinación concreta.

Decodificadores de 7 segmentos

Un uso muy interesante de los decodificadores es


que permiten conectar un display de 7 segmentos para (MSB) E3 E2 E1 E0 (LSB)
visualizar algún valor en decimal (no en binario). Un
display de 7 segmentos tiene 7 LEDs a..g que se ilu-
minan o no según se active su correspondiente entrada
H
a..g (Figura 2.34). Esas entradas son las que controla Decodificador 7 seg.
un decodificador de 7 segmentos, activando o no sus
salidas a..g que se conectan a las correspondientes en-
tradas del display. Vamos a suponer que trabajamos a
nivel alto, es decir, que para activar los LEDs del dis- a b c d e f g
play necesitaremos tener un 1 en las salidas. Según el
diseño que se haya realizado, a partir del valor binario de las entradas E 3 ..E 0 (00..15), el decodificador
activará ciertas salidas a..g para formar el símbolo correspondiente. Por ejemplo, para visualizar un ’1’
en el display activaremos los segmentos b y c únicamente con un 1, el resto serán 0. Las funciones de
salida a..g del decodificador las obtendríamos escribiendo una tabla de verdad en la que indicamos los
segmentos que vamos a iluminar para cada combinación de las entradas E 3 ..E 0 , teniendo presente las
etiquetas mostradas en la Figura 2.34.

a
f b
g
e c
d

Figura 2.34: Display de 7 segmentos – etiquetas.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 62

Ejemplo 15. Decodificador BCD IC 7448.


Vamos a estudiar un decodificador BCD a display de 7 segmentos existente que podemos encontrar
comercialmente, como el IC 7447 (con salidas a nivel bajo) y el 7448 (con salidas a nivel alto), pero
ambos con las mismas representaciones de los números decimales (0..9) y resto de símbolos (10..15),
como se muestra en la la Figura 2.35.

Figura 2.35: Símbolos mostrados por el IC 7447 (nivel bajo) y 7448 (nivel alto).

MSB LSB
# E3 E2 E1 E0 a b c d e f g

0 0 0 0 0 1 1 1 1 1 1 0
1 0 0 0 1 0 1 1 0 0 0 0
2 0 0 1 0 1 1 0 1 1 0 1
3 0 0 1 1 1 1 1 1 0 0 1

4 0 1 0 0 0 1 1 0 0 1 1
5 0 1 0 1 1 0 1 1 0 1 1
6 0 1 1 0 0 0 1 1 1 1 1
7 0 1 1 1 1 1 1 0 0 0 0

8 1 0 0 0 1 1 1 1 1 1 1
9 1 0 0 1 1 1 1 0 0 1 1
10 1 0 1 0 0 0 0 1 1 0 1
11 1 0 1 1 0 0 1 1 0 0 1

12 1 1 0 0 0 1 0 0 0 1 1
13 1 1 0 1 1 0 0 1 0 1 1
14 1 1 1 0 0 0 0 1 1 1 1
15 1 1 1 1 0 0 0 0 0 0 0

Una vez construida la tabla de verdad con los símbolos que se quieran (en este caso los del IC 7448),
simplificamos las 7 funciones de salida a..g mediante mapas de Karnaugh (Figuras 2.36 y 2.37).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 63

E1E0
00 01 11 10
E3E2
00 1 0 1 1 a SoP = (E 2 · E 1 · E 0 ) + (E 3 · E 1 · E 0 ) + (E 3 · E 2 · E 0 ) + (E 3 · E 2 · E 1 )

01 0 1 1 0 a PoS = (E 3 + E 1 ) · (E 2 + E 0 ) · (E 3 + E 2 + E 1 + E 0 )
11 0 1 0 0

10 1 1 0 0

E1E0
00 01 11 10
E3E2
00 1 1 1 1 b SoP = (E 1 · E 0 ) + (E 2 · E 1 ) + (E 3 · E 2 ) + (E 3 · E 1 · E 0 )

01 1 0 1 0 b PoS = (E 3 + E 1 ) · (E 2 + E 1 + E 0 ) · (E 2 + E 1 + E 0 )
11 1 0 0 0

10 1 1 0 0

E1E0
00 01 11 10
E3E2
00 1 1 1 0 c SoP = (E 2 · E 1 ) + (E 2 · E 0 ) + (E 3 · E 2 )

01 1 1 1 1 c PoS = (E 3 + E 2 ) · (E 2 + E 1 + E 0 )
11 0 0 0 0

10 1 1 1 0

E1E0
00 01 11 10
E3E2
00 1 0 1 1 d SoP = (E 2 · E 1 ) + (E 2 · E 0 ) + (E 1 · E 0 ) + (E 2 · E 1 · E 0 )

01 0 1 0 1 d PoS = (E 2 + E 1 + E 0 ) · (E 2 + E 1 + E 0 ) · (E 2 + E 1 + E 0 )
11 0 1 0 1

10 1 0 1 1

Figura 2.36: Simplificación de las funciones del decodificador IC 7448.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 64

E1E0
00 01 11 10
E3E2
00 1 0 0 1 e SoP = (E 1 · E 0 ) + (E 2 · E 0 )

01 0 0 0 1 e PoS = (E 2 + E 1 ) · (E 0 )
11 0 0 0 1

10 1 0 0 1

E1E0
00 01 11 10
E3E2
00 1 0 0 0 f SoP = (E 2 · E 1 ) + (E 1 · E 0 ) + (E 3 · E 1 ) + (E 2 · E 0 )

01 1 1 0 1 f PoS = (E 3 + E 2 + E 0 ) · (E 1 + E 0 ) · (E 2 + E 1 )
11 1 1 0 1

10 1 1 0 0

E1E0
00 01 11 10
E3E2
00 0 0 1 1 g SoP = (E 2 · E 1 ) + (E 2 · E 1 ) + (E 3 · E 1 ) + (E 1 · E 0 )

01 1 1 0 1 g PoS = (E 3 + E 2 + E 1 ) · (E 2 + E 1 + E 0 )
11 1 1 0 1

10 1 1 1 1

Figura 2.37: Simplificación de las funciones del decodificador IC 7448 (Cont.).

Resumimos aquí las 7 funciones obtenidas en forma de SoP, que son las que se van a implementar en
el circuito (NOTA: dependiendo de las agrupaciones realizadas se podrían obtener funciones distintas).

a SoP = (E 2 · E 1 · E 0 ) + (E 3 · E 1 · E 0 ) + (E 3 · E 2 · E 0 ) + (E 3 · E 2 · E 1 )
b SoP = (E 1 · E 0 ) + (E 2 · E 1 ) + (E 3 · E 2 ) + (E 3 · E 1 · E 0 )
c SoP = (E 2 · E 1 ) + (E 2 · E 0 ) + (E 3 · E 2 )
d SoP = (E 2 · E 1 ) + (E 2 · E 0 ) + (E 1 · E 0 ) + (E 2 · E 1 · E 0 )
e SoP = (E 1 · E 0 ) + (E 2 · E 0 )
f SoP = (E 2 · E 1 ) + (E 1 · E 0 ) + (E 3 · E 1 ) + (E 2 · E 0 )
g SoP = (E 2 · E 1 ) + (E 2 · E 1 ) + (E 3 · E 1 ) + (E 1 · E 0 )
CAPÍTULO 2. SISTEMAS COMBINACIONALES 65

El diagrama lógico o circuito puede verse en la Figura 2.38; en el datasheet del IC 7448 se utilizan
otro tipo de puertas. Puede observarse en las funciones anteriores que hay algún término que se repite
en dos o más funciones, que podrían haberse reutilizado, aunque aquí no se ha hecho; por ejemplo,
(E 2 ·E 1 ) en las funciones b y c , (E 2 ·E 0 ) de d y e , etc. Por último, la forma de utilizar este elemento sería
conectarlo a un display de 7 segmentos, como se muestra en la Figura 2.39.

Figura 2.38: Diagrama lógico del decodificador IC 7448.

Figura 2.39: Uso del decodificador IC 7448 conectado a un display de 7 segmentos.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 66

2.9. Multiplexores y demultiplexores


En esta sección estudiaremos otro tipo de circuito combinacional, los multiplexores y los demulti-
plexores. Los primeros permiten seleccionar una de sus entradas de datos (E i ) según el valor de unas
entradas de control (C i ), llevando su valor a la única salida (S ); los demultiplexores realizan la función
contraria, es decir, el valor de su única entrada (E ) es conducida hacia una de sus salidas (S i ), según
el valor de las entradas de control (C i ). Como se puede apreciar en la Figura 2.40, en ambos casos, las
entradas de control (C i ) forman un valor binario que determina la entrada (E i ) a seleccionar, en el caso
de los multiplexores, o salida (S i ) en el caso de los demultiplexores.

Figura 2.40: Multiplexores / Demultiplexores.

Multiplexores
Los multiplexores permiten seleccionar una
E0
de sus m entradas de datos E 0 ..E m−1 , poniendo
m entradas de datos
en su única salida S su valor, por lo que tam- E1
S n entradas de control
bién reciben el nombre de ’selectores’ o ’con- MUX-4
E2 m = 2n
mutadores’. La selección de la entrada se reali-
E3 1 salida
za mediante sus n entradas de control C 0 ..C n−1 ,
debiéndose cumplir que m = 2n . Las entradas de
(MSB) C1 C0 (LSB)
control C 0 ..C n−1 forman un valor binario, donde
C 0 es el bit menos significativo (LSB) y C n−1 es
el más significativo (MSB); cuando este valor binario es 0, se selecciona la entrada E 0 , cuando es 1, se
selecciona la entrada E 1 , y así sucesivamente hasta el valor m − 1, que se seleccionará E m−1 .
CAPÍTULO 2. SISTEMAS COMBINACIONALES 67

Multiplexor de 2 entradas de datos (MUX-2)

El caso más sencillo sería el de un multiplexor de 2 entradas de datos,


teniendo únicamente una entrada de control C 0 que permite seleccionar
E0
una de sus dos entradas E 1 ..E 0 y colocar en la salida S su valor. Vemos que
S
la función lógica de S depende, por tanto, de las entradas de datos y de las MUX-2
entradas de control. Para obtener la función lógica de S podemos escribir E1
la siguiente tabla de verdad, que luego simplificamos mediante un mapa de
Karnaugh.

C0
C0 E1 E0 S

0 0 0 0 E0
0 0 1 1 E0
0 1 0 0 E0 S = (C 0 · E 0 ) + (C 0 · E 1 )
0 1 1 1 E0
E1E0
1 0 0 0 E1 00 01 11 10
C0
1 0 1 0 E1
0 0 1 1 0
1 1 0 1 E1
1 1 1 1 E1 1 0 0 1 1

De cara al estudio de multiplexores mayores, la tabla de verdad anterior podría escribirse de forma
compacta del siguiente modo, desde la que podríamos obtener la misma función lógica. A continuación,
en la Figura 2.41 se muestra el circuito correspondiente, y se enumeran las distintas puertas utilizadas.

C0 S
S = (C 0 · E 0 ) + (C 0 · E 1 )
0 E0
1 E1

Puertas lógicas:
2 AND (2 entradas),
1 OR (2 entradas),
1 NOT

Nivel del circuito: 3

Figura 2.41: Multiplexor de 2 entradas de datos (MUX-2) – Circuito.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 68

Multiplexor de 4 entradas de datos (MUX-4)

A continuación, estudiamos un multiplexor de 4 entradas de datos


E0
E 3 ..E 0 , que necesita 2 entradas de control C 1 ..C 0 (22 = 4), y, de la misma
manera que antes, proporcionará como salida S el valor de una de sus E1
S
entradas, la que se indique mediante las entradas de control. Como en MUX-4
E2
este caso el circuito tiene 6 entradas en total, la tabla de verdad tendría
26 = 64 combinaciones; en vez de eso, escribimos la tabla de verdad E3
compacta, del mismo modo que habíamos hecho con el MUX-2.
(MSB) C1 C0 (LSB)

C1 C0 S

0 0 E0
0 1 E1 S = (C 1 ·C 0 ·E 0 )+(C 1 ·C 0 ·E 1 )+(C 1 ·C 0 ·E 2 )+(C 1 ·C 0 ·E 3 )
1 0 E2
1 1 E3

En la Figura 2.42 se muestra el circuito correspondiente, y se enumeran las distintas puertas uti-
lizadas. De esta manera podremos ir comparando los multiplexores de distinto tamaño y obtener con-
clusiones. Podemos ver que tiene 4 puertas AND de 3 entradas (1 de datos y las 2 de control) que se
suman con una puerta OR.

Puertas lógicas:
4 AND (3 entradas),
1 OR (4 entradas),
2 NOT

Nivel del circuito: 3

Figura 2.42: Multiplexor de 4 entradas de datos (MUX-4) – Circuito.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 69

Multiplexor de 8

Por último, vamos a estudiar un multiplexor de 8 entradas de E0


datos (MUX-8) E 7 ..E 0 , necesitando 3 entradas de control C 2 ..C 0 E1
E2
para seleccionar una de las 8 entradas (23 = 8). Escribimos la
E3
tabla de verdad compacta, del mismo modo que habíamos hecho S
E4 MUX-8
en los casos anteriores. E5
E6
C2 C1 C0 S E7

0 0 0 E0
(MSB) C2 C1 C0 (LSB)
0 0 1 E1
0 1 0 E2
0 1 1 E3 S = (C 2 · C 1 · C 0 · E 0 ) + (C 2 · C 1 · C 0 · E 1 ) + (C 2 · C 1 · C 0 · E 2 ) + (C 2 · C 1 · C 0 · E 3 )+

1 0 0 E4 + (C 2 · C 1 · C 0 · E 4 ) + (C 2 · C 1 · C 0 · E 5 ) + (C 2 · C 1 · C 0 · E 6 ) + (C 2 · C 1 · C 0 · E 7 )
1 0 1 E5
Puertas lógicas: 8 AND (4 entradas), 1 OR (8 entradas), 3 NOT
1 1 0 E6
1 1 1 E7 Nivel del circuito: 3

Fijándonos en el circuito del MUX-4 (Figura 2.42) podemos imaginarnos el circuito que tendría un
MUX-8: 8 puertas AND de 4 entradas (1 de datos y las 3 de control) que se suman con una puerta OR.
Siguiendo con esta progresión, podemos deducir el circuito que tendría un multiplexor de cualquier
número de entradas de datos (siempre potencia de 2), como se muestra en la Tabla 2.11. Sin embar-
go, diseñar multiplexores grandes de esta manera presenta un problema de escalabilidad, ya que cada
vez es necesario insertar más puertas lógicas, y además, de un mayor número de entradas cada una,
que posiblemente no existan comercialmente. Este problema se podría solventar utilizando ’árboles de
puertas’, a costa de incrementar el nivel del circuito. Por ejemplo, para un MUX-16 sería necesario una
puerta OR de 16 entradas, que podría sustituirse por 5 puertas OR de 4 entradas cada una (Figura 2.43).

MUX-2 MUX-4 MUX-8 MUX-16 MUX-32 ...


Entradas de datos 2 4 8 16 32
Entradas de control 1 2 3 4 5
Puertas AND 2 4 8 16 32
Puertas OR 1 1 1 1 1 ...
Puertas NOT 1 2 3 4 5
Nivel 3 3 3 3 3

Tabla 2.11: Características de los multiplexores.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 70

Figura 2.43: Arboles de puertas equivalentes a una puerta OR de 8 (izq.) y 16 (dcha.) entradas.

Expansión de multiplexores

Por lo expuesto en la sección anterior, a continuación estudiaremos cómo construir multiplexores


mayores a partir de otros más sencillos (por ejemplo, MUX-2 o MUX-4): expansión de multiplexores.
En resumen, se trata de insertar los multiplexores que sean necesarios en un primer nivel, los cuales
recibirán las entradas de datos del multiplexor que queremos construir. Luego se insertarían los multi-
plexores que sean necesarios en un segundo nivel, que reciben como entradas de datos las salidas de
los multiplexores del nivel anterior, y así sucesivamente hasta tener un único multiplexor en el último
nivel, cuya salida ya será la salida del multiplexor que construimos. El número de multiplexores en
cada nivel y el número de niveles (normalmente 2 o 3), dependerá de los multiplexores utilizados.

En cuanto a las entradas de control del multiplexor que queremos construir, se conectarán a los
multiplexores que hemos ido insertando, pero siguiendo estas reglas: (1) se comienza considerando los
multiplexores del primer nivel, luego los del segundo, y así sucesivamente, (2) para cada nivel se van
conectando las entradas de control necesarias según el tamaño de los multiplexores, siempre de mayor
a menor peso, y siempre las mismas en todos los multiplexores de ese nivel, (3) a la hora de seleccionar
las entradas de control que se conectan en un nivel, se comienza por las de menor peso (tantas como
sean necesarias) y terminando con las de mayor peso. Todo esto se verá mejor con el siguiente ejemplo.

Ejemplo 16. Vamos a construir un multiplexor de 8 entradas de datos (MUX-8) utilizando multi-
plexores de 4 (MUX-4) y multiplexores de 2 (MUX-2). Comenzamos insertando tantos MUX-4 como
sean necesarios en el primer nivel para cubrir todas las entradas de datos; como tenemos 8 entradas de
datos, necesitamos 2 MUX-4. De estos MUX-4 del primer nivel tenemos sus dos salidas S , que serán las
entradas de datos de los multiplexores del siguiente nivel, que podremos conectar a un único MUX-2.
Finalmente, la salida S de este último MUX-2 será la salida del MUX-8 que estamos construyendo (ver
Figura 2.44).

Hasta aquí no se requiere más explicación, pero en cuanto a las entradas de control hay que llevar
cuidado a la hora de realizar las conexiones. Las 3 entradas de control C 2 ..C 0 del MUX-8 se van a
conectar los multiplexores que hemos ido insertando, comenzando por los del primer nivel, segundo
CAPÍTULO 2. SISTEMAS COMBINACIONALES 71

nivel, etc. y asignándoles las entradas de control necesarias comenzando por las de menor peso. Como
en el primer nivel tenemos MUX-4, necesitaremos 2 de las entradas de control del multiplexor que
estamos construyendo, comenzando por las 2 entradas de control de menor peso, es decir, C 1 y C 0 ; las
conectaremos a las entradas de control de todos los MUX-4 en ese mismo orden, es decir, de mayor a
menor peso (siendo C 1 la entrada de mayor peso y C 0 la de menor). Luego pasaríamos al segundo nivel,
en donde tenemos un MUX-2 con 1 entrada de control. Por tanto, seleccionamos la siguiente entrada
de control de las que nos queden sin utilizar (siguiendo de menor a mayor peso); en este caso, sólo nos
queda C 2 , por lo que bastaría con conectar C 2 a la única entrada de control de ese multiplexor MUX-2.
El circuito quedaría como se muestra en la Figura 2.44.

Figura 2.44: Multiplexor de 8 utilizando multiplexores de 4 y de 2.

Se deja al lector la implementación de los siguientes multiplexores utilizando esta técnica:

1. Multiplexor de 8 utilizando multiplexores de 2 y de 4 (diferente del ejemplo anterior).

2. Multiplexor de 8 utilizando multiplexores de 2 únicamente.

3. Multiplexor de 16 utilizando multiplexores de 4 únicamente.

4. Multiplexor de 16 utilizando multiplexores de 8 y 2.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 72

Implementación de un multiplexor con un decodificador

A continuación implementaremos de nuevo un multiplexor de 4 entradas (MUX-4), pero esta vez


utilizando un decodificador en la zona de las señales de control, en concreto, necesitaremos utilizar un
decodificador binario de 2 a 4. Con esto conseguiremos que las puertas AND utilizadas sean siempre
de 2 entradas, independientemente del número de entradas de datos o de control.

E0 (MSB) E1 E0 (LSB)
E1
E2
E3
S
E4 MUX-8 H
E5 Decodificador 2 a 4
E6
E7

(MSB) C2 C1 C0 (LSB) S3 S2 S1 S0

Figura 2.45: Multiplexor 4 entradas y Decodificador 2 a 4 – símbolos de bloque

Figura 2.46: Multiplexor de 4 utilizando un decodificador de 2 a 4.

De este modo podremos comprobar que, aunque este circuito tiene un aspecto bastante similar
al realizado anteriormente utilizando únicamente puertas lógicas, con el uso de un decodificador el
circuito se simplifica bastante: menos conexiones, no es necesario insertar puertas NOT, y las puertas
AND son todas de 2 entradas, independientemente del tamaño del multiplexor, por lo que se facilita
la escalabilidad. La Tabla 2.12 resume las características de los multiplexores de varios tamaños, que
puede compararse con la Tabla 2.11, en la que no se utilizaban decodificadores.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 73

MUX-2 MUX-4 MUX-8 MUX-16 MUX-32 ...


Entradas de datos 2 4 8 16 32
Entradas de control 1 2 3 4 5
Puertas AND-2 2 4 8 16 32
Puertas OR 1 1 1 1 1 ...
Puertas NOT 0 0 0 0 0
Decodificador 1a2 2a4 3a8 4 a 16 5 a 32
Nivel 2+2=4 4 4 4 4

Tabla 2.12: Características de los multiplexores.

Se deja al lector implementar los siguientes multiplexores utilizando esta técnica. Podremos llegar
a la conclusión de que, aunque los circuitos no son complicados, esta forma no es del todo escalable
para implementar multiplexores de un gran número de entradas; por este motivo se utiliza la técnica de
agrupación de multiplexores explicada en la sección anterior.

1. Multiplexor de 8 utilizando un decodificador 3 a 8.

2. Multiplexor de 16 utilizando un decodificador 4 a 16.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 74

Demultiplexores
Los demultiplexores permiten redirigir el
valor de su única entrada de datos E a una de S0
1 entrada
sus m salidas S 0 ..S m−1 , por lo que también re-
S1 m salidas
ciben el nombre de ’distribuidor de datos’ o ’di- E DEMUX-4
reccionador de datos’. La selección de la salida S2 n entradas de control
m = 2n
se realiza mediante el valor binario establecido S3
en sus n entradas de control C 0 ..C n−1 , debién-
(MSB) C1 C0 (LSB)
dose cumplir que m = 2n . En este diagrama de
bloque tenemos un demultiplexor de 4 salidas
(DEMUX-4), cuyo funcionamiento podemos describir mediante la siguiente tabla de verdad de forma
compacta:

C1 C0 S0 S1 S2 S3 Sal i d a
S 0 = (C 1 · C 0 · E )
0 0 E 0 0 0 S0
S 1 = (C 1 · C 0 · E )
0 1 0 E 0 0 S1
S 2 = (C 1 · C 0 · E )
1 0 0 0 E 0 S2
S 3 = (C 1 · C 0 · E 3 )
1 1 0 0 0 E S3

En la Figura 2.47 se muestra el circuito correspondiente, y se enumeran las distintas puertas utili-
zadas. Podemos ver que, al igual que el MUX-4, tiene 4 puertas AND de 3 entradas: una es la entrada
de datos (en este caso la misma en todas las puertas), y las otras 2 vienen de las entradas de control.

Puertas lógicas:
4 AND (3 entradas),
2 NOT

Nivel del circuito: 2

Figura 2.47: Demultiplexor de 4 salidas (DEMUX-4) – Circuito.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 75

Si nos fijamos en el circuito de este demultiplexor y lo comparamos con el del decodificador de


2 a 4 líneas (Figura 2.48) veremos que son idénticos: las señales de control del demultiplexor C 1C 0
son como las entradas de datos del decodificador E 1 E 0 , y la entrada de datos E del demultiplexor
equivale a la señal de habilitación H del decodificador. Como los demultiplexores se comportan como
los decodificadores con señal de habilitación, los ICs que existen comercialmente se usan para ambas
cosas, denominándose decodificadores/demultiplexores.

Figura 2.48: Demultiplexor de 4 salidas vs. Decodificador de 2 a 4.

Circuitos integrados
Ejemplos de multiplexores disponibles en ICs con tecnología TTL para uso comercial (74x) son
los siguientes; existen también los de uso militar o aeroespacial con el código 54x:

74157/74158: cuádruple multiplexor de 2 entradas (salidas a nivel alto/bajo).

74153: dual multiplexor de 4 entradas.

74151: multiplexor de 8 entradas.

74150: multiplexor de 16 entradas.

Ejemplos de decodificadores/demultiplexores disponibles con tecnología TTL son los siguientes:

74139: decodificador de 2 a 4 líneas / demultiplexor de 4 líneas (dual, independientes).

74138: decodificador de 3 a 8 líneas / demultiplexor de 8 líneas.

74155/74156: decodificador de 2 a 4 líneas / demultiplexor de 4 líneas (dual) o decodificador 3 a


8 / demultiplexor de 8 líneas (único).

74154/74159: decodificador de 4 a 16 líneas / demultiplexor de 16 líneas.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 76

Aplicaciones
Los multiplexores/demultiplexores tienen diversas aplicaciones:

Conversión paralelo/serie: con un multiplexor podemos colocar a la salida cada una de sus entra-
das de forma secuencial, que podrían transmitirse por alguna línea en serie; en el otro extremo
(en la recepción), cada uno de esos bits se redireccionaría a salidas consecutivas para tenerlos en
paralelo de nuevo.

Transmisión multiplexada de datos: sería el caso de las centrales de conmutación telefónicas (red
telefónica pública conmutada), que mediante multiplexación crean un camino virtual que permite
establecer la comunicación entre dos puntos cualesquiera.

Implementación funciones lógicas: simplemente conectando 0 o 1 en las entradas podemos dis-


poner de un circuito en forma de suma de productos (SoP).

Con relación a la última de las aplicaciones, en las siguientes secciones vamos a realizar dos tipos
de ejercicios: (1) implementar una función lógica cualquiera (expresada en forma canónica de SoP) con
un multiplexor con diferentes tamaños, (2) obtener la función lógica que realiza un circuito que integra
un multiplexor.

Implementar una función lógica con multiplexores


Según hemos visto en la función lógica y el circuito de un multiplexor, se implementa una suma de
productos, incluyendo solo los términos suma (minitérminos) cuya entrada de datos correspondiente
sea 1. Por tanto, partiendo de cualquier función canónica en forma de SoP, ya sea desde su expresión
lógica o su tabla de verdad, podemos implementarla con un multiplexor conectando simplemente las
variables de las que depende la función a las entradas de control, y los valores lógicos 0 o 1 en las
entradas de datos que nos interese.

Dependiendo del tamaño del multiplexor, el proceso puede ser muy sencillo o complicarse un
poco. El caso más sencillo es cuando tenemos tantas variables como entradas de control, ya que cada
variable se conecta a una de las entradas de control, de mayor a menor peso, y en las entradas se
colocaría simplemente un 0 o un 1 (como se ha comentado anteriormente). Sin embargo, si tenemos
menos entradas de control que variables, conectamos las variables que se puedan, comenzando por las
de mayor peso, y las entradas de datos podrán tener 0 o 1, aunque también podrán depender de las
variables que no se hayan conectado y sus complementarias, es decir, podría ser necesaria cierta lógica
adicional. Las expresiones algebraicas concretas de cada entrada de datos se pueden obtener tanto desde
la tabla de verdad como desde la función lógica en forma canónica:

Desde la tabla de verdad: se trata de asignar una combinación de valores a las variables de
entrada, y analizar por separado las combinaciones de la tabla de verdad que comienzan por
CAPÍTULO 2. SISTEMAS COMBINACIONALES 77

dichos valores. Hay que averiguar el valor que toma la salida de la función lógica en función del
valor de aquellas variables que no se han considerado en las entradas de control.

Desde la función lógica: se trata de asignar una combinación de valores a las variables de entrada,
y analizar aquellos términos que comienzan por dicha combinación. El resultado de considerar
sólo esos términos, y las variables que no se han considerado en las entradas de control, es
decir, eliminando todo lo referente a las variables ya conectadas a las entradas de control, será la
expresión lógica para una entrada concreta del multiplexor.

Para aclarar el procedimiento anterior vamos a exponer dos ejemplos, primero una función de 3
variables y luego otra de 4 variables.

Ejemplo 17. Diseñar un circuito combinacional que represente la siguiente función lógica de 3
variables utilizando multiplexores de diferente tamaño:

f (a, b, c) = Σ(0, 3, 4, 6, 7)

1. Un multiplexor de 8 entradas de datos (3 entradas de control).

2. Un multiplexor de 4 entradas de datos (2 entradas de control).

SOLUCION:
Vamos a construir previamente la tabla de verdad desde la función lógica, y también la vamos a
expresar en forma de términos canónicos producto (minitérminos).

MSB LSB A partir de la tabla de verdad podemos obtener la función


# a b c f lógica en forma canónica (SoP):

0 0 0 0 1
f SoP = (a · b · c) + (a · b · c) + (a · b · c) + (a · b · c) + (a · b · c)
1 0 0 1 0
2 0 1 0 0 Es conveniente escribir también el valor binario que hace
3 0 1 1 1 cierto cada término producto:
4 1 0 0 1
(a·b·c)
5 1 0 1 0 f SoP = 000 + (a·b·c) (a·b·c) (a·b·c)
011 + 100 + 110 + 111
(a·b·c)

6 1 1 0 1
7 1 1 1 1

1. MUX-8: este es el caso sencillo puesto que tenemos el mismo número de entradas de control que
de variables. Por tanto, las entradas de datos sólo dependen de 0 o 1, exactamente como aparece
en la tabla de verdad. Tendríamos que realizar las siguientes conexiones:

Entradas de Control (3): C 2 = a C 1 = b C 0 = c


CAPÍTULO 2. SISTEMAS COMBINACIONALES 78

Entradas de Datos (8): E 0 = 1 E 1 = 0 E 2 = 0 E 3 = 1 E 4 = 1 E 5 = 0 E 6 = 1 E 7 = 1

2. MUX-4: vamos conectando a las 2 entradas de control que tenemos C 1C 0 todas las variables que
podamos, de mayor a menor peso: a y b ; nos queda la variable c sin conectar, que entrará, de
algún modo, por las entradas de datos. Lo vamos a hacer fijándonos en la tabla de verdad.

Para el caso ab = 00 se habilitará la entrada E 0 , y lo que valga esa entrada es lo que saldrá
por f ; en la tabla de verdad tenemos dos combinaciones: cuando c = 0 ⇒ f = 1, y cuando
c = 1 ⇒ f = 0, es decir, que f es lo contrario que c , y eso es justo lo que hay que colocar en
la entrada de datos: E 0 = c .
Para el caso ab = 01 se habilitará la entrada E 1 , y lo que valga esa entrada es lo que saldrá
por f ; en la tabla de verdad tenemos dos combinaciones: cuando c = 0 ⇒ f = 0, y cuando
c = 1 ⇒ f = 1, es decir, que f es lo mismo que c , y eso es lo que hay que colocar en la
entrada de datos: E 1 = c .
Para el caso ab = 10 se habilitará la entrada E 2 , y lo que valga esa entrada es lo que saldrá
por f ; en la tabla de verdad tenemos dos combinaciones: cuando c = 0 ⇒ f = 1, y cuando
c = 1 ⇒ f = 0, es decir, que f es lo contrario que c , y eso es lo que hay que colocar en la
entrada de datos: E 2 = c .
Por último, para el caso ab = 11 se habilitará la entrada E 3 , y lo que valga esa entrada es
lo que saldrá por f ; en la tabla de verdad la función vale f = 1 para las dos combinaciones
que empiezan por ab = 11, tanto para c = 0 como para c = 1 (independientemente del valor
de c ), y eso es lo que hay que colocar en la entrada de datos: E 3 = 1.

Por tanto, nos queda lo siguiente:

Entradas de Control (2): C 1 = a C 0 = b


Entradas de Datos (4): E 0 = c E 1 = c E 2 = c E 3 = 1

Las expresiones algebraicas de cada entrada también se pueden obtener desde la función lógica,
mirando los valores de la combinación que hacen cierto cada término. En el caso del MUX-4:

Para el caso ab = 00 miramos los términos que empiezan por 00; solo tenemos el término (a · b·c),
que si eliminamos las variables a y b (que no afecta al resultado) nos queda el término (c), que
es lo que habría que colocar en la entrada de datos: E 0 = c (lo mismo que hemos obtenido antes).

Siguiendo con este otro método, para el caso ab = 01 miramos los términos que empiezan por 01;
solo tenemos el término (a · b·c), que si eliminamos las variables a y b (que no afecta al resultado)
nos queda el término (c), que es lo que habría que colocar en la entrada de datos: E 1 = c .

Para el caso ab = 10 miramos los términos que empiezan por 10; solo tenemos el término (a · b·c),
que si eliminamos las variables a y b (que no afecta al resultado) nos queda el término (c), que
es lo que habría que colocar en la entrada de datos: E 2 = c .
CAPÍTULO 2. SISTEMAS COMBINACIONALES 79

Por último, para el caso ab = 11 tenemos dos términos que empiezan por 11: (a · b·c) + (a · b·c);
quitando las variables a y b nos queda (c + c) = 1, que es lo que habría que colocar en la entrada
de datos: E 3 = 1.

Podemos comprobar que hemos obtenido las mismas expresiones algebraicas para las entradas con
ambos métodos, tanto desde la tabla de verdad como desde la función lógica. Los circuitos implemen-
tados con un multiplexor MUX-8 y MUX-4 quedarían como los de la Figura 2.49, respectivamente:

Figura 2.49: Circuitos implementados con un multiplexor MUX-8 (izq.) y MUX-4 (dcha.).

Ejemplo 18. Diseñar un circuito combinacional que represente la siguiente función lógica de 4
variables utilizando multiplexores de diferente tamaño:

f (a, b, c, d ) = Σ(0, 1, 2, 3, 5, 8, 11, 12, 13, 14, 15)

1. Un multiplexor de 16 entradas de datos (4 entradas de control).

2. Un multiplexor de 8 entradas de datos (3 entradas de control).

3. Un multiplexor de 4 entradas de datos (2 entradas de control).

SOLUCION:
Vamos a construir previamente la tabla de verdad desde la función lógica, y también la vamos a
expresar en forma de términos canónicos producto (minitérminos). Para la obtención de las expresiones
algebraicas procedemos de igual modo que en el ejemplo anterior, ya sea desde la tabla de verdad como
desde la función lógica. En este caso no se darán tantas explicaciones como para el ejemplo anterior.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 80

MSB LSB A partir de la tabla de verdad podemos obtener la función


# a b c d f lógica en forma canónica (SoP):

0 0 0 0 0 1
f SoP = (a · b · c · d ) + (a · b · c · d ) + (a · b · c · d ) + (a · b · c · d )+
1 0 0 0 1 1
+(a · b · c · d ) + (a · b · c · d ) + (a · b · c · d ) + (a · b · c · d )+
2 0 0 1 0 1
+(a · b · c · d ) + (a · b · c · d ) + (a · b · c · d )
3 0 0 1 1 1

4 0 1 0 0 0 Es conveniente escribir también el valor binario que hace


5 0 1 0 1 1 cierto cada término producto:
6 0 1 1 0 0
(a·b·c·d ) (a·b·c·d ) (a·b·c·d ) (a·b·c·d )
7 0 1 1 1 0 f SoP = 0000 + 0001 + 0010 + 0011 +
+ (a·b·c·d ) (a·b·c·d ) (a·b·c·d )
0101 + 1000 + 1011 + 1100 +
(a·b·c·d )
8 1 0 0 0 1
9 1 0 0 1 0 + (a·b·c·d ) (a·b·c·d )
1101 + 1110 + 1111
(a·b·c·d )

10 1 0 1 0 0
11 1 0 1 1 1

12 1 1 0 0 1
13 1 1 0 1 1
14 1 1 1 0 1
15 1 1 1 1 1

1. MUX-16: este es el caso sencillo, ya que tenemos tantas entradas de control como variables.

Entradas de Control (4): C 3 = a C 2 = b C 1 = c C 0 = d


Entradas de Datos (16): E 0 = 1 E 1 = 1 E 2 = 1 E 3 = 1 E 4 = 0 E 5 = 1 E 6 = 0 E 7 = 0 E 8 = 1 E 9 =
0 E 10 = 0 E 11 = 1 E 12 = 1 E 13 = 1 E 14 = 1 E 15 = 1

2. MUX-8:

Entradas de Control (3): C 2 = a C 1 = b C 0 = c


Entradas de Datos (8): E 0 = 1 E 1 = 1 E 2 = d E 3 = 0 E 4 = d E 5 = d E 6 = 1 E 7 = 1

3. MUX-4: solo podemos conectar las variables a y b a las entradas de control; el resto de variables
formarán parte de las expresiones algebraicas de las entradas de datos, es decir, que nos podremos
encontrar lo siguiente: 0, 1, c , c , d , d , unidos por algún operador suma o producto. Por ejemplo,
para los casos ab = 00 y ab = 11, en la tabla de verdad tenemos cuatro combinaciones en las que
f = 1 siempre, por lo que E 0 = 1 y E 3 = 1. Para el caso ab = 01, en la tabla de verdad tenemos
cuatro combinaciones, y obtenemos la función desde ese trozo de tabla (4 combinaciones y
variables de entrada c y d únicamente), resultando E 1 = (c · d ). De forma similar, para el caso
CAPÍTULO 2. SISTEMAS COMBINACIONALES 81

ab = 10 consideramos ese trozo de tabla, resultando E 2 = (c · d ) + (c · d ).


Por tanto, nos queda lo siguiente:

Entradas de Control (2): C 1 = a C 0 = b


Entradas de Datos (4): E 0 = 1 E 1 = (c · d ) E 2 = (c · d ) + (c · d ) E 3 = 1

Los circuitos implementados con un multiplexor MUX-16, MUX-8 y MUX-4 quedarían como los
de la Figura 2.50, respectivamente:

Figura 2.50: Circuitos implementados con un multiplexor MUX-16, MUX-8 y MUX-4.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 82

Obtener la función lógica que realiza un circuito que integra un multiplexor


Un caso distinto a lo anterior sería si tenemos un circuito que integra un multiplexor y necesitamos
obtener la función lógica que implementa. El caso más sencillo es cuando sólo tenemos un multiplexor,
es decir, sin otros elementos o circuitos combinacionales (decodificadores, etc.).

Ejemplo 19. Obtener la función lógica que se implementa con los siguientes circuitos combina-
cionales (multiplexores de diferente tamaño) que se mostraron en la Figura 2.49, y se vuelven a mostrar
en la Figura 2.51 por conveniencia. Se trata de los mismos circuitos combinacionales obtenidos en el
ejemplo 15 anterior, para poder comprobar que se obtiene la misma función lógica de partida.

Figura 2.51: Circuitos implementados con un multiplexor MUX-8 (izq.) y MUX-4 (dcha.).

SOLUCION:
Se trata de construir la tabla de verdad, o bien, la función lógica, según nos convenga. Para
multiplexores grandes (MUX-16, MUX-8) conviene obtener la tabla de verdad, para multiplexores
pequeños (MUX-2) es más sencillo obtener la función lógica. En la tabla siguiente se han ido escribiendo
las funciones de los 2 circuitos, que deberán coincidir.

MSB LSB A partir de la tabla de verdad podemos obtener


# a b c f mux8 f mux4 la función lógica en forma canónica (SoP o PoS,
según nos interese):
0 0 0 0 1 1
1 0 0 1 0 0
f SoP = (a·b·c)+(a·b·c)+(a·b·c)+(a·b·c)+(a·b·c)
2 0 1 0 0 0
3 0 1 1 1 1

4 1 0 0 1 1 f PoS = (a + b + c) · (a + b + c) · (a + b + c)
5 1 0 1 0 0
6 1 1 0 1 1
7 1 1 1 1 1
CAPÍTULO 2. SISTEMAS COMBINACIONALES 83

1. MUX-8: lo primero siempre es ver cuántas variables tiene el circuito; en este caso son 3 variables
abc . Puesto que tenemos el mismo número de entradas de control que de variables, este caso
es sencillo ya que las entradas de datos sólo dependen de 0 o 1, y esos valores son exactamente
los que deben aparecer en la tabla de verdad. Por ejemplo, cuando las variables de entrada son
abc = 000 se selecciona la entrada E 0 , la cual está conectada a 1; por tanto, en esa combinación
de la tabla pondremos un 1. Cuando las variables de entrada son abcd = 001 se selecciona la
entrada E 1 , la cual está conectada a 0; por tanto, en esa combinación de la tabla pondremos un 0,
y así sucesivamente. En la práctica será copiar tal cual los valores de las entradas a la columna
de la salida f .

2. MUX-4: el número de variables sigue siendo 3 en este caso abc , pero como solo tenemos
dos entradas de control, mediante ab es como seleccionamos la entrada concreta. Por ejemplo,
cuando las variables de entrada son ab = 00 se selecciona la entrada E 0 , y la función valdrá lo
que valga dicha entrada. Desde el circuito podemos observar que E 0 = c , por lo que a todas las
combinaciones de la tabla que empiecen por ab = 00 habrá que asignarle ese valor, y lo mismo se
haría para cada entrada de datos. Si el valor es c (como en este primer caso), lo que pondremos
será lo contrario de lo que valga c en cada una de esas combinaciones; si se tratase de c pondremos
el valor que tenga c en las correspondientes combinaciones; si se tratase de 0 se pondría 0 y si se
tratase de 1 se pondría 1. En este circuito no hay más opciones.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 84

Ejemplo 20. Obtener la función lógica que se implementa con los circuitos combinacionales que
se mostraron en la Figura 2.50 (multiplexores de diferente tamaño). Se trata de los mismos circuitos
combinacionales obtenidos en el ejemplo 15 anterior, para poder comprobar que se obtiene la misma
función lógica de partida.

SOLUCION: Se deja como ejercicio al lector. En la tabla siguiente se pueden ir rellenando las
funciones de los 3 circuitos, que deberán coincidir.

MSB LSB A partir de la tabla de verdad podemos


# a b c d f mux16 f mux8 f mux4 obtener la función lógica en forma canó-
nica (SoP o PoS según nos convenga):
0 0 0 0 0
1 0 0 0 1
f SoP =
2 0 0 1 0
3 0 0 1 1

4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1

8 1 0 0 0
f PoS =
9 1 0 0 1
10 1 0 1 0
11 1 0 1 1

12 1 1 0 0
13 1 1 0 1
14 1 1 1 0
15 1 1 1 1

1. MUX-16:

2. MUX-8:

3. MUX-4:
CAPÍTULO 2. SISTEMAS COMBINACIONALES 85

2.10. Otros circuitos combinacionales


Para terminar con este capítulo, vamos a estudiar otros tipos de circuitos combinacionales existen-
tes, en concreto, los comparadores (de 1, 2, . . . , n bits), y los generadores/comprobadores de paridad.

Comparadores
Los comparadores, en general, permiten com-
parar dos valores binarios de n bits positivos (≥ 0):
S1 (A < B)
A /n
A = a n−1 . . . a 1 a 0 y B = b n−1 . . . b 1 b 0
COMP-n S2 (A = B)
El circuito tendrá 3 salidas para averiguar su rela-
B /n
ción de igualdad o desigualdad, activándose siem- S3 (A > B)
pre una y solo una de las 3 salidas:

S 1 = (A < B ), S 2 = (A = B ), S 3 = (A > B )

El comparador más básico es el comparador de 1 bit, que proporciona esas mismas salidas S 1 S 2 S 3
resultado de la comparación de dos valores de 1 bit cada uno, a y b , respectivamente.

a b S 1 (a < b) S 2 (a = b) S 3 (a > b)
S1 (a < b)
a 0 0 0 1 0
COMP-1 S2 (a = b) 0 1 1 0 0
b 1 0 0 0 1
S3 (a > b)
1 1 0 1 0

En los casos a = b = 0 y a = b = 1, la salida que se activa es la correspondiente a la igualdad S 2 ,


estando las otras salidas desactivadas. Para el caso a = 0, b = 1, se activa S 1 para indicar que a < b .
Por último, para el caso a = 1, b = 0, se activa S 3 para indicar que a > b . A partir de la tabla de verdad
podemos obtener fácilmente las 3 funciones de salida en forma de suma de productos. En la Figura
2.52 se muestra el circuito correspondiente.

S1 = a · b

S 2 = a · b + a · b = (a ⊕ b) = (a · b + a · b)

S3 = a · b

Figura 2.52: Comparador de 1 bit – Funciones y circuito.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 86

El siguiente comparador que vamos a analizar es


el comparador de 2 bits, en el que tendremos como S1 (A < B)
A /2
entrada dos valores binarios A = a1 a0 y B = b1 b0 , y
las mismas salidas S 1 S 2 S 3 que en el caso anterior (y COMP-2 S2 (A = B)
resto de casos que veremos más adelante). Comenza- B /2
S3 (A > B)
mos escribiendo su tabla de verdad para analizar cada
combinación de entrada, y después simplificaremos las
funciones mediante mapas de Karnaugh.

A B
a1 a0 b1 b0 S 1 (A < B ) S 2 (A = B ) S 3 (A > B )

0 0 0 0 0 1 0 00 = 00
0 0 0 1 1 0 0 00 < 01
0 0 1 0 1 0 0 00 < 10
0 0 1 1 1 0 0 00 < 11

0 1 0 0 0 0 1 01 > 00
0 1 0 1 0 1 0 01 = 01
0 1 1 0 1 0 0 01 < 10
0 1 1 1 1 0 0 01 < 11

1 0 0 0 0 0 1 10 > 00
1 0 0 1 0 0 1 10 > 01
1 0 1 0 0 1 0 10 = 10
1 0 1 1 1 0 0 10 < 11

1 1 0 0 0 0 1 11 > 00
1 1 0 1 0 0 1 11 > 01
1 1 1 0 0 0 1 11 > 10
1 1 1 1 0 1 0 11 = 11

Simplificando las funciones obtenemos las siguientes funciones de salida. Se puede apreciar en la
Figura 2.53 que la función de S 2 no se puede simplificar. El circuito quedaría como se muestra en la
Figura 2.54:

S 1 = (a 1 · b 1 ) + (a 1 · a 0 · b 0 ) + (a 0 · b 1 · b 0 )

S 2 = (a 1 · a 0 · b 1 · b 0 ) + (a 1 · a 0 · b 1 · b 0 ) + (a 1 · a 0 · b 1 · b 0 ) + (a 1 · a 0 · b 1 · b 0 )

S 3 = (a 1 · b 1 ) + (a 0 · b 1 · b 0 ) + (a 1 · a 0 · b 0 )
CAPÍTULO 2. SISTEMAS COMBINACIONALES 87

S1 S2 S3

b1 b0 b1 b0 b1 b0
a1 a0
00 01 11 10 a1 a0
00 01 11 10 a1 a0
00 01 11 10

00 0 1 1 1 00 1 0 0 0 00 0 0 0 0

01 0 0 1 1 01 0 1 0 0 01 1 0 0 0

11 0 0 0 0 11 0 0 1 0 11 1 1 0 1

10 0 0 1 0 10 0 0 0 1 10 1 1 0 0

Figura 2.53: Comparador de 2 bits – Simplificación con mapas de Karnaugh de las funciones.

Figura 2.54: Comparador de 2 bits – Circuito.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 88

Agrupación de Comparadores

Otra forma de implementar circuitos comparadores sería utilizar la técnica de agrupación de otros
comparadores más sencillos (COMP-1 o COMP-2), tal y como hemos ido haciendo a lo largo de este
capítulo para otros circuitos combinacionales (codificadores, decodificadores, multiplexores, etc.). En
todas las implementaciones que veremos a continuación, lo más evidente de ver es la función que
detecta la igualdad S 2 . Se trata simplemente de comparar todos los bits de mismo peso de ambos
valores a comparar A y B , es decir, a0 con b0 , a1 con b1 , y así sucesivamente; si el resultado de todas
las comparaciones indica que son iguales (S 2 = 1) significaría que los dos valores binarios son iguales
( A = B ). Por tanto, bastaría con unir con una puerta AND la salida S 2 de todos los comparadores más
sencillos que se estén utilizando.

Ejemplo 21. Vamos a construir un comparador de 2 bits (COMP-2) utilizando comparadores de


1 bit (COMP-1), en lugar de hacerlo con el procedimiento anterior. En la Figura 2.55 se puede ver el
circuito implementado, y lo que se ha comentado de la función S 2 para detectar la igualdad A = B . Para
detectar el caso A < B , primero se compara si el bit de mayor peso es a1 < b1 , porque si eso se cumple es
suficiente para afirmar que A < B , independientemente del valor del resto de bits. Para detectar el caso
A > B , se procede de forma parecida. Primero se compara si el bit de mayor peso es a 1 > b 1 , porque si
eso se cumple es suficiente para afirmar que A > B , independientemente del valor del resto de bits. En
el caso de que los bits de mayor peso sean iguales, entonces el resultado dependerá de la comparación
de los siguientes bits de menor peso. Si a1 = b1 y a0 < b0 , también indicaría que A < B (S 1 = 1), y si
a 1 = b 1 y a 0 > b 0 , indicaría que A > B (S 3 = 1). Por último, en el caso de que estos dos bits también sean
iguales (a0 = b0 ), se produciría el caso de igualdad A = B (S 2 = 1). Todo lo anterior se podría resumir
en la Tabla 2.13, y el circuito quedaría como se muestra en la Figura 2.55.

Comparación 2 bits Salidas


a1 , b1 a0 , b0 S 1 (A < B ) S 2 (A = B ) S 3 (A > B )
a1 < b1 X 1 0 0 Solo es necesario comparar el primer bit
a1 > b1 X 0 0 1 Solo es necesario comparar el primer bit
a1 = b1 a0 < b0 1 0 0 Necesitamos comparar el siguiente bit
a1 = b1 a0 > b0 0 0 1 Necesitamos comparar el siguiente bit
a1 = b1 a0 = b0 0 1 0 A=B

Tabla 2.13: Tabla de funcionamiento del comparador de 2 bits.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 89

Figura 2.55: Comparador de 2 bits utilizando comparadores de 1 bit.

Ejemplo 22. Vamos a construir un comparador de 4 bits (COMP-4) utilizando comparadores de


1 bit (COMP-1), de forma similar al caso anterior. Sean dos valores binarios de 4-bit: A = a3 a2 a1 a0 y
B = b 3 b 2 b 1 b 0 (índice 3 es el MSB, e índice 0 el LSB):

La igualdad A = B es lo más sencillo, ya que se activará S 2 del circuito cuando todos los bits a
comparar del mismo peso sean iguales, es decir, cuando se activan las salidas S 2 de todos los
comparadores, que van a una puerta AND.

En cuanto a las desigualdades, se comienza por los bits MSB (a3 y b3 ): si a3 < b3 (S 1 = 1) ya no
hace falta seguir, ya que A < B independientemente del valor del resto de bits menos significativos;
la salida S 1 del primer comparador de 1-bit va directa a la puerta OR de la salida S 1 del COMP-4
que estamos construyendo, es decir, que basta con que se active dicha salida para que el resultado
sea A < B . Del mismo modo, si a3 > b3 (S 3 = 1) ya no hace falta seguir, ya que A > B .

En el caso de que los bits MSB sean iguales (a3 = b3 ) entonces es cuando se comparan los bits
siguientes de peso inferior (a2 y b2 ), y se procede del mismo modo. Vemos en el circuito que la
salida S 1 del segundo comparador va a una puerta AND, junto con la salida S 2 del comparador
anterior de mayor peso, y la salida de esa puerta AND ya va, finalmente, a la puerta OR que activa
S 1 del circuito. Dicho de otro modo, que este segundo comparador sólo se tiene en cuenta en el
caso de que se haya activado S 2 del comparador anterior de mayor peso; ídem para S 3 . Si no se
activa ni S 1 ni S 3 , entonces se activará S 2 , indicando que los bits son iguales (a2 = b2 ).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 90

Así se procede con el resto de bits. En cada caso, las salidas S 1 y S 3 van a una puerta AND, a la
que le llegan también las salidas S 2 de todos los comparadores anteriores de mayor peso.

Todo lo anterior se podría resumir en la Tabla 2.14, y el circuito quedaría como se muestra en la
Figura 2.56.

Comparación 2 bits Salidas


a3 , b3 a2 , b2 a1 , b1 a0 , b0 S 1 (A < B ) S 2 (A = B ) S 3 (A > B )
a3 < b3 X X X 1 0 0
a3 > b3 X X X 0 0 1
a3 = b3 a2 < b2 X X 1 0 0
a3 = b3 a2 > b2 X X 0 0 1
a3 = b3 a2 = b2 a1 < b1 X 1 0 0
a3 = b3 a2 = b2 a1 > b1 X 0 0 1
a3 = b3 a2 = b2 a1 = b1 a0 < b0 1 0 0
a3 = b3 a2 = b2 a1 = b1 a0 > b0 0 0 1
a3 = b3 a2 = b2 a1 = b1 a0 = b0 0 1 0 A=B

Tabla 2.14: Tabla de funcionamiento del comparador de 4 bits.

Figura 2.56: Comparador de 4 bits utilizando comparadores de 1 bit.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 91

Circuitos integrados
Comercialmente se pueden encontrar los siguientes circuitos integrados (IC): 7485 (TTL) o 4063
(CMOS), que son comparadores de 4 bits. Además, tienen unas patillas especiales que permiten conec-
tar en cascada dos o más de estos con objeto de disponer de comparadores de un mayor número de bits
(8, 16, 24, 32, etc.), pudiéndose conectar en serie o paralelo. Lo vamos a ver con el siguiente ejemplo.

Ejemplo 23. Comparador de 8 bits (COMP-8) mediante dos comparadores de 4 bits (COMP-4).
Utilizando dos 7485 (COMP-4) podemos construir un comparador de
S1 (A < B)
8 bits (COMP-8), tal como se muestra en la Figura 2.57. Las entradas A /8

serán los dos valores binarios de 8 bits a comparar, A = a7 ..a0 y COMP-8 S2 (A = B)


B /8
B = b 7 ..b 0 , y las salidas serán las mismas de cualquier comparador, S3 (A > B)

S1S2S3.

Como se puede apreciar, las 3 salidas de un IC S 1 S 2 S 3 se conectan a las entradas A > B , A = B y


A > B del siguiente comparador que permiten realizar la conexión en cascada. Para el comparador de la
izquierda, esas entradas se conectan a los valores fijos 010, respectivamente; de esta manera, se simula
que hay otro comparador a su izquierda que indica que son iguales, y no afecta al resultado.

Figura 2.57: Comparador de 8 bits utilizando dos comparadores de 4 bit (7485).

Con uno de los comparadores (el de la derecha), se comparan los 4 bits más significativos (MSB)
de los dos valores binarios de 8 bits a comparar, es decir, a7 a6 a5 a4 con b7 b6 b5 b4 . Si no son iguales,
ya sea porque ese valor de 4 bits es menor o mayor, ya no es necesario seguir comparando el resto de
bits, puesto que se puede determinar que A < B ⇒ S 1 = 1 o A > B ⇒ S 3 = 1, respectivamente. En el caso
de que esos 4 bits sean iguales, entonces se tendría en cuenta el comparador de la izquierda, que realiza
la comparación de los otros 4 bits de menor peso (LSB) a3 a2 a1 a0 con b3 b2 b1 b0 , y el resultado de este
comparador será el resultado del comparador de 8 bits que se ha construido. Por ejemplo, si también son
iguales los 4 bits LSB, indicará que A = B ⇒ S 2 = 1, pero si se activase la entrada en cascada (A < B ) o
CAPÍTULO 2. SISTEMAS COMBINACIONALES 92

(A > B ), será que los valores de 8 bits comienzan igual, pero con los 4 bits LSB se ha determinado que
A < B ⇒ S 1 = 1 o A > B ⇒ S 3 = 1, respectivamente. La Tabla 2.15 muestra el funcionamiento de este
comparador; destacar que las entradas de conexión en cascada, que vienen del comparador anterior que
compara los 4 bits LSB, solo se tienen en cuenta en el caso de que los 4 bits MSB sean iguales, pues en
otro caso ya se habrá determinado si A < B o A > B .
Comparación 2 bits Entradas en cascada Salidas
a3 , b3 a2 , b2 a1 , b1 a0 , b0 (A < B ) (A = B ) (A > B ) S 1 (A < B ) S 2 (A = B ) S 3 (A > B )
a3 < b3 X X X X X X 1 0 0
a3 > b3 X X X X X X 0 0 1
a3 = b3 a2 < b2 X X X X X 1 0 0
a3 = b3 a2 > b2 X X X X X 0 0 1
a3 = b3 a2 = b2 a1 < b1 X X X X 1 0 0
a3 = b3 a2 = b2 a1 > b1 X X X X 0 0 1
a3 = b3 a2 = b2 a1 = b1 a0 < b0 X X X 1 0 0
a3 = b3 a2 = b2 a1 = b1 a0 > b0 X X X 0 0 1
a3 = b3 a2 = b2 a1 = b1 a0 = b0 1 0 0 1 0 0
a3 = b3 a2 = b2 a1 = b1 a0 = b0 0 1 0 0 1 0
a3 = b3 a2 = b2 a1 = b1 a0 = b0 0 0 1 0 0 1

Tabla 2.15: Tabla de funcionamiento del comparador de 4 bits 7485.

A continuación se muestran varios casos de uso del comparador de 8 bit construido:

A = 0000 0000 y B = 1111 0011: al comparar los 4 bits MSB de A y B obtendremos claramente
que A < B (a3 < b3 ), sin necesidad de tener en cuenta la comparación de los 4 bits LSB (primera
línea de la Tabla 2.15).

A = 1111 0000 y B = 0000 0011: al comparar los 4 bits MSB de A y B obtendremos claramente
que A > B (a3 > b3 ), sin necesidad de tener en cuenta la comparación de los 4 bits LSB (segunda
línea de la Tabla 2.15).

A = 1111 0011 y B = 1111 0000: al comparar los 4 bits MSB de A y B obtendremos que son
iguales, pero aun no podemos decir el resultado de la comparación. Es necesario considerar el
resultado del comparador de los 4 bits LSB; en este caso, vemos que A > B , y éste será el resultado
final (última línea de la Tabla 2.15).

A = 1111 0000 y B = 1111 0000: de forma similar al caso anterior, ahora vemos que son iguales
tanto los 4 bits MSB como los 4 bits LSB, obteniendo que A = B (penúltima línea de la Tabla
2.15).

Conectando en serie más comparadores de 4 bits podemos construir comparadores mayores, aunque
el nivel de dichos circuitos sería mayor. Mediante una implementación en paralelo, o serie-paralelo se
consigue reducir el nivel. Vamos a mostrar un ejemplo con comparadores de 2 bits, aunque no se entra
en más detalles.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 93

Ejemplo 24. Vamos a construir un comparador de 4 bits (COMP-4) utilizando comparadores de 2


bit (COMP-2) en serie y en paralelo.

Figura 2.58: Comparador de 4 bits utilizando comparadores de 2 bits (implementación en serie).

Figura 2.59: Comparador de 4 bits utilizando comparadores de 2 bits (implementación en paralelo).


CAPÍTULO 2. SISTEMAS COMBINACIONALES 94

Aplicaciones

Los comparadores pueden tener diversas aplicaciones:

Comprobar si el valor binario que proporciona algún circuito combinacional o sensor es un valor
concreto (=), o está dentro de un rango de valores (< y >), para activar o no alguna salida.

Ejemplo 25. Diseñar un circuito combinacional utilizando comparadores que recibe como entrada
un valor (positivo) de temperatura T codificado en binario de 4 bits t 3 t 2 t 1 t 0 , y genera una salida f
indicando si la temperatura está comprendida en el rango 3 ◦ C y 8 ◦ C o no.

SOLUCION: Se trata de utilizar dos comparadores, uno para comparar si el valor T ≥ 3 y otro
para comparar si el valor T ≤ 8, es decir, las entradas del valor A serán las de T , y en las entradas B
pondremos los valores constantes 3 (00112) ) y 8 (10002) ). Como los dos valores de los extremos (3 y 8)
también están permitidos en el rango, en el primer comparador será válida tanto la salida A = B como
A > B , por lo que utilizamos una puerta OR con las dos salidas S 2 y S 3 . Del mismo modo, en el segundo
comparador es válido tanto la salida A = B como A < B , por lo que utilizamos otra puerta OR con las
dos salidas S 1 y S 2 . Por último, como deben cumplirse ambas condiciones, colocamos una puerta AND,
según vemos en el circuito de la Figura 2.60.

Figura 2.60: Comprobador de rango utilizando comparadores de 4 bit.


CAPÍTULO 2. SISTEMAS COMBINACIONALES 95

Generadores/Comprobadores de paridad
Durante la transmisión de datos se pueden producir diversos errores que hagan que los datos lleguen
corruptos al receptor. Estos errores pueden ser debidos a interferencias electromagnéticas, radiación
solar, picos de tensión, temperatura, ataques malintencionados, etc. Como resultado, uno o varios bits
(ráfaga) podrían modificarse (0’s se convierten en 1’s o viceversa). Existen diversos mecanismos para
detectar errores ocurridos durante la transmisión de una serie de bits:

1. Bit de paridad: se trata de añadir un bit de redundancia a los bits transmitidos con objeto de tener
siempre un número par de 1’s (paridad par) o impar (paridad impar), incluyendo al bit de paridad.

2. Checksum: mediante un algoritmo (SHA-1, SHA-256, SHA-512, MD5, . . . ) se genera un valor,


que luego se puede comprobar a la recepción de los datos.

3. Control de redundancia cíclica, o Cyclic Redundancy Check (CRC): se trata de un tipo concreto
de Checksum más avanzado.

En esta sección vamos a estudiar unos circuitos combinacionales relacionados con el método del bit
de paridad. Como se ha dicho anteriormente, este método consiste en añadir un bit extra (bit de paridad)
a los bits que se van a transmitir. Podemos tener sistemas que trabajan con paridad par o paridad impar,
siendo necesario que tanto el transmisor como el receptor utilicen el mismo mecanismo. Se trata de
añadir un 0 o un 1 de tal manera que el número de 1’s transmitidos, incluyendo este bit de paridad, sea
par (paridad par) o impar (paridad impar).

Son necesarios dos circuitos (Figura 2.61):

1. Generador de paridad: genera el bit de paridad P de un conjunto de datos de entrada (x y z...), el


cual se transmitirá junto con ellos.

2. Comprobador de paridad: comprueba que el conjunto de datos recibidos, incluyendo el bit de


paridad (x y z...P ), tenga un número de 1’s correcto (par o impar), indicando en su salida si hay
error (E = 1) o no (E = 0).

x
x
y
y Generador P Detector E
Paridad z Paridad
z
P

Figura 2.61: Generador de paridad (izq.) y comprobador de paridad (dcha.).


CAPÍTULO 2. SISTEMAS COMBINACIONALES 96

Generador de paridad

A continuación vamos a estudiar el generador de paridad para la transmisión de un conjunto de 3


bits x y z . Comenzamos de la forma habitual, escribiendo la tabla de verdad e intentando simplificar las
funciones de salida P par y P i mpar .

x y z P par P i mpar

0 0 0 0 1 Ya tenemos número par de 1’s


0 0 1 1 0 Para tener número par de 1’s
0 1 0 1 0 Para tener número par de 1’s
0 1 1 0 1 Ya tenemos número par de 1’s

1 0 0 1 0 Para tener número par de 1’s


1 0 1 0 1 Ya tenemos número par de 1’s
1 1 0 0 1 Ya tenemos número par de 1’s
1 1 1 1 0 Para tener número par de 1’s

yz yz
x
00 01 11 10 x
00 01 11 10

0 0 1 0 1 0 1 0 1 0

1 1 0 1 0 1 0 1 0 1

P par = x ⊕ y ⊕ z P i mpar = x ⊕ y ⊕ z

Podemos observar que las funciones P par y P i mpar no pueden simplificarse mediante el mapa de
Karnaugh, ya que no pueden agruparse 1’s ni 0’s porque están aislados. Vamos a obtener la función
lógica desde la tabla de verdad en forma de suma de productos, y transformarla mediante el álgebra de
Boole:

P par = (x · y · z) + (x · y · z) + (x · y · z) + (x · y · z) =
£ ¤ £ ¤
= (x · y) + (x · y) · z + (x · y) + (x · y) · z =
= (x ⊕ y) · z + (x ⊕ y) · z = x ⊕ y ⊕ z

De forma similar podríamos obtener la función de P i mpar , pero podemos comprobar en la tabla de
verdad que es justo la inversa, por lo que nos quedaría:

P par = x ⊕ y ⊕ z
P i mpar = x ⊕ y ⊕ z

El circuito del generador de paridad par para 3 bits es el que se muestra en la Figura 2.62.
CAPÍTULO 2. SISTEMAS COMBINACIONALES 97

Figura 2.62: Circuitos del generador de paridad par (izq.) y comprobador de paridad (dcha.).

Comprobador de paridad

De forma similar, estudiamos el comprobador de paridad de 3-bit, que recibe como entradas esos
3-bits más el bit de paridad añadido (x y zP ), indicando en la salida si hay error (E = 1) o no (E = 0).

x y z P E par E i mpar zP
xy
00 01 11 10
0 0 0 0 0 1
00 0 1 0 1
0 0 0 1 1 0
0 0 1 0 1 0 01 1 0 1 0
0 0 1 1 0 1
11 0 1 0 1
0 1 0 0 1 0
10 1 0 1 0
0 1 0 1 0 1
0 1 1 0 0 1 E par = x ⊕ y ⊕ z ⊕ P
0 1 1 1 1 0
zP
1 0 0 0 1 0 00 01 11 10
xy
1 0 0 1 0 1
00 1 0 1 0
1 0 1 0 0 1
1 0 1 1 1 0 01 0 1 0 1

1 1 0 0 0 1 11 1 0 1 0
1 1 0 1 1 0 10 0 1 0 1
1 1 1 0 1 0
1 1 1 1 0 1 E i mpar = x ⊕ y ⊕ z ⊕ P

Al igual que las funciones lógicas del generador de paridad, éstas tampoco se pueden simplificar.
Sin embargo, no hace falta obtenerlas desde la tabla de verdad, ya que, como podemos observar, el
mapa de Karnaugh de E par es como un tablero de ajedrez, al igual que antes, y eso significa que la
podemos implementar mediante puertas XOR, y E i mpar es la inversa, por lo que:

E par = x ⊕ y ⊕ z ⊕ P
E i mpar = x ⊕ y ⊕ z ⊕ P
CAPÍTULO 2. SISTEMAS COMBINACIONALES 98

El circuito del comprobador de paridad par para 3 bits puede implementarse como se muestra en
la Figura 2.62. Los circuitos para el caso de paridad impar son los inversos, simplemente negando al
final.

Circuitos integrados
Ejemplos de generadores/comprobadores de paridad disponibles en ICs con tecnología TTL
para uso comercial (74x) son los siguientes:

74x180: generador/comprobador de paridad (8-bit).

74x280: generador/comprobador de paridad (9-bit).

Estos ICs tienen dos salidas, indicando si el número de 1’s de la entrada es Par (EVEN) o Impar
(ODD’), que serán complementarias. Por ejemplo, para el 74x280 (9-bit):

Número de entradas a nivel alto ’1’ Par (EVEN) Impar (ODD’)

0, 2, 4, 6, 8 1 0
1, 3, 5, 7, 9 0 1

Además, se pueden utilizar tanto como generador como comprobador de paridad. Por ejemplo,
supongamos dos valores de 8-bit a transmitir A = 0100 1001 y B = 0100 1000, y que se utiliza
paridad par:

Como generador de paridad par se utiliza la salida Impar (ODD’). Para el valor A, como tiene
un número impar de 1’s (3) será necesario añadir otro 1 para obtener un número de par de 1’s,
que es el valor de la salida Impar (ODD’) para este caso. Para el valor B, como tiene un número
par de 1’s (2), no es necesario añadir otro 1, siendo 0 la salida Impar (ODD’).

Como comprobador de paridad par también utilizaríamos la misma la salida Impar (ODD’). Ya
sea el valor A o B, al haberse transmitido utilizando paridad par, el circuito debe generar un 0 si
nos ha llegado un número par de 1’s, y 1 si nos ha llegado un número impar de 1’s, es decir, si se
ha producido error; esto lo proporciona la salida Impar (ODD’).

Del mismo modo podremos deducir que si utilizamos paridad impar, la salida que utilizaremos de
estos ICs será Par (EVEN), tanto como generador como comprobador de paridad.

El mecanismo explicado en esta sección tan sólo detecta el caso de error en un único bit; en caso
de que haya habido más errores no se detectarán. Existen otros mecanismos, como el de códigos de
Hamming, en el que se usan varios bit de paridad que permiten la detección e incluso la corrección de
errores.
Apéndices

99
ACRÓNIMOS

ALU Arithmetic Logic Unit


ASCII American Standard Code for Information Interchange
IC Integrated Circuit
IEEE Institute of Electrical and Electronics Engineers
ISO International Organization for Standardization
LED Light-Emitting Diode
LSB Least Significant Bit
MSB Most Significant Bit
PoS Product of Sums (Producto de sumas)
SoP Sum of Products (Suma de Productos)

100
B IBLIOGRAFÍA

[1] D. Cohen, “On holy wars and a plea for peace,” Computer, vol. 14, no. 10, pp. 48–54, 1981.

[2] G. Moore, “Cramming more components onto integrated circuits,” Proceedings of the IEEE,
vol. 86, no. 1, pp. 82–85, 1998.

101

También podría gustarte