Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
EJERCICIO 1
Este ejercicio es un ejemplo de cómo se puede simplificar una función booleana utilizando la
notación de cubos. Su objetivo es aclarar el concepto de cubo y su uso, pero debe tenerse muy
en cuenta que existen multitud de programas capaces de realizar esta minimización
automáticamente y que el diseñador, en la práctica, nunca tendrá que realizar este proceso
manual.
Dados los siguientes minterms de una función, utilizad la notación cúbica para obtener una
expresión mínima. Los minterms en rojo representan términos redundantes.
En primer lugar explicaremos la notación utilizada: El término Σ(… ) se utiliza para indicar los
minterms que forman parte de la función, mientras que es término Σ𝑑 (… ) se utiliza para
indicar los términos redundantes.
El proceso de minimización consta de dos pasos. En el primero se buscan todos los implicantes
de la función, encontrando todas las parejas de minterms que difieren en un único bit, y
repitiendo este proceso con los implicantes que se van encontrando. Conforme se van
encontrando implicantes, los términos o implicantes de los que proceden se van marcando. El
segundo paso consiste en buscar un conjunto mínimo de implicantes no marcados que cubran
todos los minterms de la función, sin tener en cuenta los minterms redundantes.
1r paso: Búsqueda de todos los implicantes que se pueden obtener directamente de los
minterms. Hemos divido los minterms en dos grupos, escribiendo en rojo los minterms
redundantes. Asimismo, si un implicante proviene de dos minterms redundates, también lo
escribiremos en rojo. (Hemos numerado los minterms y los implicantes para mayor claridad)
Minterm marca
1 𝑚5 =0101
2 𝑚6 =0110
3 𝑚7 =0111
4 𝑚3 =0011
5 𝑚4 =0100
6 𝑚12 =1100
Los minterms numerados como 1 y 3 difieren en 1 bit y dan lugar al implicante 01x1. Puesto
que este implicante contiene a los minterms 1 y 3, los marcamos:
Minterns
Minterm marca implicante marca
de origen
1 0101
2 0110 7 1,3 01x1
3 0111
4 0011
5 0100
6 1100
Siguiendo el mismo proceso, los minterms numerados como 1 y 5 generan el implicante 010x
y los minterms numerados como 5 y 6 generan el implicante x100. Como el implicante x100
proviene de dos minterms redundantes, lo marcamos en rojo:
Minterns
Minterm marca implicante marca
de origen
1 0101
7 1,3 01x1
2 0110
8 1,5 010x
3 0111
4 0011
5 0100 12 5,6 x100
6 1100
Minterns
Minterm marca implicante marca
de origen
7 1,3 01x1
1 0101 8 1,5 010x
2 0110 9 2,3 011x
3 0111 10 2,5 01x0
11 3,4 0x11
4 0011
5 0100 12 5,6 x100
6 1100
El siguiente paso consiste en buscar los implicantes de la lista que acabamos de construir que
difieren en un único bit (0 o 1) para formar implicantes de orden superior:
4 0011
5 0100 12 5,6 x100
6 1100
Los dos implicantes de orden 2 que hemos obtenido son iguales (01xx), así que ya no podemos
seguir buscando implicantes de orden superior. Fijémos que nos han quedado 3 implicantes
sin marcar, el 01xx, el 0x11 y el x100. Este último contiene sólo terminos redundantes, así que
no necesitaremos cogerlo.
Minterms
(según numeración)
implicante 1 2 3
01xx
0x11
El implicante 01xx contiene todos los minterms de la función, así que la función simplificada
será:
𝑓(𝑎, 𝑏, 𝑐, 𝑑) = 𝑎̅. 𝑏
EJERCICIO 2
Diseñar un circuito que acepta 4 bits de entrada x,y,z,w, y genera dos señales de salida f y g de
acuerdo con la siguiente descripción:
case xy is
when “00” => f<=z; g<=w;
when “01” => f<=0; g<=z+w;
when “10” => f<=z; g<=0;
when “11” => f<=1; g<=1;
end case;
x y z w f g
0 0 0 0 0 0
0 0 0 1 0 1
0 0 1 0 1 0
0 0 1 1 1 1
0 1 0 0 0 0
0 1 0 1 0 1
0 1 1 0 0 1
0 1 1 1 0 1
1 0 0 0 0 0
1 0 0 1 0 0
1 0 1 0 1 0
1 0 1 1 1 0
1 1 0 0 1 1
1 1 0 1 1 1
1 1 1 0 1 1
1 1 1 1 1 1
𝑓 = 𝑥. 𝑦 + 𝑦̅. 𝑧
𝑔 = 𝑥̅ . 𝑤 + 𝑦. 𝑧 + 𝑥. 𝑦
Los multiplexores de la figura son multiplexores 4-a-1, con dos entradas de control x e y que
aquí se han representado por un bus de 2 bits. Las entradas a los multiplexores se
corresponden, de arriba abajo, a los valores de las señales de control xy=00, xy=01, xy=10 y
xy=11 respectivamente.
EJERCICIO 3
Construye un circuito que acepta 4 entradas x,y,z,w, (x e y son señales de 1bit; z y w son
números binarios de n bits); y genera dos salidas f y g de n bits cada una de acuerdo con la
siguiente descripción:
case xy is
when “00” => f<=z; g<=w;
when “01” => f<=0; g<=z+w;
when “10” => f<=z; g<=0;
when “11” => f<=1; g<=1;
end case;
Nota:
1) La operación z+w representa una suma aritmética de dos números de n bits, y
2) Las expresiones “f <= 1; g <= 1”, o “f <= 0” significan que todos los bits de f y g toman
el valor indicado.
Evidentemente en este caso no podemos construir ninguna tabla de verdad puesto z y w son
números de n bits en general. Lo que si podemos hacer es construir el circuito directamente
desde el algoritmo.
(Cuando un bus de n bits se conecta a un bus de n+1 bits se entiende que el bit más
significativo del bus de n+1 líneas se ha fijado a 0).
La figura de la izquierda muestra el detalle del MUX que genera las salidas f en caso que
utilizásemos MUXs convencionales de 4-a-1 de 1 bit, mientras que la figura de la derecha
muestra el detalle del MUX que genera las salidas g.
EJERCICIO 4
Si A y B son dígitos BCD, el valor máximo que puede tomar la suma (más el cIN) es 19 (9+9+1),
que para representarlo en BCD necesitaremos 8 bits. Llamaremos S0 a los 4 bits menos
significativos y S1 a los 4 bits más significativos. Visto así, nuestro problema se reduce a
diseñar el “circuito corrector” de la figura.
El circuito corrector tiene 5 entradas (tabla de verdad de 32 filas) y 8 salidas, valores todavía
aceptables para implementar el circuto a partir de la tabla de verdad:
carryOUT suma3 suma2 suma1 suma0 S13 S12 S11 S10 S03 S02 S01 S00
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 1
0 0 0 1 0 0 0 0 0 0 0 1 0
0 0 0 1 1 0 0 0 0 0 0 1 1
0 0 1 0 0 0 0 0 0 0 1 0 0
0 0 1 0 1 0 0 0 0 0 1 0 1
0 0 1 1 0 0 0 0 0 0 1 1 0
0 0 1 1 1 0 0 0 0 0 1 1 1
0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 1 0 0 0 0 1 0 0 1
0 1 0 1 0 0 0 0 1 0 0 0 0
0 1 0 1 1 0 0 0 1 0 0 0 1
0 1 1 0 0 0 0 0 1 0 0 1 0
0 1 1 0 1 0 0 0 1 0 0 1 1
0 1 1 1 0 0 0 0 1 0 1 0 0
0 1 1 1 1 0 0 0 1 0 1 0 1
1 0 0 0 0 0 0 0 1 0 1 1 0
1 0 0 0 1 0 0 0 1 0 1 1 1
1 0 0 1 0 0 0 0 1 1 0 0 0
1 0 0 1 1 0 0 0 1 1 0 0 1
1 0 1 0 0 x x x x x x x x
1 0 1 0 1 x x x x x x x x
1 0 1 1 0 x x x x x x x x
1 0 1 1 1 x x x x x x x x
1 1 0 0 0 x x x x x x x x
1 1 0 0 1 x x x x x x x x
1 1 0 1 0 x x x x x x x x
1 1 0 1 1 x x x x x x x x
1 1 1 0 0 x x x x x x x x
1 1 1 0 1 x x x x x x x x
1 1 1 1 0 x x x x x x x x
1 1 1 1 1 x x x x x x x x
𝑆02 = ̅̅̅̅̅̅̅̅̅.
𝑠𝑢𝑚𝑎3 𝑠𝑢𝑚𝑎2 + 𝑠𝑢𝑚𝑎2 . 𝑠𝑢𝑚𝑎1 + ̅̅̅̅̅̅̅̅̅.
𝑠𝑢𝑚𝑎1 𝑐𝑎𝑟𝑟𝑦𝑂𝑈𝑇
𝑆01 = ̅̅̅̅̅̅̅̅̅.
𝑠𝑢𝑚𝑎3 𝑠𝑢𝑚𝑎1 . ̅̅̅̅̅̅̅̅̅̅̅̅
𝑐𝑎𝑟𝑟𝑦𝑂𝑈𝑇 + 𝑠𝑢𝑚𝑎3 . 𝑠𝑢𝑚𝑎2 . 𝑠𝑢𝑚𝑎1 + 𝑠𝑢𝑚𝑎1 . 𝑐𝑎𝑟𝑟𝑦𝑂𝑈𝑇
𝑆003 = 𝑠𝑢𝑚𝑎0
EJERCICIO 5
Este ejercicio es un ejemplo más de cómo construir un circuito a partir del algoritmo. En los
problemas 7 y 8 de los ejercicios semanales vimos cómo se puede construir un sistema digital
que, dados 3 números x, y, max, enteros y de n bits, devuelve un valor z, entero y de n bits, tal
que:
▪ Si 0 ≤ x - y ≤ max entonces z = x - y;
▪ Si (x - y)> max, entonces z = max;
▪ Si (x - y)< 0, entonces z = 0.
Esto lo hicimos suponiendo que disponíamos de un componente (un procedimiento)
difference(A, B, s, C), que calcula A – B y devuelve el signo de la resta en s y el valor absoluto
de la resta en C.
En este problema diseñaremos el componente difference(A, B, s, C)
Básicamente, el algoritmo que buscamos debe hacer la resta A-B y ver si el resultado es
positivo, en cuyo caso s=0 y C=A-B, o negativo, en cuyo caso s=1 y C=B-A. Para hacerlo más
fácil, vamos a imaginarnos que disponemos de un componente RESTA(A,B,carryOUT,R) tal
que si AB el resultado de la resta es R=A-B y carryOUT=0, y si A<B el resultado R es
erróneo (no es la resta de A-B) y carryOUT =1
Figura 1
Figura 2
Figura 3
Todo lo que falta por hacer es describir el procedimiento RestaColumna y construirlo con
puertas lógicas:
Figura 4
Lo único que quedaría por hacer es ir sustituyendo los módulos RestaColumna de la figura 3
por este circuito construido con puertas lógicas y sustituir los módulos RESTA de la figura 1
por el esquema resultante de esta operación. Con esto obtendremos el diseño del módulo
difference que nos pedían, utilizando como componentes las puertas lógicas y multiplexores.
Fijémonos que este diseño es totalmente modular y válido para cualquier valor de n.