Puertas lógicas

OR

  1. Ecuación lógica
    S = A + B
  2. Código electrónico internacional
    7432
  3. Funcionamiento
    Tabla de la verdad
    A B S
    0 0 0
    0 1 1
    1 0 1
    1 1 1

AND

  1. Ecuación lógica
    S = A \cdot B
  2. Código electrónico internacional
    7408
  3. Funcionamiento
    Tabla de la verdad
    A B S
    0 0 0
    0 1 0
    1 0 0
    1 1 1

NOT

  1. Ecuación lógica
    S = \overline{A}
  2. Código electrónico internacional
    7404
  3. Funcionamiento
    Tabla de la verdad
    A S
    0 1
    1 0

NOR

  1. Ecuación lógica
    S = \overline{A+B}
    S = \overline{A} \cdot \overline{B}
  2. Código electrónico internacional
    7402
  3. Funcionamiento
    Tabla de la verdad
    A B S
    0 0 1
    0 1 0
    1 0 0
    1 1 0

NAND

  1. Ecuación lógica
    S = \overline{A\cdot B}
    S = \overline{A}+\overline{B}
  2. Código electrónico internacional
    7400
  3. Funcionamiento
    Tabla de la verdad
    A B S
    0 0 1
    0 1 1
    1 0 1
    1 1 0

XOR

  1. Ecuación lógica
    S = A\oplus B
    S = A\cdot \overline{B}+\overline{A}\cdot B
  2. Código electrónico internacional
    7486
  3. Funcionamiento
    Tabla de la verdad
    A B S
    0 0 0
    0 1 1
    1 0 1
    1 1 0

XNOR

  1. Ecuación lógica
    S = \overline{A\oplus B}
    S =\overline{A\cdot B}+A\cdot B
  2. Código electrónico internacional
    XOR+NOT
  3. Funcionamiento
    Tabla de la verdad
    A B S
    0 0 1
    0 1 0
    1 0 0
    1 1 1

Si te ha interesado este artículo puede que también te interese este: Álgebra de Boole

Obtención de la función canónica a partir de la tabla de la verdad

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 a o complementada \overline{a}. Estas son las dos formas canónicas minterm y maxterm:

1ª forma canónica minterm \Rightarrow suma de productos canónicos.
2ª forma canónica maxterm \Rightarrow 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 a, b y c:

Término minterm Término maxterm a b c F
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 F que son "1" y se expresa como suma de términos producto en los que las variables que son "1" se expresan como literales y las que son "0" como invertidas

F(a,b,c) = \overline{ab}c+\overline{a}b\overline{c}+a\overline{b}c+ab\overline{c}+abc \Rightarrow
\Rightarrow F(a,b,c)=m_{1}+m_{2}+m_{5}+m_{6}+m_{7} = \sum m(1,2,5,6,7)

Maxterms: Se toman las salidas F que son "0" y se expresa como producto de términos suma en los que las variables que son "0" se expresan como literales y las que son "1" como invertidas.

F(a,b,c)=(a+b+c)(a+\overline{b}+\overline{c})(\overline{a}+b+c) \Rightarrow
\Rightarrow F(a,b,c)=M_{0} \cdot M_{3} \cdot M_{4} = \prod M(0,3,4)

PASAR DE LA 1ª FORMA CANÓNICA A LA 2ª FORMA CANÓNICA

F(a,b,c)=m_{1}+m_{2}+m_{5}+m_{6}+m_{7}=\sum m(1,2,5,6,7)

1. Se saca la función minterm invertida con los términos que son 0.

\overline{F(a,b,c)}=m_{0}+m_{3}+m_{4}=\sum m(0,3,4)

2. Se hace la inversa de la función aplicando la Ley de Morgan a los términos canónicos.

F(a,b,c)=\overline{m_{0}+m_{3}+m_{4}}=\overline{\sum m(0,3,4)}\Rightarrow
\Rightarrow F(a,b,c)=\overline{m_0} \cdot \overline{m_3} \cdot \overline{m_4}

3. Se obtiene directamente cambiando los términos minúscula por mayúscula.

F(a,b,c)=M_{0} \cdot M_{3} \cdot M_{4}

PASAR DE LA 2ª FORMA CANÓNICA A LA 1ª FORMA CANÓNICA

