# Unitat aritmeticològica

La Unitat Aritmètica Lògica (UAL), o arithmetic logic unit (ALU), és un circuit digital que calcula operacions aritmètiques (com addició, subtracció, etc.) i operacions lògiques (com OR, NOT, XOR, etc.), entre dos nombres. La Unitat Aritmètica Lògica està feta d'un conjunt de circuits combinacionals dissenyats per obtenir resultats de càlculs. Les operacions poden ser aritmètiques (suma, subtracció, producte...) o lògiques (and not... bit a bit), i desplaçaments del contingut de registres.
Molts tipus de circuits electrònics necessiten realitzar algun tipus d'operació aritmètica, de manera que fins i tot el circuit dins d'un rellotge digital tindrà una ALU minúscula que es manté sumant 1 al temps actual, i es manté comprovant si s'ha d'activar l'alarma del temporitzador, etc.
De fet, els circuits electrònics més complexes són els que estan construïts dins dels xips dels microprocessadors moderns com l'Intel Core 2 Duo. Per això, aquests processadors tenen a dins una ALU molt complexa i poderosa. És més, un microprocessador modern (i els mainframes) poden tenir múltiples nuclis, cada nucli amb múltiples unitats d'execució, cada una d'elles amb múltiples ALUs.
Molts altres circuits poden contenir en el seu interior una ALU: GPU com els que estan en les targetes gràfiques NVidia i ATI, FPU com l'antic coprocessador numèric 80387, i processadors digitals de senyals com els que es troben en targetes de so Sound Blaster, lectors de CD i les TV d'alta definició. Tots aquests tenen dintre seu diverses ALU poderoses i complexes.

## Historia: Proposta de Eckert-Mauchly

John Presper Eckert i John William Mauchly van idear el concepte de la ALU en 1945 que va ser injustament acreditat al matemàtic John von Neumann al publicar-se l'informe en el que von Neumann recopilava els treballs per a un nou computador anomenat EDVAC (Electronic Discrete Variable Automatic Computer) (Computador Automàtic Variable Discret Electrònic). Més endavant, en 1946, va treballar amb els seus col·legues dissenyant un computador per al Princeton Institute of Advanced Studies (IAS) (Institut de Princeton d'Estudis Avançats). El IAS computer es va convertir en el prototip per molts computadors posteriors. En la proposta, von Neumann va descriure el que l'equip va creure que seria necessari per la seva màquina, incloent-hi una ALU.
Von Neumann va explicar que una ALU és una necessitat per un computador perquè està garantit que un computador haurà de computar operacions matemàtiques bàsiques, incloent addició, subtracció, multiplicació, i divisió. Per això, va creure que era "raonable que (el computador) hauria de contenir els òrgans especialitzats per aquestes operacions".
Un dels punts on l'avenç tecnològic es nota més en aquest àmbit és la mida d'aquests components. En els seus inicis la mida dels citats elements condicionaven al cap i a la fi la mida i la capacitat del computador.

## Sistemes numèrics

Una ALU ha de processar nombres utilitzant el mateix format que la resta del circuit digital. Pels processadors moderns, aquest format quasi sempre és la representació de nombre binari de complement a dos. Els primers computadors van utilitzar una àmplia varietat de sistemes de numeració, incloent complement a u, format signe-magnitud, i fins i tot verdaders sistemes decimals, amb deu tubs per dígit.
Les ALUs per cada un d'aquests sistemes numèrics tenien diferents dissenys, i això va influir la preferència actual pel complement a dos, a causa del fet que aquesta és la representació que fa més fàcil, pel circuit electrònic de la ALU, calcular addicions i subtraccions, etc.

## Introducció pràctica

L'ALU es compon bàsicament de: Circuit Operacional, Registres d'Entrades, Registre Acumulador i un Registre d'estats, conjunt de registres que fan possible la realització de cada una de les operacions.
La majoria de les accions del computador són realitzades per la ALU. La ALU agafa dades dels registres del processador. Aquestes dades són processades i els resultats d'aquesta operació s'emmagatzemen en els registres de sortida de la ALU. Uns altres mecanismes mouen les dades entre aquests registres i la memòria.
Una unitat de control controla la ALU en ajustar els circuits l'hi diuen a la ALU quines operacions ha de realitzar.

## Operacions simples

