MIPS | |
---|---|
Dezvoltator | MIPS Technologies Inc. |
Adâncime de biți | 64 (32→64) |
Prezentat | 1985 |
Arhitectură | RISC |
Tip de | registru-registru |
Codare SK | fix |
Implementarea tranziției | comparativ cu două registre |
Ordinea octetilor | Bi-endian (mare → bi) |
Extensii | MDMX, MIPS-3D, MIPS16e, MIPS MT |
Registrele | |
scop general | 31 (R0=0) |
Real | 32 (pentru dublu, perechile de registre sunt utilizate în versiunile pe 32 de biți ale procesorului) |
Fișiere media la Wikimedia Commons |
MIPS (prescurtare pentru numele proiectului corespondent al Universității Stanford . Microprocesor without Interlocked Pipeline Stages [1] ) este un sistem de instrucțiuni și arhitecturi de microprocesor dezvoltat de MIPS Computer Systems (în prezent Wave Computing [2] ) în conformitate cu designul procesorului RISC concept (adică pentru procesoare cu un set de instrucțiuni simplificat). Modelele de procesor timpurii aveau un cuvânt de mașină pe 32 de biți , mai târziu au apărut versiuni pe 64 de biți. Există multe modificări ale procesorului, inclusiv MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS32 și MIPS64, dintre care MIPS32 (pentru implementarea pe 32 de biți) și MIPS64 (pentru implementarea pe 64 de biți) sunt valabile. MIPS32 și MIPS64 definesc atât un set de registre de control, cât și un set de instrucțiuni.
Există mai multe seturi de instrucțiuni: MIPS32, MIPS64, microMIPS și nanoMIPS. În plus, sunt disponibile seturi de instrucțiuni suplimentare și modele de procesoare, de exemplu, MIPS-3D, care include un set de instrucțiuni SIMD pentru procesarea numerelor în virgulă mobilă, concepute pentru a rezolva probleme simple 3D , MDMX (MaDMaX) - cu capacități și mai largi - un set de instrucțiuni SIMD și care utilizează registre în virgulă mobilă de 64 de biți pentru lucrul cu numere întregi, MIPS16e, care comprimă fluxul de instrucțiuni pentru a reduce cantitatea de memorie ocupată de programe și MIPS MT, care oferă un mod de procesare cu mai multe fire.
Arhitectura MIPS este adesea studiată în cadrul programului de curs „Arhitectura computerului” la universități și licee tehnice. Aceste procesoare au influențat în mod semnificativ arhitecturile RISC ulterioare, în special Alpha .
În prezent, diverse implementări ale MIPS sunt utilizate în principal în sisteme încorporate, cum ar fi smartphone -uri , routere , gateway-uri și până în anii 2010 în console de jocuri precum Sony PlayStation 2 și Sony PlayStation Portable . Până la sfârșitul anului 2006, acestea au fost folosite și în calculatoarele SGI . La sfârșitul anilor 1980 și 1990, această arhitectură a fost utilizată pe scară largă de multe companii, printre care Digital Equipment Corporation , NEC , Pyramid Technology, Siemens Nixdorf și Tandem Computers . De la mijlocul până la sfârșitul anilor 1990, unul din trei microprocesoare de pe piață a fost un procesor MIPS.
În 1981, o echipă condusă de John L. Hennessy de la Universitatea Stanford a început să lucreze la un proiect numit MIPS. Ideea principală a fost de a crește performanța procesorului folosind o conductă extinsă . Conceptul de utilizare a conductei ca tehnologie de bază era cunoscut cu mult înainte (de exemplu, în IBM 801 ), dar nu și-a folosit întregul potențial. CPU include mai multe subunități speciale, cum ar fi decodoare de instrucțiuni, ALU întreg (unitate logică aritmetică), unități de încărcare/stocare (manevrare a memoriei), etc. Într-o implementare tradițională neoptimizată, o singură instrucțiune dintr-un program ar trebui să fie (aproape întotdeauna) finalizat înainte de a începe altul; în timp ce într-o arhitectură pipelined, instrucțiunile secvențiale pot fi executate în paralel. De exemplu, atunci când o instrucțiune de matematică este introdusă într-un bloc cu virgulă mobilă, blocul de încărcare/stocare a memoriei poate apela următoarea instrucțiune în același timp.
Unul dintre principalele obstacole în utilizarea pipeline a fost faptul că unele instrucțiuni, cum ar fi divizarea, durează mult mai mult pentru a fi executate și, ca urmare, CPU trebuie să aștepte înainte de a trece următoarea instrucțiune către conductă. Singura soluție la această problemă este să folosiți o serie de blocări pentru a permite anumitor etape ale conductei să arate că sunt ocupate și, în acest caz, să suspende comenzile în amonte în fir. Grupul Hennessy a văzut aceste încuietori ca pe o barieră uriașă de performanță, deoarece era necesar să se acceseze toate modulele CPU, ceea ce necesită timp suplimentar și limitează viteza de ceas. Principalul aspect al designului MIPS a fost acela de a potrivi fiecare subfază a fiecărei instrucțiuni, inclusiv memorarea în cache, într-un singur ciclu, evitând astfel nevoia de blocări și permițând doar un ciclu să treacă la conductă.
În timp ce o astfel de implementare ar elimina unele operațiuni foarte utile, cum ar fi înmulțirea și împărțirea, este clar că performanța generală a sistemului ar fi mult îmbunătățită, deoarece cipurile ar putea rula la viteze de ceas mai mari. Atingerea vitezei mari folosind încuietori ar fi dificilă, deoarece timpul necesar pentru setarea încuietorilor este proporțional cu frecvența ceasului, care, la rândul său, depinde de dimensiunea cristalului. Acesta este motivul pentru care excluderea operațiunilor menționate mai sus a devenit o problemă controversată.
O altă diferență între arhitectura MIPS și arhitecturile concurente din Berkeley este capacitatea Berkeley - RISC de a gestiona apelurile subrutine. Pentru a crește performanța unei astfel de sarcini generale, Berkeley-RISC a folosit o tehnică numită fereastra de registru , care a limitat totuși adâncimea maximă a apelurilor pe mai multe niveluri. Fiecare apel de subrutină necesita propriul set de registre, ceea ce a făcut necesară creșterea numărului acestora. În timp ce implementarea hardware a acestui mecanism a ocupat spațiu suplimentar în cipul CPU. Dar Hennessy credea că un compilator mai „amănunțit” ar putea găsi registre libere pentru a transmite parametrii funcției și că doar creșterea numărului de registre ar putea nu numai să simplifice această sarcină, ci și să crească performanța tuturor operațiunilor. Prin urmare, s-a decis să se abandoneze această tehnologie în MIPS.
Arhitectura MIPS a fost, în unele privințe, cea mai tipică pentru RISC . Pentru a salva biți în codul de instrucțiune, RISC a redus numărul de instrucțiuni de codat. În MIPS, din 32 de biți ai unui cuvânt, doar 6 sunt utilizați pentru codul principal, iar restul poate conține fie o singură adresă de salt de 26 de biți, fie până la 5 câmpuri care setează de la 1 la 3 registre + lungimea deplasării registrului . Există o serie de alte formate, de exemplu, când 2 registre sunt setate direct de un câmp dedicat de 16 biți etc. Această distribuție a permis procesorului să încarce instrucțiunile și datele de care avea nevoie într-un singur ciclu de mașină, în timp ce în arhitecturile mai vechi (care nu erau RISC ), de exemplu, cum ar fi MOS Technology 6502, au necesitat cicluri separate pentru a încărca codul principal și datele.
Aceasta a fost una dintre îmbunătățirile majore ale performanței oferite de RISC. Cu toate acestea, alte arhitecturi au atins viteze similare prin alte mijloace (cum ar fi cozile CPU).
În 1984, convins de cererea comercială pentru designul său, Hennessy a părăsit Stanford și a fondat MIPS Computer Systems. În 1985, a fost lansată prima implementare comercială a microprocesorului MIPS, R2000, finalizată în 1988 și numită R3000. Aceste procesoare pe 32 de biți au constituit baza liniei de produse a companiei în anii 1980 și au fost utilizate în principal în seria de stații de lucru SG. Noile proiecte comerciale nu au fost în concordanță cu cercetările de la Stanford, deoarece aproape toate încuietorii au fost efectuate în hardware, iar operațiunile de multiplicare și împărțire au fost implementate în totalitate.
În 1991, a fost introdus pentru prima dată ca un microprocesor MIPS pe 64 de biți - modelul R4000. R4000 are un TLB extins în care intrarea conține nu numai adresa virtuală, ci și identificatorul spațiului de adrese virtuale. Un astfel de buffer elimină principalele probleme de performanță ale microkernel-ului, care este destul de lent în arhitecturile concurente ( Pentium , PowerPC , Alpha ) din cauza necesității de a spăla TLB în timpul comutărilor frecvente de context.
Cu toate acestea, MIPS a avut dificultăți financiare în a aduce procesoare pe piață. Proiectul a fost atât de important pentru SGI (unul dintre puținii cumpărători majori ai MIPS la acea vreme) încât în 1992 SGI a cumpărat drepturile companiei cu garanția că designul microprocesoarelor nu se va schimba. După ce a devenit o filială, MIPS Computer Systems a fost numită MIPS Technologies.
La începutul anului 1990, MIPS a început să acorde licențe pentru proiectele lor către terți. Ideea a fost norocoasă din cauza simplității kernel-ului, care a găsit multe aplicații în care au fost utilizate anterior arhitecturi CISC mult mai puțin eficiente , cu același număr și același preț de circuite (aceste două criterii sunt strâns legate: prețul unui procesor, de regulă, depinde de numărul de circuite și contacte). Sun Microsystems a făcut o încercare similară de a licenția nuclee SPARC , dar Sun nu a fost atât de norocos. Până la sfârșitul anilor 1990, MIPS devenise cea mai importantă companie de procesoare încorporate, iar în 1997, 48 de milioane de livrări de procesoare bazate pe MIPS au permis arhitecturilor RISC să înlocuiască populara familie de procesoare 68k. MIPS a fost atât de popular încât în 1998 SGI a transferat unele dintre active către MIPS Technologies. Până în prezent, jumătate din veniturile MIPS provin din licențierea de dezvoltare, iar cea mai mare parte din cealaltă jumătate provine din contracte de dezvoltare a nuclee pentru producție de către terți.
În 1999, MIPS și-a oficializat sistemele de licențiere în jurul a două modele principale - MIPS32 pe 32 de biți (bazat pe MIPS II cu unele caracteristici suplimentare ale MIPS III, MIPS IV și MIPS V) și MIPS64 pe 64 de biți (bazat pe MIPS V). MIPS64 a fost licențiat de fiecare dintre NEC , Toshiba și SiByte (achiziționat ulterior de Broadcom) imediat după lansare. Lor li s-au alăturat curând Philips , LSI Logic și IDT. Succesul a urmat succesului, iar astăzi procesoarele MIPS sunt unul dintre cele mai căutate produse de pe piață pentru dispozitivele de tip computer (PDA-uri, set-top box-uri etc.), alături de alți dezvoltatori care încearcă în zadar să le înlocuiască.
La câțiva ani după ce arhitectura MIPS a primit licență, a început să atragă tot mai multe noi companii de dezvoltare de procesoare. Prima astfel de companie a fost Quantum Effect Devices (vezi secțiunea următoare). Echipa de dezvoltare care a asamblat MIPS R4300i a fondat SandCraft, care a furnizat NEC noul procesor R5432 și, puțin mai târziu, a modelat R71000, unul dintre primele procesoare personalizate pentru piața embedded. Echipa fondatoare de la DEC StrongARM s-a împărțit în cele din urmă în două noi companii de procesoare bazate pe MIPS: SiByte, care a făcut din SB-1250, unul dintre primele sisteme de cip de înaltă performanță bazate pe MIPS ( SOC ) și Alchemy Semiconductor (achiziționat ulterior de AMD) , care a produs SOC-ul Au-1000 pentru aplicații cu putere redusă. Lexra a folosit o arhitectură asemănătoare MIPS, adăugând DSP pentru piața chipurilor audio și suport pentru multi-streaming pentru piața de rețea. Deoarece Lexra nu a cumpărat o licență pentru MIPS, în curând au izbucnit procese între cele două companii. Primul a fost răscumpărat rapid după ce Lexra a promis să nu-și promoveze procesoarele ca fiind similare cu MIPS. Al doilea proces (despre brevetul MIPS 4814976 pentru procesarea instrucțiunii de acces la memorie nealiniată) a fost mai prelungit și a afectat negativ afacerile ambelor companii, iar la finalizarea acestuia, MIPS Technologies a eliberat o licență gratuită către Lexra și a plătit o compensație monetară mare.
În urma acestor evoluții, două companii au intrat pe piață specializate în crearea de dispozitive multi-core folosind arhitectura MIPS. Raza Microelectronics Corporation a cumpărat linia de producție de la SandCraft, mai puțin de succes, apoi a început să producă dispozitive cu opt nuclee pentru piața de telecomunicații și rețele. Cavium Networks, inițial un furnizor de protecție pentru procesoare, a început, de asemenea, să producă arhitecturi cu opt și mai târziu cu 32 de nuclee pentru aceleași piețe. Ambele companii au proiectat ele însele nucleele și au licențiat doar modelele în loc să cumpere modele de procesoare MIPS gata făcute.
Producătorii care au construit stații de lucru folosind microprocesoare MIPS includ SGI , MIPS Computer Systems, Inc., Whitechapel Workstations, Olivetti, Siemens-Nixdorf, Acer, Digital Equipment Corporation , NEC și DeskStation. Sistemele de operare portate la arhitectura MIPS includ IRIX de la SGI , Windows NT de la Microsoft (până la versiunea 4.0) , Windows CE , Linux , UNIX ( Sistem V și BSD ), SINIX, QNX și propriul sistem RISC OSde operare
Au existat speculații la începutul anilor 1990 că MIPS, împreună cu alte procesoare puternice RISC, ar depăși în curând arhitectura Intel IA32 . Acest lucru a fost facilitat de suportul pentru primele două versiuni de Windows NT pentru Alpha , MIPS și PowerPC de la Microsoft și, într-o măsură mai mică, arhitecturile Clipper și SPARC. Cu toate acestea, de îndată ce Intel a lansat cele mai recente versiuni ale familiei de procesoare Pentium , Microsoft Windows NT v4.0 a încetat să accepte toate, cu excepția Alpha și Intel. După decizia SGI de a trece la arhitecturile Itanium și IA32, procesoarele MIPS au încetat aproape complet să fie folosite în computerele personale.
În anii 1990, arhitectura MIPS a fost adoptată pe scară largă pe piața încorporată : pentru rețele, telecomunicații, jocuri video, console de jocuri, imprimante, set-top box-uri digitale, televizoare digitale, modemuri xDSL și cablu și PDA-uri.
Consumul redus de energie și caracteristicile de temperatură ale arhitecturilor MIPS încorporate și gama largă de funcții interne fac acest microprocesor universal pentru multe dispozitive.
În ultimii ani, majoritatea tehnologiilor utilizate în diverse generații de MIPS au fost propuse ca nuclee IP (blocuri de construcție) pentru implementări de procesoare încorporate. Mai mult, sunt propuse ambele tipuri de nuclee - bazate pe 32 și 64 de biți, cunoscute sub denumirea de 4K și 6K. Astfel de nuclee pot fi combinate cu alte blocuri de construcție, cum ar fi FPU -uri, sisteme SIMD , diferite dispozitive I/O etc.
Nuclele MIPS de succes comercial, cândva, au găsit acum aplicații industriale și de consum. Aceste nuclee pot fi găsite în noile routere Cisco , Linksys , ZyXEL și MikroTik , modemuri prin cablu și ADSL , carduri inteligente , mecanisme de imprimantă laser, set-top box-uri digitale, roboți, PDA-uri, Sony PlayStation 2 și Sony PlayStation Portable. Cu toate acestea, în aplicațiile pentru telefoane mobile și PDA, MIPS nu a reușit să elimine arhitectura ARM concurentă care a fost ferm stabilită acolo .
Procesoarele bazate pe MIPS includ: IDT RC32438; ATI Hilleon; Alchimie Au1000, 1100, 1200 ; Broadcom Sentry5; RMI XLR7xx, Cavium Octeon CN30xx, CN31xx, CN36xx, CN38xx și CN5xxx; Infineon Technologies EasyPort, Amazon, Danube, ADM5120, WildPass, INCA-IP, INCA-IP2; Tehnologia Microcipului PIC32 ; NEC EMMA și 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 ; Multicore .
Una dintre cele mai interesante aplicații ale arhitecturii MIPS este utilizarea lor în supercalculatoarele de calcul multiprocesor. La începutul anilor 1990, Silicon Graphics ( SGI ) și-a reorientat afacerea departe de terminalele grafice și pe piața de calcul de înaltă performanță. Succesul primelor incursiuni ale companiei în sistemele server (și anume seria Challenge bazată pe R4400, R8000 și R10000) a motivat SGI să creeze un sistem mult mai puternic. Utilizarea R10000 a permis companiei să proiecteze sistemul Origin 2000, care poate fi extins în cele din urmă la 1024 de procesoare folosind propria interconexiune cc-NUMA (NUMAlink). Mai târziu, Origin 2000 a dat naștere unui nou sistem - Origin 3000, care a apărut cu aceleași maxim 1024 de procesoare, dar a folosit cipuri R14000 și R16000 în dezvoltare cu o frecvență de până la 700 MHz. Cu toate acestea, în 2005, când SGI a luat decizia strategică de a trece la arhitectura Intel IA-64, supercalculatoarele bazate pe MIPS au fost întrerupte.
În 2007, SiCortex Corporation a introdus un nou supercomputer personal multiprocesor bazat pe arhitectura MIPS. Dezvoltarea sa s-a bazat pe MIPS64 și interconectarea de înaltă performanță folosind topologia grafului Kautz . Acest sistem este extrem de eficient și puternic din punct de vedere computațional. Aspectul său unic este un nod de procesare multi-core care integrează șase nuclee MIPS64, un comutator de controler de memorie, comunicație intersistem DMA, o rețea LAN de 1 Gb și controlere PCI Express . Și toate acestea pe un singur cip care consumă 10 wați de putere, dar realizează maximum 6 miliarde de operații în virgulă mobilă pe secundă. Cea mai puternică configurație a unui astfel de supercomputer este versiunea SC5832, care constă din 972 de noduri (un total de 5832 de nuclee MIPS64) și efectuează 8,2 trilioane de operațiuni în virgulă mobilă pe secundă.
Loongson , în speranța de a ocoli brevetul MIPS, și-a lansat arhitectura, care era complet similară cu dezvoltarea tehnologiilor MIPS și era susținută de Linux . Deoarece producția de procesoare Loongson a fost mai ieftină, MIPS a reușit să revină pe piața computerelor personale în fața lui Loongson. (Mai târziu Loongson a cumpărat o licență pentru MIPS - vezi articolul principal)
Procesoarele bazate pe MIPS sunt folosite și în netbook-urile de la iUnika, Bestlink, Lemote și Golden Delicious Computers.
MIPS IV - a patra generație a arhitecturii, este o versiune extinsă a MIPS III și este compatibilă cu toate modelele MIPS existente. Prima implementare a MIPS IV a fost introdusă în 1994 sub numele R8000 . MIPS IV a inclus:
MIPS V, a cincea versiune a arhitecturii, a fost introdusă pe 21 octombrie 1996 la Forumul Microprocesorului din 1996 . Acest model a fost conceput pentru a îmbunătăți performanța aplicațiilor de grafică 3D . La mijlocul anilor 1990, majoritatea microprocesoarelor MIPS neîncorporate erau terminale grafice de la SGI . Dezvoltarea MIPS V a fost completată de extensii multimedia întregi MDMX (MIPS Digital Media Extensions), care au fost introduse în aceeași zi cu MIPS V.
Implementările MIPS V nu au fost niciodată implementate. În 1997, SGI a introdus microprocesoare numite „H1” („Beast”) și „H2” („Capitan”), care urmau să fie produse în 1999. Dar au fost fuzionate curând și, în cele din urmă, în 1998, aceste proiecte au fost anulate.
MIPS V a adăugat un nou tip de date, PS (pereche simplă), care sunt două numere cu virgulă mobilă cu precizie dublă (32 de biți) stocate într-un registru cu virgulă mobilă de 64 de biți. Pentru a lucra cu acest tip de date în modul SIMD , au fost adăugate diverse variante de aritmetică, operații comparative pe numere în virgulă mobilă, precum și o instrucțiune de salt condiționat. Există instrucțiuni noi pentru încărcarea, reconfigurarea și convertirea datelor PS. Este prima arhitectură care poate implementa procesarea în virgulă mobilă în modul SIMD cu resursele disponibile.
Primul microprocesor comercial MIPS a fost R2000, introdus în 1985. A implementat operațiile de înmulțire și împărțire, care au fost efectuate în mai multe cicluri. Dispozitivul de multiplicare și împărțire nu era strâns integrat în nucleul procesorului, deși era amplasat pe același cip; din acest motiv, sistemul de instrucțiuni a fost extins cu instrucțiuni de încărcare a rezultatelor înmulțirii și împărțirii în registre de uz general, aceste instrucțiuni blocau conducta.
Microprocesorul R2000 putea fi încărcat atât în modul big-endian, cât și în modul little-endian, conținea 32 de registre de uz general pe 32 de biți. La fel ca procesoarele AMD 29000 și Alpha , microprocesorul R2000 nu avea un registru separat de semnalizare a stării, deoarece dezvoltatorii l-au considerat un potențial blocaj. Contorul de programe nu este direct accesibil.
Microprocesorul R2000 a suportat conectarea a până la patru coprocesoare, dintre care unul este încorporat și oferă gestionarea excepțiilor, precum și managementul memoriei (MMU). Dacă este necesar, cipul R2010, un coprocesor aritmetic, putea fi conectat ca un alt coprocesor, care conținea treizeci și două de registre de 32 de biți care puteau fi utilizate ca șaisprezece registre de precizie dublă de 64 de biți. Următorul din familie a fost R3000 , care a apărut în 1988. Conținea un cache de date de 64 KB (R2000 - 32 KB). În plus, R3000 a oferit coerență în cache atunci când rulează în configurații multiprocesor. În ciuda faptului că suportul pentru multiprocesor R3000 are o serie de deficiențe, pe baza R3000 au fost create mai multe sisteme multiprocesoare funcționale. În ceea ce privește R2000, pentru R3000 a fost creat un coprocesor aritmetic sub forma unui VLSI separat: R3010. Microprocesorul R3000 a fost primul procesor MIPS de succes comercial, cu peste un milion de procesoare fabricate. O versiune accelerată a R3000 care rulează la 40 MHz, numită R3000A, a realizat 32 VUP-uri (VAX Unit of Performance). O dezvoltare ulterioară a R3000A, microprocesorul R3051 care operează la 33,8688 MHz a fost folosit în consola de jocuri Sony PlayStation. Alți producători au introdus și procesoare compatibile cu R3000A: Performance Semiconductor a dezvoltat R3400, în timp ce IDT a creat R3500, ambele având un coprocesor matematic R3010 integrat. R3900 de la Toshiba a fost primul system-on-a-chip care a folosit arhitectura MIPS; acest cip a fost folosit într-un laptop care rulează Windows CE. O variantă tolerantă la radiații a R3000 cu un R3010 integrat pentru aplicații de nave spațiale a fost dezvoltată și numită Mongoose-V .
Seria R4000, lansată în 1991, a extins procesoarele MIPS la 64 de biți. (MIPS Technology a fost prima companie care a lansat procesoare cu arhitectură pe 64 de biți) R4000 este format din 1,3 milioane de tranzistori, are încorporat un cache de date și un cache de instrucțiuni (ambele de 8 KB fiecare). În acest procesor, ceasul extern de 50 MHz este dublat, iar ceasul intern este de 100 MHz. Procesorul R4400 se bazează pe R4000, este format din 2,2 milioane de tranzistori, are încorporat un cache de date și un cache de instrucțiuni (ambele de 16 KB fiecare) și o frecvență internă de ceas de 150 MHz. Setul de instrucțiuni al acestor procesoare (specificația MIPS II) a fost extins cu instrucțiuni de încărcare și scriere în virgulă mobilă pe 64 de biți, instrucțiuni de rădăcină pătrată cu precizie simplă și dublă, instrucțiuni de întrerupere condiționată și operații atomice necesare pentru a suporta configurațiile multiprocesor. Procesoarele R4000 și R4400 au magistrale de date pe 64 de biți și registre pe 64 de biți.
MIPS, acum o divizie a SGI numită MTI, a dezvoltat procesoarele low-cost R4200 care au servit drept bază pentru viitorul (chiar mai ieftin) R4300i. Un derivat al acestui procesor, NEC VR4300, a fost folosit în consolele de jocuri Nintendo 64.
Quantum Effect Devices (QED), o companie independentă fondată de dezvoltatorii MIPS, a dezvoltat seria de procesoare R4600 Orion, R4700 Orion, R4650 și R5000. Dacă R4000 a crescut viteza de ceas, dar a sacrificat cantitatea de memorie cache, atunci QED a acordat o mare atenție capacității memoriei cache (care poate fi accesată în doar 2 cicluri) și utilizării eficiente a suprafeței de cristal. Procesoarele R4600 și R4700 au fost folosite în versiunile low-cost ale stației de lucru SGI Indy, precum și în routerele Cisco timpurii (bazate pe MIPS), cum ar fi seriile 36x0 și 7x00. Microprocesorul R4650 a fost folosit în set-top box-urile WebTV (în prezent Microsoft TV). În FPU-ul R5000, programarea în virgulă mobilă (precizie unică) a fost mai flexibilă decât în R4000 și, ca urmare, stațiile de lucru SGI Indys bazate pe R5000 au avut performanțe grafice mai bune decât un R4400 cu aceeași viteză de ceas și hardware grafic. Pentru a sublinia îmbunătățirea după combinarea R5000 și vechea placă grafică, SGI i-a dat un nou nume. Puțin mai târziu, QED a dezvoltat familia de procesoare RM7000 și RM9000 pentru piața de rețea și imprimante laser. În august 2000, QED a fost achiziționat de producătorul de semiconductori PMC-Sierra, iar acesta din urmă a continuat să investească în arhitecturi MIPS. Procesorul RM7000 a inclus 256 KB de cache L2 pe cip și un controler pentru cache L3 suplimentar. Au fost create procesoare RM9xx0 - o familie de dispozitive SOC care includ astfel de componente periferice (pe podul de nord) cum ar fi: un controler de memorie, un controler PCI, un controler Ethernet, precum și dispozitive I/O rapide (de exemplu, un autobuz de performanță, cum ar fi HyperTransport).
R8000 (introdus în 1994) a fost prima arhitectură superscală MIPS capabilă de 2 instrucțiuni întregi (sau virgulă mobilă) și 2 instrucțiuni de acces la memorie pe ciclu. Acest design a folosit 6 scheme: un dispozitiv pentru instrucțiuni întregi (16 KB pentru instrucțiuni și 16 KB pentru cache de date), pentru instrucțiuni în virgulă mobilă, trei descriptori secundari RAM cache (doi pentru acces secundar cache + unul pentru urmărirea magistralei), precum și un controler cache ASIC. Arhitectura are două unități de multiplicare-adăugare (dublă precizie) care pot transmite date în cache secundară off-chip de 4MB. La mijlocul anilor 1990, procesoarele R8000 au lansat serverele POWER Challenge SGI și au devenit ulterior disponibile pe stațiile de lucru POWER Indigo2. Deși performanța acestui FPU a fost cea mai potrivită pentru lucrătorii de cercetare, performanța sa limitată în număr întreg și prețul ridicat nu au reușit să atragă majoritatea utilizatorilor, așa că R8000 a fost pe piață doar un an și chiar și acum cu greu poate fi găsit.
În 1995, R10000 [3] a fost lansat . Acest procesor a fost oferit într-un design cu un singur cip, a funcționat la o viteză de ceas mai mare decât R8000 și a inclus, de asemenea, un cache mare de date primare și instrucțiuni (32 KB). Era și suprascalar, dar această inovație majoră era defectuoasă. Dar chiar și cu un FPU mai simplu, performanța întregi semnificativ îmbunătățită, prețul mai mic și densitatea de stocare mai mare au făcut ca R10000 să fie alegerea preferată pentru majoritatea utilizatorilor.
Toate modelele ulterioare s-au bazat pe nucleul R10000 . R12000 a folosit un proces de fabricație de 0,25 microni pentru a face cipul mai mic și a atinge viteze de ceas mai mari. R14000 revizuit avea o viteză de ceas mai mare în plus față de suportul DDR SRAM pentru cache off-chip. În continuare au fost lansate R16000 și R16000A, a căror frecvență de ceas a fost de asemenea crescută; aveau cache L1 suplimentară încorporată în ele, iar producția lor necesita matrițe mai mici decât înainte.
Alți membri ai familiei MIPS includ R6000, o implementare ESL de către Bipolar Integrated Technology. R6000 aparține generației de procesoare MIPS II. TLB și dispozitivul său cache sunt semnificativ diferite de alți membri ai acestei familii. R6000 nu a oferit beneficiile promise și, deși s-a dovedit a fi oarecum util pentru computerele Control Data, a dispărut rapid de pe piața mainstream.
Model | Frecvență (MHz) | An | Tehnologia de dezvoltare (µm) | Tranzistoare (milioane) | Dimensiunea cristalului (mm²) | Numărul de pini | Putere, W) | Tensiune (V) | Cache de date (KB) | Cache de instrucțiuni (KB) | Cache de nivel 2 | Cache de nivel 3 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
R2000 | 8-16,67 | 1985 | 2.0 | 0,11 | ? | ? | ? | ? | 32 | 64 | NU | NU |
R3000 | 12-40 | 1988 | 1.2 | 0,11 | 66.12 | 145 | patru | ? | 64 | 64 | 0-256 KB Extern | NU |
R4000 | 100 | 1991 | 0,8 | 1.35 | 213 | 179 | cincisprezece | 5 | opt | opt | 1 MB extern | NU |
R4400 | 100-250 | 1992 | 0,6 | 2.3 | 186 | 179 | cincisprezece | 5 | 16 | 16 | 1-4 MB extern | NU |
R4600 | 100-133 | 1994 | 0,64 | 2.2 | 77 | 179 | 4.6 | 5 | 16 | 16 | 512 KB Extern | NU |
R4700 | 133 | 1996 | ? | ? | ? | 179 | ? | ? | 16 | 16 | Extern | NU |
R5000 | 150-200 | 1996 | 0,35 | 3.7 | 84 | 223 | zece | 3.3 | 32 | 32 | 1 MB extern | NU |
R8000 | 75-90 | 1994 | 0,7 | 2.6 | 299 | 591+591 | treizeci | 3.3 | 16 | 16 | 4 MB extern | NU |
R10000 | 150-250 | 1996 | 0,35, 0,25 | 6.7 | 299 | 599 | treizeci | 3.3 | 32 | 32 | 512 KB—16 MB extern | NU |
R12000 | 270-400 | 1998 | 0,25, 0,18 | 6.9 | 204 | 600 | douăzeci | patru | 32 | 32 | 512 KB—16 MB extern | NU |
7000 RM | 250-600 | 1998 | 0,25, 0,18, 0,13 | optsprezece | 91 | 304 | 10, 6, 3 | 3.3, 2.5, 1.5 | 16 | 16 | 256 KB Intern | 1 MB extern |
R14000 | 500-600 | 2001 | 0,13 | 7.2 | 204 | 527 | 17 | ? | 32 | 32 | 512 KB—16 MB extern | NU |
R16000 | 700-1000 | 2002 | 0,11 | ? | ? | ? | douăzeci | ? | 64 | 64 | 512 KB—16 MB extern | NU |
R24K | 750+ | 2003 | 65 nm | ? | 0,83 | ? | ? | ? | 64 | 64 | 4-16 MB extern | NU |
Instrucțiunile sunt împărțite în trei tipuri: R, I și J. Fiecare instrucțiune începe cu un cod de 6 biți. În plus față de cod, instrucțiunile de tip R definesc trei registre, o zonă de dimensiune a deplasării registrului și o zonă de funcție; Instructiunile de tip I definesc doua registre si o valoare imediata; Instrucțiunile de tip J constau dintr-un cod operațional și o adresă de ramură pe 26 de biți.
Următorul este un tabel cu utilizarea celor trei formate de instrucțiuni în arhitectura kernelului:
Tip de | −31− format (în biți) −0− | |||||
---|---|---|---|---|---|---|
R | cod (6) | rs(5) | rt(5) | rd(5) | fals (5) | functie (6) |
eu | cod (6) | rs(5) | rt(5) | direct (16) | ||
J | cod (6) | adresa (26) |
Aceste instrucțiuni de limbaj de asamblare au o implementare hardware directă, spre deosebire de pseudo-instrucțiuni, care sunt traduse în instrucțiuni compuse reale înainte de asamblare.
MIPS are 32 de registre pentru operații cu numere întregi. Pentru a efectua calcule aritmetice, datele trebuie să fie în registre. Register $0 stochează întotdeauna 0, iar register $1 este rezervat pentru asamblare (pentru a păstra pseudo-instrucțiuni și constante mari). Tabelul de mai jos arată ce biți corespund căror părți ale instrucțiunii. O cratimă (-) indică o stare neutră.
Categorie | Nume | Sintaxa instrucțiunii | Sens | Format/Cod/Funcție | Note/Codificare | ||
---|---|---|---|---|---|---|---|
Aritmetic | Adăuga | adăugați $d,$s,$t | $d = $s + $t | R | 0 | 20 16 | Adaugă două registre, întrerupe la depășire 000000ss sssttttt ddddd --- --100000 |
Adăugați nesemnat | adăugați $d,$s,$t | $d = $s + $t | R | 0 | 21 16 | Ca mai sus, dar ignoră debordarea 000000ss sssttttt ddddd --- --100001 | |
Scădea | sub $d,$s,$t | $d = $s − $t | R | 0 | 22 16 | Scade două registre, efectuează o întrerupere de overflow 000000ss sssttttt ddddd --- --100010 | |
scade fara semn | subu $d,$s,$t | $d = $s − $t | R | 0 | 23 16 | Ca mai sus, dar ignoră debordarea 000000ss sssttttt ddddd000 00100011 | |
Adăugați imediat | adăugați $t,$s,C | $t = $s + C (semnat) | eu | 8 16 | - | Folosit pentru a adăuga constante semnate (și pentru a copia un registru în altul: addi $1, $2, 0), efectuează o întrerupere de overflow 001000ss sssttttt CCCCCCCC CCCCCCCC | |
Adăugați imediat nesemnat | adiu $t,$s,C | $t = $s + C (semnat) | eu | 9 16 | - | ca mai sus, dar ignoră overflow, C rămâne semnat 001001ss sssttttt CCCCCCCC CCCCCCCC | |
Multiplica | mult $s,$t | LO = (($s * $t) << 32) >> 32; HI = ($s * $t) >> 32; |
R | 0 | 18 16 | Înmulțește două registre și scrie rezultatul pe 64 de biți în două câmpuri speciale de memorie, LO și HI. În mod similar, puteți scrie rezultatul operației sub forma: (int HI,int LO) = (64-bit) $s * $t. Consultați mfhi și mflo pentru acces la registrele LO și HI. | |
Divide | div $s, $t | LO = $s / $t HI = $s % $t | R | 0 | 1A16 _ | Împarte un registru cu altul și scrie rezultatul pe 32 de biți în LO și restul în HI [4] . | |
Împărțiți nesemnat | divu $s, $t | LO = $s / $t HI = $s % $t | R | 0 | 1B 16 | Împarte un registru cu altul și scrie rezultatul pe 32 de biți în LO și restul în HI. | |
Transfer de date | Încărcați cuvânt dublu | ld$t,C($s) | $t = Memorie[$s + C] | eu | 23 16 | - | încarcă un cuvânt dublu din: MEM[$s+C] și următorii 7 octeți în $t și următorul registru. |
încărcare cuvânt | lw $t,C($s) | $t = Memorie[$s + C] | eu | 23 16 | - | încarcă cuvântul din: MEM[$s+C] și următorii 3 octeți. | |
Încărcați jumătate de cuvânt | h $t,C($s) | $t = Memorie[$s + C] (semnat) | eu | 21 16 | - | încarcă jumătate de cuvânt din: MEM[$s+C] și octetul următor. Semnul este extins pe lățimea carcasei. | |
Încărcați jumătate de cuvânt nesemnat | lhu $t,C($s) | $t = Memorie[$s + C] (nesemnat) | eu | 25 16 | - | Ca mai sus, dar fără extensie de semn. | |
încărcare octet | lb $t,C($s) | $t = Memorie[$s + C] (semnat) | eu | 20 16 | - | încarcă octetul din: MEM[$s+C]. | |
Încărcare octet nesemnat | lbu $t,C($s) | $t = Memorie[$s + C] (nesemnat) | eu | 24 16 | - | Ca mai sus, dar fără extensie de semn. | |
păstrează cuvânt dublu | sd $t,C($s) | Memorie[$s + C] = $t | eu | - | stochează două tipuri de cuvinte din $t și următorul registru în: MEM[$s+C] și următorii 7 octeți. Ordinea operanzilor poate fi confuză. | ||
depozit cuvânt | sw $t,C($s) | Memorie[$s + C] = $t | eu | 2B16 _ | - | stochează cuvântul în: MEM[$s+C] și următorii 3 octeți. Ordinea operanzilor poate fi confuză. | |
Păstrați jumătate | sh $t,C($s) | Memorie[$s + C] = $t | eu | 29 16 | - | salvează prima jumătate a registrului (jumătate de cuvânt) în: MEM[$s+C] și următorul octet. | |
Stocare octet | sb $t,C($s) | Memorie[$s + C] = $t | eu | 28 16 | - | salvează primul sfert de registru (octet) în: MEM[$s+C]. | |
Încărcare superioară imediată | lui $t,C | $t = C << 16 | eu | F 16 | - | Încarcă un operand de 16 biți în cei 16 biți superiori ai registrului specificat. Valoarea maximă a constantei 2 16 −1 | |
Mutați de sus | mfhi$d | $d = HI | R | 0 | 10 16 | Plasează valoarea de la HI într-un registru. Nu utilizați instrucțiunile de înmulțire și împărțire din interiorul instrucțiunii mfhi (această acțiune nu este definită din cauza conductei MIPS). | |
Mutați de jos | mflo $d | $d = LO | R | 0 | 12 16 | Plasează valoarea din LO într-un registru. Nu utilizați instrucțiuni de înmulțire și împărțire în interiorul unei instrucțiuni mflo (această acțiune nu este definită din cauza conductei MIPS). | |
Mutați din Registrul de control | mfcZ $t, $s | $t = Coprocesor[Z].ControlRegister[$s] | R | 0 | Mută o valoare de 4 octeți de la coprocesorul registrului de control Z într-un registru de uz general. Extensie de semnătură. | ||
Treceți la Registrul de control | mtcZ $t, $s | Coprocesor[Z].ControlRegister[$s] = $t | R | 0 | Mută o valoare de 4 octeți din registrul de uz general în coprocesorul registrului de control Z. Extensie de semnătură. | ||
logic | Și | și $d,$s,$t | $d = $s & $t | R | 0 | 24 16 | conjuncție pe biți 000000ss sssttttt ddddd --- --100100 |
Și imediat | și $t,$s,C | $t = $s & C | eu | C 16 | - | 001100ss sssttttt CCCCCCCC CCCCCCCC | |
Sau | sau $d,$s,$t | $d = $s | $t | R | 0 | 25 16 | Disjuncție pe biți | |
Sau imediat | ori $t,$s,C | $t = $s | C | eu | D16 _ | - | ||
Exclusiv sau | xor $d,$s,$t | $d = $s ^ $t | R | 0 | 26 16 | ||
Nici | nici $d,$s,$t | $d = ~ ($s | $t) | R | 0 | 27 16 | Pe bit nici | |
Setați pe mai puțin de | slt $d,$s,$t | $d = ($s < $t) | R | 0 | 2A 16 | Verifică dacă un registru este mai mic decât altul. | |
Setați pe mai puțin decât imediat | slti $t,$s,C | $t = ($s < C) | eu | A 16 | - | Verifică dacă un registru este mai mic decât o constantă. | |
deplasare de biți | Schimbați la stânga logic | sll $t,$s,C | $t = $s << C | R | 0 | 0 | deplasează biții C la stânga (se înmulțește cu puteri de doi ) |
Schimbați la dreapta logic | srl $t,$s,C | $t = $s >> C | R | 0 | 2 16 | deplasează biții C la dreapta (împarte la puterile a doi ). Rețineți că această instrucțiune funcționează ca diviziunea complementului a doi numai dacă valoarea este pozitivă. | |
Schimbați aritmetica la dreapta | sra $t,$s,C | R | 0 | 3 16 | deplasează biții C - (împarte în codul binar de complement a doi) | ||
Ramificarea condiționată | Ramura la egal | beq $s,$t,C | dacă ($s == $t) mergeți la PC+4+4 °C | eu | 4 16 | - | Trece la instrucțiunea la adresa specificată dacă cele două registre sunt egale. 000100ss sssttttt CCCCCCCC CCCCCCCC |
Ramura pe nu este egal | bne $s,$t,C | dacă ($s != $t) mergi la PC+4+4 °C | eu | 5 16 | - | Trece la instrucțiunea la adresa specificată dacă cele două registre nu sunt egale. | |
Salt necondiționat | A sari | j C | PC = PC+4[31:28] . C*4 | J | 2 16 | - | Efectuează un salt necondiționat la instrucțiunea la adresa specificată. |
registru de sarituri | jr$s | du-te la adresa $s | R | 0 | 8 16 | Salt la adresa conținută în registrul specificat. | |
sari și leagă | jal C | 31 USD = PC + 8; PC = PC+4[31:28] . C*4 | J | 3 16 | - | Ca o procedură - folosită pentru a apela o subrutină, înregistrați $31 primește și returnează o adresă; revenirea din subrutină face jr $31. Adresa de retur va fi PC + 8, nu PC + 4, din cauza utilizării slotului de întârziere (slot de întârziere): orice instrucțiune de ramificare în arhitectură (înainte de introducerea noilor instrucțiuni MIPS32 / MIPS64 în 2014) este întotdeauna precedată de execuția instrucțiunii care o urmează și abia apoi tranziția efectivă. Acest lucru a făcut posibilă încărcarea conductei mai uniform - în timp ce instrucțiunea de tranziție a preluat instrucțiunea la adresa de tranziție, procesorul nu a stat inactiv, ci a executat instrucțiunea în urma acesteia, ceea ce, totuși, implică dificultatea de a citi și înțelege corect codul de asamblare și necesită compilatori să ia în considerare. |
Notă: În codul limbajului de asamblare MIPS, decalajul pentru instrucțiunile de ramificare poate fi reprezentat prin marcaje în altă parte a codului.
Notă: Nu există nicio comandă corespunzătoare „copy to register” (încărcare mai jos imediată); acest lucru se poate face folosind funcțiile addi (adăugați imediat) sau ori (sau imediat) cu registrul $0. De exemplu, ambele adaugă $1, $0, 100 și ori $1, $0, 100 ambele încarcă registrul $1 cu valoarea 100.
MIPS are 32 de registre în virgulă mobilă. Registrele sunt conectate prin 2 pentru calcule cu precizie dublă. Registrele impare nu pot fi folosite pentru aritmetică sau ramificare, ele pot indica doar parțial precizia dublă într-o pereche de registre.
Categorie | Nume | Sintaxa instrucțiunii | Sens | Format/Cod/Funcție | Note/Codificare | ||
---|---|---|---|---|---|---|---|
Aritmetic | FP adaugă single | adaugă.s $x,$y,$z | $x = $y + $z | Adăugarea virgulă mobilă (precizie unică) | |||
FP scade singur | sub.s $x,$y,$z | $x = $y - $z | Scădere în virgulă mobilă (precizie unică) | ||||
FP multiplica singur | mul.s $x,$y,$z | $x = $y * $z | Înmulțire în virgulă mobilă (precizie unică) | ||||
FP divide singur | div.s $x,$y,$z | $x = $y / $z | Diviziune în virgulă mobilă (precizie unică) | ||||
FP adauga dublu | adaugă.d $x,$y,$z | $x = $y + $z | Adăugarea virgulă mobilă (dublă precizie) | ||||
FP scade dublu | sub.d $x,$y,$z | $x = $y - $z | Scădere în virgulă mobilă (dublă precizie) | ||||
FP multiplica dublu | mul.d $x,$y,$z | $x = $y * $z | Înmulțire în virgulă mobilă (dublă precizie) | ||||
FP divide dublu | div.d $x,$y,$z | $x = $y / $z | Diviziune în virgulă mobilă (dublă precizie) | ||||
Transfer de date | Încărcați coprocesorul de cuvinte | lwcZ $x,CONST($y) | Coprocesor[Z].DataRegister[$x] = Memorie[$y + CONST] | eu | Încarcă 4 octeți de tip cuvânt din: MEM[$2+CONST] în registrul de date al coprocesorului. Extensie de semnătură. | ||
Stocați coprocesor de cuvinte | swcZ $x,CONST($y) | Memorie[$y + CONST] = Coprocesor[Z].DataRegister[$x] | eu | Scrie 4 octeți din registrul de date al coprocesorului în MEM[$2+CONST]. Extensie de semnătură. | |||
joc de inteligență | FP compara unică (eq, ne, lt, le, gt, ge) | c.lt.s $f2,$f4 | dacă ($f2 < $f4) cond=1; altfel cond=0 | În comparație cu instrucțiunile mai puțin decât în virgulă mobilă. precizie unică. | |||
FP compara dublu (eq, ne, lt, le, gt, ge) | c.lt.d $f2,$f4 | dacă ($f2 < $f4) cond=1; altfel cond=0 | În comparație cu instrucțiunile mai puțin decât în virgulă mobilă. Precizie dubla. | ||||
ramificare | ramură pe FP adevărat | bc1t 100 | dacă (cond == 1) mergi la PC+4+100 | dacă formatul este FP, se efectuează o ramură. | |||
ramura pe FP fals | bc1f 100 | dacă (cond == 0) mergi la PC+4+100 | daca formatul nu este FP se face o ramura. |
Aceste instrucțiuni sunt acceptate de limbajul de asamblare MIPS, dar nu sunt reale. Asamblatorul le traduce în secvențe de instrucțiuni reale.
Nume | Sintaxa instrucțiunii | Traducere la o instrucțiune obișnuită | sens |
---|---|---|---|
Încărcați adresa | la $1, LabelAddr | lui $1, LabelAddr[31:16]; ori $1, $1, LabelAddr[15:0] | $1 = marcarea adresei |
Încărcare imediată | li$1, IMMED[31:0] | lui $1, IMMED[31:16]; ori $1, $1, IMMED[15:0] | $1 = valoare directă pe 32 de biți |
Ramura dacă este mai mare decât | bgt $rs,$rt,Etichetă | slt $at,$rt,$rs; bne $at,$zero,Label | if(R[rs]>R[rt]) PC=Etichetă |
Ramura dacă este mai mică de | blt $rs,$rt,Etichetă | slt $at,$rs,$rt; bne $at,$zero,Label | if(R[rs]<R[rt]) PC=Etichetă |
Ramura dacă este mai mare sau egală | bge | etc. | if(R[rs]>=R[rt]) PC=Etichetă |
Ramura dacă este mai mică sau egală | ble | if(R[rs]<=R[rt]) PC=Etichetă | |
Filială dacă este mai mare decât nesemnată | bgtu | if(R[rs]=>R[rt]) PC=Etichetă | |
Ramura dacă este mai mare decât zero | bgtz | if(R[rs]>0) PC=Etichetă | |
Înmulțește și returnează doar primii 32 de biți | mul $1, $2, $3 | mult $2, $3; $1 | 1 USD = 2 USD * 3 USD |
Arhitectura hardware definește următoarele criterii:
Acestea sunt singurele restricții pe care arhitectura hardware le impune utilizării registrelor de uz general.
Diverse dispozitive MIPS implementează convenții speciale de apelare care restricționează utilizarea registrelor. Convențiile de apelare sunt pe deplin acceptate de pachetul software, dar nu sunt cerute de hardware.
Nume | Număr | Aplicație | trebuie sa rezervi? |
---|---|---|---|
$zero | 0 USD | stochează întotdeauna 0 | N / A |
$at | $1 | registru temporar pentru limbajul de asamblare | NU |
$v0-$v1 | 2$—3$ | valorile funcţiei şi expresiei | NU |
$a0—$a3 | 4$—7$ | argumente ale funcției | NU |
$t0—$t7 | 8$—15$ | temporar | NU |
$s0—$s7 | 16 USD—23 USD | valori temporare stocate | DA |
$t8—$t9 | 24$—25$ | temporar | NU |
$k0—$k1 | 26 USD—27 USD | rezervat pentru nucleul sistemului de operare | NU |
$gp | 28 USD | indicator global | DA |
$sp | 29 USD | indicator de stivă | DA |
$fp | 30 USD | indicatorul de cadru | DA |
$ra | 31 USD | adresa expeditorului | N / A |
Registrele protejate (prin convenție) nu pot fi modificate prin apeluri de sistem sau proceduri (funcții). De exemplu, $s-registers trebuie să fie stocate în stivă prin procedura care le va folosi; constantele sunt incrementate la registrele $sp și $fp, iar la sfârșitul procedurii, registrele sunt din nou decrementate. Exemplul opus este registrul $ra, care se schimbă automat când este apelat de orice funcție. Registrele $t trebuie să fie salvate de program înainte de a apela orice procedură (dacă programul are nevoie de date primite după apel).
Printre platformele virtuale deschise, există un emulator gratuit OVP-sim disponibil pentru uz necomercial, care este o bibliotecă de modele de procesoare și platformă, precum și API-uri care permit utilizatorului să își proiecteze propriile modele. Biblioteca de modele este o resursă deschisă scrisă în C și include nuclee MIPS 4K, 24K și 34K. Aceste modele sunt create și întreținute de Imperas, care a colaborat cu MIPS Technologies pentru a testa emulatorul și a-l marca ca MIPS-Verified. Exemple de platforme bazate pe MIPS includ atât hardware-ul în sine, cât și platforme pentru încărcarea mapărilor binare Linux nemodificate. Aceste platforme de emulator sunt eficiente pentru învățare și sunt, de asemenea, disponibile, gratuite și ușor de utilizat. OVPsim, dezvoltat și întreținut de Imperas, rulează la viteză mare (sute de milioane de instrucțiuni pe secundă) și este aplicabil pentru a descrie arhitecturi multi-core.
Există un emulator MIPS32 disponibil gratuit (versiunile anterioare puteau emula doar R2000/R3000) lansat sub numele SPIM pentru uz educațional. EduMIPS64 este un emulator de procesor grafic MIPS64 multiplatformă scris în Java /Swing. Acceptă multe ISA-uri MIPS64 și permite utilizatorului să vadă vizual ce se întâmplă în conductă atunci când CPU execută un program în limbaj de asamblare. Proiectul are scopuri strict educaționale și este utilizat pe scară largă în unele cursuri de arhitectură computerizată din întreaga lume.
Un alt emulator GUI al procesoarelor MIPS este MARS, dezvoltat și în scopuri educaționale și este deosebit de eficient împreună cu cartea lui Hennessy Computer Organization and Design .
Versiunile mai avansate ale emulatoarelor gratuite sunt Gxemul (cunoscute anterior ca proiecte mips64emul), precum și proiectele QEMU. Ele emulează diverse modele de microprocesoare MIPS III și MIPS IV (ca o completare a sistemelor informatice care le folosesc).
Modelele de emulator comercial sunt disponibile în principal pentru utilizarea încorporată a procesoarelor MIPS, cum ar fi Virtutech Simics (MIPS 4Kc și 5Kc, PMC RM9000, QED RM7000), VaST Systems (R3000, R4000) și CoWare (MIPS4KE, MIPS25Kf și MIPS25Kf).
Microcontrolere | ||||||||
---|---|---|---|---|---|---|---|---|
Arhitectură |
| |||||||
Producătorii |
| |||||||
Componente | ||||||||
Periferie | ||||||||
Interfețe | ||||||||
OS | ||||||||
Programare |
|
Arhitecturi de procesoare bazate pe tehnologii RISC | |
---|---|