# Architettura MIPS

In elettronica e informatica l'architettura MIPS (acronimo dell'inglese microprocessor without interlocked pipeline stages) è un'architettura informatica per microprocessori RISC sviluppata dalla MIPS Computer Systems Inc. (oggi MIPS Technologies Inc.). Il disegno dell'architettura e del set di istruzioni è semplice e lineare, spesso utilizzato come caso di studio nei corsi universitari indirizzati allo studio delle architetture dei processori; tale architettura ha influenzato le architetture di molti altri processori RISC tra i quali si segnala la famiglia DEC Alpha: è stata utilizzata ad es. nel campo dei computer SGI, ed ha trovato grande diffusione nell'ambito dei sistemi embedded, dei device di Windows CE e nei router di Cisco e anche le console Nintendo 64, Sony PlayStation, PlayStation 2 e PlayStation Portable utilizzavano processori MIPS.

## Storia

Nel 1981 il professore John L. Hennessy dell'Università di Stanford avviò un gruppo di ricerca sulle architetture RISC. Le ricerche del team di sviluppo portarono allo sviluppo della prima generazione di processori MIPS. Allora era noto che per incrementare le prestazioni dei processori si sarebbe potuto utilizzare la tecnica delle pipeline. Questa tecnica sebbene fosse semplice da ideare non era semplice da implementare. Le pipeline per funzionare correttamente richiedono che le varie unità siano sincronizzate e che i dati delle varie istruzioni non si sovrappongano, quindi all'interno delle pipeline vengono posti dei blocchi (interblocco) che sorvegliano il completamento delle varie istruzioni e fanno procedere la pipeline solamente quando tutti gli stadi sono pronti. Questo meccanismo garantisce la corretta esecuzione del programma ma introduce spesso stalli nella CPU che deprimono le prestazioni.
La caratteristica distintiva del progetto MIPS è che tutte le istruzioni dovevano essere completate dagli stadi della pipeline in un solo ciclo di clock in modo da non introdurre ritardi e stalli nella pipeline. Questo permetteva di rimuovere anche molta dell'elettronica legata alla sincronizzazione degli stadi, semplificando il progetto. Questa scelta portò a semplificare e velocizzare il progetto ma portò anche degli svantaggi molto evidenti come l'eliminazione di istruzioni utili come la moltiplicazione e la divisione. Alcuni osservatori segnalarono che il progetto MIPS (e più in generale la filosofia RISC) imponevano al programmatore di sostituire le moltiplicazioni e le divisioni con una serie di operazioni più semplici e che quindi il miglioramento di prestazioni veniva eliminato o notevolmente ridimensionato. Questi osservatori non comprendevano che il miglioramento derivato dalla struttura a pipeline senza stalli compensava ampiamente le moltiplicazioni e le divisioni lente.
Nel 1984 Hennessy si convinse delle potenzialità commerciali del progetto e abbandonò temporaneamente l'università per fondare la MIPS Computer Systems. La società presentò l'R2000 nel 1985 e il successore R3000 nel 1988. Questi processori, basati su un'architettura a 32 bit, furono la base di molti sistemi commerciali, tra i maggiori utilizzatori delle CPU si distinse la Silicon Graphics che utilizzò le CPU nelle sue workstation. Il progetto commerciale delle CPU MIPS si differenziava dal progetto accademico per la presenza delle istruzioni di moltiplicazione e di divisione e di conseguenza per la presenza di unità di Interlock tra gli stadi che contraddiceva il nome stesso della microarchitettura. Nel 1991 MIPS presentò il suo primo processore a 64 bit, l'R4000. La MIPS in quel periodo affrontava una seria crisi finanziaria e quindi SGI decise di acquisire la società per assicurarsi la commercializzazione del processore a 64 bit dato che era fondamentale per le sue workstation. Come sussidiaria della SGI, la società cambiò nome in MIPS Technologies.
Agli inizi degli anni '90 la MIPS iniziò a licenziare i suoi processori a fornitori terzi. Questa scelta era ragionevole considerando la semplicità e la potenza del progetto. I processori MIPS iniziarono a sostituire i processori CISC in molte applicazioni embedded, va ricordato che il prezzo di un processore è legato al numero di transistor e al numero di piedini del processore, quindi i processori MIPS risultavano avvantaggiati per il loro basso uso di transistor. Sun Microsystems cercò di replicare il successo dei processori MIPS fornendo in licenza i suoi processori SPARC. Il progetto di Sun non ebbe successo e i processori SPARC non si diffusero nel settore embedded. I processori MIPS durante gli anni novanta acquisirono elevate quote di mercato nel segmento embedded e nel 1997 la società festeggiò il quarantottesimo milione di processori venduti, rendendo il MIPS il primo processore RISC a superare la famosa famiglia Motorola 68000. Nel 1998 la SGI si separò dalla MIPS Technologies e in quegli anni più della metà dei guadagni della società dipendevano dalle licenze vendute mentre i rimanenti guadagni derivavano dallo sviluppo di processori per compratori esterni che venivano poi prodotti da fornitori esterni.
Nel 1999 MIPS annunciò la possibilità di acquistare la licenza per due processori base. Il processore MIPS32 a 32 bit e il processore MIPS64 a 64 bit. NEC, Toshiba e SiByte (in seguito acquisita da Broadcom) ottennero la licenza del MIPS64 appena questa fu annunciata. Philips, LSI Logic e IDT acquisirono la licenza in seguito. Successo dopo successo i processori MIPS divennero quelli più utilizzati per applicazioni ad alta potenza di calcolo ma che richiedevano dissipazioni di calorecontenute tipo PDA, Set-top box ecc. Un chiaro indicatore della bontà del progetto la si ha dalla scelta di Freescale (società spin-off di Motorola) di utilizzare il core MIPS per i suoi processori invece del core PowerPC di sua proprietà.
La possibilità di utilizzare sotto licenza il core MIPS ha spinto molte persone a fondare società che producessero versioni personalizzate del processore. Una delle prime società fu la Quantum Effect Devices. Alcuni progettisti MIPS che progettarono il processore R4300 abbandonarono la MIPS per fondare la società SandCraft e sviluppare l'R5432 per la NEC che in seguito ha sviluppato l'R7100, uno dei primi processori per applicazioni embedded in grado di eseguire istruzioni fuori ordine. I progettisti del primo StrongARM si divisero in due gruppi e fondarono due società che svilupparono processori basati su core MIPS. Il primo gruppo fondò la SiByte e sviluppò l'SB-1250 uno dei primi processori systems-on-a-chip (SOC) ad alte prestazioni su architettura MIPS. Il secondo gruppo fondò la Alchemy Semiconductor (in seguito acquisita da AMD) che produsse l'Au-1000, un processore SOC) per applicazioni a basso consumo. Lexra utilizzò un core tipo MIPS e vi aggiunse estensioni DSP per il trattamento di dati audio e estensioni multithreading per la gestione delle reti locali. MIPS intentò contro Lexra due cause legali per violazioni delle sue proprietà intellettuali. La prima si risolse rapidamente quando Lexra promise di non pubblicizzare i suoi processori come MIPS compatibili. La seconda causa fu molto più lunga e danneggiò gli affari di entrambe le società; si concluse con MIPS Technologies che forniva a Lextra una licenza gratuita e un ingente risarcimento economico.

