miércoles, 20 de octubre de 2010

Circuitos logicos!

Circuitos lógicos

Los circuitos de conmutación y temporización, o circuitos lógicos, forman la base de cualquier dispositivo en el que se tengan que seleccionar o combinar señales de manera controlada. Entre los campos de aplicación de estos tipos de circuitos pueden mencionarse la conmutación telefónica, las transmisiones por satélite y el funcionamiento de las computadoras digitales.

La lógica digital es un proceso racional para adoptar sencillas decisiones de 'verdadero' o 'falso' basadas en las reglas del álgebra de Boole. El estado verdadero se representado por un 1, y falso por un 0, y en los circuitos lógicos estos numerales aparecen como señales de dos tensiones diferentes. Los circuitos lógicos se utilizan para adoptar decisiones específicas de 'verdadero-falso' sobre la base de la presencia de múltiples señales 'verdadero-falso' en las entradas. Las señales se pueden generar por conmutadores mecánicos o por transductores de estado sólido. La señal de entrada, una vez aceptada y acondicionada (para eliminar las señales eléctricas indeseadas, o ruidos), es procesada por los circuitos lógicos digitales. Las diversas familias de dispositivos lógicos digitales, por lo general circuitos integrados, ejecutan una variedad de funciones lógicas a través de las llamadas puertas lógicas, como las puertas OR, AND y NOT y combinaciones de las mismas (como 'NOR', que incluye a OR y a NOT). Otra familia lógica muy utilizada es la lógica transistor-transistor. También se emplea la lógica de semiconductor complementario de óxido metálico, que ejecuta funciones similares a niveles de potencia muy bajos pero a velocidades de funcionamiento ligeramente inferiores. Existen también muchas otras variedades de circuitos lógicos, incluyendo la hoy obsoleta lógica reóstato-transistor y la lógica de acoplamiento por emisor, utilizada para sistemas de muy altas velocidades.

Los bloques elementales de un dispositivo lógico se denominan puertas lógicas digitales. Una puerta Y (AND) tiene dos o más entradas y una única salida. La salida de una puerta Y es verdadera sólo si todas las entradas son verdaderas. Una puerta O (OR) tiene dos o más entradas y una sola salida. La salida de una puerta O es verdadera si cualquiera de las entradas es verdadera, y es falsa si todas las entradas son falsas. Una puerta INVERSORA (INVERTER) tiene una única entrada y una única salida, y puede convertir una señal verdadera en falsa, efectuando de esta manera la función negación (NOT). A partir de las puertas elementales pueden construirse circuitos lógicos más complicados, entre los que pueden mencionarse los circuitos biestables (también llamados flip-flops, que son interruptores binarios), contadores, comparadores, sumadores y combinaciones más complejas.

En general, para ejecutar una determinada función es necesario conectar grandes cantidades de elementos lógicos en circuitos complejos. En algunos casos se utilizan microprocesadores para efectuar muchas de las funciones de conmutación y temporización de los elementos lógicos individuales. Los procesadores están específicamente programados con instrucciones individuales para ejecutar una determinada tarea o tareas. Una de las ventajas de los microprocesadores es que permiten realizar diferentes funciones lógicas, dependiendo de las instrucciones de programación almacenadas. La desventaja de los microprocesadores es que normalmente funcionan de manera secuencial, lo que podría resultar demasiado lento para algunas aplicaciones. En tales casos se emplean circuitos lógicos especialmente diseñados.

Circuitos combinacionales y secuenciales

Circuitos Combinacionales
Un circuito combinacional es un sistema que contiene operaciones booleanas básicas (AND, OR, NOT), algunas entradas y un juego de salidas, como cada salida corresponde a una función lógica individual, un circuito combinacional a menudo implementa varias funciones booleanas diferentes, es muy importante recordar éste echo, cada salida representa una función booleana diferente.
Un ejemplo común de un circuito combinacional es el decodificador de siete segmentos, se trata de un circuito que acepta cuatro entradas y determina cuál de los siete segmentos se deben iluminar para representar la respectiva entrada, de acuerdo con lo dicho en el párrafo anterior, se deben implementar siete funciones de salida diferentes, una para cada segmento. Las cuatro entradas para cada una de éstas funciones booleanas son los cuatro bits de un número binario en el rango de 0 a 9. Sea D el bit de alto orden de éste número y A el bit de bajo orden, cada función lógica debe producir un uno (para el segmento encendido) para una entrada dada si tal segmento en particular debe ser iluminado, por ejemplo, el segmento e debe iluminarse para los valores 0000, 0010, 0110 y 1000.
En la siguiente tabla se puede ver qué segmentos deben iluminarse de acuerdo al valor de entrada, tenga en cuenta que sólo se están representando valores en el rango de 0 a 9, los decodificadores para las pantallas de siete segmentos comerciales tienen capacidad para desplegar valores adicionales que corresponden a las letras A a la F para representaciones hexadecimales, sin embargo la mecánica para iluminar los respectivos segmentos es similar a la aquí representada para los valores numéricos.

