stringtranslate.com

Unidad lógica aritmética

Una representación simbólica de una ALU y sus señales de entrada y salida, indicadas por flechas que apuntan hacia dentro o fuera de la ALU, respectivamente. Cada flecha representa una o más señales. Las señales de control entran por la izquierda y las señales de estado salen por la derecha; los datos fluyen de arriba a abajo.

En informática , una unidad lógica aritmética ( ALU ) es un circuito digital combinacional que realiza operaciones aritméticas y bit a bit en números binarios enteros . [1] [2] [3] Esto contrasta con una unidad de punto flotante (FPU), que opera con números de punto flotante . Es un componente fundamental de muchos tipos de circuitos informáticos, incluida la unidad central de procesamiento (CPU) de las computadoras, las FPU y las unidades de procesamiento de gráficos (GPU). [4]

Las entradas a una ALU son los datos sobre los que se va a operar, llamados operandos , y un código que indica la operación a realizar; La salida de la ALU es el resultado de la operación realizada. En muchos diseños, la ALU también tiene entradas o salidas de estado, o ambas, que transmiten información sobre una operación anterior o la operación actual, respectivamente, entre la ALU y los registros de estado externos .

Señales

Una ALU tiene una variedad de redes de entrada y salida , que son los conductores eléctricos utilizados para transmitir señales digitales entre la ALU y los circuitos externos. Cuando una ALU está funcionando, los circuitos externos aplican señales a las entradas de la ALU y, en respuesta, la ALU produce y transmite señales a los circuitos externos a través de sus salidas.

Datos

Una ALU básica tiene tres buses de datos paralelos que constan de dos operandos de entrada ( A y B ) y una salida de resultado ( Y ). Cada bus de datos es un grupo de señales que transmite un número entero binario. Normalmente, los anchos de bus A, B e Y (el número de señales que componen cada bus) son idénticos y coinciden con el tamaño de palabra nativa del circuito externo (por ejemplo, la CPU encapsuladora u otro procesador).

Código de operación

La entrada del código de operación es un bus paralelo que transmite a la ALU un código de selección de operación, que es un valor enumerado que especifica la operación aritmética o lógica deseada que debe realizar la ALU. El tamaño del código de operación (su ancho de bus) determina el número máximo de operaciones distintas que la ALU puede realizar; por ejemplo, un código de operación de cuatro bits puede especificar hasta dieciséis operaciones ALU diferentes. Generalmente, un código de operación ALU no es lo mismo que un código de operación en lenguaje de máquina , aunque en algunos casos puede codificarse directamente como un campo de bits dentro de un código de operación en lenguaje de máquina.

Estado

Salidas

Las salidas de estado son varias señales individuales que transmiten información complementaria sobre el resultado de la operación actual de la ALU. Las ALU de uso general suelen tener señales de estado como:

Al finalizar cada operación de ALU, las señales de salida de estado generalmente se almacenan en registros externos para que estén disponibles para futuras operaciones de ALU (por ejemplo, para implementar aritmética de precisión múltiple ) o para controlar la bifurcación condicional . La colección de registros de bits que almacenan las salidas de estado a menudo se trata como un registro único de varios bits, al que se hace referencia como "registro de estado" o "registro de código de condición".

Entradas

Las entradas de estado permiten que información adicional esté disponible para la ALU al realizar una operación. Normalmente, se trata de un único bit de "acarreo" que es el acarreo almacenado de una operación ALU anterior.

Operación del circuito

El circuito lógico combinacional del circuito integrado 74181 , una de las primeras ALU de cuatro bits

Una ALU es un circuito lógico combinacional , lo que significa que sus salidas cambiarán de forma asíncrona en respuesta a cambios de entrada. En funcionamiento normal, se aplican señales estables a todas las entradas de la ALU y, cuando ha pasado suficiente tiempo (conocido como " retraso de propagación ") para que las señales se propaguen a través del circuito de la ALU, el resultado de la operación de la ALU aparece en la ALU. salidas. El circuito externo conectado a la ALU es responsable de garantizar la estabilidad de las señales de entrada de la ALU durante toda la operación y de permitir tiempo suficiente para que las señales se propaguen a través de la ALU antes de muestrear el resultado de la ALU.