### Famiglie MIPS

Il primo MIPS commerciale fu l'R2000 che venne presentato nel 1985. Questo processore rispetto alla versione sviluppata all'università aggiungeva istruzioni per la moltiplicazione e la divisione che venivano trattate in modo indipendente dal processore. Nuove istruzioni furono aggiunte per recuperare i risultati prodotti dalle moltiplicazioni e dalle divisioni. Ironicamente queste istruzioni erano bloccanti (utilizzavano l'interlock) e quindi contraddicevano il nome stesso del processore pur migliorando la densità del codice.
L'R2000 poteva utilizzare la codifica big-endian o little-endian. Era dotato di 32 registri a 32 bit di uso generale, ma non utilizzava la tecnica della register window dato che era considerata un potenziale collo di bottiglia. La register window invece era utilizzata da processori come l'AMD 29000 e il DEC Alpha. Inoltre il program counter non era direttamente accessibile. L'R2000 poteva gestire fino a quattro coprocessori, di cui uno era integrato all'interno del processore e veniva utilizzato per gestire le eccezioni e le trap mentre gli altri tre erano disponibili per altri usi. Uno poteva essere il processore opzionale R2010, un coprocessore che implementava una FPU con trentadue registri a 32bit, i quali potevano essere utilizzati come 16 registri a 64 bit per la doppia precisione.
L'R3000 successore dell'R2000 venne presentato nel 1988, aggiunse una cache da 32 KB per istruzioni e dati (in seguito venne espansa a 64 KB) che supportava la coerenza delle cache per facilitare lo sviluppo di sistemi multiprocessore. Sebbene il supporto del multiprocesso fosse parzialmente fallato l'R3000 venne utilizzato da molti sistemi multiprocessore. L'R3000 includeva una MMU, una caratteristica comune per i processori di quell'epoca. L'R3000 fu il primo processore MIPS a vendere più di un milione di processori. Il processore R3000A venne utilizzato nella console PlayStation della Sony ed era una versione a 40 Megahertz. Come l'R2000 anche l'R3000 poteva essere affiancato da un coprocessore matematico, l'R3010. Pacemips produsse l'R3400 e IDT produsse l'R3500, che non era altro che un R3000 e R3010 in un solo chip. Il Toshiba R3900 è virtualmente il primo SoC per i primi palmari basati su Windows CE.
L'R4000 venne presentato nel 1991 ed estese il set di istruzioni MIPS portandolo a 64 bit. La FPU venne integrata nel processore per creare un singolo chip molto veloce (venne presentato con una frequenza di 100 MHz). Tuttavia per ottenere una frequenza elevata i progettisti ridussero la cache a 8 KB e ogni accesso richiedeva comunque 3 cicli. L'elevata frequenza venne ottenuta creando una pipeline profonda (chiamata super pipeline dalla società). Dopo la presentazione dell'R4000 molte altre versioni vennero presentate. Tra le varie versioni è da segnalare l'R4400 presentato nel 1993. Il processore era dotato di 16 KB di cache, un'architettura a 64 bit e un controller per una cache esterna di secondo livello da 1 megabyte.
Dopo essere diventata divisione della SGI, la MIPS sviluppò il processore a basso costo R4200 e in seguito l'R4300, un R4200 con bus esterno a 32 bit. Il Nintendo 64 utilizzò il processore VR4300 prodotto dalla NEC che era una versione a basso costo del MIPS R4300i
Quantum Effect Devices (QED) era una compagnia nata dall'abbandono della MIPS di alcuni progettisti che sviluppò i processori R4600, R4700, R4650 e R5000. I progettisti della QED erano rimasti contrariati dalla scelta della famiglia R4000 di sacrificare la cache per ottenere delle frequenze di funzionamento elevate. I progettisti invece enfatizzarono la presenza di una ampia cache ad accesso rapido (due cicli di clock per accedervi) e fecero un uso efficiente del silicio. L'R4600 e l'R4700 vennero utilizzati da SGI per le sue macchine a basso costo SGI Indy. Furono i primi processori di tipo MIPS ad essere utilizzati da Cisco per i suoi router. L'R4650 venne utilizzato per il set-top box WebTV. La FPU dell'R5000 era più efficiente della FPU dell'R4000, difatti gli SGI Indy basati su R5000 fornivano prestazioni notevolmente migliori nel settore grafico rispetto alle macchine SGI Indy basate su R4000. In seguito la QED presentò i processori RM7000 e RM9000 per applicazioni embedded come dispositivi di rete e stampanti laser. QED venne acquisita da PMC-Sierra nell'agosto del 2000.
Nel 1994 venne presentato l'R8000 il primo MIPS superscalare. Il processore era dotato di due ALU ed era in grado di eseguire due operazioni per ciclo di clock. Il progetto del processore venne diviso su sei integrati. Un integrato conteneva le unità di esecuzione per gli interi (con una cache da 16 KB per i dati e da 16KB per le istruzioni). Un secondo integrato conteneva l'unita FPU, due integrati contenevano una cache di secondo livello e un integrato arbitrava il bus della cache. L'ultimo integrato era un controller della cache ASIC. Il progetto era basato su due pipeline complete con unità di moltiplicazione e di somma a doppia precisione. Le pipeline venivano alimentate dalla cache di secondo livello da 4 MB. L'R8000 venne utilizzato dai server SGI Power Challenge inizialmente e dai server Power Indigo2 in seguito. Le ridotte prestazioni nel calcolo sugli interi e il suo elevato costo scoraggiò molti acquirenti sebbene le prestazioni nel calcolo in virgola mobile furono apprezzate dagli enti scientifici. L'R8000 rimase sul mercato per solo un anno quindi è un processore MIPS abbastanza raro.
Nel 1995 venne presentato l'R10000. Il processore era basato su un disegno a singolo integrato ed era progettato per essere molto più veloce dell'R8000. Era dotato di una cache primaria da 32 KB per i dati e le istruzioni. Il processore era superscalare e gestiva l'esecuzione fuori ordine delle istruzioni. Sebbene fosse dotato di una sola FPU e di un solo bus verso la memoria, le prestazioni elevate nel calcolo sugli interi, il basso costo e la alta densità resero l'R10000 la scelta preferita dalla maggior parte dei clienti. Progetti successivi vennero basati sull'architettura dell'R10000. L'R12000 era una versione miniaturizzata dell'R10000 per poter innalzare la frequenza operativa. Il processore R14000 era una versione a frequenza maggiore con in aggiunta il supporto per le memorie DDR SDRAM per la cache di secondo livello. Inoltre il processore era dotato di un bus esterno a 200 MHz per aumentare le prestazioni. La versione successiva chiamata R16000 e R16000A era dotata di una frequenza di funzionamento maggiore, una cache di primo livello maggiore e una dimensione minore grazie alla nuova tecnologia di produzione.
Specifiche microprocessori MIPS :
| Modello | Frequenza [MHz] | Anno | Processo [µm] | Transistor [milioni] | Die size [mm²] | IO Pin | Potenza [W] | Tensione | Dcache [k] | Icache [k] | Scache [k] |
| R2000 | 8-16.7 | 1985 | 2.0 | 0.11 | -- | -- | -- | -- | 32 | 64 | none |
| R3000 | 20-40 | 1988 | 1.2 | 0.11 | 66.12 | 145 | 4 | -- | 64 | 64 | none |
| R4000 | 100 | 1991 | 0.8 | 1.35 | 213 | 179 | 15 | 5 | 8 | 8 | 1024 |
| R4400 | 100-250 | 1992 | 0.6 | 2.3 | 186 | 179 | 15 | 5 | 16 | 16 | 1024 |
| R4600 | 100-133 | 1994 | 0.64 | 2.2 | 77 | 179 | 4.6 | 5 | 16 | 16 | 512 |
| R5000 | 150-200 | 1996 | 0.35 | 3.7 | 84 | 223 | 10 | 3.3 | 32 | 32 | 1024 |
| R8000 | 75-90 | 1994 | 0.5 | 2.6 | 299 | 591 | 30 | 3.3 | 16 | 16 | 1024 |
| R10000 | 150-250 | 1995 | 0.35 | 6.8 | 299 | 599 | 30 | 3.3 | 32 | 32 | 512 |
| R12000 | 270-400 | 1998 | 0.18–0.25 | 6.9 | 204 | 600 | 20 | 4 | 32 | 32 | 1024 |
| R14000 | 500-600 | 2001 | 0.13 | 7.2 | 204 | 527 | 17 | -- | 32 | 32 | 2048 |
| R16000 | 700-800 | 2002 | 0.11 | -- | -- | -- | 20 | -- | 64 | 64 | 4096 |
Nota: Le specifiche indicate sono le più comuni ma esistono delle varianti soprattutto per la cache di secondo livello.

## Descrizione

Le prime architetture MIPS erano realizzate a 32-bit (generalmente 32-bit per registri e data paths), mentre le ultime versioni sono a 64-bit. Esistono cinque revisioni del MIPS instruction set, chiamate MIPS I, MIPS II, MIPS III, MIPS IV, e MIPS 32/64. L'ultima di queste, MIPS 32/64 Release 2, definisce un insieme di registri di controllo come l'instruction set. Molte estensioni "add-on" sono anche disponibili, incluso MIPS-3D che è un semplice insieme di istruzioni dedicate SIMD in floating-point per applicazioni 3D, MDMX che è un'istruzione SIMD molto costosa su interi che usa registri floating-point a 64-bit, MIPS16 che aggiunge compressione alle istruzioni che creano un programma riducendo lo spazio occupato (una tecnologia simile alla tecnologia Thumb implementata dall'architettura ARM), e il più recente MIPS MT, una nuova aggiunta multithreading per i sistemi simili all'HyperThreading implementato da Intel nei processori Pentium 4.

