UNIDAD ARITMÉTICA Y LÓGICA (ALU)


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 ALUsignifica Arithmetic Logic Unit (Unidad Aritmética Lógica). 


ESTRUCTURA BÁSICA

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. 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.


BANDERAS DE RESULTADO


Unidad de coma flotante
Una unidad de coma flotante o, también conocido como coprocesador matemático, es un componente de la unidad central de procesamiento especializado en el cálculo de operaciones en coma flotante. Las operaciones básicas que toda FPU puede realizar son la suma y multiplicación usuales, si bien algunos sistemas más complejos son capaces también de realizar cálculos trigonométricos o exponenciales.
No todas las unidades centrales de procesamiento tienen una FPU dedicada. En ausencia de FPU, la CPU puede utilizar programas en microcódigo para emular una función en coma flotante a través de la unidad aritmético lógica (ALU), la cual reduce el coste del hardware a cambio de una sensible pérdida de velocidad.
En algunas arquitecturas, las operaciones en coma flotante se tratan de forma completamente distinta a las operaciones enteras, con registros dedicados y tiempo de ciclo diferentes. Incluso para operaciones complejas, como la división, podrían tener un circuito dedicado a dicha operación.
Hasta mediados de la década de 1990, era común que las CPU no incorporasen una FPU en los ordenadores domésticos, sino que eran un elemento opcional conocido como coprocesador. Ejemplos podrían ser las FPUs 387 y 487 que se utilizaban en las unidades centrales de procesamiento Intel 80386 e Intel 80486SX en máquinas Intel Pentium, o la FPU 68881 utilizada en las unidades centrales de procesamiento 680x0 en ordenadoresMacintosh.
Cabe destacar que en los países anglosajones, numéricamente se hace uso del punto como separador de unidades en vez de la reconocida internacionalmente en elSistema Internacional de Unidades, la coma, por esa razón la traducción más correcta sería "unidad de coma flotante" porque sus operaciones desplazan la coma de los decimales.
 







Operaciones simples

La mayoría de las ALU pueden realizar las siguientes operaciones:

· Operaciones aritméticas de números enteros (adiciónsustracción, y a veces multiplicación y división, aunque ésto es más complejo)
·         Operaciones lógicas de bits (ANDNOTORXORXNOR)
·         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
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) una ALU suficientemente potente para calcular rápido, pero no de una complejidad de tal calibre que haga una ALU económicamente prohibitiva. Imagina que necesitas calcular, digamos, la raíz cuadrada de un número; el ingeniero digital examinará las opciones siguientes para implementar esta operación:
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 iterativo, 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 o unidad de coma flotante.
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 realizado por bibliotecas de software.
Las opciones superiores 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 complejos como el Pentium IV y el AMD Athlon 64 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.

Sección Lógica

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.


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
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


Sección Aritmética

El componente básico de la sección aritmética es un sumador en paralelo. 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.


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 acarreo ó 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

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 Bipara obtener las siguientes funciones:
S1
S0
Ni
0
0
0
0
1
Bi
1
0
Bi'
1
1
1
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:
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.
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. 
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.

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 
XOR
Ninguna
Ai
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
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 + SSS0'·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.

Selección
Salida F
hDescripció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 
OR-Exclusiva
1
1
0
X
A·B
AND
1
1
1
X
A’
Complementar A




Coprocesador matemático.


El coprocesador matemático es un procesador especial que sirve como complemento del microprocesador principal. El coprocesador matemático puede encargarse de operaciones como la aritmética de punto flotante, gráficos, procesamiento de señales, procesamiento de cadenas, encriptación, del filtro de Savitzky–Golay (método para cálculo de derivadas), etc. Por lo tanto, el coprocesador no es un procesador de propósito general. Algunos coprocesadores no pueden buscar instrucciones desde la memoria, ejecutar instrucciones de control de flujo, hacer operaciones de entrada/salida, administrar la memoria, entre otras cosas, que sí pueden hacer los procesadores de propósito general. El coprocesador depende de un procesador anfitrión o "host" para entregarle instrucciones al coprocesador. De todas maneras, en algunas arquitecturas, el coprocesador tiene un funcionamiento más de propósito general, pero con un limitado rango de funciones y siempre bajo la supervisión del procesador principal. El uso de coprocesadores disminuyó debido a la dificultad de integrar este con los nuevos microprocesadores de altas velocidades. De todas maneras hay un resurgimiento de estos, especialmente para aquellos dedicados a los gráficos, que cada vez son más complejos en los juegos.

1 comentario: