4.+Operación+de+la+unidad+de+aritmética+y+lógica

OPERACIONES SIMPLES Un ingeniero puede diseñar una ALU para calcular cualquier operación, sin importar lo compleja que sea; el problema es que cuanto más compleja sea la operación, tanto más costosa será la ALU, más espacio usará en el procesador, y más energía disipará, etc. Por lo tanto, los ingenieros siempre calculan un compromiso, para proporcionar al procesador (u otros circuitos) un ALU suficientemente poderoso para hacerlo rápido, pero no tan complejo para llegar a ser prohibitivo. Imagine que usted necesita calcular, digamos, la raíz cuadrada de un número; el ingeniero digital examinará las opciones siguientes para implementar esta operación: Las opciones arriba van de la más rápida y más costosa a la más lenta y económica. Por lo tanto, mientras que incluso la computadora más simple puede calcular la fórmula más complicada, las computadoras más simples generalmente tomarán un tiempo largo porque varios de los pasos para calcular la fórmula implicarán las opciones #3, #4 y #5 de arriba. Los procesadores poderosos como el Pentium IV y el AMD64 implementan la opción #1 para las operaciones más complejas y la más lenta #2 para las operaciones extremadamente complejas. Eso es posible por la capacidad de construir ALU muy complejas en estos procesadores. > > > REFERENCIAS: [] > > ​ > ANA LUCIA VANEGAS MARTINEZ
 * La mayoría de las ALU pueden realizar las siguientes operaciones:
 * Operaciones aritméticas de números enteros (adición, sustracción, y a veces multiplicación y división, aunque esto es más costoso)
 * Operaciones lógicas de bits (AND, NOT, OR, XOR, XNOR)
 * Operaciones de desplazamiento de bits (Desplazan o rotan una palabra en un número específico de bits hacia la izquierda o la derecha, con o sin extensión de signo). Los desplazamientos pueden ser interpretados como multiplicaciones o divisiones por 2
 * OPERACIONES COMPLEJAS
 * 1) Diseñar una ALU muy compleja que calcule la raíz cuadrada de cualquier número en un solo paso. Esto es llamado **cálculo en un solo ciclo de reloj**.
 * 2) Diseñar una ALU compleja que calcule la raíz cuadrada con varios pasos (como el algoritmo que aprendimos en la escuela). Esto es llamado **cálculo interactivo**, y generalmente confía en el control de una unidad de control compleja con microcódigo incorporado.
 * 3) Diseñar una ALU simple en el procesador, y vender un procesador separado, especializado y costoso, que el cliente pueda instalar adicional al procesador, y que implementa una de las opciones de arriba. Esto es llamado **coprocesador**.
 * 4) Emular la existencia del coprocesador, es decir, siempre que un programa intente realizar el cálculo de la raíz cuadrada, hacer que el procesador compruebe si hay presente un coprocesador y usarlo si lo hay; si no hay uno, interrumpir el proceso del programa e invocar al sistema operativo para realizar el cálculo de la raíz cuadrada por medio de un cierto algoritmo de software. Esto es llamado **emulación por software**.
 * 5) Decir a los programadores que no existe el coprocesador y no hay emulación, así que tendrán que escribir sus propios algoritmos para calcular raíces cuadradas por software. Esto es realizadado por **bibliotecas de software**.

