# Unità di calcolo in virgola mobile

L'unità di calcolo in virgola mobile (o unità in virgola mobile, in acronimo FPU, dall'inglese Floating-Point Unit, lett. "unità in punto mobile"), è un tipo di processore che si contraddistingue per essere specializzato nell'esecuzione di calcoli matematici in virgola mobile.
La maggior parte delle operazioni di calcolo svolte dalla FPU sono semplice aritmetica (come l'addizione e la moltiplicazione), ma alcune FPU sono in grado di svolgere anche calcoli esponenziali o trigonometrici (come l'estrazione di radice o il calcolo del seno).
Attualmente la FPU è tipicamente implementata come microprocessore monolitico e spesso, quando è un coprocessore matematico della CPU, viene integrata assieme alla CPU nel medesimo circuito integrato.

## Descrizione

In molte architetture di personal computer e sistemi superiori, la FPU e la CPU sono integrate nel medesimo circuito integrato, tuttavia molti microcontrollori per applicazioni embedded non implementano nativamente la FPU.
In passato l'implementazione della FPU veniva ottenuta tramite un coprocessore che veniva installato sulla scheda madre del computer. Nei microcomputer la FPU poteva essere un'intera scheda di espansione e nei primi computer poteva consistere in un intero armadio da aggiungere al sistema.
Non tutte le architetture implementano la FPU ma questo non vieta l'esecuzione di operazioni in virgola mobile dato che queste vengono eseguite tramite emulazione. L'emulazione permette di semplificare il progetto del processore riducendo i transistor e quindi il costo del sistema. Di contro l'emulazione è molto più lenta dell'esecuzione in hardware e quindi penalizza notevolmente l'esecuzione. L'emulazione può venir eseguita a livello di microcodice, di sistema operativo o di programma a livello utente.
Molte microarchitetture di processori separano fisicamente l'esecuzione in virgola mobile dall'esecuzione dei numeri interi. Questa separazione è dovuta alla presenza di istruzioni apposite per i numeri in virgola mobile e di registri appositi per ospitare i numeri in virgola mobile. Questo deriva da scelte di progettazione della architetture. Per esempio l'architettura x86 ha registri, istruzioni e potenzialmente anche un clock separato per la FPU dato che questa inizialmente era un componente esterno al processore e quindi questa era la soluzione più logica.
Le operazioni in virgola mobile spesso vengono eseguite tramite pipeline. Nelle prime architetture superscalari non in grado di eseguire istruzioni fuori ordine le operazioni in virgola mobile e le operazioni sugli interi venivano immesse nella stessa pipeline e separate solamente nella fasi di esecuzione vera e propria. I moderni processori spesso implementano più unità di calcolo in virgola mobile per incrementare le prestazioni.
Spesso le FPU sono specializzate, le unità vengono divise in operazioni veloci o lente. Le operazioni veloci (tipo somme e moltiplicazioni) vengono eseguite da un'unità specializzata mentre le operazioni più lente (come divisioni, radici quadrate, ecc.) vengono eseguite da un'altra unità.
In molte architetture le funzionalità dell'FPU sono fornite dall'unità che tratta anche le istruzioni multimediali SIMD.

## FPU aggiuntive

Dall'inizio degli anni ottanta fino a metà degli anni novanta i personal computer IBM PC e compatibili consentivano l'aggiunta della FPU tramite coprocessore opzionale. Questo permetteva di contenere il costo ma di non limitare le prestazioni dei calcoli scientifici.
Gli IBM PC XT e i compatibili basati su Intel 8088 e 8086 avevano un socket per il coprocessore 8087. Gli AT su Intel 80286 e Intel 80386 aveva il socket per i coprocessori 80287 e 80387.
Con l'arrivo dei processori Intel 80486 l'unità di calcolo in virgola mobile venne integrata nel processore centrale e quindi il socket per FPU sparì dalle schede madri. Gli unici computer con socket per FPU erano quelli basati su Intel 80486SX un processore ridotto e non dotato di FPU. Visto il ridotto mercato delle FPU per 80486 in realtà Intel non sviluppò mai un vero coprocessore matematico per 80486. L'Intel 80487 in realtà era un processore 80486 completo che una volta installato disabilita completamente l'altro processore.
Oltre a Intel molte altre ditte svilupparono FPU per i processori x86. Tra le ditte si segnalano Cyrix che sviluppò FPU ad alte prestazioni totalmente compatibili X86 e Weitek che sviluppò FPU molto potenti ma non totalmente compatibili con le FPU X86.
Le FPU esterne non sono una caratteristica solo dei processori Intel, molte altre famiglie scelsero di rendere la FPU esterne nei primi modelli di processore. La famiglia più nota è il Motorola 68000 che fu utilizzato da macchine prodotte da Sun Microsystems, Apple, Commodore, Atari, e altri. Spesso la FPU era presente di serie nella macchine di fascia alta mentre nelle macchine di fascia bassa era assente anche il socket. Motorola non produsse una FPU per ogni famiglia ma produsse due FPU generiche, la Motorola 68881 e 68882 che potevano venir controllate dai processori Motorola 68020 e 68030. Dal 68040 la FPU fu integrata nel processore sebbene esistessero delle versioni a basso costo senza FPU che potevano gestire quelle esterne.