MIPS | |
---|---|
Kehittäjä | MIPS Technologies Inc. |
Bittinen syvyys | 64 (32→64) |
Esitetty | 1985 |
Arkkitehtuuri | RISC |
Tyyppi | rekisteri-rekisteröinti |
SK koodaus | korjattu |
Siirtymävaiheen toteutus | verrattuna kahteen rekisteriin |
Tavujärjestys | Bi-endian (iso → bi) |
Laajennukset | MDMX, MIPS-3D, MIPS16e, MIPS MT |
Rekisterit | |
yleinen tarkoitus | 31 (R0=0) |
Todellinen | 32 (kaksinkertaisille prosessorin 32-bittisissä versioissa käytetään rekisteripareja) |
Mediatiedostot Wikimedia Commonsissa |
MIPS (lyhenne vastaavan Stanfordin yliopistoprojektin nimestä . Microprocessor without Interlocked Pipeline Stages [1] ) on käskyjen ja mikroprosessoriarkkitehtuurien järjestelmä, jonka on kehittänyt MIPS Computer Systems (tällä hetkellä Wave Computing [2] ) RISC - prosessorisuunnittelun mukaisesti. käsite (eli prosessoreille, joissa on yksinkertaistettu käskysarja). Varhaisissa prosessorimalleissa oli 32-bittinen konesana , myöhemmin ilmestyi 64-bittisiä versioita. Prosessorimuutoksia on monia, mukaan lukien MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS32 ja MIPS64, joista MIPS32 (32-bittiselle toteutukselle) ja MIPS64 (64-bittiselle toteutukselle) ovat voimassa. MIPS32 ja MIPS64 määrittävät sekä joukon ohjausrekistereitä että joukon käskyjä.
Ohjesarjoja on useita: MIPS32, MIPS64, microMIPS ja nanoMIPS. Lisäksi saatavilla on lisäkäskysarjoja ja prosessorimalleja, esimerkiksi MIPS-3D, joka sisältää SIMD -käskyt liukulukujen käsittelyyn, jotka on suunniteltu ratkaisemaan yksinkertaisia 3D - ongelmia, MDMX (MaDMaX) - vielä laajemmilla ominaisuuksilla - SIMD-käskysarja ja 64-bittisten liukulukurekisterien käyttäminen kokonaislukujen kanssa työskentelyyn, MIPS16e, joka pakkaa käskyvirran vähentääkseen ohjelmien käyttämää muistia, ja MIPS MT, joka tarjoaa monisäikeisen käsittelytilan.
MIPS-arkkitehtuuria opiskellaan usein kurssiohjelmassa "Tietokonearkkitehtuuri" yliopistoissa ja teknisissä lyseoissa. Nämä prosessorit vaikuttivat merkittävästi myöhempään RISC-arkkitehtuuriin, erityisesti Alphaan .
Tällä hetkellä erilaisia MIPS-toteutuksia käytetään pääasiassa sulautetuissa järjestelmissä, kuten älypuhelimissa , reitittimissä , yhdyskäytävissä ja 2010-luvulle asti pelikonsoleissa, kuten Sony PlayStation 2 ja Sony PlayStation Portable . Vuoden 2006 loppuun asti niitä käytettiin myös SGI -tietokoneissa . 1980-luvun lopulla ja 1990-luvulla monet yritykset, kuten Digital Equipment Corporation , NEC , Pyramid Technology, Siemens Nixdorf ja Tandem Computers , käyttivät tätä arkkitehtuuria laajalti . 1990-luvun puolivälistä loppuun joka kolmas markkinoilla oleva mikroprosessori oli MIPS-prosessori.
Vuonna 1981 Stanfordin yliopiston John L. Hennessyn johtama tiimi aloitti MIPS-nimisen projektin parissa. Pääajatuksena oli lisätä prosessorin suorituskykyä käyttämällä laajennettua putkilinjaa . Ajatus putkilinjan käyttämisestä ydinteknologiana tunnettiin kauan ennen (esimerkiksi IBM 801 ), mutta se ei käyttänyt koko potentiaaliaan. CPU sisältää useita erikoisaliyksiköitä, kuten käskydekooderit, kokonaisluku - ALU (aritmeettinen logiikkayksikkö), lataus/tallennusyksiköt (muistinkäsittely) jne. Perinteisessä ei-optimoidussa toteutuksessa yhden ohjeen tulisi olla (melkein aina) valmistui ennen kuin toinen alkaa; Liukuhihna-arkkitehtuurissa peräkkäiset käskyt voidaan suorittaa rinnakkain. Esimerkiksi kun matemaattinen käsky syötetään liukulukulohkoon, muistin lataus/tallennuslohko voi kutsua seuraavan käskyn samanaikaisesti.
Yksi suurimmista esteistä liukuhihnan käytössä oli se, että joidenkin käskyjen, kuten jakamisen, suorittaminen kestää paljon kauemmin, minkä seurauksena CPU joutuu odottamaan ennen kuin se välittää seuraavan käskyn liukuhihnalle. Ainoa ratkaisu tähän ongelmaan on käyttää sarjaa lukkoja, joiden avulla liukuhihnan tietyt vaiheet voivat osoittaa, että ne ovat varattuja, ja tässä tapauksessa keskeyttää komennot säiettä ylävirtaan. Hennessy-ryhmä näki nämä lukot valtavana suorituskyvyn esteenä, koska kaikkiin CPU-moduuleihin oli pääsy, mikä vie ylimääräistä aikaa ja rajoittaa kellonopeutta. MIPS-suunnittelun pääasiallinen näkökohta oli sovittaa jokaisen käskyn jokainen alivaihe, mukaan lukien välimuisti, yhdeksi sykliksi, jolloin vältyttiin lukitusten tarpeelta ja sallittiin vain yhden syklin siirtyminen liukuhihnalle.
Vaikka tällainen toteutus poistaisi joitakin erittäin hyödyllisiä operaatioita, kuten kerto- ja jakolaskua, on selvää, että järjestelmän yleinen suorituskyky parantuisi huomattavasti, koska sirut voisivat toimia suuremmilla kellotaajuuksilla. Suuren nopeuden saavuttaminen lukoilla olisi vaikeaa, koska lukkojen asettamiseen kuluva aika on verrannollinen kellotaajuuteen, joka puolestaan riippuu kiteen koosta. Tästä syystä edellä mainittujen toimintojen poissulkemisesta on tullut kiistakysymys.
Toinen ero MIPS-arkkitehtuurin ja kilpailevien Berkeley-arkkitehtuurien välillä on Berkeley - RISC :n kyky käsitellä alirutiinikutsuja. Tällaisen yleisen tehtävän suorituskyvyn parantamiseksi Berkeley-RISC käytti tekniikkaa, jota kutsutaan rekisteriikkunaksi , joka kuitenkin rajoitti monitasoisten puhelujen maksimisyvyyttä. Jokainen aliohjelmakutsu vaati omat rekisterinsä, mikä teki tarpeelliseksi lisätä niiden määrää. Sen sijaan tämän mekanismin laitteistototeutus vei lisätilaa CPU-sirussa. Mutta Hennessy uskoi, että "perustelevampi" kääntäjä voisi löytää vapaita rekistereitä parametrien siirtämiseksi funktiolle, ja että pelkkä rekisterien määrän lisääminen ei vain yksinkertaistanut tätä tehtävää, vaan myös parantaa kaikkien toimintojen suorituskykyä. Siksi päätettiin luopua tästä tekniikasta MIPS:ssä.
MIPS-arkkitehtuuri oli joissakin suhteissa RISC :lle tyypillisin . Bittien tallentamiseksi käskykoodissa RISC on vähentänyt koodattavien käskyjen määrää. MIPS:ssä sanan 32 bitistä vain 6:ta käytetään pääkoodina, ja loput voivat sisältää joko yhden 26-bittisen hyppyosoitteen tai enintään 5 kenttää, jotka asetetaan 1 - 3 rekisteriin + rekisterin siirtopituus. . On olemassa useita muita muotoja, esimerkiksi kun 2 rekisteriä asetetaan suoraan erillisellä 16-bittisellä kentällä jne. Tämä jakauma mahdollisti prosessorin lataamaan tarvittavat käskyt ja tiedot yhdessä konesyklissä, kun taas vanhemmissa arkkitehtuureissa (jotka eivät olleet RISC ), esimerkiksi MOS Technology 6502, vaativat erilliset jaksot pääkoodin ja tietojen lataamiseen.
Tämä oli yksi RISC:n tarjoamista tärkeimmistä suorituskyvyn parannuksista. Muut arkkitehtuurit ovat kuitenkin saavuttaneet samanlaisia nopeuksia muilla keinoin (kuten CPU-jonoilla).
Hennessy jätti vuonna 1984 Stanfordin ja perusti MIPS Computer Systemsin. Vuonna 1985 MIPS-mikroprosessorin ensimmäinen kaupallinen toteutus, R2000, julkaistiin, valmistui vuonna 1988 ja sitä kutsuttiin R3000:ksi. Nämä 32-bittiset prosessorit muodostivat yrityksen tuotelinjan perustan 1980-luvulla ja niitä käytettiin pääasiassa SG-sarjan työasemissa. Uudet kaupalliset projektit eivät olleet Stanfordin tutkimuksen mukaisia, sillä lähes kaikki lukot tehtiin laitteistossa ja kerto- ja jakooperaatiot toteutettiin täysin.
Vuonna 1991 se esiteltiin ensimmäisen kerran 64-bittisenä MIPS-mikroprosessorina - mallina R4000. R4000:ssa on laajennettu TLB , jossa merkintä sisältää virtuaalisen osoitteen lisäksi myös virtuaalisen osoiteavaruuden tunnisteen. Tällainen puskuri eliminoi mikroytimen tärkeimmät suorituskykyongelmat, sillä se on melko hidas kilpailevissa arkkitehtuureissa ( Pentium , PowerPC , Alpha ), koska TLB on huuhdeltava toistuvien kontekstin vaihtamisen aikana.
MIPSillä oli kuitenkin taloudellisia vaikeuksia tuoda prosessoreja markkinoille. Projekti oli SGI :lle (yksi harvoista MIPS:n suurista ostajista tuolloin) niin tärkeä, että vuonna 1992 SGI osti yrityksen oikeudet takaamalla, että mikroprosessorien rakenne ei muutu. Tytäryhtiöksi tultuaan MIPS Computer Systems sai nimekseen MIPS Technologies.
Vuoden 1990 alussa MIPS alkoi lisensoida mallejaan kolmansille osapuolille. Idea oli onnekas ytimen yksinkertaisuuden vuoksi, sillä se löysi monia sovelluksia, joissa aiemmin käytettiin paljon vähemmän tehokkaita CISC -arkkitehtuuria , samalla määrällä ja samalla hinnalla piirejä (nämä kaksi kriteeriä liittyvät läheisesti toisiinsa: CPU:n hinta, yleensä riippuu piirien ja koskettimien lukumäärästä). Sun Microsystems yritti samanlaisen yrityksen lisensoida SPARC - ytimiä, mutta Sun ei ollut niin onnekas. 1990-luvun loppuun mennessä MIPS:stä oli tullut tärkein sulautettujen prosessorien yritys, ja vuonna 1997 48 miljoonan MIPS-pohjaisten prosessorien lähetyksen ansiosta RISC-arkkitehtuurit syrjäyttivät suositun 68k-prosessoriperheen. MIPS oli niin suosittu, että vuonna 1998 SGI siirsi osan omaisuudesta MIPS Technologiesille. Toistaiseksi puolet MIPS:n liikevaihdosta tulee kehityslisensseistä, ja suurin osa toisesta puoliskosta tulee sopimuksista kehittää ydintä kolmansien osapuolten tuotantoa varten.
Vuonna 1999 MIPS virallisti lisenssijärjestelmänsä kahden päämallin ympärille - 32-bittinen MIPS32 (perustuu MIPS II:een, jossa on joitain MIPS III:n, MIPS IV:n ja MIPS V:n lisäominaisuuksia) ja 64-bittisen MIPS64:n (perustuu MIPS V:hen). NEC , Toshiba ja SiByte (jonka Broadcom osti myöhemmin) lisensoivat MIPS64:n välittömästi sen julkaisun jälkeen. Heihin liittyivät pian Philips , LSI Logic ja IDT. Menestys seurasi menestystä, ja nykyään MIPS-prosessorit ovat yksi halutuimmista tuotteista tietokonetyyppisten laitteiden (PDA:t, digisovittimet jne.) markkinoilla muiden kehittäjien kanssa, jotka turhaan yrittävät syrjäyttää niitä.
Muutama vuosi MIPS-arkkitehtuurin lisensoinnin jälkeen se alkoi houkutella yhä enemmän uusia prosessorikehitysyrityksiä. Ensimmäinen tällainen yritys oli Quantum Effect Devices (katso seuraava osa). MIPS R4300i:n kokonnut kehitystiimi perusti SandCraftin, joka toimitti NEC:lle uuden R5432-prosessorin, ja vähän myöhemmin mallinsi R71000:n, yhden ensimmäisistä mukautetuista prosessoreista sulautetuille markkinoille. DEC StrongARM:n perustajatiimi jakautui lopulta kahdeksi uudeksi MIPS-pohjaiseksi prosessoriyritykseksi: SiByte, joka teki SB-1250:n, yhden ensimmäisistä korkean suorituskyvyn sirujärjestelmistä, jotka perustuvat MIPS:ään ( SOC ) ja Alchemy Semiconductoriin (myöhemmin AMD osti) , joka tuotti Au-1000 SOC:n pienitehoisiin sovelluksiin. Lexra käytti MIPS:n kaltaista arkkitehtuuria, lisäten DSP:n äänisirumarkkinoille ja multi-streaming-tuen verkkomarkkinoille. Koska Lexra ei ostanut MIPS-lisenssiä, kahden yrityksen välillä puhkesi pian oikeusjuttuja. Ensimmäinen lunastettiin nopeasti sen jälkeen, kun Lexra lupasi olla mainostamatta prosessoriaan samanlaisina kuin MIPS. Toinen prosessi (koskee MIPS-patenttia 4814976 kohdistamattoman muistin käyttöohjeen käsittelemiseksi) oli pitkittynyt ja vaikutti negatiivisesti molempien yritysten liiketoimintaan, ja sen valmistuttua MIPS Technologies myönsi ilmaisen lisenssin Lexralle ja maksoi suuren rahallisen korvauksen.
Tämän kehityksen jälkeen markkinoille tuli kaksi yritystä, jotka ovat erikoistuneet moniytimien laitteiden luomiseen MIPS-arkkitehtuurilla. Raza Microelectronics Corporation osti tuotantolinjan vähemmän menestyneeltä SandCraftilta ja aloitti sitten kahdeksanytimisen laitteiden tuotannon tietoliikenne- ja verkkomarkkinoille. Cavium Networks, alun perin prosessorin suojauksen toimittaja, aloitti myös kahdeksan ja myöhemmin 32-ytimen arkkitehtuurien tuotannon samoilla markkinoilla. Molemmat yritykset suunnittelivat ytimet itse ja lisensoivat vain mallit valmiiden MIPS-prosessorimallien ostamisen sijaan.
Valmistajia, jotka ovat rakentaneet työasemia MIPS-mikroprosessoreilla, ovat SGI , MIPS Computer Systems, Inc., Whitechapel Workstations, Olivetti, Siemens-Nixdorf, Acer, Digital Equipment Corporation , NEC ja DeskStation. MIPS-arkkitehtuuriin siirrettyjä käyttöjärjestelmiä ovat SGI :n IRIX , Microsoftin Windows NT (versioon 4.0 asti) , Windows CE , Linux , UNIX ( System V ja BSD ), SINIX, QNX ja yrityksen oma -käyttöjärjestelmäRISC OS
1990-luvun alussa spekuloitiin, että MIPS yhdessä muiden tehokkaiden RISC-suorittimien kanssa ohittaisi pian Intelin IA32 - arkkitehtuurin . Tätä helpotti Microsoftin kahden ensimmäisen Windows NT -version Alpha- , MIPS- ja PowerPC -versio sekä vähemmässä määrin Clipper- ja SPARC-arkkitehtuurien tuki. Heti kun Intel julkaisi Pentium -prosessoriperheen uusimmat versiot , Microsoft Windows NT v4.0 lakkasi tukemasta kaikkia muita paitsi Alphaa ja Inteliä. SGI:n päätettyä siirtyä Itanium- ja IA32-arkkitehtuureihin MIPS-prosessorit lopettivat lähes kokonaan käytön henkilökohtaisissa tietokoneissa.
1990-luvulla MIPS-arkkitehtuuri otettiin laajalti käyttöön sulautetuilla markkinoilla : verkoissa, televiestinnässä, videopeleissä, pelikonsoleissa, tulostimissa, digitaalisissa digisovittimissa, digitelevisioissa, xDSL- ja kaapelimodeemeissa sekä kämmenmikroissa.
Sulautettujen MIPS-arkkitehtuurien alhainen virrankulutus ja lämpötilaominaisuudet sekä laaja valikoima sisäisiä toimintoja tekevät tästä mikroprosessorista universaalin monille laitteille.
Viime vuosina useimpia MIPS-sukupolvessa käytetyistä teknologioista on ehdotettu IP-ytimiä (rakennuspalikoita) sulautettujen prosessorien toteutuksia varten. Lisäksi ehdotetaan molempia ytimiä - perustuen 32- ja 64-bittisiin, jotka tunnetaan nimellä 4K ja 6K. Tällaisia ytimiä voidaan yhdistää muihin rakennuspalikoihin, kuten FPU :ihin, SIMD- järjestelmiin , erilaisiin I/O-laitteisiin jne.
Aikaisemmin kaupallisesti menestyneet MIPS-ytimet ovat nyt löytäneet kuluttaja- ja teollisuussovelluksia. Nämä ytimet löytyvät uusista Cisco- , Linksys- , ZyXEL- ja MikroTik -reitittimistä , kaapeli- ja ADSL - modeemeista, älykorteista , lasertulostinmekanismeista, digitaalisista digisovittimista, roboteista, PDA-laitteista, Sony PlayStation 2:sta ja Sony PlayStation Portablesta. Matkapuhelin- ja PDA-sovelluksissa MIPS ei kuitenkaan onnistunut syrjäyttämään kilpailevaa ARM -arkkitehtuuria, joka oli vakiintunut siellä .
MIPS-pohjaiset prosessorit sisältävät: IDT RC32438; ATI Hilleon; Alchemy Au1000, 1100, 1200 ; Broadcom Sentry5; RMI XLR7xx, Cavium Octeon CN30xx, CN31xx, CN36xx, CN38xx ja CN5xxx; Infineon Technologies EasyPort, Amazon, Danube, ADM5120, WildPass, INCA-IP, INCA-IP2; Mikrosirutekniikka PIC32 ; NEC EMMA ja EMMA2, NEC VR4181A, VR4121, VR4122, VR4181A, VR5432, VR5500; Oak Technologies Generation; PMC-Sierra RM11200; QuickLogic QuickMIPS ESP; Toshiba Donau, Toshiba TMPR492x, TX4925, TX9956, TX7901; KOMDIV-32 , KOMDIV-64 ; Moniytiminen .
Yksi MIPS-arkkitehtuurin mielenkiintoisimmista sovelluksista on niiden käyttö moniprosessorilaskennan supertietokoneissa. 1990-luvun alussa Silicon Graphics ( SGI ) keskitti liiketoimintansa pois grafiikkapäätteistä korkean suorituskyvyn tietotekniikan markkinoille. Yrityksen varhaisten palvelinjärjestelmien (eli R4400-, R8000- ja R10000-pohjaisten Challenge-sarjan) menestys motivoi SGI:tä luomaan paljon tehokkaamman järjestelmän. R10000 : n avulla yritys pystyi suunnittelemaan Origin 2000 -järjestelmän, joka lopulta laajennettiin 1024 prosessoriin käyttämällä omaa cc-NUMA-yhteyttä (NUMAlink). Myöhemmin Origin 2000 synnytti uuden järjestelmän - Origin 3000, joka ilmestyi samoilla maksimiprosessoreilla, mutta käytti kehitteillä R14000- ja R16000-siruja jopa 700 MHz:n taajuudella. Kuitenkin vuonna 2005, kun SGI teki strategisen päätöksen siirtyä Intel IA-64 -arkkitehtuuriin, MIPS-pohjaiset supertietokoneet lopetettiin.
Vuonna 2007 SiCortex Corporation esitteli uuden moniprosessorin henkilökohtaisen supertietokoneen, joka perustuu MIPS-arkkitehtuuriin. Sen kehitys perustui MIPS64:ään ja suorituskykyiseen Kautzin graafitopologiaa käyttävään yhteenliittämiseen . Tämä järjestelmä on erittäin tehokas ja laskennallisesti tehokas. Sen ainutlaatuinen piirre on moniytiminen prosessointisolmu, joka yhdistää kuusi MIPS64-ydintä, muistiohjainkytkimen, DMA-järjestelmien välisen tiedonsiirron, 1 Gt:n lähiverkon ja PCI Express -ohjaimet. Ja kaikki tämä yhdellä sirulla, joka kuluttaa 10 wattia tehoa, mutta suorittaa enintään 6 miljardia liukulukuoperaatiota sekunnissa. Tällaisen supertietokoneen tehokkain kokoonpano on SC5832-versio, joka koostuu 972 solmusta (yhteensä 5832 MIPS64 ydintä) ja suorittaa 8,2 biljoonaa liukulukuoperaatiota sekunnissa.
Toivoen kiertävänsä MIPS-patentin Loongson julkaisi arkkitehtuurinsa , joka oli täysin samanlainen kuin MIPS Technologiesin kehitys ja jota Linux tuki . Koska Loongson-prosessorien tuotanto oli halvempaa, MIPS pystyi elpymään henkilökohtaisten tietokoneiden markkinoilla Loongsonin edessä. (Loongson osti myöhemmin MIPS-lisenssin - katso pääartikkeli)
MIPS-pohjaisia prosessoreita käytetään myös iUnika-, Bestlink-, Lemote- ja Golden Delicious Computersin netbookeissa.
MIPS IV - arkkitehtuurin neljäs sukupolvi, on laajennettu versio MIPS III :sta ja on yhteensopiva kaikkien olemassa olevien MIPS-mallien kanssa. Ensimmäinen MIPS IV - toteutus esiteltiin vuonna 1994 nimellä R8000 . MIPS IV sisältää:
MIPS V, arkkitehtuurin viides versio, esiteltiin 21. lokakuuta 1996 vuoden 1996 Microprocessor Forumissa . Tämä malli on suunniteltu parantamaan 3D-grafiikkasovellusten suorituskykyä . 1990-luvun puolivälissä useimmat sulautetut MIPS-mikroprosessorit olivat SGI :n grafiikkapäätteitä . MIPS V:n kehitystä täydennettiin kokonaislukumultimedialaajennuksilla MDMX (MIPS Digital Media Extensions), jotka otettiin käyttöön samana päivänä kuin MIPS V.
MIPS V:n toteutuksia ei koskaan otettu käyttöön. Vuonna 1997 SGI esitteli mikroprosessorit nimeltä "H1" ("Beast") ja "H2" ("Capitan"), jotka oli tarkoitus tuottaa vuonna 1999. Mutta pian ne yhdistettiin, ja lopulta vuonna 1998 nämä hankkeet peruttiin.
MIPS V lisäsi uuden tietotyypin, PS (pair-single), joka on kaksi kaksoistarkkuutta (32-bittistä) liukulukua, jotka on tallennettu 64-bittiseen liukulukurekisteriin. Tämän tietotyypin kanssa SIMD -tilassa työskentelyyn lisättiin erilaisia aritmeettisia versioita, liukulukujen vertailevia operaatioita sekä ehdollinen hyppykäsky. Uusia ohjeita PS-tietojen lataamiseen, uudelleenmäärittämiseen ja muuntamiseen. Se on ensimmäinen arkkitehtuuri, joka pystyy toteuttamaan liukulukukäsittelyn SIMD - tilassa käytettävissä olevilla resursseilla.
Ensimmäinen kaupallinen MIPS-mikroprosessori oli R2000, joka esiteltiin vuonna 1985. Se toteutti kerto- ja jakooperaatiot, jotka suoritettiin useissa sykleissä. Kerto- ja jakolaitetta ei integroitu tiukasti prosessorin ytimeen, vaikka se sijaitsi samassa sirussa; tästä syystä käskyjärjestelmää laajennettiin ohjeilla kerto- ja jakolaskutulosten lataamisesta yleisiin rekistereihin, nämä ohjeet tukkivat liukuhihnan.
R2000-mikroprosessori oli ladattavissa sekä big-endian-tilassa että little-endian-tilassa, sisältäen 32 32-bittistä yleiskäyttöistä rekisteriä. Kuten AMD 29000- ja Alpha-prosessoreissa , R2000-mikroprosessorissa ei ollut erillistä ehtolippurekisteriä, koska kehittäjät pitivät sitä mahdollisena pullonkaulana. Ohjelmalaskuri ei ole suoraan käytettävissä.
R2000-mikroprosessori tuki jopa neljän apuprosessorin yhdistämistä, joista yksi on sisäänrakennettu ja tarjoaa poikkeusten käsittelyn sekä muistinhallinnan (MMU). Tarvittaessa R2010-siru, aritmeettinen apuprosessori, voitiin kytkeä toiseksi apuprosessoriksi, joka sisälsi kolmekymmentäkaksi 32-bittistä rekisteriä, joita voitiin käyttää kuutenatoista 64-bittisenä kaksoistarkkuusrekisterinä. Seuraava perheessä oli R3000 , joka ilmestyi vuonna 1988. Se sisälsi 64 kt:n välimuistin (R2000 - 32 kt). Lisäksi R3000 tarjosi välimuistin yhtenäisyyttä käytettäessä moniprosessorikokoonpanoissa. Huolimatta siitä, että R3000-moniprosessorituki sisältää useita puutteita, R3000:n pohjalta on luotu useita toimivia moniprosessorijärjestelmiä. Mitä tulee R2000:een, R3000:lle luotiin aritmeettinen apuprosessori erillisen VLSI:n R3010 muodossa. R3000-mikroprosessori oli ensimmäinen kaupallisesti menestynyt MIPS-prosessori, jossa valmistettiin yli miljoona prosessoria. R3000:n nopeutettu versio, joka toimii 40 MHz:llä, nimeltään R3000A, saavutti 32 VUP:ta (VAX Unit of Performance). Sony PlayStation -pelikonsolissa käytettiin R3000A:n jatkokehitystä, 33,8688 MHz:n taajuudella toimivaa R3051-mikroprosessoria. Muut valmistajat esittelivät myös R3000A:n kanssa yhteensopivia prosessoreita: Performance Semiconductor kehitti R3400:n, kun taas IDT loi R3500:n, joissa molemmissa oli integroitu matemaattinen R3010-apuprosessori. Toshiban R3900 oli ensimmäinen sirulla oleva järjestelmä, joka käytti MIPS-arkkitehtuuria; tätä sirua käytettiin kannettavassa tietokoneessa, jossa oli Windows CE. R3000:sta kehitettiin säteilyä kestävä muunnos, jossa on integroitu R3010 avaruusalussovelluksiin, ja se sai nimen Mongoose-V .
Vuonna 1991 julkaistu R4000-sarja laajensi MIPS-prosessorit 64-bittisiin. (MIPS Technology oli ensimmäinen yritys, joka julkaisi prosessorit 64-bittisellä arkkitehtuurilla) R4000 koostuu 1,3 miljoonasta transistorista, siinä on sisäänrakennettu datavälimuisti ja käskyvälimuisti (molemmat 8 kt). Tässä prosessorissa 50 MHz ulkoinen kello on kaksinkertainen ja sisäinen kello on 100 MHz. R4400-prosessori perustuu R4000:een, koostuu 2,2 miljoonasta transistorista, siinä on sisäänrakennettu datavälimuisti ja käskyvälimuisti (molemmat 16 KB) ja sisäinen kellotaajuus 150 MHz. Näiden prosessorien käskyjoukkoa (MIPS II -spesifikaatio) on laajennettu 64-bittisillä liukulukulla kuormitus- ja kirjoituskäskyillä, yhden ja kaksoistarkkuuden neliöjuuren käskyillä, ehdollisilla keskeytyskäskyillä ja moniprosessorikokoonpanojen tukemiseen tarvittavilla atomioperaatioilla. R4000- ja R4400-prosessoreissa on 64-bittiset tietoväylät ja 64-bittiset rekisterit.
MIPS, joka on nyt SGI:n osasto nimeltä MTI, kehitti edulliset R4200-prosessorit, jotka toimivat pohjana tulevalle (jopa halvemmalle) R4300i:lle. Tämän prosessorin johdannaista, NEC VR4300, käytettiin Nintendo 64 -pelikonsoleissa.
MIPS-kehittäjien perustama itsenäinen Quantum Effect Devices (QED) on kehittänyt prosessorit R4600 Orion, R4700 Orion, R4650 ja R5000. Jos R4000 lisäsi kellonopeutta, mutta uhrasi välimuistin määrän, niin QED kiinnitti suurta huomiota välimuistin kapasiteettiin (johon pääsee käsiksi vain kahdessa jaksossa) ja kidepinnan tehokkaaseen käyttöön. R4600- ja R4700-suorittimia käytettiin SGI Indy -työaseman edullisissa versioissa sekä varhaisissa Ciscon reitittimissä (MIPS-pohjaisissa), kuten 36x0- ja 7x00-sarjoissa. R4650-mikroprosessoria käytettiin WebTV-digisovittimissa (nykyisin Microsoft TV). R5000 FPU:ssa liukuluku (single precision) -aikataulu oli joustavampi kuin R4000:ssa, ja sen seurauksena R5000-pohjaisilla SGI Indys -työasemilla oli parempi grafiikkasuorituskyky kuin R4400:ssa, jolla oli sama kellotaajuus ja grafiikkalaitteisto. Korostaakseen parannusta R5000:n ja vanhan näytönohjaimen yhdistämisen jälkeen SGI antoi sille uuden nimen. Hieman myöhemmin QED kehitti RM7000- ja RM9000-prosessorit verkko- ja lasertulostinmarkkinoille. Elokuussa 2000 puolijohdevalmistaja PMC-Sierra osti QED:n, joka jatkoi investointejaan MIPS-arkkitehtuureihin. RM7000-prosessori sisälsi 256 kilotavua piirissä olevaa L2-välimuistia ja ohjaimen L3-lisävälimuistia varten. Luotiin RM9xx0-prosessorit - SOC-laitteiden perhe, joka sisältää sellaisia oheiskomponentteja (pohjoisella sillalla), kuten: muistiohjain, PCI-ohjain, Ethernet-ohjain sekä nopeat I / O-laitteet (esim. suorituskykyväylä, kuten HyperTransport).
R8000 (otettiin käyttöön vuonna 1994) oli ensimmäinen MIPS-superskalaariarkkitehtuuri, joka pystyi antamaan 2 kokonaislukua (tai liukulukua) ja 2 muistinkäyttökäskyä jaksoa kohden. Tässä suunnittelussa käytettiin 6 mallia: laite kokonaislukukäskyille (16 kt käskyille ja 16 kt datavälimuistille), liukulukukäskyille, kolme toissijaista RAM-välimuistin kuvaajaa (kaksi toissijaista välimuistin käyttöä varten + yksi väylän seurantaan) sekä ASIC-välimuistiohjain. Arkkitehtuurissa on kaksi täysin liukuhihnaa moninkertaistaa (double-tarkkuus) -yksikköä, jotka voivat suoratoistaa tietoja 4 Mt:n sirun ulkopuoliseen toissijaiseen välimuistiin. 1990-luvun puolivälissä R8000-prosessorit lanseerasivat POWER Challenge SGI -palvelimet ja tulivat myöhemmin saataville POWER Indigo2 -työasemille. Vaikka tämän FPU:n suorituskyky olikin tutkimustyöntekijöille sopivin, sen rajallinen kokonaislukusuorituskyky ja korkea hinta eivät houkutelleet useimpia käyttäjiä, joten R8000 oli markkinoilla vain vuoden, ja vieläkään sitä tuskin löytyy.
Vuonna 1995 R10000 [3] julkaistiin . Tämä prosessori tarjottiin yksisiruisena, se toimi suuremmalla kellotaajuudella kuin R8000, ja se sisälsi myös suuren (32 kt) ensisijaisen datan ja käskyvälimuistin. Se oli myös superskalaari, mutta tämä suuri innovaatio oli viallinen. Mutta jopa yksinkertaisemmalla FPU:lla, merkittävästi parantunut kokonaislukusuorituskyky, alhaisempi hinta ja suurempi tallennustiheys ovat tehneet R10000:sta suositun valinnan useimmille käyttäjille.
Kaikki myöhemmät mallit perustuivat R10000 - ytimeen . R12000 käytti 0,25 mikronin valmistusprosessia sirun pienentämiseksi ja korkeampien kellotaajuuksien saavuttamiseksi. Uudistetussa R14000:ssa oli korkeampi kellonopeus sen lisäksi, että se tuki DDR SRAM -muistia sirun ulkopuoliselle välimuistille. Seuraavaksi julkaistiin R16000 ja R16000A, joiden kellotaajuutta myös nostettiin; niihin oli sisäänrakennettu ylimääräinen L1-välimuisti, ja niiden tuotanto vaati pienempiä suulakkeita kuin ennen.
Muita MIPS-perheen jäseniä ovat R6000, Bipolar Integrated Technologyn ESL-toteutus. R6000 kuuluu MIPS II -suoritinsukupolveen. Sen TLB- ja välimuistilaite eroavat merkittävästi muista tämän perheen jäsenistä. R6000 ei tuottanut luvattuja etuja, ja vaikka se todettiin jonkin verran hyödylliseksi Control Data -tietokoneille, se katosi nopeasti valtavirran markkinoilta.
Malli | Taajuus (MHz) | vuosi | Kehitystekniikka (µm) | Transistorit (miljoonaa) | Kiteen koko (mm²) | Tapien lukumäärä | Teho, W) | Jännite (V) | Tietovälimuisti (KB) | Ohjevälimuisti (KB) | Tason 2 välimuisti | Tason 3 välimuisti |
---|---|---|---|---|---|---|---|---|---|---|---|---|
R2000 | 8-16.67 | 1985 | 2.0 | 0.11 | ? | ? | ? | ? | 32 | 64 | EI | EI |
R3000 | 12-40 | 1988 | 1.2 | 0.11 | 66.12 | 145 | neljä | ? | 64 | 64 | 0-256 kt ulkoinen | EI |
R4000 | 100 | 1991 | 0.8 | 1.35 | 213 | 179 | viisitoista | 5 | kahdeksan | kahdeksan | 1 Mt ulkoinen | EI |
R4400 | 100-250 | 1992 | 0.6 | 2.3 | 186 | 179 | viisitoista | 5 | 16 | 16 | 1-4 Mt ulkoinen | EI |
R4600 | 100-133 | 1994 | 0,64 | 2.2 | 77 | 179 | 4.6 | 5 | 16 | 16 | 512 kt ulkoinen | EI |
R4700 | 133 | 1996 | ? | ? | ? | 179 | ? | ? | 16 | 16 | Ulkoinen | EI |
R5000 | 150-200 | 1996 | 0,35 | 3.7 | 84 | 223 | kymmenen | 3.3 | 32 | 32 | 1 Mt ulkoinen | EI |
R8000 | 75-90 | 1994 | 0.7 | 2.6 | 299 | 591+591 | kolmekymmentä | 3.3 | 16 | 16 | 4 Mt ulkoinen | EI |
R10 000 | 150-250 | 1996 | 0,35, 0,25 | 6.7 | 299 | 599 | kolmekymmentä | 3.3 | 32 | 32 | 512 kt - 16 MB ulkoinen | EI |
R12000 | 270-400 | 1998 | 0,25, 0,18 | 6.9 | 204 | 600 | kaksikymmentä | neljä | 32 | 32 | 512 kt - 16 MB ulkoinen | EI |
7000 RM | 250-600 | 1998 | 0,25, 0,18, 0,13 | kahdeksantoista | 91 | 304 | 10, 6, 3 | 3,3, 2,5, 1,5 | 16 | 16 | 256 kt sisäinen | 1 Mt ulkoinen |
R14000 | 500-600 | 2001 | 0.13 | 7.2 | 204 | 527 | 17 | ? | 32 | 32 | 512 kt - 16 MB ulkoinen | EI |
R16000 | 700-1000 | 2002 | 0.11 | ? | ? | ? | kaksikymmentä | ? | 64 | 64 | 512 kt - 16 MB ulkoinen | EI |
R24K | 750+ | 2003 | 65 nm | ? | 0,83 | ? | ? | ? | 64 | 64 | 4-16 Mt ulkoinen | EI |
Käskyt on jaettu kolmeen tyyppiin: R, I ja J. Jokainen käsky alkaa 6-bittisellä koodilla. R-tyypin käskyt määrittelevät koodin lisäksi kolme rekisteriä, rekisterin siirtokokoalueen ja funktioalueen; I-tyypin käskyt määrittelevät kaksi rekisteriä ja välittömän arvon; J-tyypin käskyt koostuvat opcodesta ja 26-bittisestä haaraosoitteesta.
Seuraavassa on taulukko kolmen käskymuodon käytöstä ytimen arkkitehtuurissa:
Tyyppi | −31− muoto (bitteinä) −0− | |||||
---|---|---|---|---|---|---|
R | koodi (6) | rs(5) | rt(5) | rd(5) | huijaus (5) | toiminto (6) |
minä | koodi (6) | rs(5) | rt(5) | suora (16) | ||
J | koodi (6) | osoite (26) |
Näissä kokoonpanokielen ohjeissa on suora laitteistototeutus, toisin kuin pseudo-käskyt, jotka käännetään todellisiksi yhdistelmäkäskyiksi ennen kokoonpanoa.
MIPS:ssä on 32 rekisteriä kokonaislukuoperaatioita varten. Aritmeettisia laskelmia varten tietojen on oltava rekistereissä. Rekisteri $0 tallentaa aina 0:n ja rekisteri $1 on varattu kokoonpanoa varten (säilyttääkseen pseudokäskyt ja suuret vakiot). Alla olevasta taulukosta näet, mitkä bitit vastaavat mitäkin käskyn osia. Tavuviiva (-) tarkoittaa neutraalia tilaa.
Kategoria | Nimi | Ohjeen syntaksi | Merkitys | Muoto/Koodi/toiminto | Huomautuksia/koodaus | ||
---|---|---|---|---|---|---|---|
Aritmeettinen | Lisätä | lisää $d,$s,$t | $d = $s + $t | R | 0 | 20 16 | Lisää kaksi rekisteriä, keskeyttää ylivuodon 000000ss sssttttt ddddd --- --100000 |
Lisää allekirjoittamaton | lisää $d,$s,$t | $d = $s + $t | R | 0 | 21 16 | Kuten edellä, mutta ylivuodon huomioimatta 000000ss sssttttt ddddd --- --100001 | |
Vähentää | ala $d,$s,$t | $d = $s − $t | R | 0 | 22 16 | Vähentää kaksi rekisteriä, suorittaa ylivuotokeskeytyksen 000000ss sssttttt ddddd --- --100010 | |
vähennä allekirjoittamaton | subu $d,$s,$t | $d = $s − $t | R | 0 | 23 16 | Kuten edellä, mutta ylivuodon huomioimatta 000000ss sssttttt ddddd000 00100011 | |
Lisää heti | lisää $t,$s,C | $t = $s + C (allekirjoitettu) | minä | 8 16 | - | Käytetään etumerkittyjen vakioiden lisäämiseen (myös rekisterin kopioimiseen toiseen: addi $1, $2, 0), suorittaa ylivuotokeskeytyksen 001000ss sssttttt CCCCCCCC CCCCCCCC | |
Lisää heti allekirjoittamaton | lisäys $t,$s,C | $t = $s + C (allekirjoitettu) | minä | 9 16 | - | kuten edellä, mutta ylivuodon huomioimatta, C jää allekirjoitukseksi 001001ss sssttttt CCCCCCCC CCCCCCCC | |
Kerro | mult $s,$t | LO = (($s * $t) << 32) >> 32; HI = ($s * $t) >> 32; |
R | 0 | 18 16 | Kertoo kaksi rekisteriä ja kirjoittaa 64-bittisen tuloksen kahteen erikoismuistikenttään, LO ja HI. Vastaavasti voit kirjoittaa toiminnon tuloksen muodossa: (int HI,int LO) = (64-bittinen) $s * $t. Katso mfhi ja mflo saadaksesi pääsyn LO- ja HI-rekistereihin. | |
Jakaa | div $s, $t | LO = $s / $t HI = $s % $t | R | 0 | 1A16 _ | Jakaa rekisterin toisella ja kirjoittaa 32-bittisen tuloksen LO:ksi ja loput HI:ksi [4] . | |
Jaa allekirjoittamaton | paljasta $s, $t | LO = $s / $t HI = $s % $t | R | 0 | 1B 16 | Jakaa rekisterin toisella ja kirjoittaa 32-bittisen tuloksen LO:ksi ja loput HI:ksi. | |
Tiedonsiirto | Lataa kaksoissana | ld$t,C($s) | $t = muisti[$s + C] | minä | 23 16 | - | lataa kaksoissanan kohteesta: MEM[$s+C] ja seuraavat 7 tavua tiedostoon $t ja seuraavaan rekisteriin. |
lataa sana | lw $t,C($s) | $t = muisti[$s + C] | minä | 23 16 | - | lataa sanan kohteesta: MEM[$s+C] ja seuraavat 3 tavua. | |
Lataa puolisanaa | h $t,C($s) | $t = Muisti[$s + C] (allekirjoitettu) | minä | 21 16 | - | lataa puolisanan kohteesta: MEM[$s+C] ja seuraava tavu. Kyltti on pidennetty kotelon leveydelle. | |
Lataa puolisana allekirjoittamaton | lhu $t,C($s) | $t = Muisti[$s + C] (allekirjoittamaton) | minä | 25 16 | - | Kuten edellä, mutta ilman kyltin laajennusta. | |
lataustavu | lb $t,C($s) | $t = Muisti[$s + C] (allekirjoitettu) | minä | 20 16 | - | lataa tavun kohteesta: MEM[$s+C]. | |
Lataustavu allekirjoittamaton | lbu $t,C($s) | $t = Muisti[$s + C] (allekirjoittamaton) | minä | 24 16 | - | Kuten edellä, mutta ilman kyltin laajennusta. | |
tallentaa kaksoissana | sd $t,C($s) | Muisti[$s + C] = $t | minä | - | tallentaa kaksi sanatyyppiä $t:stä ja seuraavasta rekisteristä: MEM[$s+C] ja seuraavat 7 tavua. Operandien järjestys voi olla hämmentävä. | ||
tallentaa sanaa | sw $t,C($s) | Muisti[$s + C] = $t | minä | 2B16 _ | - | tallentaa sanan: MEM[$s+C] ja seuraavat 3 tavua. Operandien järjestys voi olla hämmentävä. | |
Säilytä puolikas | sh $t, C($s) | Muisti[$s + C] = $t | minä | 29 16 | - | tallentaa rekisterin ensimmäisen puoliskon (puolisanan) kohtaan: MEM[$s+C] ja seuraavan tavun. | |
Tallenna tavu | sb $t,C($s) | Muisti[$s + C] = $t | minä | 28 16 | - | tallentaa rekisterin ensimmäisen neljänneksen (tavun): MEM[$s+C]. | |
Yläkuorma välittömästi | lui $t,C | $t = C << 16 | minä | F 16 | - | Lataa 16-bittisen operandin määritetyn rekisterin ylempään 16 bittiin. Vakion maksimiarvo 2 16 −1 | |
Siirrä korkealta | mfhi$d | $d = HI | R | 0 | 10 16 | Sijoittaa arvon HI:stä rekisteriin. Älä käytä kerto- ja jako-käskyjä mfhi-käskyn sisällä (tätä toimintoa ei ole määritetty MIPS-putkilinjan vuoksi). | |
Siirrä alhaalta | mflo $d | $d = LO | R | 0 | 12 16 | Sijoittaa arvon LO:sta rekisteriin. Älä käytä kerto- ja jako-käskyjä mflo-käskyn sisällä (tätä toimintoa ei ole määritetty MIPS-liukuhihnan vuoksi). | |
Siirrä ohjausrekisteristä | mfcZ $t, $s | $t = Apuprosessori[Z]. ControlRegister[$s] | R | 0 | Siirtää 4-tavun arvon Z-ohjausrekisterin apuprosessorista yleiseen rekisteriin. Kyltin laajennus. | ||
Siirry hallintarekisteriin | mtcZ $t, $s | Apuprosessori[Z].ControlRegister[$s] = $t | R | 0 | Siirtää 4-tavun arvon yleisestä rekisteristä Z-ohjausrekisterin apuprosessoriin. Kyltin laajennus. | ||
looginen | Ja | ja $d,$s,$t | $d = $s & $t | R | 0 | 24 16 | bittikohtainen konjunktio 000000ss sssttttt ddddd --- --100100 |
Ja heti | andi $t,$s,C | $t = $s & C | minä | C 16 | - | 001100ss sssttttt CCCCCCCC CCCCCCCC | |
Tai | tai $d,$s,$t | $d = $s | $t | R | 0 | 25 16 | Bittikohtainen disjunktio | |
Tai heti | ori $t,$s,C | $t = $s | C | minä | D16 _ | - | ||
Eksklusiivinen tai | x tai $d,$s,$t | $d = $s ^ $t | R | 0 | 26 16 | ||
ei myöskään | eikä $d,$s,$t | $d = ~ ($s | $t) | R | 0 | 27 16 | Hieman ei | |
Aseta alle | slt $d,$s,$t | $d = ($s < $t) | R | 0 | 2A 16 | Tarkistaa, onko yksi rekisteri pienempi kuin toinen. | |
Käyttöönotto vähemmän kuin välittömästi | slti $t,$s,C | $t = ($s < C) | minä | A 16 | - | Tarkistaa, onko yksi rekisteri pienempi kuin vakio. | |
bitin muutos | Vaihto vasemmalle looginen | sll $t,$s,C | $t = $s << C | R | 0 | 0 | siirtää C bittiä vasemmalle (kertoo kahden potenssilla ) |
Vaihto oikealle loogisesti | srl $t,$s,C | $t = $s >> C | R | 0 | 2 16 | siirtää C bittiä oikealle (jakaa kahden potenssilla ). Huomaa, että tämä ohje toimii kuin kahden komplementtijako vain, jos arvo on positiivinen. | |
Siirrä oikealle aritmetiikkaa | sra $t,$s,C | R | 0 | 3 16 | siirtää C-bittiä - (jakaa kahden komplementin binäärikoodiin) | ||
Ehdollinen haarautuminen | Haara tasavertaisesti | beq $s,$t,C | jos ($s == $t) siirry kohtaan PC+4+4 °C | minä | 4 16 | - | Hyppää ohjeeseen määritetyssä osoitteessa, jos kaksi rekisteriä ovat samat. 000100ss sssttttt CCCCCCCC CCCCCCCC |
Haara ei ole sama | bne $s,$t,C | jos ($s != $t) siirry kohtaan PC+4+4 °C | minä | 5 16 | - | Hyppää ohjeeseen määritetyssä osoitteessa, jos kaksi rekisteriä eivät ole samat. | |
Ehdoton hyppy | Hypätä | j C | PC = PC+4[31:28] . C*4 | J | 2 16 | - | Suorittaa ehdottoman hypyn ohjeeseen määritetyssä osoitteessa. |
hyppyrekisteri | jr$s | mennä osoitteeseen $s | R | 0 | 8 16 | Hyppää määritetyn rekisterin sisältämään osoitteeseen. | |
hyppää ja linkitä | jal C | 31 dollaria = PC + 8; PC = PC+4[31:28] . C*4 | J | 3 16 | - | Toimenpide - käytetään kutsumaan aliohjelmaa, rekisteri $31 vastaanottaa ja palauttaa osoitteen; aliohjelman palautus maksaa 31 dollaria. Paluuosoite on PC + 8, ei PC + 4, johtuen viivevälin (delay slot) käytöstä: kaikkia haarakäskyjä arkkitehtuurissa (ennen uusien MIPS32 / MIPS64-käskyjen käyttöönottoa vuonna 2014) edeltää aina sitä seuraavan käskyn suorittaminen ja vasta sitten varsinainen siirtyminen. Tämä mahdollisti liukuhihnan kuormituksen tasaisemmin - kun siirtymäkäsky haki käskyn siirtymäosoitteesta, prosessori ei seisonut lepotilassa, vaan suoritti sitä seuraavan käskyn, mikä kuitenkin vaikeuttaa sen lukemista ja ymmärtämistä oikein. assembler-koodin ja vaatii kääntäjien ottavan huomioon. |
Huomautus: MIPS-kokoonpanokielikoodissa haarautumisohjeiden siirtymä voidaan esittää merkinnöillä muualla koodissa.
Huomautus: Ei ole vastaavaa "copy to register" (lataa alempi välitön) -komentoa; tämä voidaan tehdä käyttämällä funktioita addi (lisää välittömästi) tai ori (tai välitöntä) rekisterissä $0. Esimerkiksi molemmat addi $1, $0, 100 ja ori $1, $0, 100 molemmat lataavat rekisterin $1 arvolla 100.
MIPS:ssä on 32 liukulukurekisteriä. Rekisterit on yhdistetty kahdella kaksinkertaisen tarkkuuden laskemista varten. Parittomat rekisterit eivät sovellu aritmetiikkaan tai haaroittamiseen, ne voivat osoittaa vain osittain kaksinkertaisen tarkkuuden rekisteriparissa.
Kategoria | Nimi | Ohjeen syntaksi | Merkitys | Muoto/Koodi/toiminto | Huomautuksia/koodaus | ||
---|---|---|---|---|---|---|---|
Aritmeettinen | FP lisää single | add.s $x,$y,$z | $x = $y + $z | Liukulukun lisäys (yksi tarkkuus) | |||
FP vähennä yksittäinen | sub.s $x,$y,$z | $x = $y - $z | Liukulukuvähennys (yksi tarkkuus) | ||||
FP kerroin yksittäinen | mul.s $x,$y,$z | $x = $y * $z | Liukulukukerto (yksi tarkkuus) | ||||
FP jakaa single | div.s $x,$y,$z | $x = $y / $z | Liukulukujako (yksi tarkkuus) | ||||
FP lisää kaksinkertainen | add.d $x,$y,$z | $x = $y + $z | Liukulukun lisäys (kaksinkertainen tarkkuus) | ||||
FP vähennä kaksinkertainen | ala.d $x,$y,$z | $x = $y - $z | Liukulukuvähennys (kaksinkertainen tarkkuus) | ||||
FP kerrotaan kaksinkertaisesti | mul.d $x,$y,$z | $x = $y * $z | Liukulukukerto (kaksinkertainen tarkkuus) | ||||
FP jakaa kaksinkertainen | div.d $x,$y, $z | $x = $y / $z | Liukulukujako (kaksinkertainen tarkkuus) | ||||
Tiedonsiirto | Lataa sanan apuprosessori | lwcZ $x,CONST($y) | Apuprosessori[Z]. Tietorekisteri[$x] = Muisti[$y + CONST] | minä | Lataa 4 tavua tyyppisanaa kohteesta: MEM[$2+CONST] apuprosessorin tietorekisteriin. Kyltin laajennus. | ||
Tallenna sanan apuprosessori | swcZ $x,CONST($y) | Muisti[$y + CONST] = Apuprosessori[Z]. Tietorekisteri[$x] | minä | Kirjoittaa 4 tavua apuprosessoritietorekisteristä MEM[$2+CONST]. Kyltin laajennus. | |||
aivojumppa | FP vertaa singleä (eq, ne, lt, le, gt, ge) | c.lt.s $f2, $f4 | jos ($f2 < $f4) cond=1; muu kond = 0 | Verrattuna alle liukulukuohjeisiin. yksittäinen tarkkuus. | |||
FP vertaa tuplaa (eq, ne, lt, le, gt, ge) | c.lt.d $f2, $f4 | jos ($f2 < $f4) cond=1; muu kond = 0 | Verrattuna alle liukulukuohjeisiin. Kaksinkertainen tarkkuus. | ||||
haarautuminen | haara FP:ssä totta | bc1t 100 | jos (kond == 1) siirry kohtaan PC+4+100 | jos muoto on FP, suoritetaan haara. | |||
haara FP:ssä false | bc1f 100 | jos (kond == 0) siirry kohtaan PC+4+100 | jos muoto ei ole FP, suoritetaan haara. |
MIPS-kokoonpanokieli hyväksyy nämä ohjeet, mutta ne eivät ole todellisia. Kokoonpanija kääntää ne todellisiksi käskysekvensseiksi.
Nimi | Ohjeen syntaksi | Käännös tavalliseksi ohjeeksi | merkitys |
---|---|---|---|
Lataa osoite | la $1, LabelAddr | lui $1, LabelAddr[31:16]; ori $1,$1, LabelAddr[15:0] | $1 = Osoitemerkintä |
Lataa heti | li$1, HETI[31:0] | lui $1, HETI[31:16]; ori $1, $1, HETI[15:0] | $1 = 32-bittinen suora arvo |
Haara, jos suurempi kuin | bgt $rs,$rt, Label | slt $at,$rt,$rs; bne $at,$zero,Etiketti | if(R[rs]>R[rt]) PC=Label |
Haara jos pienempi kuin | blt $rs,$rt,Etiketti | slt $at,$rs,$rt; bne $at,$zero,Etiketti | if(R[rs]<R[rt]) PC=Label |
Haara, jos suurempi tai yhtä suuri | bge | jne. | if(R[rs]>=R[rt]) PC=Etiketti |
Haara, jos pienempi tai yhtä suuri | ble | if(R[rs]<=R[rt]) PC=Label | |
Haara, jos suurempi kuin allekirjoittamaton | bgtu | if(R[rs]=>R[rt]) PC=Label | |
Haara, jos suurempi kuin nolla | bgtz | if(R[rs]>0) PC=Label | |
Kertoo ja palauttaa vain ensimmäiset 32 bittiä | mul $1, $2, $3 | mult $2, $3; $1 | $1 = $2 * $3 |
Laitteistoarkkitehtuuri määrittelee seuraavat kriteerit:
Nämä ovat ainoat rajoitukset, jotka laitteistoarkkitehtuuri asettaa yleiskäyttöisten rekisterien käytölle.
Erilaiset MIPS-laitteet toteuttavat erityisiä soittokäytäntöjä, jotka rajoittavat rekisterien käyttöä. Ohjelmistopaketti tukee täysin soittokäytäntöjä, mutta laitteisto ei vaadi niitä.
Nimi | Määrä | Sovellus | pitääkö varata? |
---|---|---|---|
nolla dollaria | 0 dollaria | tallentaa aina 0 | Ei käytössä |
$at | $1 | väliaikainen asennuskielen rekisteri | EI |
$v0-$v1 | 2 dollaria - 3 dollaria | funktion ja lausekkeen arvot | EI |
$a0–$a3 | 4-7 dollaria | funktion argumentit | EI |
$t0–$t7 | 8 dollaria - 15 dollaria | tilapäinen | EI |
$s0–$s7 | 16–23 dollaria | tallennetut väliaikaiset arvot | JOO |
$t8–$t9 | 24–25 dollaria | tilapäinen | EI |
$k0–$k1 | 26–27 dollaria | varattu käyttöjärjestelmän ytimelle | EI |
$gp | 28 dollaria | globaali osoitin | JOO |
$sp | 29 dollaria | pinoosoitin | JOO |
$fp | 30 dollaria | kehyksen osoitin | JOO |
$ra | 31 dollaria | palautusosoite | Ei käytössä |
Suojattuja rekistereitä (sopimuksen mukaan) ei voida muuttaa järjestelmä- tai proseduurikutsujen (funktioiden) avulla. Esimerkiksi $s-rekisterit on tallennettava pinoon niitä käyttävän menettelyn mukaisesti; vakioita kasvatetaan $sp- ja $fp-rekistereihin, ja toimenpiteen lopussa rekisterit pienennetään uudelleen. Päinvastainen esimerkki on $ra-rekisteri, joka muuttuu automaattisesti, kun mikä tahansa funktio sitä kutsuu. Ohjelman täytyy tallentaa $t-rekisterit ennen proseduurin kutsumista (jos ohjelma tarvitsee kutsun jälkeen vastaanotettuja tietoja).
Open Virtual Platformsista on saatavilla ei-kaupalliseen käyttöön ilmainen OVP-sim-emulaattori, joka on kirjasto prosessori- ja alustamalleja sekä API-liittymiä, joiden avulla käyttäjä voi suunnitella omia mallejaan. Mallikirjasto on C-kielellä kirjoitettu avoin resurssi, joka sisältää 4K-, 24K- ja 34K MIPS-ytimiä. Nämä mallit on luonut ja ylläpitänyt Imperas, joka on tehnyt yhteistyötä MIPS Technologiesin kanssa testatakseen emulaattoria ja merkitäkseen sen MIPS-Verified. MIPS-pohjaisiin mallialustoihin kuuluu sekä itse laitteisto että alustat muokkaamattomien binaarien Linux-kartoitusten lataamiseen. Nämä emulaattorialustat ovat tehokkaita oppimiseen, ja ne ovat myös saatavilla, ilmaisia ja helppokäyttöisiä. Imperasin kehittämä ja ylläpitämä OVPsim toimii suurella nopeudella (satoja miljoonia käskyjä sekunnissa) ja soveltuu kuvaamaan moniydinarkkitehtuureja.
Siellä on vapaasti saatavilla oleva MIPS32-emulaattori (aikaisemmat versiot saattoivat emuloida vain R2000/R3000:a), joka on julkaistu nimellä SPIM opetuskäyttöön. EduMIPS64 on monialustainen graafinen MIPS64-prosessoriemulaattori, joka on kirjoitettu Java /Swing-kielellä. Se tukee monia MIPS64 ISA:ita ja antaa käyttäjälle mahdollisuuden nähdä visuaalisesti, mitä liukuhihnassa tapahtuu, kun CPU suorittaa kokoonpanokieliohjelmaa. Projektilla on tiukasti opetuksellinen tarkoitus, ja sitä käytetään laajalti joillakin tietokonearkkitehtuurikursseilla ympäri maailmaa.
Toinen MIPS-prosessorien GUI-emulaattori on MARS, joka on myös kehitetty koulutustarkoituksiin, ja se on erityisen tehokas Hennessyn Computer Organization and Design -kirjan yhteydessä .
Kehittyneempiä versioita ilmaisista emulaattoreista ovat Gxemul (tunnetaan aiemmin nimellä mips64emul-projektit) sekä QEMU-projektit. Ne emuloivat eri malleja MIPS III- ja MIPS IV -mikroprosessoreista (täydennyksenä niitä käyttäville tietokonejärjestelmille).
Kaupallisia emulaattorimalleja on saatavana ensisijaisesti MIPS-prosessorien sulautettuun käyttöön, kuten Virtutech Simics (MIPS 4Kc ja 5Kc, PMC RM9000, QED RM7000), VaST Systems (R3000, R4000) ja CoWare (MIPS4KE, MIPS24K, MIPSKMI25Kf ja MIPSKM24Kf).
Mikro-ohjaimet | ||||||||
---|---|---|---|---|---|---|---|---|
Arkkitehtuuri |
| |||||||
Valmistajat |
| |||||||
Komponentit | ||||||||
Periferia | ||||||||
Liitännät | ||||||||
OS | ||||||||
Ohjelmointi |
|
RISC - teknologioihin perustuvat prosessoriarkkitehtuurit | |
---|---|