Exponsor

CURSO TÉCNICO INSTALADOR DE ENERGÍA SOLAR TÉRMICA

Visita el siguiente enlace: http://enersolartermica.blogspot.com.es/ ¡No pierdas esta magnifica oportunidad de poder formarte en esta profesión con gran demanda de empleo! Ahora por oferta de lanzamiento y por tiempo limitado puedes adquirir este curso por solo 9,95€, cuando su valor de mercado es de 49€.

jueves, 12 de marzo de 2009

PROBLEMAS RESUELTOS SOBRE ÁLGEBRA BOLEANA ( IV )

PROBLEMA: Diseñar un circuito para calcular la suma binaria de dos números A y B de 4 bits cada uno. Utilizar las palabras A4A3A2A1=1001 y B4B3B2B1=0011 para demostrar su funcionamiento.

Este problema representa una de las metas importantes en las que hemos venido trabajando desde el inicio de esta obra: la realización de un circuito, construído a base de funciones lógicas básicas, que sea capaz de llevar a cabo la operación aritmética más esencial de todas, la suma, en el sobreentendido de que esta operación se tendrá que llevar a cabo en el lenguaje binario de "unos" y "ceros" que es el lenguaje que entienden las máquinas. El asunto de la conversión automática de nuestros números decimales a números binarios es algo que tendrá que ser postpuesto en espera de dar cobertura a otro tipo de circuitos que sean capaces de secuenciar operaciones de "unos" y "ceros", aquí nos conformaremos con el diseño de un circuito que sea capaz de ponder inmediatamente a su salida el resultado de la suma binaria de dos números puestos a su entrada. Si somos capaces de diseñar un circuito así, el problema de poder llevar a cabo la operación de multiplicación con funciones lógicas básicas quedará resuelto en su esencia, puesto que una multiplicación en realidad no es más que la suma repetitiva de un multiplicando por la cantidad de veces especificada por el multiplicador.

En este problema, en contra de lo que se ha estado llevando a cabo en todos los problemas anteriores, el flujo de las señales se llevará a cabo de derecha a izquierda; esto en virtud de que en la suma aritmética de dos números como 582973 y 416912, empezamos sumando los dígitos que están más a la derecha, en este caso el 3 y el 2, continuando con los dígitos que siguen a la izquierda, en este caso el 7 y 1, y así sucesivamente. En el caso de la suma aritmética binaria, el procedimiento es el mismo. De cualquier modo, desde el punto de vista de la electrónica digital del circuito, es irrelevante la forma de dibujar el diagrama esquemático del circuito, porque aún si lo construyéramos con un flujo de señales yendo de derecha a izquierda tal y como ocurre en el diagrama, todo lo que tendríamos que hacer con el circuito físico sería voltear la tablilla horizontalmente con lo cual el flujo de señales será de derecha a izquierda aunque la suma se seguirá llevando a cabo exactamente de la misma manera.

El sumador será construído utilizando como "caja negra" el Medio-Sumador visto en un problema previo, el cual será simbolizado simplemente como MS (+) en el diagrama. Llamando a S4S3S2S1 el resultado de la suma binaria, el circuito deseado tendrá la siguiente configuración:



A continuación tenemos lado a lado la suma binaria simbólica y la suma binaria llevada a cabo con los números 1001 y 0011:



Podemos imaginar a este circuito subdividido en cuatro "columnas" imaginarias, cada una de las cuales representa una "unidad" que se repite en forma idéntica. Con la excepción de la primera columna, todas las demás columnas representan una configuración semejante en su estructura, que es la siguiente:



En el diagrama del circuito completo se han representado con color rojo los "unos" y los "ceros" que se van produciendo a través de toda la configuración hasta llegar a la salida. El lector puede percatarse por sí mismo de que cualquier otra combinación de dos números binarios de cuatro bits será procesada aritméticamente en forma correcta por este circuito produciendo la suma binaria de ambos. Podemos representar cada una de las columnas imaginarias mostradas en este circuito como una "caja negra" como la siguiente, en donde hemos utilizado la letra griega Σ (sigma) dentro de la caja por ser la letra frecuentemente utilizada por los matemáticos para indicar una sumación:



