CIRCUITO LÓGICO

viernes, 19 de noviembre de 2010

CIRCUITOS LÓGICOS

 CIRCUITOS LÓGICOS

DEFINICIÓN 
Circuito lógico es aquel que maneja la información en forma de "1" y "0", dos niveles lógicos de voltaje fijos."1" nivel alto y "0" nivel bajo.
Los 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.

SISTEMAS NUMÉRICOS: NÚMEROS BINARIOS

SISTEMAS NUMÉRICOS
NÚMEROS BINARIOS
Como mencionamos anteriormente, los sistemas digitales actuales sólo procesan dos señales (apagado o encendido) y es por ello que se aplica el término de binario. Nosotros estamos acostumbrados a usar los números en base decimal (o base 10) pero ésta es sólo una de las formas de representar cantidades. En realidad "2" es sólo un símbolo y cuando lo vemos nosotros entendemos que existen dos unidades de algo. Si yo les digo que tengo 2 computadoras ustedes no visualizan el símbolo 2 sino la cantidad... quizá representada por una computadora al lado de la otra, pero no el símbolo. Así que "2" es sólo eso: un símbolo. Lo que trato de hacerles entender es que no importa cómo lo expresemos, qué símbolo o símbolos usemos, lo importante es que entendamos ese "lenguaje" y saber qué es lo que representa. Usamos los símbolos como una abstracción para representar cantidades.

CONVERSIÓN DE DECIMALES Y BINARIOS

Conversión entre números decimales y binarios

Convertir un número decimal al sistema binario es muy sencillo: basta con realizar divisiones sucesivas por 2 y escribir los restos obtenidos en cada división en orden inverso al que han sido obtenidos.
Por ejemplo, para convertir al sistema binario el número 7710 haremos una serie de divisiones que arrojarán los restos siguientes:
77 : 2 = 38 Resto: 1
38 : 2 = 19 Resto: 0
19 : 2 = 9 Resto: 1
9 : 2 = 4 Resto: 1
4 : 2 = 2 Resto: 0
2 : 2 = 1 Resto: 0
1 : 2 = 0 Resto: 1
y, tomando los restos en orden inverso obtenemos la cifra binaria:

7710 = 10011012

NÚMEROS HEXADECIMALES Y OCTALES

NÚMEROS HEXADECIMALES Y OCTALES
Los números hexadecimales son aquellos que están en base 16. En el caso de los octales tienen base 8. Estos números son muy usados en los sistemas digitales principalmente porque pueden representar los números binarios de una forma más compacta (debido a que 23 son 8 y 24 son 16). Realizar esa conversión es extremadamente sencillo. Veamos el siguiente ejemplo: (10100101)2 es un número binarios de 8 bits (o un byte). Este puede ser representado en dos partes de 4 bits (conocidas como NIBBLES). Si dividimos el byte del ejemplo en sus Nibbles, tendríamos: 1010 y 0101 cada una representando 24 posibilidades, o sea un número hexadecimal (un número entre 0 y 15). Así:

(1010)2 = (A)16 , (0101)2 = (5)16 => (10100101)2 = (A5)16.


El caso de octal es semejante. Si tenemos el número (101010111)2 podríamos dividir éste en tres partes de 3 bits (o sea, con 23 posibilidades cada una) y tendríamos: 101, 010 y 111 que representan los números octales 5, 2 y 7 respectivamente. Por lo tanto:


(101010111)2 = (527)8


Y por supuesto que hacer lo contrario, o sea, convertir de octal o hexadecimal a binario, es igual de sencillo. Por ejemplo:


(7531)8 => 111 101 011 001 => (111101011001)2


(123,A)16 = 0001 0010 0011 , 1010 = (000100100011,1010)2

CODIGOS BINARIOS

CODIGOS BINARIOS
Como ya vimos, los sistemas digitales usan señales eléctricas para representar dos posibles valores o estados que asociamos con cierto o falso. Como ya vimos también, para expresar información en estos sistemas hacemos uso de los números binarios ya que con ellos podemos representar los dos estados estables de los sistemas digitales a través del 0 y el 1 (y que podemos usar una combinación de éstos para representar cualquier cantidad). Muy bien, pero los sistemas digitales electrónicos pueden ser usados para procesar información discreta de cualquier tipo ya sean números decimales, letras, colores, etc y es por ésto que en la mayoría de los casos se hace conveniente el expresar la información que se desea procesar de una forma que sea más manejable. Es aquí donde entran los códigos binarios.
Como les dije en el tema pasado, al elemento mínimo de un número binario se le conoce como bit. Un bit no es más que un código binario que sólo puede representar los dos estados estables. Un bit es por definición un dígito binario.
Si se quieren expresar un número de elementos de 2n se requerirán entonces n bits para expresar dicho número de elementos. Por ejemplo si se quieren representar 4 posibilidades se requerirán entonces 2 bits ya que 22 = 4 (y de hecho estas combinaciones son 00 01 10 y 11 que, fácilmente verificable, representan los números decimales del 0 al 3). Si se quieren representar 8 elementos entonces se requieren 3 bits ya que 23 = 8 (000, 001, 010, 011, 100, 101, 110 y 111, en decimal del 0 al 7). En resumen, con n bits se pueden representar 2n opciones que irán desde 0 hasta 2n – 1.
Ahora bien, no siempre se requerirá expresar una cantidad exacta de una potencia de 2. Por ejemplo si queremos mostrar las posibilidades en los dígitos decimales requeriremos de 10 combinaciones. Por supuesto, tendremos que usar cuatro bits ya que con tres sólo podremos representar 8 de ellas. Con los cuatro bits tenemos un exceso pero lo que se hace es ignorar el resto de las combinaciones