La majoria de les ALU poden realitzar les següents operacions:
* Operacions aritmètiques de nombres enters (addició, subtracció, i de vegades multiplicació i divisió, encara que això és més costós)
* Operacions lògiques de bits (AND, NOT, OR, XOR)
* Operacions de desplaçament de bits (Desplacen o roten una paraula a un nombre específic de bits cap a l'esquerra o a la dreta, amb extensió de signe) o sense. Els desplaçaments poden ser interpretats com a multiplicacions o divisions per 2.

## Operacions complexes

Un enginyer pot dissenyar una ALU per a calcular qualsevol operació, sense importar-l'hi lo complexa que sigui; el problema és que com més complexa sigui l'operació, conseqüentment més costosa serà la ALU, utilitzarà més espai al processador, i més energia dissiparà, etc.
Per això, els enginyers sempre calculen un compromís, per proporcionar al processador (o d'altres circuits) una ALU suficientment poderosa per a fer-ho ràpid, però no tan complex com per arribar a ser prohibitiu. Imagini que vostè necessita calcular, per exemple, l'arrel quadrada d'un nombre; l'enginyer digital examinarà les opcions següents per implementar aquesta operació:
* Dissenyar una ALU molt complexa que calculi l'arrel quadrada de qualsevol nombre en un sol pas. Això s'anomena càlcul en un sol cicle de rellotge.
* Dissenyar una ALU complexa que calculi l'arrel quadrada amb diversos passos (com l'algorisme que vam aprendre a l'escola). Això s'anomena càlcul iteratiu, i generalment confia en el control d'una unitat de control complexa amb microcodi incorporat.
* Dissenyar una ALU simple en el processador, i vendre un processador separat, especialitzat i costós, que el client pugui instal·lar addicional al processador, i que implementi una de les opcions de dalt. Això s'anomena coprocessador.
* Emular l'existència del coprocessador, és a dir, sempre que un programa intenti realitzar el càlcul de l'arrel quadrada, fer que el processador comprovi si hi ha present un coprocessador i utilitzar-lo si n'hi ha; si n'hi ha cap, interrompre el procés del programa i invocar al sistema operatiu per realitzar el càlcul de l'arrel quadrada per mitjà d'un cert algorisme de programari. Això s'anomena emulació per software.
* Dir als programadors que no existeix el coprocessador i no hi ha emulació, de manera que hauran d'escriure els seus propis algorismes per a calcular arrels quadrades per programari. Això és realitzat per biblioteques de programari.
Les opcions que hi ha a dalt van de la més ràpides i més costoses a la més lentes i econòmiques. Per això, mentre que inclús el computador més simple pot calcular la fórmula més complicada, els computadors més simples generalment prenen un temps més llarg perquè diversos dels passos per a calcular la fórmula implicaran les opcions #3, #4 i #5 de dalt.
Els processadors poderosos com el Pentium IV i el AMD64 implementen l'opció #1 per a les operacions més complexes i la més lenta #2 per les operacions extremadament complexes. Això és possible per la capacitat de construir ALU molt complexes en aquests processadors.

## Entrades i sortides

Les entrades a la ALU són les dades a les que es faran les operacions (anomenats operands) i un codi des de la unitat de control indicant l'operació a realitzar. La seva sortida és el resultat del còmput de l'operació.
En molts dissenys la ALU també pren o genera com entrades o sortides un conjunt de codis de condició des de o cap a un registre d'estat. Aquests codis s'utilitzen per a indicar casos com acarreig entrant o sortint, overflow, divisió per zero, etz.

## ALU vs. FPU

Una unitat de punt flotant, Floating Point Unit (FPU), també realitza operacions aritmètiques entre dues valors, però ho fa per a nombres en representació de punt flotant, que és molt més complicada que la representació amb complement a dos utilitzada en una típica ALU. Per a fer aquests càlculs, una FPU té incorporats diversos circuits complexos, que no inclouen algunes ALU internes.
Generalment els enginyers anomenen ALU al circuit que realitza operacions aritmètiques en formats de nombre enter (com complement a dos i BCD), mentre que els circuits que calculen en formats més complexos com punt flotant, nombres complexos, etz., reben generalment un nom més il·lustre.

## Vegeu també

* Serie 7400 (xip # 74181)
* Sumador
* Multiplicador
* Circuit digital
* divisió (electrònica)

## Notes

* 1 2 Stallings page 19
* 1 2 Stallings page 290-291

## Referències

* Stallings, William. Computer Organization & Architecture: Designing for Performance 7th ed. Pearson Prentice Hall, 2006. ISBN 0-13-185644-8.

## Enllaços externs

* A Simulator of Complex ALU in MATLAB Arxivat 2008-01-07 a Wayback Machine. (anglès)