Los circuitos combinacionales son la base de muchos componentes en un sistema de cómputo básico, se puede construir circuitos para sumar, restar, comparar, multiplicar, dividir y muchas otras aplicaciones más.
Circuitos Secuenciales
Un problema con la lógica secuencial es su falta de "memoria". En teoría, todas las funciones de salida en un circuito combinacional dependen del estado actual de los valores de entrada, cualquier cambio en los valores de entrada se refleja (después de un intervalo de tiempo llamado retardo de propagación) en las salidas. Desafortunadamente las computadoras requieren de la habilidad para "recordar" el resultado de cálculos pasados. Éste es el dominio de la lógica secuencial. Una celda de memoria es un circuito electrónico que recuerda un valor de entrada después que dicho valor ha desaparecido. La unidad de memoria más básica es el flip-flop Set/Reset. Aunque recordar un bit sencillo es importante, la mayoría de los sistemas de cómputo requieren recordar un grupo de bits, ésto se logra combinando varios flip-flop en paralelo, una conexión de éste tipo recibe el nombre de registro. A partir de aquí es posible implementar diferentes circuitos como registros de corrimiento y contadores, éstos últimos también los conocemos como circuitos de reloj. Con los elementos mencionados es posible construir un microprocesador completo.

Circuitos logicos, secuenciales!

RESETABLE JK FLIP - FLOP
Muchas veces se requiere flip-flops tipo JK que puedan ser Set y Reset a estados conocidos, antes de que ellos inicien su uso en un proceso particular. Por ejemplo, si se dispone de varios flip-flops para efectuar un trabajo en equipo, es prácticamente un requisito poderlos colocar con todas sus salidas en un nivel igual, lógico 1 o lógico =. Para esta función, el integrado tiene dos terminales auxiliares, marcados PRESET (PR) y CLEAR (CLR). El preset coloca en estado lógico 1 en la salida Q cuando es alimentado con un pulso bajo; si esto se hace con la entrada clear, el la salida Q aparece un estado lógico 0. se considera que las entradas preset y clear est´n en un nivel inactivo, cuando se las mantiene en alto(libres, "al aire"). A las entradas "clear" y "preset" se les conoce como "entradas de control prioritario", a las entradas "j" y "k" se les denomina "entradas de control simple".

CIRCUITO MONO - ESTABLE (ONE - SHOT)

Básicamente, el one-shot es un circuito con una sola entrada y dos salidas complementarias, Q y no-Q. Un pulso activo en la entrada, hace que el circuito cambie su estado, permanezca así invertido durante un período de tiempo dado, y luego retorne automáticamente a su estado original. El one.shot es un circuito mono-estable(monostable), o sea que tiene un estado definido al que siempre retornará.

Al one-shot se le conoce también como circuito IGUALADOR DE PULSOS, ya que, aunque los pulsos de disparo (trigger) tengan diferente ancho (width), los pulsos a la salida serán siempre iguales, con el mismo ancho o largo(tiempo que permanece el pulso en determinado nivel). Los circuitos monoestables son ampliamente usados como temporizadores, retardadores de pulsos, en toda clase de procesos industriales.

En TTL se consiguen los siguientes circuitos integrados monoestables: el 74121, el 74122(one shot regatillable y con terminal borrador-clear-) y el 74123 (dos monoestables independientes; equivale a tener dos 74122 en un mismo encapsulado). Ver diagrama de conexión y tablas de verdad en la figura 17.

Clic en las imágenes para verlas en tamaño real.
Otro monoestable algo especial es el 74221, que tiene dos monoestables con entrada Schmitt-trigger, y un equivalente en tecnología CMOS: el integrado MM74C221.

EL MULTIVIBRADOR

Es una forma de circuito oscilador, en el cual dos salidas complementarias están continuamente invirtiendo su estado, a una rata determinada por los componentes Rc del circuito (resistencia-capacidad). Si la salida en Q es una serie de pulsos positivos cortos, la salida en no-Q será una serie de pulsos positivos largos,, equivalentes al tiempo que permanece en el nivel bajo la salida Q. Veamos la figura 18.

Los multivibradores son usados donde quiera que sea necesario tener una hilera de pulsos u ondas cuadradas. Si se desea, la rata de repetición del circuito puede ser sincronizada por una fuente externa, tal como un pulso clock.