Operación de la unidad de aritmética y lógica
Una unidad aritmética lógica puede realizar un conjunto de operaciones aritméticas básicas y un conjunto de operaciones lógicas, a través de líneas de selección. En inglés //ALU// significa //Arithmetic Logic Unit// (Unidad Aritmética Lógica). La figura 3.12.1. muestra el diagrama de bloques de una //ALU//. Figura 3.12.1. Diagrama de bloques de una ALU Las cuatro entradas de A se combinan con las de //B// generando una operación de salida de cuatro bits en //F//. La entrada de selección de modo //S2// distingue entre las operaciones aritméticas y lógicas. Las entradas de selección //S0// y //S1// determinan la operación aritmética o lógica. Con las entradas //S0// y //S1// se pueden elegir cuatro operaciones aritméticas (con //S2// en un estado) y cuatro logicas (con //S2// en otro estado). Los acarreos de entrada y salida tienen sentido únicamente en las operaciones aritméticas. El diseño de una //ALU// implica el diseño de la sección aritmética, la sección lógica y la modificación de la sección aritmética para realizar las operaciones aritméticas y lógicas. Los datos de entrada en una operación lógica son manipulados en forma separada y los bits son tratados como variables binarias. En la tabla 3.12.1. se listan cuatro operaciones lógicas //OR//, //OR - Exclusiva//, //AND// y //NOT//. En el circuito, las dos líneas de selección (//S1,// //S0//) permiten seleccionar una de las compuertas de entrada, correspondientes a la función Fi. Tabla 3.12.1. Tabla de Función Lógica. El circuito lógico de la figura 3.12.2 es una etapa de un circuito lógico de //n// bits. Figura 3.12.2. Diagrama lógico de un circuito lógico de una ALU El componente básico de la sección aritmética es un sumador en paralelo (ver [|lección 3.10.1]). Las operaciones aritméticas configuradas en el circuito aritmético se presentan en la tabla 3.12.2. En una //ALU//, la suma aritmética se puede implementar con un número binario en //A//, otro número en la entrada //B// y el acarreo de entrada //Cin// en un valor lógico //0//. El resto de las funciones se enuncian en la columna descripción. Tabla 3.12.2. Tabla de la Función F en un Circuito Aritmético La implementación de las funciones anteriores por medio de un circuito lógico sencillo se describe a continuación. El circuito se diseña bajo el precepto de intervenir cada entrada //Bi// para obtener las siguientes funciones: Tabla 3.12.3. Tabla del circuito para la entrada Bi La figura 3.12.3. muestra el circuito. Figura 3.12.3. Circuito para la tabla 3.12.2. Por medio de estas funciones se pueden lograr las funciones de la tabla 3.12.2 al agregar el número Ni (tabla 3.12.3) a la entrada A a través de un sumador en paralelo para cada etapa, teniendo en cuenta el valor de la entrada Cin. El circuito combinacional aritmético se muestra en la figura 3.12.4. En la figura, la entrada A se denomina Mi en el sumador completo. Figura 3.12.4. Circuito aritmético Diseño de una Unidad Aritmética Lógica En el diseño de una //ALU// se deben seguir los siguientes pasos: El diseño simple de una ALU se hace utilizando el sumador completo para generar las operaciones lógicas de la unidad. Por lo tanto es necesario introducir una variable de control adicional // (S2) //, con el fin de seleccionar entre las operaciones lógicas y aritméticas. En este diseño, un valor // S2 = 1 // hace que el circuito efectúe operaciones lógicas. Recordando la salida de un sumador completo: //F = (Ai// Å //Bi)// Å //Cin// A partir de esta ecuación, es posible obtener la función lógica requerida, utilizando la debida manipulación lógica. La función requerida se expone en la tabla 3.12.4. Tabla 3.12.4. Tabla de obtención de las funciones lógicas con un sumador completo Partiendo de la tabla 3.12.4., las entradas //Mi//, //Ni// y //Cini// en un sumador completo, son equivalentes a las siguientes expresiones: //Mi// = //Ai// + //S2·// //S1'·S0'·Bi// + //S2·// //S1·S0'·Bi'// //Ni = S0·Bi// //+// S1·Bi' //Cini =// //S2'·//Ci La figura 3.12.5. muestra el diagrama de la unidad aritmética lógica de dos etapas. Figura 3.12.5. Diagrama lógico de una ALU Las doce operaciones generadas en el //ALU// se resumen en la tabla 3.12.5., la función en particular se selecciona a través de //S2//, //S1//, //S0// y //Cin//. Las operaciones aritméticas son las mismas del circuito aritmético.
 * Sección Lógica**
 * ~ **S1** ||~ **S0** ||~ **Salida** ||~ **Función Fi** ||
 * 0 || 0 || F=Ai+Bi || OR ||
 * 0 || 1 || F=Ai Å Bi || XOR ||
 * 1 || 0 || F=Ai·Bi || AND ||
 * 1 || 1 || F=A'i || NOT ||
 * Sección Aritmética**
 * ~ **Selección de Función** ||~ **Salida N** ||~ **Función** ||~ **Descripción** ||
 * // S1 // || // S0 // || //Cin// || //N// || //F// ||  ||
 * 0 || 0 || 0 || 0 || A || Transferir A ||
 * 0 || 0 || 1 || 0 || A+1 || Incrementar A ||
 * 0 || 1 || 0 || B || A+B || Suma ó agregar B a A ||
 * 0 || 1 || 1 || B || A+B+1 || Suma con accarreo ó agregar B a A más 1 ||
 * 1 || 0 || 0 || B’ || A+B’ || Agregar el complemento de 1 de B a A ||
 * 1 || 0 || 1 || B’ || A+B’+1 || Agregar el complemento de 2 de B a A ||
 * 1 || 1 || 0 || Todos unos || A-1 || Decrementar A ||
 * 1 || 1 || 1 || Todos unos || A || Trasferir A ||
 * ~ **S1** ||~ **S0** ||~ **Ni** ||
 * 0 || 0 || 0 ||
 * 0 || 1 || Bi ||
 * 1 || 0 || Bi' ||
 * 1 || 1 || 1 ||
 * 1) Diseñar la sección aritmética independientemente de la sección lógica.
 * 2) Determinar las operaciones lógicas del circuito aritmético, asumiendo que los acarreos de salida de todas las etapas son //0//.
 * 3) Modificar el circuito aritmético para obtener las operaciones lógica requeridas.
 * ~ **S2** ||~ **S1** ||~ **S0** ||~ **Ai** ||~ **Bi** ||~ **Cin** ||~ **Operación Sumador Completo** ||~ **Función requerida Fi** ||~ **Manipulación** ||~ **Salida** ||
 * 1 || 0 || 0 || Ai || 0 || 0 || Ai || OR || Aplicar una función OR Ai + Bi || Ai+Bi ||
 * 1 || 0 || 1 || Ai || Bi || 0 || Ai Å Bi || XOR || Ninguna || Ai ÅBi ||
 * 1 || 1 || 0 || Ai || Bi' || 0 || Ai·Bi || AND || Aplicar una función OR Ai + Bi' || Ai·Bi ||
 * 1 || 1 || 1 || Ai || 1 || 0 || A'i || NOT || Ninguna || A'i ||
 * ~ **Selección** ||~ **Salida** **F** ||~ h**Descripción** ||
 * //hS2// || //hS1// || //hS0// || //Cin// || //F// ||  ||
 * 0 || 0 || 0 || 0 || A || Trasferir A ||
 * 0 || 0 || 0 || 1 || A+1 || Incrementar A ||
 * 0 || 0 || 1 || 0 || A+B || Suma ||
 * 0 || 0 || 1 || 1 || A+B+1 || Suma con accarreo ||
 * 0 || 1 || 0 || 0 || A-B-1 || Resta con préstamo ||
 * 0 || 1 || 0 || 1 || A-B || Sustracción ||
 * 0 || 1 || 1 || 0 || A-1 || Decrementar A ||
 * 0 || 1 || 1 || 1 || A || Transferir A ||
 * 1 || 0 || 0 || X || A+B || OR ||
 * 1 || 0 || 1 || X || A Å B || OR-Exclusiva ||
 * 1 || 1 || 0 || X || A·B || AND ||
 * 1 || 1 || 1 || X || A’ || Complementar A ||

