Electrónica Digital
Carrera: Ingeniería en Electrónica
Unidad Aritmético Lógica
Un típico símbolo esquemático para una ALU, donde A
y B son operandos; R es la salida; F es la entrada de la
unidad de Control; D es un estado de la salida
La Unidad Aritmético Lógica (UAL), o Arithmetic Logic Unit (ALU), es
un circuito digital que calcula operaciones aritméticas (como adición,
substracción, etc.) y operaciones lógicas (como OR, NOT, XOR, etc.),
entre dos números.
Muchos tipos de circuitos electrónicos necesitan realizar algún tipo de
operación aritmética, así que incluso el circuito dentro de un reloj digital
tendrá una ALU minúscula que se mantiene sumando 1 al tiempo actual, y
se mantiene comprobando si debe activar el pitido del temporizador, etc...
Por mucho, los más complejos circuitos electrónicos son los que están
construidos dentro de los chips de microprocesadores modernos como el
Pentium. Por lo tanto, estos procesadores tienen dentro de ellos un ALU
muy complejo y poderoso. De hecho, un microprocesador moderno (y los
mainframes) pueden tener múltiples núcleos, cada núcleo con múltiples
unidades de ejecución, cada una de ellas con múltiples ALU.
Muchos otros circuitos pueden contener en el interior ALU:
•GPU como los que están en las tarjetas gráficas NVidia y ATI,
•FPU como el viejo coprocesador numérico 80387
•Procesadores digitales de señales como los que se encuentran en
tarjetas de sonido Sound Blaster, lectoras de CD y las TV de alta
definición.
Todos éstos tienen adentro varias ALU poderosas y complejas.
Von Neumann indicó que una ALU es una necesidad para una
computadora porque está garantizado que una computadora tendrá que
computar operaciones matemáticas básicas, incluyendo adición,
sustracción, multiplicación, y división. Por lo tanto, creyó que era
"razonable que (la computadora) debe contener los órganos especializados
para estas operaciones".
Sistemas numéricos
Una ALU debe procesar números usando el mismo formato que el resto del
circuito digital. Para los procesadores modernos, este formato casi siempre
es la representación de número binario de complemento a dos.
Las primeras computadoras usaron una amplia variedad de sistemas de
numeración, incluyendo complemento a uno, formato signomagnitud, e
incluso verdaderos sistemas decimales, con diez tubos por dígito.
Las ALUs para cada uno de estos sistemas numéricos tenían diferentes
diseños, y esto influenció la preferencia actual por el complemento a dos,
debido a que ésta es la representación que hace más fácil, para el circuito
electrónico de la ALU, calcular adiciones y sustracciones, entre otras
operaciones aritméticas.
Una ALU simple de 2 bits que hace operaciones de AND,
OR, XOR y adición
La ALU compone básicamente de:
•Circuito Operacional,
•Registros de Entradas,
•Registro Acumulador
•Un Registro de Estados,
Este conjunto de registros que hacen posible la realización de cada una de
las operaciones.
La mayoría de las acciones de la computadora son realizadas por la ALU. La
ALU toma datos de los registros del procesador. Estos datos son procesados
y los resultados de esta operación se almacenan en los registros de salida de
la ALU. Otros mecanismos mueven datos entre estos registros y la memoria.
Una unidad de control controla a la ALU, al ajustar los circuitos que le dicen a
la ALU qué operaciones realizar.
Operaciones Simples
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)
•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á, entre otras cosas.
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. Imaginemos que se necesita calcular, 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 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 realizado por
bibliotecas de software.
Las opciones vistas 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 Nº3, Nº4 y Nº5.
Los procesadores poderosos como el Pentium IV y el AMD64
implementan la opción Nº1 para las operaciones más complejas y la
más lenta Nº2 para las operaciones extremadamente complejas. Eso
es posible por la capacidad de construir ALU muy complejas en estos
procesadores.
Entradas y salidas
Las entradas a la ALU son los datos en los que se harán las
operaciones (llamados operandos) y un código desde la unidad de
control indicando qué operación realizar. Su salida es el resultado
del cómputo de la operación.
En muchos diseños la ALU también toma o genera como entradas o
salidas un conjunto de códigos de condición desde o hacia un
registro de estado.
Estos códigos son usados para indicar casos como acarreo
entrante o saliente, overflow, división por cero, entre otros
ALU vs. FPU
Una unidad de punto flotante, Floating Point Unit (FPU), también
realiza operaciones aritméticas entre dos valores, pero lo hace para
números en representación de punto flotante, que es mucho más
complicada que la representación de complemento a dos usada en
una típica ALU. Para hacer estos cálculos, una FPU tiene
incorporados varios circuitos complejos, incluyendo algunas ALU
internas.
Generalmente los ingenieros llaman ALU al circuito que realiza
operaciones aritméticas en formatos de número entero (como
complemento a dos y BCD), mientras que los circuitos que calculan en
formatos más complejos como punto flotante o números complejos,
entre otros, reciben generalmente otro tipo de nombre.