TC UD2 (Apuntes)
TC UD2 (Apuntes)
18 de mayo de 2025
Resumen
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
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].
En este capítulo
Algebra de Boole
Funciones lógicas
Sumadores y restadores
Codificadores y decodificadores
Multiplexores y demultiplexores
2
CAPÍTULO 2. SISTEMAS COMBINACIONALES 3
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).
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
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.
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 + . . .
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
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).
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
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:
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)
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.
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
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:
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
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.
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
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
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
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:
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.
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
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.
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
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
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 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)
bc
a 00 01 11 10
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 )
11 1 1 0 0
10 0 1 0 0
CAPÍTULO 2. SISTEMAS COMBINACIONALES 19
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:
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
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.
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):
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)
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.
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
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)
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.
f NOR2 = (a + b + c) + (a + b + c) = (a + b + c) + (a + b + c)
Figura 2.7: Circuito utilizando puertas universales de 2 entradas: NAND (izq.) y NOR (dcha.).
CAPÍTULO 2. SISTEMAS COMBINACIONALES 24
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.
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.
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
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.
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)
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
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
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
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.
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.
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.
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)
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
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
S = (a ⊕ b) ⊕C i n
C out = (a · b) + (a ⊕ b) · C i n
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).
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
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).
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 .
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:
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
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
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
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
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
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
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 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.
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
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.
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
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.
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
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
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.
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
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
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
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
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
Controlador de teclado 4 × 4
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.
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.
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.
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.
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
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
a
f b
g
e c
d
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
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
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.
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
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
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
Multiplexor de 8
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).
Figura 2.43: Arboles de puertas equivalentes a una puerta OR de 8 (izq.) y 16 (dcha.) entradas.
Expansión de multiplexores
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.
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
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
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.
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
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:
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.
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.
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)
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).
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:
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.
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:
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
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
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.
2. MUX-8:
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
Los circuitos implementados con un multiplexor MUX-16, MUX-8 y MUX-4 quedarían como los
de la Figura 2.50, respectivamente:
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.
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.
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
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
S1 = a · b
S 2 = a · b + a · b = (a ⊕ b) = (a · b + a · b)
S3 = a · b
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.
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.
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.
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
S1S2S3.
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
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
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.
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.
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).
x
x
y
y Generador P Detector E
Paridad z Paridad
z
P
Generador de paridad
x y z P par P i mpar
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:
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):
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
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