La terminal "Llevar salida" (Carry Output) es la que se utiliza cuando sumamos los bits "1" y "1", los cuales producen dos dígitos binarios en lugar de uno solo: "10". En este caso, el "1" es el que utiliza la función de "Llevar-salida" para que este bit sea sumado en la siguiente columna a los bits más significativos que siguen. La terminal "Llevar entrada" (Carry Input es la que toma en cuenta este bit de "llevar" producido en una columna anterior. Conectar dos "cajas negras" como esta requiere conectar la terminal de "Llevar salida" de un bloque a la terminal "Llevar entrada" del bloque que le sigue a la izquierda. Este bloque es mejor conocido como el Sumador Completo, y es el bloque que tenemos que ir conectando en serie (en "cascada") con otros bloques iguales para ir aumentando la capacidad de la magnitud del número que podrá ser manejado por el sumador binario. De aquí en delante, aumentar la capacidad del sumador completo para poder sumar números de 16 bits, de 32 bits, de 62 bits, de 124 bits o más, no involucrará ningún diseño nuevo, solo requerirá ir conectando una cantidad mayor de "cajas negras" a la cantidad deseada.

Nótese que si le presentamos al circuito los números A=1111 y B=1111, el primer bit de la suma resultante S=11110 se pierde por falta de capacidad de almacenamiento en los registros. Esta condición se conoce como sobreflujo (overflow). El bit que aparece como "1" en la función "Llevar" de la columna en el extremo izquierdo del circuito se puede usar para indicar que dicha condición de sobreflujo ha ocurrido en una operación.

En un diagrama de un sumador binario de 4 bits en el cual el flujo de las señales vaya no de derecha a izquierda (siguiendo la secuencia humana en la cual se efectúan las operaciones aritméticas de suma) como se configuró arriba sino de derecha a izquierda como se acostumbra hacerlo en la mayoría de los diagramas de los circuitos lógicos, el circuito usando cuatro bloques Sumador-Completo tendría el siguiente aspecto:




En este circuito, los números binarios a ser sumados son a3a2a1a0 y b3b2b1b0. El resultado de la suma está disponible en la palabra binaria y3y2y1y0. , siendo y3 el bit más significativo (MSB) y siendo y0 el bit menos significativo (LSB). Si hay un sobreflujo como resultado de la suma, este sobreflujo está disponible en la terminal c3 que corresponde a la operación aritmética de "Llevar", lo cual podemos usar ya sea para conectar todo el sumador binario de 4 bits a otro sumador binario de 4 bits igual o para indicar que el resultado de la suma excedió la capacidad de la máquina. Si conectamos dos o más de estos sumadores de 4 bits, todo lo que tenemos que hacer es conectar cada terminal de "Llevar" c3 a la terminal de "Anotar" co del sumador binario de 4 bits que le sigue. La terminal de "Anotar" correspondiente al bit menos significativo es puesta a "0" al no haber un resultado parcial de una suma precedente que considerar. Si lo deseamos, como un ejercicio intelectual podemos construír este sumador binario de 4 bits partiendo de funciones lógicas básicas. Pero tenemos otra opción más atractiva para un diseñista que tenga cosas más importantes que hacer con su tiempo. Podemos comprarlo a muy bajo costo en el mercado, ya construído y entregado en un circuito integrado pequeño que cabe fácilmente en el dedo meñique de la mano. A continuación tenemos el diagrama de un circuito integrado de la familia TTL (véase el Suplemento # 1), el 7483, el cual es un Sumador-Completo de 4-bits (4-Bit Full Adder) como el que acabamos de "construír", con el cual podemos sumar dos números binarios A1A2A3A4 y B1B2B3B4 de cuatro bits, obteniendo la suma binaria respectiva en las terminales S1S2S3S4 con la terminal de "Llevar, salida" (Carry Output, C4, esta es la misma terminal descrita arriba como "Llevar, salida") lista para ser utilizada en caso de que el resultado de alguna suma binaria exceda la capacidad de los cuatro dígitos binarios, y la terminal de "Llevar, entrada" (Carry Input, C0, esta es la misma terminal descrita arriba como "Llevar, entrada") para ser utilizada en caso de que se quieran conectar varios sumadores de 4 bits en cadena, con cada terminal de salida C4 conectada a la terminal de entrada C0 del circuito integrado 7483 que le sigue:





Puesto que aquí prácticamente todas las terminales del circuito integrado están siendo utilizadas a su máxima capacidad dejando únicamente dos terminales disponibles, la terminal 5 y la terminal 12, es precisamente en estas dos terminales en donde se le aplican al circuito integrado los polos positivo y negativo de la fuente de poder.


PROBLEMA: Construír una Tabla de Verdad para un Sumador-Completo, y a partir de la misma obtener las expresiones Boleanas para las funciones "Anotar" y "Llevar" en función de minterms. (La función "Llevar" se refiere en este caso a la función "Llevar salida".)

Por las características del Sumador-Completo, la Tabla de Verdad debe ser forzosamente como la que se muestra:



En base a esta Tabla de Verdad, las expresiones Boleanas deseadas serán:

Anotar = A·B·C + ABC + B·C + ABC

Llevar = ABC + ABC + ABC + ABC


PROBLEMA: Demostrar que para un Sumador-Completo:

Llevar = AB + (A+B) ·A·B·C
Anotar = [(A + B)·A·B + C][(A + B)ABC]'

en donde C es la terminal de "Llevar, salida". (Sugerencia: Considerar la salida de un OR-EXCLUSIVO como (A+B)·A·B.)

Trazando el flujo de las señales a través del Sumador-Completo considerando la acción que llevan a cabo los Medio-Sumador:



obtenemos primero de inmediato la expresión Boleana para terminal Llevar que pasará un bit de "1" en caso de que la suma binaria produzca "10" por ser ambas entradas A y B iguales a "1":

Llevar = AB + (A+B) ·A·B·C

Y en lo que respecta a la función Anotar que viene de la acción del OR-EXCLUSIVO contenido en el Medio-Sumador inferior:



introduciendo los valores para X1 y X2 obtenemos finalmente:




PROBLEMA: Suma binaria múltiple. ¿Cuál sería la mejor alternativa para poder sumar cuatro números binarios con una extensión de 16 bits?

Aunque es posible diseñar un sumador de dos números binarios con una capacidad para poder manejar números de 16 bits, y hecho esto agregar tres bloques iguales con entradas diferentes para poder sumar cuatro números binarios A, B, C y D, esto sería un desperdicio lamentable de recursos aún es esta época de electrónica microminiaturizada de bajo costo. Existe otra alternativa mucho más eficiente y mucho más económica en términos de recursos de hardware, la cual consiste en ir efectuando totalizaciones parciales hasta llegar al resultado final. Esto requiere de una secuencia de pasos:

(1) Sumar el número A al número B.

(2) Depositar el resultado de la suma de A y B en un registro temporal, al cual llamaremos acumulador, precisamente porque irá acumulando resultados intermedios.

(3) Sumar el número C al número contenido en el acumulador (A+B), depositando el resultado en el acumulador.

(4) Sumar el número D al número contenido en el acumulador (A+B+C).

Esta alternativa requiere del uso de un solo sumador completo, el cual será utilizado una y otra vez para llevar a cabo la suma múltiple. Al completar estos pasos, el resultado estará contenido en ese registro que estamos llamando acumulador, el cual obviamente debe tener la capacidad para poder "memorizar" un número binario. Esto constituye una motivación para diseñar elementos de memoria. Pero además necesitamos de algún secuenciador que sea capaz de efectuar las operaciones señaladas, y que además pueda ser modificado con facilidad para sumar una cantidad diferente de números, digamos veinte números, para que el diseño del "hardware" no esté atado a una cantidad fija de números. Esto solo lo podemos lograr usando algo que sea programable, algo en lo cual podamos escribir las instrucciones necesarias para llevar a cabo una suma binaria múltiple. Estos son, desde luego, los inicios de una máquina programable que sea capaz de ejecutar operaciones aritméticas siguiendo las instrucciones que le sean señaladas. Esta es la motivación para la creación de una computadora.


PROBLEMA: El Medio Substractor.- Dadas las palabras A=10101 y B=01100 (las cuales contienen todas las combinaciones posibles de "unos" y "ceros" para dos terminales de entrada A y B de un circuito lógico), y llevando a cabo una una resta aparejada de los bits encontrar el bloque básico requerido para poder restar bits en el sistema binario, o sea para poder encontrar la diferencia entre dos cantidades en el sistema binario (¡esta es una auténtica resta aritmética!). Encontrar también las ecuaciones Boleanas correspondientes a este tipo de circuito.

A diferencia del problema en el cual se introdujo el caso del Medio-Sumador, aquí se restará la cantidad menor de la cantidad mayor; o sea que se llevará a cabo la operación:

A - B

Restando los números binarios dados, tendríamos la siguiente situación en nuestras manos, acordando en llamar a A el minuendo y a B el substraendo:



Esto lo podemos leer de la siguiente manera comenzando con los bits del extremo derecho, A=1 y B=0. Procediendo en forma idéntica a la manera en la cual llevaríamos a cabo una resta en nuestro sistema decimal, con la única variante de que el sistema de conteo es binario en lugar de decimal, diríamos lo siguiente: "1 menos 0 es igual a 1; entonces anotamos 0 sin necesidad de tener que tomar 'prestado' nada del siguiente bit a la izquierda en el minuendo A". Resulta obvio que vamos a requerir de dos terminales de salida, una terminal que denominaremos "Anotar" (en inglés a esta terminal se le llama Difference o simplemente D) y una terminal de "Pedir prestado" (en inglés a esta terminal se le llama Borrow o simplemente B), con los valores Anotar=1 y Pedir prestado=0 para A=1 y B=0. Para la combinación de bits A=0 y B=0 decimos "0 menos 0 es igual a 0; entonces anotamos 0 y tomamos 'prestado' 0", con lo cual la salidas deben ser Anotar=0 y Pedir prestado=0. En la siguiente combinación A=1 y B=1, decimos "1 menos 1 es igual a 0, entonces anotamos 0 y tomamos prestado 0", con lo cual las salidas deben ser Anotar=0 y Pedir prestado=0. La combinación siguiente, A=0 y B=1, presenta un reto: tenemos que restar 1 de o, lo cual en la aritmética ordinaria sería algo así como tratar de restar 8 de 5. Aunque podríamos recurrir al expediente de inventar aquí los números negativos, recordemos que tal cosa no es necesaria en la escuela primaria; los niños de la primaria aprenden a restar mucho antes de que aprendan en la escuela secundaria el concepto de los números negativos. Hagamos lo mismo que se hace en la escuela primaria; tomamos "prestado" del minuendo en la siguiente cifra posicional a la izquiera una cifra unitaria, disminuyéndolo en la misma cantidad, con el objeto de poder llevar a cabo la resta. Con esto diríamos: "0 menos 1 es igual a 10 menos 1 tomando prestado un 1 de la siguiente columna en el minuendo, con lo cual anotamos un 1 habiendo tomado prestado un 0". En otras palabras, para la combinación A=0 y B=1 requerimos Anotar=1 y Pedir prestado=1.

Para realizar la operación "Anotar" se requiere de un "OR-exclusivo". Usando minterms, la función "Pedir prestado" se logra con la expresión AB. El diagrama para el circuito requerido es el siguiente:



Las ecuaciones Boleanas serán:

Anotar = AB + AB

Pedir prestado = AB

El bloque anterior frecuentemente se simplifica de alguna manera como la siguiente, encerrándolo en una "caja negra":


Como se indica arriba, este bloque se conoce como el Medio-Substractor y al igual que el Medio-Sumador también desempeña un papel importante en su función.

Usando dos Medio-Substractor y un OR, se puede construír un Substractor-Completo, el cual junto con el Sumador-Completo forman forman la Unidad Aritmética de casi todas las computadoras digitales usadas hoy en día.


PROBLEMA: Diseñar un circuito para encontrar la diferencia binaria de dos números A y B de 4 bits cada uno. Utilizar las palabras A4A3A2A1=1011 y B4B3B2B1=0101 para demostrar su funcionamiento.

El substractor será construído utilizando como "caja negra" el Medio-Substractor visto en un problema previo, el cual será simbolizado simplemente como MS (-) en el diagrama. Llamando a D4D3D2D1 el resultado de la resta binaria, el circuito deseado tendrá la siguiente configuración:



A continuación tenemos lado a lado la suma binaria simbólica y la suma binaria llevada a cabo con los números 1001 y 0011:



Podemos imaginar a este circuito subdividido en cuatro "columnas" imaginarias, cada una de las cuales representa una "unidad" que se repite en forma idéntica. Con la excepción de la primera columna, todas las demás columnas representan una configuración semejante en su estructura, que es la siguiente:



En el diagrama del circuito completo se han representado con color rojo los "unos" y los "ceros" que se van produciendo a través de toda la configuración hasta llegar a la salida. El lector puede percatarse por sí mismo de que cualquier otra combinación de dos números binarios de cuatro bits será procesada aritméticamente en forma correcta por este circuito produciendo la diferencia binaria de ambos. Podemos representar cada una de las columnas imaginarias mostradas en este circuito como una "caja negra" como la siguiente:



La terminal "Pedir prestado, tomar" (Borrow) es la que se utiliza cuando al tratar de restar un "1" de un "0" en la misma columna es necesario "pedir prestado" de la siguiente columna a la izquierda, al igual que como se acostumbra hacerlo en la resta en el sistema decimal cuando vamos a restar un dígito como 7 de 5 y tenemos que "pedir prestado" una decena (o centena, o lo que se requiera según sea el caso) de la columna de la izquierda para convertir al número 5 en 15 y así poder restar 7 de 15 obteniendo 8. La terminal "Pedir prestado, dar" es la que debe tomar en cuenta este bit de "llevar" producido en una columna anterior con la cual se le ha reducido esta cantidad al darla a la columna a su derecha. Conectar dos "cajas negras" como esta requiere conectar la terminal de "Pedir prestado, tomar" de un bloque a la terminal "Pedir prestado, dar" del bloque que le sigue a la izquierda. Este bloque es mejor conocido como el Substractor Completo, y es el bloque que tenemos que ir conectando en serie (en "cascada") con otros bloques iguales para ir aumentando la capacidad de la magnitud del número que podrá ser manejado por el substractor binario. De aquí en delante, aumentar la capacidad del substractor completo para poder restar números de 16 bits, de 32 bits, de 62 bits, de 124 bits o más, no involucrará ningún diseño nuevo, solo requerirá ir conectando una cantidad mayor de "cajas negras" a la cantidad deseada, al igual que como ocurrió con el Sumador-Completo.


PROBLEMA: Construír una Tabla de Verdad para un Substractor-Completo, y a partir de la misma obtener las expresiones Boleanas "Anotar" y "Pedir prestado" en función de minterms.

Intuyendo las características del Substractor-Completo, la Tabla de Verdad será como sigue:



En base a esta Tabla de Verdad, las expresiones Boleanas deseadas serán:

Anotar = A·B·C + ABC + B·C+ ABC

Pedir prestado = A·B·C + ABC + ABC + ABC


PROBLEMA: Demostrar que para un Substractor-Completo:

Anotar = (AC + AC)B + (AC + A·C)B

Pedir prestado = (AC +
A·C)B + AC

en donde C es la terminal de "Pedir prestado, dar". (Considérese la salida del OR-EXCLUSIVO como AB+AB.)

Trazando el flujo de las señales a través del Substractor-Completo considerando la acción que llevan a cabo los Medio-Substractor:



del flujo de señales se obtiene primero que, para la función Anotar:

Anotar = X1X2 + X1X2

Anotar = (AC + AC)B + [AC + AC]'B

Usando en el segundo término las leyes de DeMorgan, se tiene que:

Anotar = (AC + AC)B + (AC)'(AC)'B

Aplicando las leyes de DeMorgan:

Anotar = (AC + AC)B + (A + [(C)]')([(A)]' + C)B

Anotar = (AC + AC)B + (A + C)(A + C)B

Anotar = (AC + AC)B + (AA + A·C + AC + CC)B

Anotar = (AC + AC)B + (AC + A·C)B

Del mismo modo, para la función "Pedir prestado, dar":

Pedir prestado = X3 + AC

Pedir prestado = X1X2 + AC

Pedir prestado = [AC + AC]'B + AC

Usando la misma simplificación del segundo término llevada a cabo en la función Anotar tenemos finalmente para Pedir prestado:

Pedir prestado = (AC + A·C)B + AC


PROBLEMA: Diseñar un circuito con capacidad de 3 bits que pueda funcionar tanto como "sumador completo" como "substractor completo", tomando como base la técnica del "2-complemento".

Usando la técnica del 2-complemento, la combinación en un solo circuito lógico de las capacidades de un sumador y de un substractor de números binarios se puede llevar a cabo con facilidad de la manera mostrada en el siguiente circuito que es esencialmente un sumador completo de 4 bits con una de sus entradas modificadas para poder convertir al número A en un número negativo en su representación como 2-complemento y poder así llevar a cabo la operación aritmética de resta B-A:



La conversión del Sumador Completo a un circuito que pueda actuar también como Substractor significa que la capacidad numérica quedará reducida a 3 bits, habido el hecho de que el bit más significativo (MSB) tendrá que ser adjudicado para el manejo del signo aritmético que podrá ser positivo (+) o negativo (-1). En el diseño del circuito, el Sumador Completo estudiado en los problemas anteriores es representado aquí como una "caja negra" de color azul. Sin las modificaciones mostradas arriba, al ponerle los números binarios A3A2A1A0 y B3B2B1B0 a su entrada (los cuales suponemos positivos ambos) la suma binaria aparecerá en la salida S3S2S1S0 del circuito.

En el circuito modificado, si A=A3A2A1A0 es un número positivo, entonces se pondrá un "0" en la línea D para que en cada pequeño multiplexer (dibujados con color café) con la condición de "0" puesta en D todos los bits del número A pasen intactos a los bloques Sumador Completo. Tenemos así un sumador binario de 4 bits que lleva a cabo la operación A+B. Y si queremos llevar a cabo la resta B-A, entonces se pondrá un "1" en la línea D para que en cada bloque multiplexer con la condición de "1" puesta en D los bits del número A pasen invertidos lógicamente (por la acción de los NOTs de color verde) al conjunto sumador de bloques, y como el "1" que se está poniendo en la línea D también entra al mismo tiempo en el primer Sumador Completo como una señal de Llevar (Carry), esto equivale a sumar un "1" al resultado de todo, que podemos considerar sumado al 1-complemento de A, con lo cual se tiene el 2-complemento de A sumado a B, o sea B-A por ser A un número binario negativo en 2-complemento.

El circuito, tal y como está dado, no está preparado para sumar dos números negativos. Sin embargo, puesto que la suma de dos números negativos es igual a la simple suma de las magnitudes de los números conservando el signo negativo (-) en la respuesta final, las modificaciones requeridas para que nuestro circuito mejorado pueda hacer operaciones aritméticas con dos números binarios cualesquiera que sean sus signos son modificaciones mínimas.

En una computadora digital existe otra manera de que se puedan llevar a cabo las operaciones aritméticas de dos números cualesquiera que sean sus signos usando un simple Sumador Completo sin modificación alguna, y esto es por la vía de la programación. Las instrucciones del programa escrito por el programador serían las encargadas de llevar a cabo las operaciones necesarias de 2-complementación, pasándole los números binarios ya "transformados" al Sumador Completo. Esto no es más que uno de muchos ejemplos de algo que se encuentra en el fondo de cualquier decisión de diseño para la arquitectura de cualquier computadora: escoger entre la opción de implementar alguna función por la vía de la programación sin agregarle nuevos circuitos o componentes a la máquina, o implementar la misma función por la vía de la adición de más componentes y circuitos. La enorme ventaja de la segunda opción es que el procesamiento de información por la vía de circuitos electrónicos especializados es mucho más rápida que implementarla por la vía de la programación, lo cual requerirá la utilización de varios ciclos de instrucción en el programa de la máquina para obtener el mismo resultado. Es por esta razón, aunada al dramático abaratamiento de los circuitos en los cuales se implementa la microelectrónica de la lógica digital, que la tendencia ha sido transferir la mayor cantidad posible de funciones a la máquina, quitándole cada vez más y más un peso de encima al programador.