AUTOR: Gutierrez Junco Claudia
Fuente: http://www.virtual.unal.edu.co/cursos/ingenieria/2000477/lecciones/031201.htm

= Operacion de la Unidad de Aritmetica y Logica =

Antes de intentar explicar qué hace un procesador para funcionar creo que es necesario explicar para qué sirve, es decir, cual es su función dentro de un ordenador.

El procesador es la parte del ordenador que ejecuta los programas, o lo que es lo mismo, los programas le dicen qué tiene que hacer. Esto se hace mediante la ejecución de instrucciones cuya función puede ser desde sumar dos números hasta acceder a un dispositivo de hardware. Las operaciones aritmético-lógicas no son más que cuentas matemáticas que se encargan de calcular el resultado que pida algún programa. Los datos que recibe el procesador y los resultados que arroja son ilegibles para las personas, por lo que hacen falta dispositivos de entrada/salida que de alguna forma traduzcan esta información tanto desde la persona a la máquina como de la máquina a la persona. Este hardware que traduce la información también está controlado por el procesador. Todo lo que vemos en las pantallas de nuestro ordenador, escuchamos por los altavoces, etc, es “creado” directa o indirectamente por el procesador de nuestro ordenador. Por ejemplo, si estamos escuchando una canción en mp3, el procesador se encarga de decodificarla (descomprimirla principalmente) y acceder a la tarjeta de sonido para decirle qué tiene que hacer en cada momento. Si estamos jugando a algún juego es el procesador el que, en función de la tecla que estamos pulsando o del movimiento del ratón, mandará a la tarjeta gráfica lo que tiene que hacer para que esta pueda representar las imágenes en la pantalla. Y así ocurre con todo el hardware del ordenador. Un procesador no es más que un director de orquesta que se encarga de controlar qué hacen y qué dejan de hacer las distintas partes del ordenador en función de un conjunto de instrucciones que le dicen qué debe hacer (los programas).


 * Cómo están diseñados los procesadores**