EL SCHMITT TRIGGER

Es un circuito biestable (dos estados), con una entrada y una salida. El nivel en la salida cambia agudamente, de una manera rápida, cuando el nivel de la señal de entrada excede un predeterminado valor, lo que permite su aplicación en conversión de ondas senoidales a ondas cuadradas, y en acondicionamiento eléctrico de señales (para facilitar el manejo de circuitos TTl con fuentes de señales No-TTl). También, el circuito Schmitt-Trigger puede ser usado para restaurar pulsos que han sido deteriorados por interferencias durante su transmisión.

Para comprender las características de su funcionamiento, tomemos imaginariamente un Schmitt-Trigger que tenga su salida en nivel bajo, y apliquemos a su entrada un pulso cualquiera, cuyo voltaje esté subiendo muy lentamente, algo así como una onda senoidal.

Al comienzo de haber aplicado la señal de entrada, no hay ningún cambio apreciable en el estado bajo de su salida; pero, llegado cierto momento, la salida del Schmitt-Trigger se invierte al estado alto, y continúa así aunque el nivel de voltaje en el pulsol siga aumentando. Al punto o valor del voltaje de la señal ascendente que produjo el cambio en la salida, se le conoce como POSITIVE GOING THRESHOLD (umbral en el sentido positivo).

Supongamos ahora que la señal comienza a bajar, a disminuir su voltaje. Llegará el instante en el cual la salida del Schmitt-Trigger cambiará abruptamente al nivel bajo original, punto al que se ha denomiando NEGATIVE GOING THRESHOLD (umbral en el sentido negativo). Los puntos o niveles de umbral son distintos para el sentido positivo y para el sentido negativo de la señal gatilladora, y a su diferencia se le conoce como HISTERESIS. Por ejemplo, un Schmitt-Trigger del integrado 7413 necesita que la señal suba hasta 1.7 voltios para que la salida cambie a su nivel superior, pero luego es necesario que baje hasta 0.9 voltios para que recupere su nivel bajo original. En este caso, la histeresis fue de 0.8 voltios.

En la práctica, se consiguen circuitos integrados digitales con gatilladores Schmitt-Trigger ya incluidos en sus entradas (un gatillador para cada entrada). Veamos algunos ejemplos:

7413-Dos compuertas NAND de 4 entradas con circuitos Schmitt-Trigger.

7414-Seis inversores con entrada Schmitt-Trigger

74121-Un monoestable con compuerta Schmitt-Trigger en la entrada B

74132-Cuatro NAND de dos entradas con circuito Schmitt-Trigger

74221-Dos monoestables (one - Shots) con entradas Schmitt-Trigger

DIAGRAMAS DE TIEMPO

El diagrama de tiempos para un circuito lógico es usualmente tan útil como el esquema electrónico. El diagrama de tiempos es una representación pictórica de la manera como los niveles lógicos varían en función del tiempo. Es de bastante utilidad cuando se desea conocer de un solo vistazo las características operacionales de un circuito, o se está buscando una falla en un proyecto digital. La figura 20 muestra el diagrama de tiempos para varias funciones de las variables lógicas A y B, mostradas en las dos filas superiores. La variable A está representada por un flujo de datos en serie, compuestos de alternantes 1's y dos 0's.

Si A y B son combinadas en una compuerta AND, cuya salida C es lógica 1 cuando A y B sean lógica 1. El resultado se obtenido es una repetición de datos compuestos por un 1 y tres 0's.

El complemento de C es mostrado en la cuarta fila; observemos que no-C es lógica 0 cuando C está en lógica 1, y viceversa. En otras palabras, cuando una línea sube, la otra baja.

Si A y B son combinadas en una compuerta OR, se obtiene en la quinta fila el resultado D 0 A + B; su complemento es mostrado en la sexta fila.

Como un ejemplo del uso del diagrama de tiempos, asumamos que se desea determinar si la compuerta AND de C 0 CB está trabajando apropiadamente. Un osciloscopio adecuado podrá indicar la correcta presencia de A y de B. El técnico debe conocer, sin embargo, lo que espera en C. Viendo en el osciloscopio el resultado obtenido en el punto C, se puede comparar dicha figura con la mostrada por el diagrama de tiempos, para saber cómo está trabajando la compuerta AND.

Relacion de logicas en la programacion