CÓDIGOS DECIMALES

CÓDIGOS DECIMALES
Entre los códigos binarios tenemos algunos que se usan para representar dígitos decimales. Las formas para representar los números decimales con códigos binarios es muy variada y depende de la lógica que se use. El más usado de todos estos códigos es el BCD (por sus siglas en inglés de “Binary Coded Decimal” o “decimal codificado en binario”). En este caso se usa una relación directa para expresar los dígitos decimales. ¿Qué quiero decir con directa? Pues bien, que al convertir el número binario a decimal obtendrás el dígito decimal en cuestión. Por ejemplo para expresar el (0)10 usamos 0000, para el (5)10 0101 y para el (9)10 1001 (más adelante mostraré una tabla con todas las combinaciones). La forma de calcular el número binario para representar el dígito decimal viene dada por la fórmula explicada en el tema anterior pero para realizar un cálculo rápido recuerden que la carga del primer dígito binario representa 8, la del segundo 4, la del tercero 2 y la del cuarto y último representa 1. Por supuesto que en BCD no existen 1100, 1010, etc ya que éstas no muestran ningún dígito decimal. Otro ejemplo: para representar el dígito decimal 6 en código BCD sería: 0110 ya que:
0 x 8 + 1 x 4 + 1 x 2 + 0 x 1 = 6
Un código decimal que se ha usado en algunos computadores viejos es el código de “exceso a 3”. Este último es un código sin carga, cuya asignación se obtiene del correspondiente valor en BCD una vez se haya sumado 3. Ejemplo (0)10 = 0011, (9)10 = 1100, etc.
También es posible asignar cargas negativas a un código decimal, como por ejemplo en el código 8, 4, -2, -1. En este caso la combinación de bits 0110 se interpreta como el dígito decimal 2, ya que como se ve:
0 x 8 + 1 x 4 + 1 x (-2) + 0 x (-1)=2

CÓDIGOS ALFANUMÉRICOS

CÓDIGOS ALFANUMÉRICOS
Y ¿qué pasa cuando el dato que quiero manejar es una letra? Aquí se hace necesario el expresar este elemento discreto de una forma binaria y para ello usamos algún código binario alfanumérico. Así expresamos las letras del alfabeto y algunos símbolos necesarios como la coma, el punto, etc. Yo les hablaré en particular del código ASCII (por American Standard Code for Information Interchange) que es un código de 7 bits que se usa para expresar las letras mayúsculas, minúsculas y los símbolos más usados. Este código es aún usado actualmente por las computadoras y es por ello que es éste el que menciono. Por supuesto existen otros como el código interno (de 6 bits) y el código EBCDIC (Extended BCD Interchange Code de 8 bits), sólo que el ASCII es, por así decirlo, más usado. Al ser el código ASCII un código de 7 bits, en implementaciones digitales se suele usar el 8avo bit (que completa 1 byte) como bit de paridad. En las tablas ASCII usadas en las computadoras la letra A es siempre mostrado con el número binario correspondiente al decimal 65 (100 0001), la B con el 66 (100 0010) y así sucesivamente hasta llegar a la Z con el 90 (101 1010). Los caracteres que representan símbolos, letras minúsculas y números, estos últimos empezando por el decimal 48 con el caracter 0, también tienen su sitio dentro de la tabla ASCII.
Lo importante de resaltar aquí es que la mayoría de los elementos discretos a los que estamos acostumbrados tienen una forma de ser expresados en el mundo binario a través de un Código Binario.

LEYES Y TEOREMAS BÁSICOS DEL ÁLGEBRA DE BOOLE