Un procesador está hecho básicamente de dos partes: una unidad aritmético lógica (ALU) que se encarga de hacer operaciones matemáticas (sumas, restas, etc) y lógicas (AND, OR…) y una unidad de control, que es la que ejecuta los programas y se encarga de decirle a la ALU qué operaciones tiene que hacer.

Como todos sabemos, los ordenadores son dispositivos electrónicos digitales que funcionan única y exclusivamente con ceros y unos. El pilar fundamental con el que se fabrican los sistemas digitales como los ordenadores es el álgebra de Boole. Estas matemáticas explican las operaciones fundamentales que se pueden realizar con el código binario.

Resulta que los procesadores están constituidos por unos elementos minúsculos llamados transistores (puertas lógicas). Cada puerta lógica es capaz de realizar una operación fundamental. Las puertas lógicas se pueden materializar de muchas formas: mecánicamente, con válvulas de vacío, con relés, con transistores, etc. Los procesadores actuales están construidos con centenares de millones de transistores. En definitiva, las puertas lógicas son los ladrillos con los que se construyen los procesadores y por si solas son capaces de realizar operaciones lógicas. Uniéndolas de diferentes formas se podrán realizar operaciones más complejas, como por ejemplo sumas de diferentes números. También se podrán construir elementos de memoria. Todo esto dependerá de la forma en que unamos las distintas puertas lógicas. Estos elementos básicos tienen desde una a varias entradas y una sola salida.


 * Código binario**

Sus elementos son el 0 y el 1. Las operaciones se realizan como en el sistema decimal. El valor de los unos depende de su posición. En el sistema decimal también, y una posición más a la izquierda significa que el valor del número se multiplica por 10. Por ejemplo, el valor 20 es el 2 multiplicado por 10 porque está en la segunda posición. Si estuviera en la tercera (200) el 2 se multiplicaría por 100. En el código binario ocurre lo mismo pero multiplicando por 2 en vez de por 10. Por ejemplo el valor 10 en decimal significa 2, porque el uno está en la segunda posición. Si estuviera en la tercera (100) valdría 4 y así sucesivamente. Si hay varios unos pues se suman sus valores. Por ejemplo 1101 en decimal sería el 13 ya que (de derecha a izquierda) el primer uno vale la unidad, en la segunda posición cuyo valor es 2 hay un cero así que no vale nada, en la tercera hay un uno que por estar en la tercera vale 4 y en la cuarta hay otro uno que vale 8. Sumamos todos los valores y nos sale 13.

En resumen tan solo tenemos que ir multiplicando por 2 el valor de cada posición partiendo de la primera que vale la unidad.