## Applicazioni

Molti produttori di workstation hanno utilizzato processori MIPS. Tra i vari segnaliamo la SGI, MIPS Computer Systems Inc., Olivetti, Siemens-Nixdorf, Acer, Digital Equipment Corporation, NEC, e DeskStation. Molti sistemi operativi sono stati portati per le architetture basate su processori MIPS. I più famosi sono l'IRIX prodotto da SGI, Microsoft Windows NT (sebbene il supporto per processori MIPS sia terminato con Windows NT 4.0), Windows CE, Linux, BSD, Unix System V, SINIX, MIPS Computer Systems RISC/OS e altri.
Tuttavia l'utilizzo dei processori MIPS all'interno di computer e workstation declino` costantemente tra il 2000 ed il 2006. SGI nel 2003 inizio` la dismissione delle macchine basate su architettura MIPS, preferendo concentrarsi su macchine basate su processori Intel IA-64, scelta che si rivelerà` successivamente un grosso errore commerciale. Comunque l'uso dei processori MIPS nelle macchine embedded è continuato. I processori sono a basso consumo e offrono buone prestazioni quindi sono spesso scelti per essere integrati in sistemi embedded. Inoltre l'architettura MIPS è diffusa quindi esistono molti tool di sviluppo e programmatori esperti della piattaforma.
La quasi totalità dei router per molti anni sono stati basati su MIPS su sistema operativo Linux, spesso in versione OpenWrt o DD-WRT, anche se dagli anni 2009 e seguenti vi è stata una diffusione sempre più massiccia di ARM, (esempio l'Alice Gate Enterprise monta un ARM940). La sonda spaziale New Horizons, sviluppata dalla NASA per l'esplorazione di Plutone e del suo satellite Caronte lanciata nel 2006, fu equipaggiata con un processore MIPS R3000. Nel Corso del 2021 comunque, MIPS viene abbandonato dalla MIPS Technologies Inc in favore della architettura RISC -V.

### Core

Negli ultimi anni molti core MIPS sono stati messi in commercio con tecnologia IP core per permettere una progettazione di sistemi embedded su misura. Core a 32 e 64 bit sono stati immessi sul mercato con i nomi 4K e 5K e sono stati venduti tramite licenza, come anni prima fu fatto per i progetti MIPS32 e MIPS64. I core possono essere collegati ad altre unità come unità FPU, sistemi SIMD e altri dispositivi di input/output, ecc.
I core MIPS sono stati un successo commerciale e sono utilizzati da molte industrie per realizzare i loro prodotti. Per esempio Cisco e Linksys utilizzano i core per i propri router e modem. I core sono all'interno di molte stampanti laser, lettori di smartcard, set top box, robot, computer portatili, console come la Sony PlayStation 2 e la PlayStation Portable. In dispositivi come i telefoni e i PDA tendenzialmente vengono utilizzati processori ARM che sono principali concorrenti dei processori MIPS nel settore embedded. In questo settore Microchip Technology, uno dei maggiori produttori mondiali di microcontrollori, ha utilizzato il core MIPS 4K per il suo modello di punta PIC32.

### Programmazione e emulatori

Esiste un emulatore gratuito del processori R2000/R3000 chiamato SPIM che funziona su molti sistemi operativi (Unix, Linux, Mac OS X, MS Windows 95/98/NT/2000/XP e MS DOS) che fornisce un buon ambiente per imparare l'assembly MIPS e per impratichirsi con la programmazione di macchine RISC.
GXemul invece è un emulatore molto potente (conosciuto precedentemente come mips64emul project) che non emula solamente i processori (dall'R4000 all'R10000) ma può emulare le macchine complete. Per esempio si può utilizzare GXemul per simulare il funzionamento di una macchina DECstation con MIPS R4400 o una macchina SGI O2 con MIPS R10000 e un discreto numero di periferiche come controller SCSI, schede grafiche, ecc.
Qemu è un ben noto emulatore opensource e multipiattaforma. Sebbene sia usato principalmente per emulare un processore x86, permette anche di emulare una piattaforma virtuale MIPS based, simulando un processore MIPS32 4Kc. MARS, infine, è un emulatore e IDE molto potente, scritto in Java e sviluppato da un gruppo della Missouri State University, con al suo interno vari strumenti ed una finestra di aiuto molto dettagliata.

### Altri modelli e sviluppi futuri

La famiglia MIPS include anche l'R6000, una implementazione ECL dell'architettura MIPS prodotto da Bipolar Integrated Technology. L'R6000 introdusse il set di istruzioni MIPS II. Il TLB e l'architettura della cache era diversa da quella degli altri membri della famiglia MIPS. R6000 non aveva le prestazioni che i progettisti speravano e dopo un breve utilizzo da parte di Control Data Corporation venne abbandonato. L'RM7000 era una versione dell'R5000 con 256 KB di cache di secondo livello e un controller per una cache di terzo livello opzionale. Il suo mercato primario erano i dispositivi embedded e i dispositivi di rete, difatti venne utilizzato estesamente da Cisco System. Il nome R9000 non è stato mai utilizzato.
In quel periodo (anno 2003 e seguenti) SGI decise di abbandonare la piattaforma MIPS a favore dei processori Intel Itanium e quindi fermò lo sviluppo dei processori successivi all'R10000. I tempi di passaggio alla piattaforma Itanium furono più lunghi del previsto e intanto le macchine basate su MIPS venivano migliorate. Nel 1999 comunque era chiaro che lo sviluppo dei processori di fascia alta era stato abbandonato troppo rapidamente e quindi vennero presentati i processori R14000 e R16000 che nonostante il nome non erano molto dissimili dall'R10000. SGI cercò di portare la potente FPU della serie R8000 in altri processori MIPS e di sviluppare una versione dual core, ma problemi finanziari bloccarono il progetto. Inoltre SGI decise di utilizzare la tecnologia QuickTransit per permettere alle macchine basate su Itanium di utilizzare i programmi compilati per MIPS e quindi pose la parola fine allo sviluppo dei processori MIPS per piattaforma IRIX.
Una versione semplificata della gestione della pipeline è la pipeline DLX, possibile grazie alla rinominazione dei registri esplicita.