F(a,b,c)=M_{3} \cdot M_{4} \cdot M_{7}=\prod M(3,4,7)

1. Se representa la función invertida, tomando los términos maxterm que no aparecen.

\overline{F(a,b,c)}=M_{0} \cdot M_{1} \cdot M_{2} \cdot M_{5} \cdot M_{6} = \prod M(0,1,2,5,6)

2. Se hace la inversa de la función aplicando la Ley de Morgan a los términos canónicos.

F(a,b,c)=\overline{M_{0} \cdot M_{1} \cdot M_{2} \cdot M_{5} \cdot M_{6}}=\overline{\prod M(0,1,2,5,6)} \Rightarrow
\Rightarrow F(a,b,c)=\overline{M_{0}}+\overline{M_{1}}+\overline{M_{2}}+\overline{M_{5}}+\overline{M_{6}}

3. Se obtiene directamente cambiando los términos mayúscula por minúscula.

F(a,b,c)=m_{0}+m_{1}+m_{2}+m_{5}+m_{6}

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:

F(a,b)=\overline{a+a\overline{b}}

Aquí parecen dos términos, y ambos han de ser obligatoriamente canónicos, pero el primero no lo es por que aparece una a 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, a y b. Para hacerlo canónico podemos aplicar algunas leyes del álgebra de Boole. Por ejemplo:

F(a,b)=\underbrace{\overline{a+a\overline{b}}}_{Ley \ de \ Morgan}=\overline{a} \cdot \underbrace{\overline{a\overline{b}}}_{Ley \ de \ Morgan}=\overline{a} \cdot (\overline{a}+b) \Rightarrow

\Rightarrow \underbrace{\overline{a} \overline{a}}_{\overline{a} \cdot \overline{a}=\overline{a}}+\overline{a}b=\overline{a}+\overline{a}b=\underbrace{\overline{ab}}_{m_{0}}+\underbrace{\overline{a}b}_{m_{1}}+\underbrace{\overline{a}b}_{m_{1}}

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 a y b 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:

Tabla de la verdad:

Término minterm Término maxterm a b F
0 0 0 0 1
1 1 0 1 1
2 2 1 0 0
3 3 1 1 0

Minterm:

F(a,b)=m_{0}+m_{1}=\sum m(0,1)

Maxterm:

F(a,b)=M_{2} \cdot M_{3}=\prod M(2,3)

Álgebra de Boole

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, George Booleen 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 "0" cuando una lámpara está apagada y "1" 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 "0" o un "1". Por ejemplo, una función de tres variables de entrada se podría representar de la siguiente manera:

 F(a, b, c) = abc+ab\overline{c}+\overline{a}bc

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:

a b c F
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 F, pero si sabemos que salidas tiene. De momento eso no es importante, solo es un ejemplo. Ahora bien, la salida de F 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

  1. Unión o adición: F = A + B
    Es la suma de las variables, en lógica equivalente a la función OR.OR BooleEn un circuito con interruptores podríamos representar esta operación de la siguiente forma (interruptores en paralelo):
    Unión o adiciónEn este caso, para que la salida sea 1 y se encienda la bombilla bastaría con que uno de los dos (o los dos) interruptores A o B valgan 1. Por lo tanto, su tabla de verdad sería:
    A B F
    0 0 0
    0 1 1
    1 0 1
    1 1 1
  2. Intersección o producto: F = a \cdot b
    Es el producto de las variables, en lógica equivalente a la función AND.AND BooleEn un circuito con interruptores podríamos representar esta operación de la siguiente forma (interruptores en serie):
    Intersección o productoEn este caso, para que la salida sea 1 y se encienda la bombilla bastaría con que los dos interruptores A y B valgan 1. Por lo tanto, su tabla de verdad sería:
    A B F
    0 0 0
    0 1 0
    1 0 0
    1 1 1
  3. Complementación o inversión: F = \overline{a}
    Esta operación es simplemente la inversión del valor de la variable a la que se le aplique, por ejemplo A = \overline{A} o \overline{B} = B.

Tabla de verdad completa con todas las operaciones:

A B F=A+B F=A \cdot B F=\overline{A} F=\overline{B}
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:

a + \overline{a} = 1
a \cdot \overline{a} = 0
0 + a = a
1 \cdot a = a
1 + a = 1
0 \cdot a = 0
a + a = a
a \cdot a = a
\overline{\overline{a}} = a