Existen varias formas de traducir de decimal a binario y viceversa. También hay varias formas de representar los números enteros y reales (decimales) en función de la normalización usada. No voy a explicar nada de esto aquí. Solo por curiosidad, en la mayoría de los ordenadores los números reales se representan con la norma IEEE 754 y para los números enteros existen numerosas representaciones. Para la representación de texto antes se usaba mayoritariamente el código ASCII, pero desde que Windows NT se ha convertido en un SO de ámbito doméstico es el UNICODE el que predomina. Para representar sonidos e imágenes hay infinidad de formatos aunque es el PCM y el mapa de bits respectivamente los que más extendidos estaban antes de la extensión del MP3 y el JPEG.


 * Álgebra de conmutación**

Hay diferentes operaciones lógicas y por lo tanto diferentes tipos de puertas lógicas. La función de estas es arrojar un resultado en función de la entrada. Las más importantes son las siguientes:

Operación AND: Se trata de la multiplicación de varios números binarios. Lo importante de esta operación es saber que para que la salida sea 1, todas las entradas tienen que ser 1. Si por ejemplo tenemos un transistor con tres entradas y una salida (todos tienen una sola salida) y en todas las entradas metemos el valor 1, la salida será uno. Si tan solo una o más de las entradas es cero, la salida será cero. Puertas AND de 2, 3, 4 y 8 entradas

· Operación OR: En este caso con que una sola de las entradas sea 1, la salida valdrá 1, o lo que es lo mismo, para que la salida valga cero todas las entradas tienen que valer cero. Puertas OR de 2, 3, 4 y 8 entradas

· Operación NOT: Solo tiene una entrada. Tan simple como que si la entrada vale 1 la salida vale 0 y viceversa. Puerta NOT

· Operación NAND: Es igual a la operación AND con la única diferencia de que en la salida se produce la operación NOT. Esto quiere decir que si el resultado de la operación AND vale 1, la salida valdrá 0 y viceversa. Puerta NAND de 2 entradas

Equivale a

· Operación NOR: Ocurre como en la NAND pero con la operación OR. Puerta NOR de 2 entradas

· Operación EXCLUSIVOR: La salida valdrá 1 si el número de unos de la entrada es impar. Puerta XOR de 2 entradas

· Operación EXCLUSIVENOR: La salida valdrá 1 si el número de unos de la entrada es par. Puerta XNOR de 2 entradas

Con estas siete operaciones podremos hacer cualquier cosa, desde sumar dos números hasta representar los gráficos más avanzados del momento, pasando por ver fotografías, escuchar música o poder ver este texto en la pantalla de tu ordenador. Solo es necesario saber cómo unir estas operaciones para hacer unas más complejas.


 * Multiplexores/demultiplexores**

Un multiplexor es un elemento con varias entradas y una salida. La entrada está dividida en dos tipos: el dato que queremos introducir y una dirección. La dirección indicará de qué entrada (de las múltiples que hay) se va a coger el dato y ese será el de la salida.

Imaginemos que tenemos un multiplexor con cuatro entradas de datos y por lo tanto dos entradas de dirección (para representar cuatro valores solo necesitamos dos bits). Entonces en la entrada tenemos 1000 y en la dirección tenemos 11, es decir, el valor 4. En este caso el cuarto valor de la entrada es el 0, por lo que la salida será cero. Si en la dirección hubieramos tenido el valor 00 entonces la salida habría sido 1.

Símbolo del multiplexor

Un demultiplexor hace lo mismo pero al revés. Tenemos una entrada y varias salidas controladas con una dirección. En este caso el valor de la única entrada irá a la salida que indique la dirección.

Por supuesto, estos elementos están construidos sólo con las operaciones lógicas básicas que he mostrado más arriba.

Esquema de un multiplexor


 * Circuitos combinacionales**

Es un hecho que existe máquinas que realizan operaciones matemáticas en cuestión de milisegundos y que estas máquinas realizan estas operaciones sólo con unos pocos tipos de puertas lógicas.

Imaginemos que queremos sumar dos números, el 1 y el 2. Para representar ambos datos y el resultado vamos a necesitar tres bits. El primer dato (el 1) será en binario 01, el segundo dato (el 2) será 10 y el resultado (3) será 11. El resumen, queremos crear un circuito con el que introduciendo dos valores obtengamos un tercero de forma que este sea la suma de los dos primeros. Para ello podríamos juntar puertas lógicas de la siguiente forma.