LEYES Y TEOREMAS BÁSICOS DEL ÁLGEBRA DE BOOLE
Leyes fundamentales
  1. El resultado de aplicar cualquiera de las tres operaciones definidas a variables del sistema booleano resulta en otra variable del sistema, y este resultado es único.
  2. Ley de idempotencia: A + A = A y A • A = A
  3. Ley de involución: (A')' = A
  4. Ley conmutativa: A + B = B + A y A • B = B • A
  5. Ley asociativa: A + (B + C) = (A + B) + C y A • (B • C) = (A • B) • C
  6. Ley distributiva: A + B • C = (A + B) • (A + C) y A • (B + C) = A • B + A • C
  7. Ley de absorción: A + A • B = A y A • (A + B) = A
  8. Ley de De Morgan: (A + B)' = A' • B' y (A • B)' = A' + B'
Principio de dualidad
El concepto de dualidad permite formalizar este hecho: a toda relación o ley lógica le corresponderá su dual, formada mediante el intercambio de los operadores unión con los de intersección, y de los 1 con los 0.

Adición
Producto
1
A + A' = 1
A • A' = 0
2
A + 0 = A
A • 1 = A
3
A + 1 = 1
A • 0 = 0
4
A + A = A
A • A = A
5
A + B = B + A
A • B = B • A
6
A + (B + C) = (A + B) + C
A • (B • C) = (A • B) • C
7
A + B • C = (A + B) • (A + C)
A • (B + C) = A • B + A • C
8
A + A • B = A
A • (A + B) = A
9
(A + B)' = A' • B'
(A • B)' = A' + B'

UNIVERSALIDAD DE LAS COMPUERTAS NAND Y NOR

UNIVERSALIDAD DE LAS COMPUERTAS NAND Y NOR
Las compuertas NAND y NOR son llamadas universales debido a que a través de la combinación de éstas pueden obtenerse las AND, OR y NOT. Ésto quiere decir que cualquier circuito puede implementarse (si bien es cierto que no necesariamente de forma más eficiente) con sólo compuertas de alguno de esos tipos. Una compuerta NAND no es mas que una AND con una NOT a la salida. Análogamente, una compuerta NOR es una OR con una NOT en la salida.
Voy a aprovechar unos gráficos que conseguí en Internet para mostrar como pueden combinarse las NAND y las NOR para crear los distintos tipos de compuertas que usamos en nuestras funciones booleanas y también para mostrar como se expresan gráficamente esas compuertas.
FORMA NORMAL
NAND
NOR
notamarillo.gif (1376 bytes)
notnand.gif (1372 bytes)
notnor.gif (1379 bytes)
andamarillo.gif (1405 bytes)
andnand.gif (1629 bytes)
andnor.gif (1945 bytes)
oramarillo.gif (1388 bytes)
ornand.gif (1961 bytes)
ornor.gif (1628 bytes)
NOTA: Existen otras compuertas que tienen las mismas funcionalidades que las NAND y las NOR. Para el caso de las NAND tenemos la compuerta OR con todas sus entradas negadas (el símbolo es el mismo de la or pero con un círculo en cada entrada indicando que son negadas). Claro, sabemos por Morgan que A'+B' = (AB)'. De forma análoga, la compuerta NOR puede verse como una compuerta AND con todas sus entradas negadas (el símbolo es una AND con círculos en todas sus entradas.).
Se ve que la única diferencia entre una NAND y una AND y entre una OR y una NOR es el círculo que se encuentra en el lado de la salida de la compuerta. Los casos más interesantes son para la construcción de una AND con NOR y de una OR con NAND en los que se ve la aplicación del teorema de Morgan.
En realidad, al menos en los circuitos integrados, los circuitos se construyen con mucha más frecuencia con compuertas NAND y NOR que con las AND, OR y NOT. Esto es debido a que esas compuertas son mucho más fáciles de construir y requieren de la integración de menos transistores.
Entonces, todo circuito puede ser llevado a formas estructuradas por puras compuertas NOR o puras compuertas NAND. Si se quiere implementar con compuertas NAND se lleva la función a una forma de suma de productos y se niega dos veces ya que sabemos, por el principio de involución, que así obtenemos la misma función original. Al momento de negar hacemos uso del Teorema de Morgan . Si en cambio se quiere ver con compuertas NOR debe llevarse a una forma de producto de sumas y negar dos veces.
Ejemplos: Implementar F = AB + CD + E con compuertas NAND.
F = [(AB+CD+E)']' = [(AB)'.(CD)'.E']'
que es una implementación con 5 compuertas NAND. El gráfico se hizo en clase. No lo coloco aquí por falta de tiempo para hacerlo.
Veamos que pasa si se pide implementar con NOR. Tenemos F = (A+B)(C+D)E, que se ve que ya está en forma de producto de términos sumas. De hecho, esta función es la dual de la anterior. Al aplicar involución obtenemos: F = [(A+B)'+(C+D)'+E']'. Ver la clase para el diagrama del mismo.
Estos dos ejemplos tienen sólo dos niveles de ejecución. Las entradas van a una compuerta y las salidas de éstas van a su vez a la entrada de otra. Si la salida del segundo nivel fuese a otra compuerta, entonces se diría que tiene tres niveles de ejecución.