En ésta lección hemos dado una repasada muy básica a los elementos que forman la base de los modernos sistemas de cómputo, en la sección dedicada al diseño electrónico estudiaremos a profundidad los conceptos aquí presentados, pero para aquellos que están más interesados en el aspecto programático podemos decir que con los elementos vistos en ésta lección es posible implementar máquinas de estado, sin embargo la moraleja de ésta lección es muy importante: cualquier algoritmo que podamos implementar en software, lo podemos a su vez implementar directamente en hardware. Ésto sugiere que la lógica booleana es la base computacional en los modernos sistemas de cómputo actuales. Cualquier programa que Usted escriba, independientemente del lenguaje que utilice, sea éste de alto ó bajo nivel, se puede especificar como una secuencia de ecuaciones booleanas.
Un hecho igualmente interesante es el punto de vista opuesto, es posible implementar cualquier función de hardware directamente en software, en la actualidad ésta es la función principal del lenguaje ensamblador y otros con capacidad de trabajar directamente en hardware, como el C y el C++. Las consecuencias de éste fenómeno apenas se están explotando, se infiere la existencia de un futuro muy prometedor para el profesional de la programación, especialmente aquellos dedicados a los sistemas incrustados (embedded systems), los microcontroladores y los profesionales dedicados a la Programación Orientada a Objetos. Para tener éxito en éstos campos de la investigación es fundamental comprender las funciones booleanas y la manera de implementarlas en software. Aún y cuando Usted no desee trabajar en hardware, es importante conocer las funciones booleanas ya que muchos lenguajes de alto nivel procesan expresiones booleanas, como es el caso de los enunciados if-then ó los bucles while.

Estructura de los sistems..

Los componentes de los circuitos lógicos
Los circuitos cuyos componentes realizan operaciones análogas a las que indican los operadores lógicos se llaman "circuitos lógicos" o "circuitos digitales".
Los operadores lógicos básicos son "Y", "O" y "N", los cuales se representan respectivamente con los símbolos: , y . Por eso, los componentes que realizan operaciones análogas se llaman "componentes básicos"(Se demuestra que el componente XOR (equivalente al operador "O, en sentido exclusivo") puede ser obtenido por combinación de éstos.).