En general, los circuitos externos controlan una ALU aplicando señales a sus entradas. Normalmente, el circuito externo emplea lógica secuencial para controlar el funcionamiento de la ALU, que es estimulada por una señal de reloj de una frecuencia suficientemente baja para garantizar tiempo suficiente para que las salidas de la ALU se estabilicen en las peores condiciones.

Por ejemplo, una CPU comienza una operación de suma de ALU enrutando operandos desde sus fuentes (que generalmente son registros ) a las entradas de operandos de la ALU, mientras que la unidad de control aplica simultáneamente un valor a la entrada del código de operación de la ALU, configurándola para realizar la suma. Al mismo tiempo, la CPU también enruta la salida del resultado de la ALU a un registro de destino que recibirá la suma. Las señales de entrada de la ALU, que se mantienen estables hasta el siguiente reloj, pueden propagarse a través de la ALU y hasta el registro de destino mientras la CPU espera el siguiente reloj. Cuando llega el siguiente reloj, el registro de destino almacena el resultado de la ALU y, dado que la operación de la ALU se ha completado, las entradas de la ALU pueden configurarse para la siguiente operación de la ALU.

Funciones

Las ALU suelen admitir una serie de funciones aritméticas y lógicas bit a bit básicas. Las ALU básicas de uso general suelen incluir estas operaciones en sus repertorios: [1] [2] [3] [5]

Operaciones aritmeticas

Operaciones lógicas bit a bit

Operaciones de cambio de bits

Las operaciones de desplazamiento de ALU hacen que el operando A (o B) se desplace hacia la izquierda o hacia la derecha (según el código de operación) y el operando desplazado aparece en Y. Las ALU simples normalmente pueden desplazar el operando solo una posición de bit, mientras que las ALU más complejas emplean desplazadores de barril que permitirles cambiar el operando en un número arbitrario de bits en una sola operación. En todas las operaciones de desplazamiento de un solo bit, el bit desplazado fuera del operando aparece en la ejecución; el valor del bit desplazado al operando depende del tipo de desplazamiento.

Aplicaciones

Aritmética de precisión múltiple

En los cálculos aritméticos de enteros, la aritmética de precisión múltiple es un algoritmo que opera con números enteros que son mayores que el tamaño de palabra de ALU. Para hacer esto, el algoritmo trata cada operando como una colección ordenada de fragmentos de tamaño ALU, ordenados desde el más significativo (MS) hasta el menos significativo (LS) o viceversa. Por ejemplo, en el caso de una ALU de 8 bits, el entero de 24 bits 0x123456se trataría como una colección de tres fragmentos de 8 bits: 0x12(MS), 0x34y 0x56(LS). Dado que el tamaño de un fragmento coincide exactamente con el tamaño de la palabra de la ALU, la ALU puede operar directamente en este "trozo" de operando.

El algoritmo utiliza la ALU para operar directamente en fragmentos de operandos particulares y así generar un fragmento correspondiente (un "parcial") del resultado de precisión múltiple. Cada parcial, cuando se genera, se escribe en una región de almacenamiento asociada que ha sido designada para el resultado de precisión múltiple. Este proceso se repite para todos los fragmentos de operandos para generar una colección completa de parciales, que es el resultado de la operación de precisión múltiple.

En operaciones aritméticas (por ejemplo, suma, resta), el algoritmo comienza invocando una operación ALU en los fragmentos LS de los operandos, produciendo así un bit parcial LS y un bit de ejecución. El algoritmo escribe el parcial en el almacenamiento designado, mientras que la máquina de estado del procesador normalmente almacena el bit de ejecución en un registro de estado de ALU. Luego, el algoritmo avanza al siguiente fragmento de la colección de cada operando e invoca una operación ALU en estos fragmentos junto con el bit de acarreo almacenado de la operación ALU anterior, produciendo así otro parcial (más significativo) y un bit de acarreo. Como antes, el bit de acarreo se almacena en el registro de estado y el parcial se escribe en el almacenamiento designado. Este proceso se repite hasta que se hayan procesado todos los fragmentos de operandos, lo que da como resultado una colección completa de parciales almacenados, que comprenden el resultado aritmético de precisión múltiple.

En operaciones de desplazamiento de precisión múltiple, el orden de procesamiento de los fragmentos de operandos depende de la dirección del desplazamiento. En las operaciones de desplazamiento a la izquierda, los fragmentos se procesan LS primero porque el bit LS de cada parcial, que se transmite a través del bit de acarreo almacenado, debe obtenerse del bit MS del operando menos significativo previamente desplazado a la izquierda. Por el contrario, los operandos se procesan MS primero en operaciones de desplazamiento a la derecha porque el bit MS de cada parcial debe obtenerse del bit LS del operando más significativo previamente desplazado a la derecha.

