Ya vimos en un post anterior sobre el álgebra de Boole los principios mas básicos de su aplicación en sistemas digitales. En este nuevo post toca explicar los que son las funciones canónicas y cómo podemos obtenerlas a partir de la tabla de la verdad de una función lógica. Esto nos va a venir muy bien para simplificar circuitos que inicialmente pueden ser enormes y muy aparatosos. Así pues, se define término canónico de una función lógica a todo producto o suma en el que aparecen todas las variables en su forma directa o complementada . Estas son las dos formas canónicas minterm y maxterm:
1ª forma canónica minterm suma de productos canónicos.
2ª forma canónica maxterm producto de sumas canónicas.
OBTENCIÓN A PARTIR DE LA TABLA DE LA VERDAD
Supongamos que tenemos la siguiente tabla de la verdad para una función lógica de tres variables , y :
Término minterm
Término maxterm
0
0
0
0
0
0
1
1
0
0
1
1
2
2
0
1
0
1
3
3
0
1
1
0
4
4
1
0
0
0
5
5
1
0
1
1
6
6
1
1
0
1
7
7
1
1
1
1
Minterms: Se toman las salidas que son "" y se expresa como suma de términos producto en los que las variables que son "" se expresan como literales y las que son "" como invertidas
Maxterms: Se toman las salidas que son "" y se expresa como producto de términos suma en los que las variables que son "" se expresan como literales y las que son "" como invertidas.
PASAR DE LA 1ª FORMA CANÓNICA A LA 2ª FORMA CANÓNICA
1. Se saca la función minterm invertida con los términos que son .
2. Se hace la inversa de la función aplicando la Ley de Morgan a los términos canónicos.
3. Se obtiene directamente cambiando los términos minúscula por mayúscula.
PASAR DE LA 2ª FORMA CANÓNICA A LA 1ª FORMA CANÓNICA
1. Se representa la función invertida, tomando los términos maxterm que no aparecen.
2. Se hace la inversa de la función aplicando la Ley de Morgan a los términos canónicos.
3. Se obtiene directamente cambiando los términos mayúscula por minúscula.
EJEMPLOS
En este ejemplo veremos qué sucede cuando uno de los términos no es canónico. ¿Que significa que "no es canónico"? Supongamos que tenemos que hallar la 2ª forma canónica de la siguiente función lógica:
Aquí parecen dos términos, y ambos han de ser obligatoriamente canónicos, pero el primero no lo es por que aparece una sola. Para que sea un término canónico han da parecer todas las variables en cada término, que en este caso son dos, y . Para hacerlo canónico podemos aplicar algunas leyes del álgebra de Boole. Por ejemplo:
En este momento ya tenemos lo tres términos de forma canónica, o lo que es lo mismo, la función tiene dos variables y y en cada término aparecen las dos variables. Para terminar, con la tabla de la verdad de esta función lógica de dos variables podremos obtener las dos funciones canónicas:
George Boole (1815 - 1864) desarrolló una herramienta matemática para solucionar problemas en función de dos únicos estados, el estado SI y el estado NO. Posteriormente se utilizaría para el estudio de los primeros computadores, en los que se pudo comprobar que para realizar grandes y complejos cómputos era mas factible usar la electrónica digital en vez de la analógica. Hoy lo seguimos utilizando prácticamente para todo. Puede parecer superfluo o poco relevante, pero en realidad se trata de la la base fundamental para entender las exigencias computacionales del procesamiento digital de la información, vamos ¡casi nada!
La aplicación del álgebra de Boole en computadores es del tipo binario, lo que quiere decir que el estado de un elemento del circuito lógico viene representado por una variable que puede valer "1" o "0". Un ejemplo que se utiliza siempre en sistemas digitales es un interruptor y como base una carga, de modo que si el interruptor está abierto hay tensión y si está cerrado no. Es decir, SI/NO, 1/0, verdadero/falso.
Por poner un ejemplo práctico, podremos decir "" cuando una lámpara está apagada y "" cuando está encendida.
Hoy en día tenemos sistemas de computadoras muy complicados en los que por muy complejos que estos sean al final internamente tienen un montón de dispositivos que o están abiertos o están cerrados. Lo complicado es que son muchos, y como son muchos pues nos veremos obligados a realizar funciones matemáticas con todos esos dispositivos para hacer funcionar un sistema digital.
En matemáticas, una función no es otra cosa mas que una representación de una serie de variables de entrada relacionadas ente si con las operaciones aritméticas correspondientes, de forma que el resultado de esa combinación nos va a dar un resultado de salida.
En el álgebra de Boole es exactamente igual, solo que el resultado de salida va a ser siempre un "" o un "". Por ejemplo, una función de tres variables de entrada se podría representar de la siguiente manera:
Para poder facilitar el cálculo de los valores de salida utilizaremos una "tabla de la verdad". Se trata de una tabla que recoge todas las combinaciones de las variables de entrada y los valores que toman las salidas, por ejemplo, para la función de tres variables del ejemplo la tabla de verdad sería:
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
1
1
0
0
0
1
0
1
0
1
1
0
1
1
1
1
1
En este caso desconocemos cuál es la función , pero si sabemos que salidas tiene. De momento eso no es importante, solo es un ejemplo. Ahora bien, la salida de para cada caso dependerá de la función.
A continuación se detallan algunos ejemplos de operaciones que se podrán realizar en el álgebra de Boole con puertas lógicas.
OPERACIONES EN EL ÁLGEBRA DE BOOLE
Unión o adición:
Es la suma de las variables, en lógica equivalente a la función .En un circuito con interruptores podríamos representar esta operación de la siguiente forma (interruptores en paralelo): En este caso, para que la salida sea y se encienda la bombilla bastaría con que uno de los dos (o los dos) interruptores o valgan . Por lo tanto, su tabla de verdad sería:
0
0
0
0
1
1
1
0
1
1
1
1
Intersección o producto:
Es el producto de las variables, en lógica equivalente a la función .En un circuito con interruptores podríamos representar esta operación de la siguiente forma (interruptores en serie): En este caso, para que la salida sea y se encienda la bombilla bastaría con que los dos interruptores y valgan . Por lo tanto, su tabla de verdad sería:
0
0
0
0
1
0
1
0
0
1
1
1
Complementación o inversión:
Esta operación es simplemente la inversión del valor de la variable a la que se le aplique, por ejemplo o .
Tabla de verdad completa con todas las operaciones:
0
0
0
0
1
1
0
1
1
1
1
0
1
0
1
0
0
1
1
1
1
1
0
0
Leyes fundamentales
A continuación unas leyes muy básicas y fáciles de recordar que nos van a servir principalmente para simplificar y de este modo para hacer circuitos más reducidos, por lo tanto más eficaces:
Conmutativa: Asociativa: Distributiva: Absorción: Morgan: Teorema de Shannon:
Composición de circuitos
Podemos crear un circuito a partir de una función y también al revés, por ejemplo, el circuito resultante de la siguiente función sería:
En marzo escribí una entrada en la que explicaba la notación matemática para convertir un número binario a decimal. Aunque Java no es de mis lenguajes preferidos, quise hacer la implementación de una clase en este lenguaje para compararlo con el mismo método en otros de mas bajo nivel como C o Ensamblador. Sin mas dilación, aquí va el código:
import java.util.Scanner;
public class BinarioDecimal {
//Atributos
private static String binario;
private static int longitud;
private static int decimal;
//Constructor vacío
public BinarioDecimal() {}
//Programa principal
public static void main(String[] args) {
binario = getStringInput("Binario: ");
longitud = binario.length();
int n = longitud;
for (int i = 0; i < longitud; i++) {
n--;
int b = Character.getNumericValue(binario.charAt(i));
decimal += b*(int)Math.pow(2,n);
}
System.out.printf("Decimal: %d", decimal);
}
//Metodo para leer la entrada por teclado
public static String getStringInput(String prompt) {
Scanner in = new Scanner(System.in);
System.out.print(prompt);
String input = in.nextLine();
in.close();
return input;
}
}
He añadido alguna cosa de más, como la entrada de datos mediante la clase Scanner de java.util para hacerlo interactivo, aunque lo importante es que aquí se puede apreciar la fórmula matemática de conversión:
El uso de los números binarios es mas importante de lo que mucha gente cree. Se trata del lenguaje que el ordenador entiende, ya que este interpreta diferencias de voltaje como (true o HI) y (false o LO). Cada byte de información está compuesto por ocho dígitos binarios, y a cada cifra o se le llama bit. El número utilizado en el ejemplo, el 10110100, sería un byte, y cada una de sus ocho cifras, un bit. Imaginemos que tenemos el número binario . Al sumarle una unidad, este número binario cambiará a . Sin embargo, si volvemos a añadirle otra unidad, este número en formato binario será el (aumenta la cifra a la izquierda, que era , y la anterior toma el valor mínimo). Sumemos ahora otra unidad y el aspecto del número será (tres en decimal). Y podríamos seguir.
Binario
Decimal
0000
0
0001
1
0010
2
0011
3
0100
4
0101
5
0110
6
0111
7
1000
8
1001
9
1010
10
1011
11
Esto nos permite establecer un sistema bastante sencillo de conversión del binario al decimal. A partir de ahora, cuando escribamos un número binario, lo haremos con la notación usual, con una "" al final del número (ej.: )
Bien, pero ahora nos falta saber que hay que hacer para convertir un número binario a decimal. Para ello hemos de aplicar la siguiente notación matemática:
Donde es el valor del bit binario en cada iteración, o sea, (false) o (true), y es el número de bits a convertir por ejemplo es un byte por que tiene 8 bits, así que en este caso . Así que, si queremos convertir el número binario de 8 bits a decimal sería de la siguiente forma:
En ingeniería electrónica o en sistemas digitales de la informática las funciones lógicas se utilizan en el ámbito mas bajo, en componentes electrónicos, en un mundo binario donde hay o no hay electricidad, en realidad no son otra cosa mas que operaciones con bits (1 y 0) o subidas y bajadas de tensión (HI y LO). Estas operaciones son la suma, la multiplicación y la inversión, y con la combinación de estas tres podemos formar las siguientes instrucciones mnemotécnicas llamadas funciones:
OR
La función OR representa la suma y tiene la siguiente ecuación lógica:
Su simbolo es este:
Código 7432
Y su tabla de verdad es:
0
0
0
0
1
1
1
0
1
1
1
1
Esta puerta lógica tiene salida alta (HI) siempre que al menos una de las entradas sea alta.
AND
La función AND representa la multiplicación y tiene la siguiente ecuación lógica:
Su simbolo es este:
Código 7408
Y su tabla de verdad es:
0
0
0
0
1
0
1
0
o
1
1
1
Esta puerta lógica tiene salida alta (HI) si todas las entradas son altas.
NOT o INVER
La función NOT o INVER representa el valor inverso de entrada, es decir, si la entrada es HI (1), la salida es LO (0) y viceversa. Tiene la siguiente ecuación lógica:
Su simbolo es este:
Código 7404
En realidad el símbolo que he puesto arriba es el que se utiliza como buffer en un cable conductor, pero el símbolo NOT o INVER que se utiliza convencionalmente en otras funciones lógicas es el circulito pequeño, lo veremos en las siguientes funciones.
Su tabla de verdad es:
0
1
1
0
Cambia el estado de una entrada HI a LO o el estado de una entrada LO a HI.
NOR
La función NOR representa la inversión de la suma o el producto de las variables invertidas (Ley de Morgan) y tiene las siguientes ecuaciones lógicas:
Su simbolo es este:
Código 7402
Y su tabla de verdad es:
0
0
1
0
1
0
1
0
o
1
1
0
Esta puerta lógica tiene salida alta (HI) si no hay ninguna entrada baja (LO).
NAND
La función NAND representa la inversión del producto o la suma de las variables invertidas (Ley de Morgan) y tiene las siguientes ecuaciones lógicas:
Su simbolo es este:
Código 7400
Y su tabla de verdad es:
0
0
1
0
1
1
1
0
1
1
1
0
Esta puerta lógica tiene salida baja (LO) si todas las entradas son altas (HI).
XOR
La función XOR representa una suma exclusiva o la suma del producto de las variables de entrada donde sólo una está invertida. Tiene las siguientes ecuaciones lógicas:
Su simbolo es este:
Código 7486
Y su tabla de verdad es:
0
0
0
0
1
1
1
0
1
1
1
0
Esta puerta lógica tiene salida baja (LO) si todas las entradas son iguales.
XNOR
La función XNOR representa la inversión de una suma exclusiva o la suma del producto de las variables de entrada cuando estas son iguales (Delta de Kronecker). Tiene las siguientes ecuaciones lógicas:
Su simbolo es este:
Código XOR + NOT
Y su tabla de verdad es:
0
0
1
0
1
0
1
0
0
1
1
1
Esta puerta lógica tiene salida alta (HI) si todas las entradas son iguales.