MIPS-arhitektuur

**MIPS** (inglise keeles *Microprocessor without Interlocked Pipelined Stages*) on RISC tüüpi käsustikuga mikroprotsessorite sari, mis loodi 1985. aastal Ameerika Ühendriikide firma MIPS Technologies poolt.

MIPSi esimesed versioonid MIPS I ja MIPS II olid vaid 32-bitise arhitektuuriga. Neile järgnevatel protsessorite versioonidel MIPS III, MIPS IV ja MIPS V oli ka 64-bitine arhitektuur. Seejärel lasti välja viis versiooni (vastavalt 1985, 2002, 2010, 2013 ja 2014) MIPS32 ja MIPS64, mis olid vastavalt 32- ja 64-bitised protsessorid. Alates kolmandast MIPS32 ja MIPS64 väljalaskest lisandusid ka microMIPS32/64 protsessorid. MIPSi 32- ja 64-bitised arhitektuurid on omavahel ühilduvad. 

Algselt olid MIPSi tooted suunatud rohkem tööstuse ja serverite poole. 2010. aastatel aga toodeti MIPS-arhitektuuri manussüsteemidele.

MIPS-arhitektuuri tootmine lõpetati 2021. aastal pärast Wave Computingu (mille tütarfirma oli MIPS Technologies) pankrotti minekut.

## Versioonid
### MIPS I
MIPS I kasutati esimest korda MIPSi R2000 ja R3000 protsessoritel. MIPS I algne nimetus oli MIPS, kuid see nimetati ümber peale MIPS II välja laskmist. 

MIPS I oli kolmkümmend kaks 32-bitist üldkasutuses olevat registrit ($f0 - $f31), millest aritmeetilisteks arvutusteks sai kasutada vaid paarisarvulisi registreid. Ülejäänud registrid olid 64-bitiste arvude madalama järjekorra bittide hoiustamiseks. Nullregister on konstantse väärtusega, millesse kirjutamine on keelatud. 31. registrit kasutatakse programmi tagasipöördumisaadressi (inglise keeles *return address*) hoiustamiseks.

### MIPS II
MIPS II arhitektuur avaldati R6000 protsessoril. Arhitektuurile lisati aatomiline uuendus (protsess, kus kas kõik operatsioonid toimuvad või mitte ükski operatsioon ei toimu) ning võimekus ühilduda 64-bitise kaasprotsessoriga.

### MIPS III
MIPS III oli esimene MIPSi arhitektuur, mille käsustik oli 64-bitine. Arhitektuur suutis ühilduda ka varasemate (MIPS I ja MIPS II) 32-bitiste versioonidega. Arhitektuur lisandus esimest korda R4000 protsessoril. Protsessoritele lisati võimekus sisse lugeda *unsigned* tüüpi sõnu. Arhitektuuriga lisandusid 64-bitised täisarvud ning eraldi 64-bitised aritmeetika ja nihutamise juhendid.

### MIPS IV
MIPS IV lisas võimaluse matemaatika kaasprotsessorile (inglise keeles *Floating-point Unit* ehk FPU) juhiseid register + register meetodil saata. Samuti sai MIPS IV käsustik uued piirangud sisse lugemise ning salvestamise instruktsioonidele. Käsu baasregister peab olema vaikimisi seadistatud, samamoodi nagu ka käsk ise (eelnev piirang eemaldati MIPS32 arhitektuuris, jäeti vaid reegel, et efektiivaadress peab olema vaikimisi seadistatud). Varasemastes MIPSi versioonides pidi lisama kaks käsku, et eraldada MFLO (inglise keeles *move from low*) või MFHI (inglise keeles *move from high*) käske sellele järgnevast korrutamis- või jagamistehtest. Eelnev eemaldati MIPS IV käsustikust. MIPS IV kasutati R5000 ja R10000 protsessorites.