En operaciones lógicas bit a bit (por ejemplo, AND lógico, OR lógico), los fragmentos de operando se pueden procesar en cualquier orden arbitrario porque cada parcial depende sólo de los fragmentos de operando correspondientes (se ignora el bit de acarreo almacenado de la operación ALU anterior).

Operaciones complejas

Aunque una ALU puede diseñarse para realizar funciones complejas, la mayor complejidad del circuito, el costo, el consumo de energía y el mayor tamaño resultantes hacen que esto no sea práctico en muchos casos. En consecuencia, las ALU a menudo se limitan a funciones simples que pueden ejecutarse a velocidades muy altas (es decir, retrasos de propagación muy cortos), y el circuito del procesador externo es responsable de realizar funciones complejas orquestando una secuencia de operaciones de ALU más simples.

Por ejemplo, calcular la raíz cuadrada de un número se puede implementar de varias maneras, según la complejidad de la ALU:

Las implementaciones anteriores pasan de ser las más rápidas y costosas a las más lentas y menos costosas. La raíz cuadrada se calcula en todos los casos, pero los procesadores con ALU simples tardarán más en realizar el cálculo porque se deben realizar múltiples operaciones de ALU.

Implementación

Una ALU generalmente se implementa como un circuito integrado (IC) independiente , como el 74181 , o como parte de un IC más complejo. En el último caso, normalmente se crea una instancia de una ALU sintetizándola a partir de una descripción escrita en VHDL , Verilog o algún otro lenguaje de descripción de hardware . Por ejemplo, el siguiente código VHDL describe una ALU de 8 bits muy simple:

entidad alu es puerto ( - las conexiones alu a circuitos externos: A : con signo ( 7 hasta 0 ); - operando A B : con signo ( 7 hasta 0 ); - operando B OP : sin signo ( 2 hasta 0 ); - código de operación Y : sin firmar ( 7 hasta 0 )); - resultado de la operación final alu ;                                 el comportamiento de la arquitectura de alu es comenzar el caso OP es : decodificar el código de operación y realizar la operación: cuando "000" => Y <= A + B ; -- agregar cuando "001" => Y <= A - B ; -- restar cuando "010" => Y <= A - 1 ; -- disminuye cuando "011" => Y <= A + 1 ; -- incremento cuando "100" => Y <= no A ; -- complemento a 1 cuando "101" => Y <= A y B ; -- bit a bit Y cuando "110" => Y <= A o B ; - OR bit a bit cuando "111" => Y <= A xor B ; - XOR bit a bit cuando otros => Y <= ( otros => 'X' ); caso final ; terminar conductual ;                                                                                          

Historia

El matemático John von Neumann propuso el concepto ALU en 1945 en un informe sobre las bases de una nueva computadora llamada EDVAC . [6]

El costo, el tamaño y el consumo de energía de los circuitos electrónicos fueron relativamente altos durante la infancia de la era de la información . En consecuencia, todas las computadoras en serie y muchas de las primeras computadoras, como la PDP-8 , tenían una ALU simple que operaba con un bit de datos a la vez, aunque a menudo presentaban un tamaño de palabra más amplio a los programadores. Una de las primeras computadoras en tener múltiples circuitos ALU discretos de un solo bit fue el Whirlwind I de 1948 , que empleaba dieciséis de estas "unidades matemáticas" para permitirle operar con palabras de 16 bits.

En 1967, Fairchild presentó la primera ALU implementada como circuito integrado, el Fairchild 3800, que constaba de una ALU de ocho bits con acumulador. [7] Pronto surgieron otras ALU de circuito integrado, incluidas ALU de cuatro bits como Am2901 y 74181 . Estos dispositivos normalmente tenían capacidad de " corte de bits ", lo que significa que tenían señales de "acarreo anticipado" que facilitaban el uso de múltiples chips ALU interconectados para crear una ALU con un tamaño de palabra más amplio. Estos dispositivos rápidamente se hicieron populares y se utilizaron ampliamente en minicomputadoras de bits.