Conmutativa: a + b = b + a \rightarrow a \cdot b = b \cdot a
Asociativa: a + b + c = (a + b) + c = a + (b + c) \rightarrow a \cdot b \cdot c = (a \cdot b) \cdot c = a \cdot (b \cdot c)
Distributiva: a + bc = (a+b)(a+c) \rightarrow a(b+c) = ab + ac
Absorción: a + ab = a(1 + b) = a \rightarrow a(a + b) = aa + ab = a
Morgan: \overline{a + b} = \overline{a} \cdot \overline{b} \rightarrow \overline{a \cdot b} = \overline{a} + \overline{b}
Teorema de Shannon: F=f(a,b,c) = a \cdot f(1,b,c)+\overline{a} \cdot f(0,b,c)
F=bc \Rightarrow F=abc+\overline{a}bc

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:

S=a\overline{c}+bc+\overline{a}c
Circuito ejemplo Boole

En los próximos artículos veremos la obtención de las diferentes funciones canónicas a partir de una tabla de la verdad como las que ya hemos visto aquí y también la simplificación mediante mapas de Karnaugh.

Conversor de Binario a Decimal en Java

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:

\displaystyle \sum_{i=0}^{n=bits-1} b_{i} \cdot 2^{n-i}

Conversión de binario a decimal

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 1 (true o HI) y 0 (false o LO). Cada byte de información está compuesto por ocho dígitos binarios, y a cada cifra 0 o 1 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 0. Al sumarle una unidad, este número binario cambiará a 1. Sin embargo, si volvemos a añadirle otra unidad, este número en formato binario será el 10 (aumenta la cifra a la izquierda, que era 0, y la anterior toma el valor mínimo). Sumemos ahora otra unidad y el aspecto del número será 11 (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
\vdots \vdots

 

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 "b" al final del número (ej.: 10110100b)

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:

\displaystyle \sum_{i=0}^{n=bits-1} b_{i} \cdot 2^{n-i}

Donde b es el valor del bit binario en cada iteración, o sea, 0 (false) o 1 (true), y bits es el número de bits a convertir por ejemplo 10110100 es un byte por que tiene 8 bits, así que en este caso bits = 8. Así que, si queremos convertir el número binario 10110100 de 8 bits a decimal sería de la siguiente forma:

1 0 1 1 0 1 0 0
1_{0} \cdot 2^7 0_{1} \cdot 2^6  1_{2} \cdot 2^5 1_{3} \cdot 2^4 0_{4} \cdot 2^3 1_{5} \cdot 2^2 0_{6} \cdot 2^1 0_{7} \cdot 2^0

Sumando cada cálculo de bit quedaría:

1 \cdot 2^7+0+1 \cdot 2^5+1 \cdot 2^4+0+1 \cdot 2^2+0+0 \Rightarrow
\Rightarrow 128+32+16+4=180

Y finalmente se escribe:

10110100b=180

Funciones lógicas elementales

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:

Q = A + B

Su simbolo es este:

Símbolo de la función lógica OR
Código 7432

Y su tabla de verdad es:

A B Q
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:

Q = A \cdot B

Su simbolo es este:

Símbolo de la función lógica AND
Código 7408

Y su tabla de verdad es:

A B Q
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:

A \rightarrow \overline{A}

Su simbolo es este:

Símbolo de la función lógica NOT
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:

A  \overline{A}
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:

Q = \overline{A + B}

Q = \overline{A} \cdot \overline{B}

Su simbolo es este:

Símbolo de la función lógica NOR
Código 7402

Y su tabla de verdad es:

A B Q
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:

Q = \overline{A \cdot B}

Q = \overline{A} \displaystyle{ + } \overline{B}

Su simbolo es este:

Símbolo de la función lógica NAND
Código 7400

Y su tabla de verdad es:

A B Q
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:

Q = A \oplus B

Q = A \cdot \overline{B} \displaystyle{ + } \overline{A} \cdot B

Su simbolo es este:

Símbolo de la función lógica XOR
Código 7486

Y su tabla de verdad es:

A B Q
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:

Q = \overline{A \oplus B}

Q =\overline{A} \cdot \overline{B} + A \cdot B

Su simbolo es este:

Símbolo de la función lógica XNOR
Código XOR + NOT

Y su tabla de verdad es:

A B Q
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.