### MIPS V
Viienda MIPSi versiooniga lisandus uus andmetüüp *Paired Single*. See koosneb kahest 32-bitisest ujukomaarvust, mis asuvad 64-bitisest ujukoma arvu registris. Tänu sellele laienes korduvate ujukomaarvude arvutuste ribalaius.

### MIPS32 ja MIPS64
Esimene MIPS32 versioon sisaldas kõike MIPS I ja MIPS II käsustikust. Sellele lisati ka elemente 64-bitistest R4000 ja R5000 protsessoritest. MIPS64 esimene versioon sisaldas elemente MIPS III, MIPS IV ja MIPS V käsustikust. Lisaks on sellel olemas MIPS32 režiim, millega saab käitada 32-bitist käsustikku. Nii MIPS32 kui ka MIPS64le lisati standardiseeritud signaalprotsessori (lühend DSP, inglise keeles *digital signal processor*) korrutamise (lühend MUL) ja korrutamise ja liitmise (lühend MADD) juhised.

MIPS32 ja MIPS64 kuuendas ja viimases väljalaskes eemaldati täielikult *Branch Likely* käsustiku juhendid. Lisaks liigutati täisarvude akumulaatori juhised ja HI/LO registrid baasväljalaskest DSP moodulile. Bittide ümberpööramise ja baitide joondused instruktsioonid aga liigutati vastupidiselt baasväljalaskesse.

### MicroMIPS
MicroMIPS on 32-bitise arhitektuuriga ning omab 16-bitist käsustikku. Seadet kasutatakse erinevatel mikrokontrollitel ning järgnevatel MIPSi protsessorite tuumades: M14K, microAptiv ja Warrior M51xx and M62xx. MIPSi kolmandal väljalaskel (avaldatud 2010. aastal) lisati microMIPS nii 31- kui ka 64-bitisele arhitektuurile (eesmärgiga asendada eelnevalt eksisteerinud MIPS16e ASE). Igal järgneval MIPS32 ja MIPS64 arhitektuuri väljalaskel oli olemas vastav microMIPSi versioon, millel on täpselt samad funktsioonid, mis on olemas vastavalt MIPS32 või MIPS 64 versioonidel. Kuigi microMIPS ei toeta arhitektuur *Branch Likely* käsustikku, on olemas võrdväärsed operatsioonid. Kuuendas MIPS-arhitektuuri väljalaskes eemaldati MIPS16e täielikult, ning microMIPSist sai ainus väiksema koodisuuruse implementeerija.

## MIPS32 ja MIPS64 lisad
Koos MIPS32 ja MIPS64 avalikustati ka mitmeid laiendusi, mida kutsuti ASE-deks, inglise keeles *Application Specific Extensions*.

### MIPS MCU
MIPS MCU moodul on loodi MIPS32 ja microMIPS käsustikuga koos töötamiseks. Selle eesmärk on laiendada katkestuste kontrollerite tuge, vähendada katkestuste latentsust ning täiustada mikrokontrollerite I/O (sisend-väljund, inglise keeles *Input/Output*) perifeerseid kontrollfunktsioone. MCU avaldati koos MIP32 M14K perekonna protsessoritega ning seda kasutatakse lisaks veel microAptiv, M51xx ja M62xx tuumade perekondades.

MCU katkestuste iseärasused on järgmised:

* tähtsamate katkestuste täitmine ja vektorite loomine on eraldatud operatsioonid;
* pakub 16-bitist vektori nihkeaadressi;
* toetab kuni 256 katkestust välise katkestuskontrolleri (EIC, inglise keeles *External Interrupt Controller*) režiimis;
* 8 riistvaralist katkestus-*pi**n*'i.
MCU I/O perifeeriakontrolli lisati aatomilise biti *set/clear* instruktsioonid, mille abil sai I/O registris asuvaid bitte ilma katkestuseta ning turvaliselt muuta.

MCU I/O perifeeriakontrollil on järgnevad iseärasused:

* automatiseeritud katkestuste proloog, mis lisab riistvara, millega saab süsteemi staatuse enne katkestust salvestada ja seda uuendada;
* automatiseeritud katkestuste epiloog, mis taastab katkestuse lõppedes eelneva süsteemi oleku, mis oli salvestatud pinusse;
* ahelkatkestused, mis vähendab katkestuste ootele panemisele abil tsüklite arvu, mille vältel salvestatakse ja taastatakse mitmeid aktiivseid katkestusi.

### MIPS16e
MIPS16e moodul on laiendus MIPS32 ja MIPS 64 arhitektuuridele. Võrreldes 32-bitise tarkvaraga, on MIPS16e'ga võimalik programmi käitamiseks kasutada samal võimsusel 40% võrra vähem mälu. Lisaks parandab MIPS16e käskude vahemälu *hit rate*'i. MIPS16e toetab 8-, 16-, 32- ja 64-bitiseid andmetüüpe (viimast vaid siis, kui MIPS16e on kasutusel MIPS64ga). Sellel on kaheksa üldotstarbelist registrit ja mitmeid kindla otstarbega registreid. MIPS16e2 on MIPS16e uuendatud versioon, mis lisas parandas koodi kompaktsust ning üleüldist jõudlust. Kuuendas MIPSi väljalaskes eemaldati MIPS16e arhitektuurist, ning microMIPSist sai ainus väiksema koodisuuruse implementeerija.

### MIPS DPS
MIPS DPS on MIPSi moodul, mis on loodud MIPS32/64 ja microMIPS32/64le. See anti välja MIPS32/64 viiendas väljalaskes. MIPS DSP ülesandeks digitaalse signaalitöötluse ja muude multimeediaoperatsioonide jõudluse parandamiseks. 

### MIPS SIMD
MIPS SIMD (inglise keeles *Single Instruction Multiple Data*) arhitektuur ehk MSA anti välja koos MIPS32 ja MIPS64 viienda väljalaskega. Selle eesmärgiks on kiirendada näiteks andmekaevandust, pildi- ja videotöötlust ning arvuti ja inimese vahelist suhtlust.

Sellel on rohkem kui 150 uut käsku, mis töötavad 32 vektorregistril järgmiste andmetüüpidega:
* 8-, 16-, 32- ja 64-bitised täisarvud;
* 16- ja 32-bitised püsikomaarvud;
* 32- ja 64-bitised ujukomaarvud.

MIPS32 ja MIPS64 viiendas väljalaskes asendas MSA moodul täielikult MDMX mooduli ja DSP 64-bitise mooduli.

### MIPS Virtualization
MIPS Virtualization loodi selleks, et parandada MIPSi toodete privaatsust ning turvalisust virtuaalmasinate abil. Seda saab kasutada nii MIPS32, MIPS64, microMIPS32 kui ka microMIPS64l. Moodul lisati arhitektuurile MIPS32 ja MIPS64 viiendas väljalaskes. Virtualiseerimiseks kasutatakse programmi Virtual Machine Monitor, mis on ühtlasi ka hüperviisor.

### MIPS Multi-threading
MIPS Multi-threading moodul toetab MIPS32, MIPS64, microMIPS32 ja microMIPS64. Nii MIPS32-l baseeruv interAptiv protsessor kui ka MIPS64 baseeruv I6500 protsessor toetavad virtuaalset töötlemiselemendi (VPE, inglise keeles *virtual processing element*) ja virtuaalse protsessori (VP, inglise keeles *virtual processor*) tasemel *multithreading*'ut. Eelneval juhul paistab operatsioonisüsteemile iga VPE/VP lõim eraldi tuumana. Kuna igas VPE-s on täielik koopia arvuti protsessori staatusest, siis Linuxi operatsioonisüsteem näeb iga VPE-d eraldi protsessorina. InterAptivi protsessorite pere toetab kuni kahte VPE-d protsessori tuuma kohta. I6400 ja I6500 protsessori pered lubavad kuni nelja virtuaalprotsessorit protsessori tuuma kohta.

## Vaata ka
*SGI

## Viited