. Los componentes que resultan de la combinación de dos o más componentes básicos se llaman "componentes combinados"(El componente AMORTIGUADOR ("BUFFER") tiene por función cambiar la intensidad de la señal (adaptarla) pero no modifica su interpretación: sigue siendo 0 o 1. Se lo podría llamar "YES" ("SÍ") y representar como NOT NOT(en términos de operadores lógicos , ). Por su función en el circuito, un buffer no difiere de un conector (conductor).
.
Todos los componentes arrojan una señal de salida, pero pueden recibir una o dos señales de entrada. En general, se los llama "compuertas" (en inglés, gates) (La palabra compuerta ha sido elegida porque los componentes tienen la función de regular el flujo de información en el circuito.)
Las compuertas se construyen con resistores, transistores, diodos, etc., conectados de manera que se obtengan ciertas salidas cuando las entradas adoptan determinados valores. Los circuitos integrados actuales tienen miles de compuertas lógicas.


De la asociación de componentes resultan elementos más complejos que ya no se llaman "componentes" sino, por ejemplo: "sumadores" (adders); "decodificadores" (decoders); "multiplexores" (multiplexers); "memorias" (memories); "microprocesadores" (microprocessors). Para representar un circuito lógico se pueden emplear símbolos para componentes (básicos y combinados) y elementos complejos, pero siempre esa representación se puede reducir a otra que sólo incluya los componentes básicos.

algebra booleana y circuitos electronicos..

Álgebra Booleana y circuitos electrónicos
La relación que existe entre la lógica booleana y los sistemas de cómputo es fuerte, de hecho se da una relación uno a uno entre las funciones booleanas y los circuitos electrónicos de compuertas digitales. Para cada función booleana es posible diseñar un circuito electrónico y viceversa, como las funciones booleanas solo requieren de los operadores AND, OR y NOT podemos construir nuestros circuitos utilizando exclusivamente éstos operadores utilizando las compuertas lógicas homónimas
Un hecho interesante es que es posible implementar cualquier circuito electrónico utilizando una sola compuerta, ésta es la compuerta NAND
Para probar que podemos construir cualquier función booleana utilizando sólo compuertas NAND, necesitamos demostrar cómo construir un inversor (NOT), una compuerta AND y una compuerta OR a partir de una compuerta NAND, ya que como se dijo, es posible implementar cualquier función booleana utilizando sólo los operadores booleanos AND, OR y NOT. Para construir un inversor simplemente conectamos juntas las dos entradas de una compuerta NAND. Una vez que tenemos un inversor, construir una compuerta AND es fácil, sólo invertimos la salida de una compuerta NAND, después de todo, NOT ( NOT (A AND B)) es equivalente a A AND B. Por supuesto, se requieren dos compuertas NAND para construir una sola compuerta AND, nadie ha dicho que los circuitos implementados sólo utilizando compuertas NAND sean lo óptimo, solo se ha dicho que es posible hacerlo. La otra compuerta que necesitamos sintetizar es la compuerta lógica OR, ésto es sencillo si utilizamos los teoremas de DeMorgan, que en síntesis se logra en tres pasos, primero se reemplazan todos los "·" por "+" después se invierte cada literal y por último se niega la totalidad de la expresión:
A OR B
A AND B.......................Primer paso para aplicar el teorema de DeMorgan
A' AND B'.....................Segundo paso para aplicar el teorema de DeMorgan
(A' AND B')'..................Tercer paso para aplicar el teorema de DeMorgan
(A' AND B')' = A' NAND B'.....Definición de OR utilizando NAND
Si se tiene la necesidad de construir diferentes compuertas de la manera descrita, bien hay dos buenas razones, la primera es que las compuertas NAND son las más económicas y en segundo lugar es preferible construir circuitos complejos utilizando los mismos bloques básicos. Observe que es posible construir cualquier circuito lógico utilizando sólo compuertas de tipo NOR (NOR = NOT(A OR B)). La correspondencia entre la lógica NAND y la NOR es ortogonal entre la correspondencia de sus formas canónicas. Mientras que la lógica NOR es útil en muchos circuitos, la mayoría de los diseñadores utilizan lógica NAND.

Algebra Booleana!

Álgebra Booleana
El álgebra booleana es un sistema matemático deductivo centrado en los valores cero y uno (falso y verdadero). Un operador binario " º " definido en éste juego de valores acepta un par de entradas y produce un solo valor booleano, por ejemplo, el operador booleano AND acepta dos entradas booleanas y produce una sola salida booleana.
Para cualquier sistema algebraico existen una serie de postulados iniciales, de aquí se pueden deducir reglas adicionales, teoremas y otras propiedades del sistema, el álgebra booleana a menudo emplea los siguientes postulados:
Cerrado. El sistema booleano se considera cerrado con respecto a un operador binario si para cada par de valores booleanos se produce un solo resultado booleano.
Conmutativo. Se dice que un operador binario " º " es conmutativo si A º B = B º A para todos los posibles valores de A y B.
Asociativo. Se dice que un operador binario " º " es asociativo si (A º B) º C = A º (B º C) para todos los valores booleanos A, B, y C.
Distributivo. Dos operadores binarios " º " y " % " son distributivos si A º (B % C) = (A º B) % (A º C) para todos los valores booleanos A, B, y C.
Identidad. Un valor booleano I se dice que es un elemento de identidad con respecto a un operador binario " º " si A º I = A.
Inverso. Un valor booleano I es un elemento inverso con respecto a un operador booleano " º " si A º I = B, y B es diferente de A, es decir, B es el valor opuesto de A.
Para nuestros propósitos basaremos el álgebra booleana en el siguiente juego de operadores y valores:
- Los dos posibles valores en el sistema booleano son cero y uno, a menudo llamaremos a éstos valores respectivamente como falso y verdadero.
- El símbolo ·  representa la operación lógica AND. Cuando se utilicen nombres de variables de una sola letra se eliminará el símbolo ·,  por lo tanto AB representa la operación lógica AND entre las variables A y B, a esto también le llamamos el producto entre A y B.
- El símbolo "+" representa la operación lógica OR, decimos que A+B es la operación lógica OR entre A y B, también llamada la suma de A y B.
- El complemento lógico, negación ó NOT es un operador unitario, en éste texto utilizaremos el símbolo " ' " para denotar la negación lógica, por ejemplo, A' denota la operación lógica NOT de A.
- Si varios operadores diferentes aparecen en una sola expresión booleana, el resultado de la expresión depende de la procedencia de los operadores, la cual es de mayor a menor, paréntesis, operador lógico NOT, operador lógico AND y operador lógico OR. Tanto el operador lógico AND como el OR son asociativos por la izquierda. Si dos operadores con la misma procedencia están adyacentes, entonces se evalúan de izquierda a derecha. El operador lógico NOT es asociativo por la derecha.
Utilizaremos además los siguientes postulados:
P1 El álgebra booleana es cerrada bajo las operaciones AND, OR y NOT
P2 El elemento de identidad con respecto a ·  es uno y con respecto a +  es cero. No existe elemento de identidad para el operador NOT
P3 Los operadores ·   y + son conmutativos.
P4 ·   y + son distributivos uno con respecto al otro, esto es, A· (B+C) = (A·B)+(A·C) y A+ (B·C) = (A+B) ·(A+C).
P5 Para cada valor A existe un valor A' tal que A·A' = 0 y A+A' = 1. Éste valor es el complemento lógico de A.
P6 ·   y + son ambos asociativos, ésto es, (AB) C = A (BC) y (A+B)+C = A+ (B+C).
Es posible probar todos los teoremas del álgebra booleana utilizando éstos postulados, además es buena idea familiarizarse con algunos de los teoremas más importantes de los cuales podemos mencionar los siguientes:
Teorema 1: A + A = A
Teorema 2: A · A = A
Teorema 3: A + 0 = A
Teorema 4: A · 1 = A
Teorema 5: A · 0 = 0
Teorema 6: A + 1 = 1
Teorema 7: (A + B)' = A' · B'
Teorema 8: (A · B)' = A' + B'
Teorema 9: A + A · B = A
Teorema 10: A · (A + B) = A
Teorema 11: A + A'B = A + B
Teorema 12: A' · (A + B') = A'B'
Teorema 13: AB + AB' = A
Teorema 14: (A' + B') · (A' + B) = A'
Teorema 15: A + A' = 1
Teorema 16: A · A' = 0
Los teoremas siete y ocho son conocidos como Teoremas de DeMorgan en honor al matemático que los descubrió.
Características:
Un álgebra de Boole es un conjunto en el que destacan las siguientes características:
1- Se han definido dos funciones binarias (que necesitan dos parámetros) que llamaremos aditiva (que representaremos por x
+ y) y multiplicativa (que representaremos por xy) y una función monaria (de un solo parámetro)  que representaremos por x'.
2- Se han definido dos elementos (que designaremos por 0 y 1)
Y 3- Tiene las siguientes propiedades:
Conmutativa respecto a la primera función: x + y = y + x
Conmutativa respecto a la segunda función: xy = yx
Asociativa respecto a la primera función: (x + y) + z = x + (y +z)
Asociativa respecto a la segunda función: (xy)z = x(yz)
Distributiva respecto a la primera función: (x +y)z = xz + yz 
Distributiva respecto a la segunda función: (xy) + z = (x + z)( y + z)
Identidad respecto a la primera función: x + 0 = x
Identidad respecto a la segunda función: x1 = x
Complemento respecto a la primera función: x + x' = 1
Complemento respecto a la segunda función: xx' = 0
Propiedades Del Álgebra De Boole
1.Idempotente respecto a la primera función: x + x = x
Idempotente respecto a la segunda función: xx = x
Maximalidad del 1: x + 1 = 1
Minimalidad del 0: x0 = 0
Involución: x'' = x
Inmersión respecto a la primera función: x + (xy) = x
Inmersión respecto a la segunda función: x(x + y) = x
Ley de Morgan respecto a la primera función: (x + y)' = x'y'
Ley de Morgan respecto a la segunda función: (xy)' = x' + y'
Función Booleana
Una función booleana es una aplicación de A x A x A x....A en A, siendo A un conjunto cuyos elementos son 0 y 1 y tiene estructura de álgebra de Boole.
Supongamos que cuatro amigos deciden ir al cine si lo quiere la mayoría. Cada uno puede votar si o no. Representemos el voto de cada uno por xi. La función devolverá sí (1) cuando el numero de votos afirmativos sea 3 y en caso contrario devolverá 0.
Si x1 vota 1, x2 vota 0, x3 vota 0 y x4 vota 1 la función booleana devolverá 0.
Producto mínimo (es el número posible de casos) es un producto en el que aparecen todas las variables o sus negaciones.
El número posible de casos es 2n. 
Siguiendo con el ejemplo anterior. Asignamos las letras A, B, C y D a los amigos. Los posibles casos son:
Votos         Resultado
ABCD
1111              1
1110              1
1101              1
1100              0
1011              1
1010              0
1001              0
1000              0
0111              1
0110              0
0101              0
0100              0
0011              0
0010              0
0001              0
0000              0
Las funciones booleanas se pueden representar como la suma de productos mínimos (minterms) iguales a 1.
En nuestro ejemplo la función booleana será:
f(A,B,C,D) = ABCD + ABCD' + ABC'D + AB'CD + A'BCD
Diagramas De Karnaugh
Los diagramas de Karnaugh se utilizan para simplificar las funciones booleanas.
Se construye una tabla con las variables y sus valores posibles y se agrupan los 1 adyacentes, siempre que el número de 1 sea potencia de 2. 

Algebra de Boole

ALGEBRA DE BOOLE

A mediados del siglo XIX, George Boole (1815-1864), en sus libros: "The Mathematical Analysis of Logic" (1847) y "An Investigation of te Laws of Thought" (1854), desarrolló la idea de que las proposiciones lógicas podían ser tratadas mediante herramientas matemáticas. Las proposiciones lógicas (asertos, frases o predicados de la lógica clásica) son aquellas que únicamente pueden tomar valores Verdadero/Falso, o preguntas cuyas únicas respuestas posibles sean Sí/No. Según Boole, estas proposiciones pueden ser representadas mediante símbolos y la teoría que permite trabajar con estos símbolos, sus entradas (variables) y sus salidas (respuestas) es la Lógica Simbólica desarrollada por él. Dicha lógica simbólica cuenta con operaciones lógicas que siguen el comportamiento de reglas algebraicas. Por ello, al conjunto de reglas de la Lógica Simbólica se le denomina ÁLGEBRA DE BOOLE.

A mediados del siglo XX el álgebra Booleana resultó de una gran importancia práctica, importancia que se ha ido incrementando hasta nuestros días, en el manejo de información digital (por eso hablamos de Lógica Digital). Gracias a ella, Shannon (1930) pudo formular su teoría de la codificación y John Von Neumann pudo enunciar el modelo de arquitectura que define la estructura interna de los ordenadores desde la primera generación.
Todas las variables y constantes del Álgebra booleana, admiten sólo uno de dos valores en sus entradas y salidas: Sí/No, 0/1 o Verdadero/Falso. Estos valores bivalentes y opuestos pueden ser representados por números binarios de un dígito (bits), por lo cual el Álgebra booleana se puede entender cómo el Álgebra del Sistema Binario. Al igual que en álgebra tradicional, también se trabaja con letras del alfabeto para denominar variables y formar ecuaciones para obtener el resultado de ciertas operaciones mediante una ecuación o expresión booleana. Evidentemente los resultados de las correspondientes operaciones también serán binarios.
Todas las operaciones (representadas por símbolos determinados) pueden ser materializadas mediante elementos físicos de diferentes tipos (mecánicos, eléctricos, neumáticos o electrónicos) que admiten entradas binarias o lógicas y que devuelven una respuesta (salida) también binaria o lógica. Ejemplos de dichos estados son: Abierto/Cerrado (interruptor), Encendida/Apagada (bombilla), Cargado/Descargado (condensador) , Nivel Lógico 0/Nivel lógico 1 (salida lógica de un circuito semiconductor), etcétera.
Los dispositivos con los cuales se implementan las funciones lógicas son llamados puertas (o compuertas) y, habitualmente, son dispositivos electrónicos basados en transistores. Estos dispositivos, y otros que veremos a lo largo de esta unidad, son los que permiten el diseño, y la ulterior implementación, de los circuitos de cualquier ordenador moderno, así como de muchos de los elementos físicos que permiten la existencia de las telecomunicaciones modernas, el control de máquinas, etcétera. De hecho, pensando en los ordenadores como una jerarquía de niveles, la base o nivel inferior sería ocupada por la lógica digital (en el nivel más alto del ordenador encontraríamos los actuales lenguajes de programación de alto nivel).
En esta unidad se representan las puertas lógicas elementales, algunas puertas complejas y algunos ejemplos de circuitos digitales simples, así como algunas cuestiones de notación. Por otra parte se plantean actividades de trabajo, muchas de las cuales implican una respuesta escrita en vuestro cuaderno de trabajo. El deseo del autor es que os resulte sencillo y ameno adentraros en el mundo de la lógica digital y despertaros la curiosidad, tanto por ella, como por la matemática que subyace en ella.

Memorias logicas.."

Desarrollo de Problemas

Diseñe a nivel de Circuitos Lógicos una memoria de 2 X 2. Considere pastillas de memoria de 2 X 2 para elaborar una memoria de 16 X 8. Ejemplifique su utilización para la escritura del valor 4AC5 en la posición (125)8 y una lectura de la posición (100)8 considerando que contiene el valor (111020)3.
Procedimiento:
Para poder ejemplificar el uso de la memoria, primero debemos transformar los números que usaremos a la base binaria, la cual es la que se usa a nivel de circuitos lógicos:
(4AC5)h = (0100101011000101)2
(125)8 = (001010101)2
(100)8 = (001000000)2

(111020)3 = (101100101)2 Figura 1.

Para la elaboración de nuestra memoria lógica de 16 X 8 utilizamos 32 unidades de memoria 2 X 2, tal como se muestra en la figura 1. Esta memoria tiene cuatro entradas diferentes, las cuales son la del bus de datos (2 bits), el bus de dirección (1 bit), el bus de control (1 bit) y el chip select (1 bit), que se utiliza para desconectar los flip-flop de memoria que no se utilizan en una operación.

Para poder almacenar datos en esta memoria como si fuera en realidad una sola memoria de 16 X 8 es necesario partir los 8 bits de entrada en 4 entradas de dos bits c/u, ya que las pastillas de memoria física sólo admiten dos bits. Así, los dos bits menos significativos pasan a la primera columna de pastillas físicas, los dos bits siguientes pasan a la segunda columna, los siguientes dos pasan a la tercera columna y los dos bits más significativos pasan a la cuarta columna de pastillas físicas.
Asimismo, el bus de dirección es de cuatro bits en la memoria lógica 16 X 8, mientras que las pastillas físicas 2 X 2 solo admiten 1 bit de dirección. Para solucionar este problema partimos los cuatro bits en dos bloques, uno de tres bits (los más significativos) y uno de un bit. El bloque de tres bits lleva un decodificador, el cual dependiendo de la salida que tenga prende el banco de memoria lógica que dice la entrada. (recordemos que los tres bits representan los ocho bancos de memoria física que hay). Esta salida se utilizará posteriormente por los bancos físicos de 2 X 2 como chip select. El bit restante es el que indica a los bancos físicos en cuál de las posiciones de memoria será almacenado el dato (si es en la posición 0 o 1 del banco).
Con el bit de control no hay problema; recordemos que éste sólo tiene que indicar si la operación es de lectura (0) o escritura (1).
Ahora explicaremos los ejemplos con más detalle:
Guardar el dato 0100101011000101 en la posición 001010101: como ésta es una memoria de 8 bits, el dato quedará recortado en 1100 0101; y como la misma es de 16 posiciones, la dirección quedará recortada en 0101:
Primero partimos el dato en cuatro bloques: 11 00 01 01;
La dirección, la partimos en dos bloques de esta manera: 010 y 1;
Al decodificar el 010 tenemos como respuesta que el dato va almacenado en la CK 2 de la memoria lógica 16 X 8, y que a su vez va almacemada el los bits 1.0 y 1.1 de éstos cuatro bancos de memoria física 2 X 2.
El dato previamente partido en cuatro bloques va a entrar en su respectiva pastilla de memoria física 2 X 2.

Lectura de la posición 001000000, considerando que contiene el valor 101100101: al igual que el problema anterior, la dirección se recorta a 0000; el dato se recorta a 01100101:
Primero partimos la dirección en dos bloques: así tenemos que el banco de memoria a leer es el banco 0, y la posición física de memoria sera la posición 0;
Considerando que el dato almacenado es el 01 00 00 00, el chip select habilitará la compuerta de salida del flip-flop (junto con el resultado negado de las entradas de dirección y control) y deshabilitará la compuerta de entrada del mismo.
Así finalmente el dato podrá ser extraído mediante el bus de datos (el cual es bidireccional) y leído;


El diseño y confección de este display es muy fácil; como podemos ver en la gráfica detallada (figura 6), del teclado numérico se genera un impulso que el búfer de entrada reconoce como código ASCII; dado que en este código los dígitos del 0 al 9 están representados por los números del 48 al 57, o sea del 00110000 al 00111001, podemos descartar los cuatro bits más significativos, dejando como resultado los números en binario del 0 al 9 (0000 al 1001). Este número se pasa a una especie de decodificador que lo interpreta, y, conectándose las salidas con los respectivos segmentos del display (por medio de una compuerta OR), se obtiene como resultado la salida deseada.


Diseñe a nivel de circuitos lógicos un sumador completo de 3 bits.
Para este problema teníamos que tomar en cuenta las reglas para la suma binaria, las cuales son:
Suma Salida de Arrastre
Regla 1 0 + 0 = 0
Regla 2 0 + 1 = 1
Regla 3 1 + 0 = 1
Regla 4 1 + 1 = 0 y arrastre 1 = 10
En el circuito sumador que diseñamos tenemos tres entradas y dos salidas, las entradas corresponden a las dos variables que utilizamos y la entrada de arrastre (la llamamos carry in), y las salidas corresponden a la suma de columnas y la salida de arrastre (la cual denominamos carry out).
Para realizar la suma de las variables A y B utilizamos una función XOR (or exclusivo) la cual dará un resultado de 1 cuando las variables tengan distintos valores. Para la suma de arrastre consideramos una función AND.

Para comprobar si nuestro sumador funciona, sumaremos estas dos cantidades binarias (001)2 y (111)2 así:
1 1 1
( 0 0 1 )2 que equivale a ( 1 )10
( 1 1 1 )2 que equivale a ( 7 )10
1 0 0 0 que equivale a ( 8 )10 o sea el resultado de
sumar (1 )10 y ( 7 ) 10 que es lo mismo que
sumar ( 001 )2 y ( 111 )2.