Sumador de dos bits

A este tipo de circuitos se les llama combinacionales porque les introducimos unos valores y por la salida aparecen otros en función de la configuración de las puertas. Con los circuitos combinacionales podemos crear desde dispositivos que hagan operaciones aritméticas básicas (como el sumador que de arriba) hasta codificadores-decodificadores que traduzcan de un código a otro.

Para el diseño de un circuito combinacional existe distintos métodos que simplifican muchísimo el trabajo los cuales no voy a mencionar aquí. Solo es interesante saber que para diseñar un circuito combinacional es necesario saber cuales van a ser los resultados en función de las entradas con TODAS las combinaciones posibles.

De esta forma nos podemos hacer una idea de cómo podría funcionar la ALU de un procesador. Ésta tan solo recibe datos y el tipo de operación que tiene que hacer con estos datos y arroja un resultado en función de la entrada.


 * Elementos de memoria**

En jerga informática a un elemento de memoria se le llama biestable. Un biestable es capaz de almacenar un solo bit de información. Uniendo varios biestables se consigue almacenar una cantidad mayor de información. Los biestables, como prometí un poco más arriba, se construyen también a base de puertas lógicas.

(Elementos de memoria hechos con puertas NOT y NAND. Podemos comprobar como gracias al bucle la información se mantendrá almacenada)

Existen distintos tipos de biestables cuyas características y fiabilidad cambian en función de cómo estén construidos (número y configuración de las puertas lógicas).

No existe un símbolo para representar un biestable, pero en función del tipo de biestable se suele usar el siguiente cambiando la denominación y número de patillas:

Biestable de tipo D

En resumen, se trata de un elemento capaz de almacenar un bit de información y del que podremos recuperar dicho bit cuando queramos.

Usando un gran número de elementos de memoria colocados en maya y unos cuantos de/multiplexores podemos hacernos una idea de cómo están construidas las memorias (RAM, Flash…).


 * Sistemas secuenciales**

Ya hemos visto los circuitos secuenciales, en los cuales introduciendo un valor aparece otro diferente y siempre que introduzcamos la misma entrada nos aparecerá la misma salida. Pero también existe otro tipo de circuito con el que no siempre obtendremos la misma salida introduciendo la misma entrada. A estos sistemas se les llama secuenciales. A diferencia de los combinacionales, estos últimos además de tener en cuenta la entrada, tienen en cuenta los resultados anteriores, es decir, que recuerdan lo operaciones anteriores y en función de dichas operaciones y de la entrada aparecerá un nuevo resultado. Obviamente para que un circuito pueda recordar cosas necesita una memoria y es aquí donde hacen aparición los biestables.

Imaginemos que queremos diseñar un circuito cuya función sea la de sumar dos números, uno de ellos lo introducimos nosotros y el otro vale el resultado de la suma anterior anterior. Tan solo tenemos que coger el sumador que hemos diseñado más arriba y ponerle un biestable cuya entrada será la salida del sumador y su salida será la entrada del sumador. Con este circuito además de haber diseñado un sumador de estas características hemos conseguido un contador; un elemento importantísimo para el funcionamiento de un procesador.

Otros sistemas secuenciales muy importantes para el funcionamiento de un procesador son los:

· Bancos de registros: Son una agrupación de biestables capaces de escribir y leer información.

· Registros de desplazamiento: Son circuitos que se encargan de desplazar la información de un lado a otro. Por ejemplo si tenemos la cadena 11010000 y la introducimos en un registro “de desplazamiento a la izquierda” una sola vez el resultado será 10100001. Si lo volvemos a introducir el nuevo resultado será 01000011. Existen numerosos tipos de registro de desplazamiento.

· Contadores: Como el que he comentado más arriba. También se pueden usar registros de desplazamiento para construir contadores.

Con los circuitos secuenciales nos podemos hacer una idea de cómo funciona parte de la ALU y la unidad de control.

media type="youtube" key="Ma8V5eojtLc" height="385" width="480" Fuente: http://www.youtube.com/watch?v=Ma8V5eojtLc&feature=related www.monografias.com

Posteo: Romero Pastén Luis Angel