Motorola 68881
# Motorola 68881

Il Motorola MC68881 (detto Motorola 68881 o 68881) è una FPU utilizzabile dalle CPU Motorola 68020 e Motorola 68030 tramite la loro interfaccia di coprocessore, e come periferica sulle CPU Motorola 68000, Motorola 68010 e Motorola 68012. L'aggiunta di un 68881 aumentava sostanzialmente il costo del computer, ma aggiungeva una FPU in grado di effettuare velocemente le operazioni matematiche in virgola mobile. In quel periodo, questa era utile principalmente per i software matematici e scientifici.

## Panoramica

Le CPU 68020 e 68030 furono progettate prevedendo l'affiancamento di una unità 68881. Il loro set di istruzioni riservava le cosiddette istruzioni "F-line" — cioè, tutti i codici operativi comincianti con la cifra esadecimale "F" erano inutilizzati e provocavano delle eccezioni, gestibili dal sistema operativo del computer. Se nel sistema era presente un'unità 68881, la CPU l'avrebbe utilizzata per eseguire l'istruzione. Altrimenti, avrebbe generato un'eccezione, intercettata dal sistema operativo, il quale avrebbe potuto sia chiamare un emulatore di FPU per eseguire l'istruzione, sia restituire un errore al programma.

Il 68881 aveva otto registri dati da 80 bit. Gestiva sette diversi modi di rappresentazione dei numeri, ivi compresi la precisione singola, la precisione doppia e la precisione estesa, definite dallo standard IEEE 754 (rev.10). Era stato progettato specificamente per l'aritmetica in virgola mobile e non era una CPU completa. Per esempio, se un'istruzione richiedeva il calcolo di un indirizzo, la CPU principale se ne sarebbe presa carico prima di passare il controllo al 68881.

La coppia CPU/FPU era stata progettata in modo che entrambe le unità potessero operare contemporaneamente. Nel momento in cui la CPU incontrava un'istruzione del 68881, gli avrebbe passato tutti gli operandi necessari per quell'istruzione, e quindi la FPU avrebbe lasciato la CPU libera di proseguire con l'esecuzione dell'istruzione successiva.

Il Motorola 68882 era un'evoluzione del 68881, caratterizzata da un pipelining migliore, e all'occorrenza disponibile ad un clock più elevato. Il suo set d'istruzioni era identico a quello del 68881. Motorola affermava in qualche pubblicità che il 68882 fosse in grado di eseguire alcune istruzioni il 40% più velocemente di un 68881 alla stessa frequenza di clock, ma quest'affermazione non rispecchiava affatto le prestazioni tipiche.

I principali computer dotati di unità FPU 68881 o 68882 erano il Sun 3 di Sun Microsystems, la famiglia di computer Macintosh II di Apple, e l'Amiga 3000 di Commodore. Alcuni prodotti di terze parti per Amiga usavano il 68881/2 come periferica memory mapped per il 68000.

Quando fu presentato il Motorola 68040, includeva l'unità FPU internamente. La maggior parte delle istruzioni e dei modi di rappresentazione numerica del 68881 erano supportati in hardware, ma alcuni di essi erano emulati tramite software.

## Statistiche

### 68881

* 155.000 transistor interni
* Velocità a 16 MHz: 160 kFLOPS
* Velocità a 20 MHz: 192 kFLOPS
* Velocità a 25 MHz: 240 kFLOPS

### 68882

* 176.000 transistor interni
* Velocità a 25 MHz: 264 kFLOPS
* Velocità a 33 MHz: 352 kFLOPS
* Velocità a 40 MHz: 422 kFLOPS
* Velocità a 50 MHz: 528 kFLOPS

### 68040

* Velocità dell'FPU a 25 MHz: 3.500 MFLOPS
* Velocità dell'FPU a 33 MHz: 4.662 MFLOPS
* Velocità dell'FPU a 40 MHz: 5.600 MFLOPS

Questi dati provengono dalle (EN) FAQ di comp.sys.m68k. Non sono presenti i dati per le versioni a 16 MHz e a 20 MHz del 68882, benché questi integrati siano stati effettivamente prodotti.