Los microprocesadores comenzaron a aparecer a principios de los años 1970. Aunque los transistores se habían vuelto más pequeños, a menudo no había suficiente espacio en el troquel para una ALU de ancho de palabra completo y, como resultado, algunos de los primeros microprocesadores empleaban una ALU estrecha que requería múltiples ciclos por instrucción en lenguaje de máquina. Ejemplos de esto incluyen el popular Zilog Z80 , que realizó adiciones de ocho bits con una ALU de cuatro bits. [8] Con el tiempo, las geometrías de los transistores se redujeron aún más, siguiendo la ley de Moore , y se hizo factible construir ALU más amplias en microprocesadores.

Los transistores de circuitos integrados (IC) modernos son órdenes de magnitud más pequeños que los de los primeros microprocesadores, lo que permite instalar ALU altamente complejas en circuitos integrados. Hoy en día, muchas ALU modernas tienen anchos de palabra amplios y mejoras arquitectónicas, como cambiadores de barril y multiplicadores binarios , que les permiten realizar, en un solo ciclo de reloj, operaciones que habrían requerido múltiples operaciones en ALU anteriores.

Las ALU pueden realizarse como circuitos mecánicos , electromecánicos o electrónicos [9] [ verificación fallida ] y, en los últimos años, se han llevado a cabo investigaciones sobre ALU biológicas [10] [11] (por ejemplo, basadas en actina ). [12]

Ver también

Referencias

  1. ^ ab Atul P. Godse; Deepali A. Godse (2009). "3". Diseño de lógica digital . Publicaciones técnicas. págs. 9–3. ISBN 978-81-8431-738-1.[ enlace muerto permanente ]
  2. ^ ab Educación y formación en liderazgo (LET) 2: texto programado. Cuartel General, Departamento del Ejército. 2001. págs. 371–.
  3. ^ ab Atul P. Godse; Deepali A. Godse (2009). "Apéndice". Circuitos lógicos digitales. Publicaciones técnicas. págs. C-1. ISBN 978-81-8431-650-6.[ enlace muerto permanente ]
  4. ^ "1. Introducción a la arquitectura informática: diseño de hardware integrado, segunda edición [libro]". www.oreilly.com . Consultado el 3 de septiembre de 2020 .
  5. ^ Horowitz, Pablo ; Colina de Winfield (1989). "14.1.1". El arte de la electrónica (2ª ed.). Prensa de la Universidad de Cambridge. págs. 990–. ISBN 978-0-521-37095-0.
  6. ^ Philip Levis (8 de noviembre de 2004). "Jonathan von Neumann y EDVAC" (PDF) . cs.berkeley.edu . págs. 1, 3. Archivado desde el original (PDF) el 23 de septiembre de 2015 . Consultado el 20 de enero de 2015 .
  7. ^ Lee Boysel (12 de octubre de 2007). "Haga su primer millón (y otros consejos para aspirantes a emprendedores)". U. Michigan Presentación EECS / Grabaciones ECE . Archivado desde el original el 15 de noviembre de 2012.
  8. ^ Ken Shiriff. "El Z-80 tiene una ALU de 4 bits. Así es como funciona". 2013, derecho.com
  9. ^ Reif, John H. (2009), "Computación mecánica: la complejidad computacional de los dispositivos físicos", en Meyers, Robert A. (ed.), Encyclopedia of Complexity and Systems Science , Nueva York, NY: Springer, págs. 5466 –5482, doi :10.1007/978-0-387-30440-3_325, ISBN 978-0-387-30440-3, consultado el 3 de septiembre de 2020
  10. ^ Lin, Chun-Liang; Kuo, Ting-Yu; Li, Wei-Xian (14 de agosto de 2018). "Síntesis de unidad de control para futura biocomputadora". Revista de Ingeniería Biológica . 12 (1): 14. doi : 10.1186/s13036-018-0109-4 . ISSN  1754-1611. PMC 6092829 . PMID  30127848. 
  11. ^ Gerd Hg Moe-Behrens. "El microprocesador biológico, o cómo construir una computadora con partes biológicas".
  12. ^ Das, Biplab; Pablo, Avijit Kumar; De, Debashis (16 de agosto de 2019). "Diseño y computación de una unidad lógica aritmética no convencional en autómatas celulares cuánticos Actin". Tecnologías de microsistemas . 28 (3): 809–822. doi :10.1007/s00542-019-04590-1. ISSN  1432-1858. S2CID  202099203.

Otras lecturas

enlaces externos