MIPS -arkitektur - MIPS architecture

MIPS
Designer MIPS Technologies , Imagination Technologies
Bitar 64-bitars (32 → 64)
Introducerad 1985 ; 36 år sedan ( 1985 )
Version MIPS32/64 Release 6 (2014)
Design RISK
Typ Registrera-registrera
Kodning Fast
Förgrening Jämför och förgrena
Uthållighet Bi
Sidstorlek 4 KB
Tillägg MDMX , MIPS-3D
Öppen Delvis. Den R12000 processorn har funnits på marknaden i mer än 20 år och kan därför inte vara föremål för patentkraven. Därför är R12000 och äldre processorer helt öppna.
Register
Generell mening 32
Flytpunkt 32

MIPS ( Microprocessor without Interlocked Pipelined Stages ) är en reducerad instruktionsuppsatt dator (RISC) instruktionsuppsättningarkitektur (ISA) utvecklad av MIPS Computer Systems, nu MIPS Technologies , baserat i USA.

Det finns flera versioner av MIPS: inklusive MIPS I, II, III, IV och V; samt fem versioner av MIPS32/64 (för 32- respektive 64-bitars implementeringar). De tidiga MIPS-arkitekturerna var 32-bitars; 64-bitarsversioner utvecklades senare. Från och med april 2017 är den nuvarande versionen av MIPS MIPS32/64 Release 6. MIPS32/64 skiljer sig främst från MIPS I – V genom att definiera det privilegierade kärnläget System Control Coprocessor utöver användarlägesarkitekturen.

MIPS -arkitekturen har flera valfria tillägg. MIPS-3D som är en enkel uppsättning flytande SIMD-instruktioner dedikerade till vanliga 3D-uppgifter, MDMX (MaDMaX) som är ett mer omfattande heltal SIMD- instruktionsuppsättning som använder 64-bitars floating-point-registren, MIPS16e som lägger till komprimering till instruktionen ström för att få program att ta mindre plats, och MIPS MT, vilket ger multithreading -kapacitet.

Datorarkitekturkurser på universitet och tekniska skolor studerar ofta MIPS -arkitekturen. Arkitekturen påverkade mycket senare RISC -arkitekturer som Alpha . I mars 2021 meddelade MIPS att utvecklingen av MIPS-arkitekturen hade slutat när företaget gör övergången till RISC-V .

Historia

Den första versionen av MIPS -arkitekturen designades av MIPS Computer Systems för sin R2000 -mikroprocessor, den första MIPS -implementeringen. Både MIPS och R2000 introducerades tillsammans 1985. När MIPS II introducerades fick MIPS namn till MIPS I för att skilja den från den nya versionen.

MIPS Computer Systems " R6000 mikroprocessor (1989) var den första genomförandet MIPS II. Designad för servrar, R6000 tillverkades och såldes av Bipolar Integrated Technology , men var ett kommersiellt misslyckande. Under mitten av 1990-talet var många nya 32-bitars MIPS-processorer för inbäddade system MIPS II-implementeringar eftersom introduktionen av 64-bitars MIPS III-arkitekturen 1991 lämnade MIPS II som den nyaste 32-bitars MIPS-arkitekturen tills MIPS32 introducerades 1999 .

MIPS Computer Systems " R4000 mikroprocessor (1991) var den första genomförandet MIPS III. Det var utformat för användning i personliga, arbetsstationer och serverdatorer. MIPS Computer Systems marknadsförde aggressivt MIPS -arkitekturen och R4000 och etablerade Advanced Computing Environment (ACE) -konsortiet för att avancera sin Advanced RISC Computing (ARC) -standard, som syftade till att etablera MIPS som den dominerande plattformen för personlig dator. ARC fann liten framgång i persondatorer, men R4000 (och R4400 -derivatet) användes i stor utsträckning i arbetsstationer och serverdatorer, särskilt av dess största användare, Silicon Graphics . Andra användningsområden för R4000 inkluderade avancerade inbyggda system och superdatorer. MIPS III implementerades så småningom av ett antal inbäddade mikroprocessorer. Quantum Effect Design 's R4600 (1993) och dess derivat användes i stor utsträckning i avancerade inbyggda system och low-end arbetsstationer och servrar. MIPS Technologies R4200 (1994), designades för inbyggda system, bärbara datorer och persondatorer. Ett derivat, R4300i, tillverkat av NEC Electronics , användes i spelkonsolen Nintendo 64 . Nintendo 64, tillsammans med PlayStation , var bland de högsta användarna av MIPS-arkitekturprocessorer i mitten av 1990-talet.

Den första MIPS IV -implementeringen var MIPS Technologies R8000 mikroprocessor -chipset (1994). Utformningen av R8000 började på Silicon Graphics, Inc. och den användes bara på avancerade arbetsstationer och servrar för vetenskapliga och tekniska applikationer där hög prestanda på stora flytande arbetsbelastningar var viktig. Senare implementeringar var MIPS Technologies R10000 (1996) och Quantum Effect Devices R5000 (1996) och RM7000 (1998). R10000, tillverkad och såld av NEC Electronics och Toshiba, och dess derivat användes av NEC, Pyramid Technology, Silicon Graphics och Tandem Computers (bland annat) på arbetsstationer, servrar och superdatorer. R5000 och R7000 har använts i avancerade inbyggda system, persondatorer och low-end arbetsstationer och servrar. Ett derivat av R5000 från Toshiba, R5900, användes i Sony Computer Entertainment's Emotion Engine , som drev spelkonsolen PlayStation 2 .

Tillkännagav den 21 oktober 1996 på Microprocessor Forum 1996 tillsammans med tillägget MIPS Digital Media Extensions (MDMX), var MIPS V utformat för att förbättra prestanda för 3D -grafikomvandlingar. I mitten av 1990-talet var en stor användning av icke-inbäddade MIPS-mikroprocessorer grafiska arbetsstationer från Silicon Graphics. MIPS V kompletterades med MDMX-förlängningen som endast har heltal för att tillhandahålla ett komplett system för att förbättra prestanda för 3D-grafikapplikationer. MIPS V -implementeringar introducerades aldrig. Den 12 maj 1997 meddelade Silicon Graphics mikroprocessorerna H1 ("Beast") och H2 ("Capitan"). Den förra skulle ha varit den första MIPS V -implementeringen och skulle introduceras under första halvåret 1999. H1- och H2 -projekten kombinerades senare och avbröts så småningom 1998. Även om det inte har funnits några MIPS V -implementeringar, MIPS64 Release 1 (1999) baserades på MIPS V och behåller alla dess funktioner som en valfri Coprocessor 1 (FPU) -funktion som kallas Paired-Single.

När MIPS Technologies slogs ut av Silicon Graphics 1998 fokuserade den på den inbäddade marknaden. Genom MIPS V var varje successiv version en strikt superset av den tidigare versionen, men den här egenskapen befanns vara ett problem, och arkitekturdefinitionen ändrades för att definiera en 32-bitars och en 64-bitars arkitektur: MIPS32 och MIPS64. Båda introducerades 1999. MIPS32 är baserat på MIPS II med några ytterligare funktioner från MIPS III, MIPS IV och MIPS V; MIPS64 är baserat på MIPS V. NEC , Toshiba och SiByte (senare förvärvat av Broadcom ) erhöll var och en licenser för MIPS64 så snart det meddelades. Philips , LSI Logic , IDT , Raza Microelectronics, Inc. , Cavium , Loongson Technology och Ingenic Semiconductor har sedan anslutit sig till dem. MIPS32/MIPS64 Release 5 tillkännagavs den 6 december 2012. Release 4 hoppades över eftersom siffran fyra uppfattas som otur i många asiatiska kulturer.

I december 2018 meddelade Wave Computing, den nya ägaren av MIPS-arkitekturen, att MIPS ISA skulle vara öppen i ett program som kallades MIPS Open-initiativet. Programmet var tänkt att öppna tillgången till de senaste versionerna av både 32-bitars och 64-bitars design som gör dem tillgängliga utan licens- eller royaltyavgifter samt att ge deltagare licenser till befintliga MIPS-patent.

I mars 2019 gjordes en version av arkitekturen tillgänglig under en royaltyfri licens, men senare samma år stängdes programmet av igen.

I mars 2021 meddelade Wave Computing att utvecklingen av MIPS -arkitekturen har upphört. Företaget har anslutit sig till RISC-V-stiftelsen och framtida processordesigner kommer att baseras på RISC-V-arkitekturen.

Design

MIPS är en modulär arkitektur som stöder upp till fyra samprocessorer (CP0/1/2/3). I MIPS-terminologi är CP0 System Control Coprocessor (en väsentlig del av processorn som är implementeringsdefinierad i MIPS I – V), CP1 är en valfri floating-point-enhet (FPU) och CP2/3 är valfria implementeringsdefinierade coprocessorer (MIPS III tog bort CP3 och återanvände sina opkoder för andra ändamål). Till exempel i PlayStation -spelkonsolen är CP2 Geometry Transformation Engine (GTE), som påskyndar bearbetningen av geometri i 3D -datorgrafik.

Versioner

MIPS I

MIPS är en last-/lagringsarkitektur (även känd som en registerregisterarkitektur ); utom instruktionerna för laddning/lagring som används för att komma åt minnet , fungerar alla instruktioner i registren.

Register

MIPS I har trettiotvå 32-bitars general-purpose register (GPR). Registrera $ 0 är kopplat till noll och skriver till det kasseras. Registrera $ 31 är länkregistret. För heltalsmultiplikations- och delningsinstruktioner, som körs asynkront från andra instruktioner, tillhandahålls ett par 32-bitarsregister, HI och LO . Det finns en liten uppsättning instruktioner för att kopiera data mellan registren för allmänna ändamål och HI/LO-registren.

Programräknaren har 32 bitar. De två lågordnade bitarna innehåller alltid noll eftersom MIPS I-instruktionerna är 32 bitar långa och är anpassade till deras naturliga ordgränser.

Instruktionsformat

Instruktioner är indelade i tre typer: R, I och J. Varje instruktion börjar med en 6-bitars opcode. Förutom opkoden anger R-typ instruktioner tre register, ett skiftmängdsfält och ett funktionsfält; I-typ instruktioner anger två register och ett 16-bitars omedelbart värde; J-typ instruktioner följer opkoden med ett 26-bitars hoppmål.

Följande är de tre format som används för kärninstruktionsuppsättningen:

Typ -31- format (bitar) -0-
R opcode (6) rs (5) rt (5) rd (5) shamt (5) funktioner (6)
I opcode (6) rs (5) rt (5) omedelbart (16)
J opcode (6) adress (26)

CPU -instruktioner

MIPS I har instruktioner som laddar och lagrar 8-bitars byte, 16-bitars halvord och 32-bitars ord. Endast ett adresseringsläge stöds: bas + förskjutning. Eftersom MIPS I är en 32-bitars arkitektur kräver laddningsmängder färre än 32 bitar att datumet antingen signeras eller nollförlängs till 32 bitar. Lastinstruktionerna med "osignerad" utför nolltillägg; annars utförs teckenförlängning. Ladda instruktioner käll basen från innehållet i en GPR (rs) och skriva resultatet till en annan GPR (rt). Butiksinstruktioner källar basen från innehållet i en GPR (rs) och lagringsdata från en annan GPR (rt). Alla laddnings- och lagringsinstruktioner beräknar minnesadressen genom att summera basen med den teckenförlängda 16-bitars omedelbar. MIPS I kräver att alla minnesåtkomst anpassas till sina naturliga ordgränser, annars signaleras ett undantag. För att stödja effektiva oinriktade minnesåtkomstar finns det instruktioner för laddning/lagring av ord med "vänster" eller "höger". Alla lastinstruktioner följs av en fördröjningsplats . Instruktionen i lastfördröjningsfacket kan inte använda data som laddas av lastinstruktionen. Lastfördröjningsplatsen kan fyllas med en instruktion som inte är beroende av lasten; en nop ersätts om en sådan instruktion inte kan hittas.

MIPS I har instruktioner för att utföra addition och subtraktion. Dessa instruktioner käller sina operander från två GPR (rs och rt) och skriver resultatet till en tredje GPR (rd). Alternativt kan tillägg källa en av operanderna från en 16-bitars omedelbar (som är teckenförlängd till 32 bitar). Instruktionerna för addition och subtraktion har två varianter: som standard signaleras ett undantag om resultatet överflödar; instruktioner med "osignerat" suffix signalerar inte ett undantag. Överflödeskontrollen tolkar resultatet som ett 32-bitars tvåkomplement heltal. MIPS I har instruktioner för att utföra bitvis logiska AND, OR, XOR och NOR. Dessa instruktioner källar sina operander från två GPR och skriver resultatet till en tredje GPR. AND, OR och XOR-instruktionerna kan alternativt källa en av operanderna från en 16-bitars omedelbar (som är nollförlängd till 32 bitar). Instruktionerna Set on relation skriver en eller noll till destinationsregistret om den angivna relationen är sann eller falsk. Dessa instruktioner käller sina operander från två GPR eller en GPR och en 16-bitars omedelbar (som teckenförlängs till 32 bitar) och skriver resultatet till en tredje GPR. Som standard tolkas operanderna som signerade heltal. Varianterna av dessa instruktioner som har suffix med "osignerade" tolkar operanderna som osignerade heltal (även de som köper en operand från den teckenförlängda 16-bitars omedelbara).

Load Immediate Upper-instruktionen kopierar 16-bitars omedelbart till 16-bitars högpresentation av en GPR. Den används tillsammans med instruktionen Or Immediate för att ladda en 32-bitars omedelbar till ett register.

MIPS I har instruktioner för att utföra vänster och höger logiska skift och höger aritmetiska skift. Operanden erhålls från en GPR (rt), och resultatet skrivs till en annan GPR (rd). Skiftavståndet erhålls antingen från en GPR (rs) eller en 5-bitars "skiftmängd" ("sa" -fältet).

MIPS I har instruktioner för signerad och osignerad heltalsmultiplikation och division. Dessa instruktioner käller sina operander från två GPR: er och skriver deras resultat till ett par 32-bitars register som kallas HI och LO, eftersom de kan köra separat från (och samtidigt med) de andra CPU-instruktionerna. För multiplikation skrivs hög- och lågordenshalvorna av 64-bitarsprodukten till HI respektive LO (). För division skrivs kvoten till LO och resten till HI. För att komma åt resultaten tillhandahålls ett par instruktioner (Flytta från HI och Flytta från LO) för att kopiera innehållet i HI eller LO till en GPR. Dessa instruktioner är sammankopplade: läsningar av HI och LO går inte förbi en oavslutad aritmetisk instruktion som kommer att skriva till HI och LO. Ett annat par instruktioner (Flytta till HI eller Flytta till LO) kopierar innehållet i en GPR till HI och LO. Dessa instruktioner används för att återställa HI och LO till sitt ursprungliga tillstånd efter undantagshantering. Instruktioner som läser HI eller LO måste separeras av två instruktioner som inte skriver till HI eller LO.

Alla MIPS I kontrollflödesinstruktioner följs av en fördröjningsplats för gren . Om inte grenfördröjningsfacket fylls av en instruktion som utför användbart arbete, ersätts en nop. MIPS I greninstruktioner jämför innehållet i en GPR (rs) mot noll eller en annan GPR (rt) som signerade heltal och gren om det angivna villkoret är sant. Kontrollen överförs till den adress som beräknas genom att 16-bitars förskjutning lämnas av två bitar, teckenförlänger 18-bitarsresultatet och lägger till 32-bitars teckenförlängt resultat till summan av programräknaren (instruktionsadress) och 8 10 . Hoppar har två versioner: absolut och registerindirekt. Absoluta hopp ("Hopp" och "Hopp och länk") beräknar adresskontrollen överförs till genom att flytta 26-bitars instr_index till vänster med två bitar och sammanfoga 28-bitars resultatet med de fyra högordensbitarna i adressens adress instruktion i filialfördröjningsplatsen. Register-indirekt hopp överför kontroll till instruktionen på adressen som kommer från en GPR (rs). Adressen som kommer från GPR måste vara ordjusterad, annars signaleras ett undantag efter att instruktionen i grenfördröjningsplatsen har utförts. Gren- och hoppanvisningar som länkar (förutom "Jump and Link Register") sparar returadressen till GPR 31. "Jump and Link Register" -instruktionen tillåter att returadressen sparas i alla skrivbara GPR.

MIPS I har två instruktioner för programvara för att signalera ett undantag: System Call och Breakpoint. Systemsamtal används av användarlägesprogramvara för att ringa kärnsamtal; och Brytpunkt används för att överföra kontroll till en felsökare via kärnans undantagshanterare. Båda instruktionerna har ett 20-bitars kodfält som kan innehålla driftmiljöspecifik information för undantagshanteraren.

MIPS har 32 flytande register. Två register är parade för dubbla precisionsnummer. Udda numrerade register kan inte användas för aritmetik eller förgrening, precis som en del av ett dubbelprecisionsregisterpar, vilket resulterar i 16 användbara register för de flesta instruktioner (drag/kopior och laster/lagringar påverkades inte).

Enstaka precision betecknas med suffixet .s, medan dubbel precision betecknas med suffixet .d.

MIPS II

MIPS II tog bort lastfördröjningsplatsen och lade till flera uppsättningar instruktioner. För multiprocessering med delat minne har instruktionerna Synkronisera delat minne , Ladda länkat ord och Store Conditional Word lagts till. En uppsättning Trap-on-Condition-instruktioner har lagts till. Dessa instruktioner orsakade ett undantag om det utvärderade villkoret är sant. Alla befintliga filialinstruktioner gavs troligtvis versioner som utförde instruktionen i filialfördröjningsfacket endast om grenen togs. Dessa instruktioner förbättrar prestandan i vissa fall genom att tillåta användbara instruktioner att fylla grenfördröjningsplatsen. Dubbelordsladdning och lagringsinstruktioner för COP1–3 har lagts till. I överensstämmelse med andra instruktioner för åtkomst till minne krävde dessa laster och lagringar att dubbelordet skulle vara naturligt anpassat.

Instruktionsuppsättningen för floating point -coprocessorn hade också flera instruktioner tillagda. En IEEE 754-kompatibel kvadratrotsinstruktion för flytande punkter har lagts till. Det stödde både enkel- och dubbelprecisionsoperander. En uppsättning instruktioner som konverterade enkel- och dubbelprecision flytande siffror till 32-bitars ord lades till. Dessa kompletterade de befintliga konverteringsinstruktionerna genom att låta IEEE -avrundningsläget specificeras av instruktionen istället för Floating Point Control and Status Register.

MIPS III

MIPS III är en bakåtkompatibel förlängning av MIPS II som har lagt till stöd för 64-bitars minnesadressering och heltal. 64-bitars datatypen kallas ett dubbelord, och MIPS III utökade allmänna register, HI/LO-register och programräknare till 64 bitar för att stödja det. Nya instruktioner har lagts till för att ladda och lagra dubbelord, för att utföra heltalsaddition, subtraktion, multiplikation, division och skiftoperationer på dem och för att flytta dubbelord mellan GPR- och HI/LO -registren. Befintliga instruktioner som ursprungligen definierades för att fungera på 32-bitars ord omdefinierades, vid behov, för att teckenförlänga 32-bitarsresultaten så att ord och dubbelord kan behandlas identiskt med de flesta instruktioner. Bland de omdefinierade instruktionerna var Load Word . I MIPS III tecknar det ord till 64 bitar. För att komplettera Load Word har en version som nollförlängts lagts till.

R instruktionsformatets oförmåga att ange hela skiftdistansen för 64-bitars skift (dess 5-bitars skiftmängdsfält är för smalt för att specificera skiftavståndet för dubbelord) krävde att MIPS III för att tillhandahålla tre 64-bitarsversioner av varje MIPS I-skift instruktion. Den första versionen är en 64-bitarsversion av de ursprungliga skiftinstruktionerna, som används för att ange konstanta skiftavstånd på 0–31 bitar. Den andra versionen liknar den första, men lägger till 32 10 skiftbeloppsfältets värde så att konstanta skiftavstånd på 32–64 bitar kan specificeras. Den tredje versionen erhåller skiftavståndet från de sex lågordnade bitarna i en GPR.

MIPS III lade till en supervisor -behörighetsnivå mellan befintliga kärn- och användarrättighetsnivåer. Denna funktion påverkade bara den implementeringsdefinierade systemkontrollprocessorn (Coprocessor 0).

MIPS III tog bort Coprocessor 3 (CP3) supportinstruktioner och återanvände dess opkoder för de nya dubbelordsinstruktionerna. De återstående coprocessorerna fick instruktioner för att flytta dubbelord mellan koprocessorregister och GPR: er. De flytande allmänna registren (FGR) förlängdes till 64 bitar och kravet på instruktioner för att endast använda jämnt registrerade register togs bort. Detta är oförenligt med tidigare versioner av arkitekturen; en bit i floating-point-kontroll/statusregistret används för att styra MIPS III-floating-point-enheten (FPU) i ett MIPS I- och II-kompatibelt läge. Flytpunktskontrollregistren förlängdes inte för kompatibilitet. De enda nya floating-point-instruktionerna som tillkom var de för att kopiera dubbelord mellan CPU och FPU och konvertera enkel- och dubbelprecision floating-point-nummer till dubbelord heltal och vice versa.

MIPS IV

MIPS IV är den fjärde versionen av arkitekturen. Det är en superset av MIPS III och är kompatibel med alla befintliga versioner av MIPS. MIPS IV har utformats för att främst förbättra prestanda för floating-point (FP). För att förbättra åtkomsten till operander, ett indexerat adresseringsläge (bas + index, båda hämtat från GPR) för FP -belastningar och lagrar, liksom prefetch -instruktioner för att utföra minnesförhämtning och specificera cachetips (dessa stödde både bas + förskjutning och bas) + indexadresslägen).

MIPS IV har lagt till flera funktioner för att förbättra parallellitet på instruktionsnivå. För att lindra flaskhalsen som orsakas av en enda villkorbit, har sju tillståndskodbitar lagts till i floating-point-kontrollen och statusregistret, vilket ger summan till åtta. FP -jämförelse och greninstruktioner omdefinierades så att de kunde specificera vilken villkorbit som skrevs eller lästes (respektive); och fördröjningsluckan mellan en FP -gren som läste tillståndsbiten som skrivits till av en tidigare FP -jämförelse avlägsnades. Stöd för partiell predikation tillkom i form av villkorliga flyttinstruktioner för både GPR och FPR; och en implementering kan välja mellan att ha exakta eller oprecisa undantag för IEEE 754 -fällor.

MIPS IV har lagt till flera nya FP-aritmetiska instruktioner för både enkel- och dubbelprecision FPN: fusion-multiplicera addera eller subtrahera, ömsesidig och ömsesidig kvadratrot. FP-fusion-multiplicera addera eller subtrahera instruktioner utför antingen en eller två avrundningar (det är implementeringsdefinierat), för att överskrida eller uppfylla IEEE 754 noggrannhetskrav (respektive). FP: s ömsesidiga och ömsesidiga kvadratrotinstruktioner överensstämmer inte med IEEE 754-noggrannhetskraven och ger resultat som skiljer sig från erforderlig noggrannhet med en eller två enheter på sista plats (det är implementeringsdefinierat). Dessa instruktioner tjänar applikationer där instruktionsfördröjning är viktigare än noggrannhet.

MIPS V

MIPS V lade till en ny datatyp, Paired Single (PS), som bestod av två single-precision (32-bitars) floating-point-nummer lagrade i de befintliga 64-bitars floating-point-registren. Varianter av befintliga flytpunktsinstruktioner för aritmetik, jämförelse och villkorlig flyttning har lagts till för att fungera på denna datatyp på ett SIMD-sätt. Nya instruktioner har lagts till för laddning, omarrangemang och konvertering av PS -data. Det var den första instruktionsuppsättningen för att utnyttja float-point SIMD med befintliga resurser.

MIPS32/MIPS64

Den första versionen av MIPS32, baserad på MIPS II, lade till villkorliga drag, förhämtningsinstruktioner och andra funktioner från R4000- och R5000-familjerna med 64-bitars processorer. Den första versionen av MIPS64 lägger till ett MIPS32-läge för att köra 32-bitars kod. MUL- och MADD - instruktionerna ( multiplic-add ), som tidigare fanns tillgängliga i vissa implementeringar, lades till i MIPS32- och MIPS64-specifikationerna, liksom instruktioner för cachekontroll .

MIPS32/MIPS64 Release 6 2014 lade till följande:

  • en ny filialfamilj utan fördröjning:
    • ovillkorliga grenar (BC) och gren-och-länk (BALC) med en 26-bitars offset,
    • villkorad gren på noll/icke-noll med en 21-bitars förskjutning,
    • hela uppsättningen signerade och osignerade villkorade grenar jämför mellan två register (t.ex. BGTUC) eller ett register mot noll (t.ex. BGTZC),
    • fullständig uppsättning av gren-och-länk som jämför ett register mot noll (t.ex. BGTZALC).
  • indexhoppningsinstruktioner utan fördröjningsplats utformad för att stödja stora absoluta adresser.
  • instruktioner för att ladda 16-bitars omedelbart vid bitposition 16, 32 eller 48, vilket gör det möjligt att enkelt generera stora konstanter.
  • PC-relativ lastinstruktion, samt adressgenerering med stora (PC-relativa) förskjutningar.
  • bit-reversering och byte-justeringsinstruktioner (tidigare endast tillgängligt med DSP-tillägget).
  • multiplicera och dela instruktioner omdefinierade så att de använder ett enda register för deras resultat).
  • instruktioner som genererar sanningvärden genererar nu alla nollor eller alla istället för att bara rensa/ställa in 0-bitarna,
  • instruktioner som använder ett sanningvärde tolkar nu bara alla nollor som falska istället för att bara titta på 0-bitarna.

Ta bort sällan använda instruktioner:

  • några villkorliga drag
  • gren troliga instruktioner (utfasade i tidigare versioner).
  • heltal överflödesinlärningsinstruktioner med 16-bitars omedelbar
  • heltalsackumulatorinstruktioner (tillsammans HI/LO-register, flyttade till DSP Application-Specific Extension)
  • oinriktad lastinstruktion (LWL och LWR), (kräver att de flesta vanliga laster och butiker stöder felinriktad åtkomst, möjligen via infångning och med tillägg av en ny instruktion (BALIGN))

Omorganiserade instruktionskodningen, vilket frigjorde utrymme för framtida utbyggnader.

microMIPS

MicroMIPS32/64 -arkitekturerna är överdelar av MIPS32- respektive MIPS64 -arkitekturen som är utformade för att ersätta MIPS16e ASE. En nackdel med MIPS16e är att den kräver en lägesomkopplare innan någon av dess 16-bitars instruktioner kan bearbetas. microMIPS lägger till versioner av de mest använda 32-bitars instruktionerna som är kodade som 16-bitars instruktioner. Detta gör att program kan blanda 16- och 32-bitars instruktioner utan att behöva byta läge. microMIPS introducerades vid sidan av MIPS32/64 Release 3, och varje efterföljande version av MIPS32/64 har en motsvarande microMIPS32/64 -version. En processor kan implementera microMIPS32/64 eller båda microMIPS32/64 och dess motsvarande MIPS32/64 -delmängd. Från och med MIPS32/64 Release 6 slutade stödet för MIPS16e och microMIPS är den enda formen för kodkomprimering i MIPS.

Applikationsspecifika tillägg

Basarkitekturerna MIPS32 och MIPS64 kan kompletteras med ett antal valfria arkitektoniska tillägg, som tillsammans kallas applikationsspecifika tillägg (ASE). Dessa ASE ger funktioner som förbättrar effektiviteten och prestanda för vissa arbetsbelastningar, till exempel digital signalbehandling .

MIPS MCU
Förbättringar för applikationer för mikrokontroller. MCU ASE (applikationsspecifik förlängning) har utvecklats för att förlänga stödet för avbrottsstyrenhet, minska avbrottsfördröjningen och förbättra I/O-periferstyrfunktionen som vanligtvis krävs i mikrokontrollersystemkonstruktioner.
  • Separat prioritet och vektorgenerering
  • Stöder upp till 256 avbrott i EIC -läget (External Interrupt Controller) och åtta maskinvaruavbrottsstift
  • Ger 16-bitars vektorförskjutningsadress
  • Förhämtning av avbrottsundantagsvektorn
  • Automatiserad avbrottsprolog - lägger till hårdvara för att spara och uppdatera systemstatus före avbrottshanteringsrutinen
  • Automated Interrupt Epilogue - återställer systemtillståndet som tidigare lagrats i stacken för att återvända från avbrottet.
  • Interrupt Chaining - stöder tjänsten av väntande avbrott utan att behöva lämna den första avbrottsrutinen, vilket sparar de cykler som krävs för att lagra och återställa flera aktiva avbrott
  • Stöder spekulativ förhämtning av avbrottsvektoradressen. Minskar antalet avbrutna servicecykler genom överlappande minnesåtkomst med pipelinespolningar och undantagsprioritering
  • Inkluderar atombitset/tydliga instruktioner som gör det möjligt att ändra bitar i ett I/O -register som normalt används för att övervaka eller styra externa perifera funktioner utan avbrott, vilket säkerställer att åtgärden utförs säkert.
MIPS16
MIPS16 är en applikationsspecifik förlängning för MIPS I till och med V designad av LSI Logic och MIPS Technologies , tillkännagav den 21 oktober 1996 tillsammans med dess första implementering, LSI Logic TinyRISC-processorn. MIPS16 licensierades därefter av bland annat NEC Electronics , Philips Semiconductors och Toshiba ; och implementeras som en förlängning till MIPS I, II, och III arkitekturer. MIPS16 minskar applikationsstorleken med upp till 40% genom att använda 16-bitars instruktioner istället för 32-bitars instruktioner 'och förbättrar också energieffektiviteten, instruktionscachens träfffrekvens och motsvarar i prestanda sin basarkitektur. Det stöds av hård- och mjukvaruutvecklingsverktyg från MIPS Technologies och andra leverantörer. MIPS16e är en förbättrad version av MIPS16 som först stöds av MIPS32 och MIPS64 Release 1. MIPS16e2 är en förbättrad version av MIPS16 som stöds av MIPS32 och MIPS64 (upp till Release 5). Release 6 ersatte den med microMIPS.
MIPS Digital Signal Processing (DSP)
DSP ASE är ett tillägg till MIPS32/MIPS64 Release 2 och nyare instruktionsuppsättningar som kan användas för att påskynda ett stort antal "media" -beräkningar - särskilt ljud och video. DSP -modulen innehåller en uppsättning instruktioner och tillstånd i heltalspipeline och kräver minimal ytterligare logik för att implementera i MIPS -processorkärnor. Revision 2 av ASE introducerades under andra halvåret 2006. Denna översyn ger extra instruktioner till den ursprungliga ASE, men är i övrigt bakåtkompatibel med den. Till skillnad från huvuddelen av MIPS -arkitekturen är det en ganska oregelbunden uppsättning operationer, många valda för en viss relevans för någon nyckelalgoritm. Dess främsta nya funktioner (mot original MIPS32):
  • Mättande aritmetik (när en beräkning överflödar, leverera det representabla talet som ligger närmast det icke-överflödiga svaret).
  • Fixerad punkts aritmetik på signerade 32- och 16-bitars fixpunktsfraktioner med intervallet -1 till +1 (dessa kallas allmänt "Q31" och "Q15").
  • Den befintliga heltalsmultiplikationen och multiplicera-ackumulera instruktionerna, som levererar resultat till en dubbelstor ackumulator (kallad "hi/lo" och 64 bitar på MIPS32-processorer). DSP ASE lägger till ytterligare tre ackumulatorer och några olika smaker av multiplicera-ackumulera.
  • SIMD- instruktioner som fungerar på 4 x osignerade byte eller 2 x 16-bitars värden packade i ett 32-bitars register (64-bitars varianten av DSP ASE stöder också större vektorer).
  • SIMD-operationer är grundläggande aritmetik, skift och några multiplikativt ackumulerade typoperationer.
MIPS SIMD -arkitektur (MSA)
Instruktionsuppsättningstillägg för att påskynda multimedia.
  • 32 vektorregister med 16 x 8-bitars, 8 x 16-bitars, 4 x 32-bitars och 2 x 64-bitars vektorelement
  • Effektiva vektorparallella aritmetiska operationer på heltal, fastpunkts- och flytpunktsdata
  • Operationer på absolutvärdesoperander
  • Avrundnings- och mättnadsalternativ tillgängliga
  • Full precision multiplicera och multiplicera-lägg till
  • Konverteringar mellan heltal, flyttal och fastpunktsdata
  • Komplett uppsättning jämförelse- och greninstruktioner på vektornivå utan tillståndsflagga
  • Vektor (1D) och array (2D) blandning
  • Skrivade last- och lagringsinstruktioner för endian -oberoende drift
  • IEEE-standard för Floating-Point Arithmetic 754-2008-kompatibel
  • Element exakt flytande undantagsignalering
  • Fördefinierade skalbara tillägg för chips med fler grindar/transistorer
  • Accelererar datorintensiva applikationer i kombination med utnyttjande av generiskt kompilatorstöd
  • Programvaruprogrammerbar lösning för konsumentelektronikapplikationer eller funktioner som inte täcks av dedikerad hårdvara
  • Framväxande datautvinning, extrahering av funktioner, bild- och videobearbetning och applikationer för interaktion mellan människa och dator
  • Högpresterande vetenskaplig databehandling
MIPS -virtualisering
Maskinvarustödd virtualiseringsteknik.
MIPS multi-threading
Varje flertrådad MIPS-kärna kan stödja upp till två VPE: er (Virtual Processing Elements) som delar en enda pipeline och andra hårdvaruresurser. Eftersom varje VPE innehåller en fullständig kopia av processortillståndet så som programvarusystemet ser ut, visas dock varje VPE som en komplett fristående processor till ett SMP Linux -operativsystem. För mer finkorniga trådbearbetningsapplikationer kan varje VPE stödja upp till nio TC: er fördelade på två VPE: er. TC: erna delar en gemensam exekveringsenhet men alla har sin egen programräknare och kärnregisterfiler så att var och en kan hantera en tråd från programvaran. MIPS MT -arkitekturen möjliggör också tilldelning av processorkretsar till trådar och ställer in de relativa trådprioriteterna med ett valfritt Quality of Service ( QoS ) managerblock. Detta möjliggör två prioriteringsmekanismer som bestämmer informationsflödet över bussen. Den första mekanismen gör att användaren kan prioritera en tråd framför en annan. Den andra mekanismen används för att fördela ett specifikt förhållande av cyklerna till specifika trådar över tiden. Den kombinerade användningen av båda mekanismerna möjliggör effektiv tilldelning av bandbredd till uppsättningen trådar och bättre kontroll av latenser. I realtidssystem är determinism på systemnivå mycket kritisk, och QoS-blocket underlättar förbättring av ett systems förutsägbarhet. Hårdvarudesigners för avancerade system kan ersätta standard QoS -block som tillhandahålls av MIPS Technologies med ett som är speciellt anpassat för deras tillämpning.
SmartMIPS
SmartMIPS är en applikationsspecifik förlängning (ASE) designad av Gemplus International och MIPS Technologies för att förbättra prestanda och minska minnesförbrukningen för smartkortprogram . Det stöds endast av MIPS32, eftersom smartkort inte kräver MIPS64 -processors kapacitet. Få smartkort använder SmartMIPS.
MIPS Digital Media eXtension (MDMX)
Multimedieapplikationsaccelerationer som var vanliga på 1990 -talet på RISC- och CISC -system.
MIPS-3D
Ytterligare instruktioner för att förbättra prestanda för 3D -grafikapplikationer

Samtalskonvent

MIPS har haft flera samtalskonventioner, särskilt på 32-bitars plattformen.

O32 ABI är det mest använda ABI, på grund av dess status som det ursprungliga System V ABI för MIPS. Det är strikt stapelbaserat, med bara fyra register $ a0- $ a3 tillgängliga för att skicka argument. Plats på stacken är reserverat om calleen behöver spara sina argument, men registren lagras inte där av den som ringer. Returvärdet lagras i registret $ v0; ett andra returvärde kan lagras i $ v1. ABI tog form 1990 och uppdaterades senast 1994. Denna upplevda långsamhet, tillsammans med en antik flytande modell med endast 16 register, har uppmuntrat spridningen av många andra kallkonventioner. Det är bara definierat för 32-bitars MIPS, men GCC har skapat en 64-bitars variant som kallas O64.

För 64-bitars användning är N64 ABI av Silicon Graphics oftast. Den viktigaste förbättringen är att åtta register nu är tillgängliga för argumentpassning; det ökar också antalet floating-point-register till 32. Det finns också en ILP32- version som heter N32, som använder 32-bitars pekare för mindre kod, analog med x32 ABI . Båda körs under 64-bitars läge för CPU. N32 och N64 ABI skickar de första åtta argumenten till en funktion i registren $ a0- $ a7; efterföljande argument skickas på stapeln. Returvärdet (eller en pekare till det) lagras i registren $ v0; ett andra returvärde kan lagras i $ v1. I både N32 och N64 ABI anses alla register vara 64-bitars breda.

Några försök har gjorts att ersätta O32 med ett 32-bitars ABI som liknar N32 mer. En konferens 1995 kom med MIPS EABI, för vilken 32-bitarsversionen var ganska lika. EABI inspirerade MIPS Technologies att föreslå ett mer radikalt "NUBI" ABI som dessutom återanvänder argumentregister för returvärdet. MIPS EABI stöds av GCC men inte LLVM och stöder inte heller NUBI.

För alla O32 och N32/N64 lagras returadressen i ett $ ra -register. Detta ställs in automatiskt med hjälp av JAL (hoppa och länka) eller JALR (hoppa och länka register) instruktioner. Funktionsprologen för en (icke-blad) MIPS-underrutin skjuter returadressen (i $ ra) till stacken.

På både O32 och N32/N64 växer stapeln nedåt, men N32/N64 ABI kräver 64-bitars inriktning för alla stackposter. Rampekaren ($ 30) är valfri och används i praktiken sällan förutom när stapeltilldelningen i en funktion bestäms vid körning, till exempel genom att ringa alloca().

För N32 och N64 lagras returadressen vanligtvis 8 byte före stackpekaren, även om detta kan vara valfritt.

För N32 och N64 ABI: er måste en funktion bevara $ S0- $ s7-registren, den globala pekaren ($ gp eller $ 28), stackpekaren ($ sp eller $ 29) och rampekaren ($ 30). O32 ABI är densamma förutom att anropsfunktionen krävs för att spara $ gp -registret istället för den uppringda funktionen.

För flertrådad kod lagras trådens lokala lagringspekare vanligtvis i ett speciellt hårdvaruregister $ 29 och nås med hjälp av mfhw (flytta från hårdvara) instruktion. Minst en leverantör är känd för att lagra denna information i $ k0 -registret som normalt är reserverat för användning av kärnor, men detta är inte standard.

$ K0- och $ k1 -registren ($ 26– $ 27) är reserverade för användning av kärnor och bör inte användas av applikationer eftersom dessa register kan ändras när som helst av kärnan på grund av avbrott, kontextväxlingar eller andra händelser.

Registrerar för O32 -samtalskonvention
namn siffra Använda sig av Callee måste bevara?
$ noll $ 0 konstant 0 Ej tillgängligt
$ på $ 1 montör tillfällig Nej
$ v0– $ v1 $ 2– $ 3 värden för funktionsretur och uttrycksutvärdering Nej
$ a0– $ a3 $ 4– $ 7 funktionsargument Nej
$ t0– $ t7 8–15 dollar tillfälliga Nej
$ s0– $ s7 16–23 dollar sparade tillfälliga Ja
$ t8– $ t9 24–25 dollar tillfälliga Nej
$ k0– $ k1 $ 26– $ 27 reserverad för OS -kärnan Ej tillgängligt
$ gp $ 28 global pekare Ja (förutom PIC -kod)
$ sp $ 29 stack pekare Ja
$ fp $ 30 rampekare Ja
$ ra $ 31 returadress Ej tillgängligt
Registrerar för N32 och N64 samtalskonventioner
namn siffra Använda sig av Callee måste bevara?
$ noll $ 0 konstant 0 Ej tillgängligt
$ på $ 1 montör tillfällig Nej
$ v0– $ v1 $ 2– $ 3 värden för funktionsretur och uttrycksutvärdering Nej
$ a0– $ a7 $ 4– $ 11 funktionsargument Nej
$ t4– $ t7 $ 12– $ 15 tillfälliga Nej
$ s0– $ s7 16–23 dollar sparade tillfälliga Ja
$ t8– $ t9 24–25 dollar tillfälliga Nej
$ k0– $ k1 $ 26– $ 27 reserverad för OS -kärnan Ej tillgängligt
$ gp $ 28 global pekare Ja
$ sp $ 29 stack pekare Ja
$ s8 $ 30 rampekare Ja
$ ra $ 31 returadress Ej tillgängligt

Register som bevaras under ett samtal är register som (enligt konvention) inte kommer att ändras av ett systemanrop eller procedur (funktions) samtal. Till exempel måste $ s-register sparas i stacken med ett förfarande som måste användas, och $ sp och $ fp ökas alltid av konstanter och minskas tillbaka efter att proceduren är klar med dem (och minnet de pekar på till). Däremot ändras $ ra automatiskt av alla normala funktionssamtal (sådana som använder jal), och $ t-register måste sparas av programmet innan ett proceduranrop (om programmet behöver värdena inuti dem efter samtalet).

Användarutrymmeskonventionen för positionsoberoende kod på Linux kräver dessutom att när en funktion kallas måste $ t9-registret innehålla adressen till den funktionen. Denna konvention går tillbaka till tillägget System V ABI för MIPS.

Användningsområden

MIPS -processorer används i inbyggda system som bostadsgateways och routrar . Ursprungligen var MIPS konstruerad för allmän användning. Under 1980- och 1990 -talen användes MIPS -processorer för personliga , arbetsstationer och serverdatorer av många företag som Digital Equipment Corporation , MIPS Computer Systems , NEC , Pyramid Technology , SiCortex , Siemens Nixdorf , Silicon Graphics och Tandem Computers .

Historiskt sett använde spelkonsoler som Nintendo 64 , Sony PlayStation , PlayStation 2 och PlayStation Portable MIPS -processorer. MIPS -processorer brukade också vara populära i superdatorer under 1990 -talet, men alla sådana system har tappat TOP500 -listan. Dessa användningsområden kompletterades först med inbäddade applikationer, men under 1990 -talet blev MIPS en stor närvaro på den inbäddade processormarknaden, och under 2000 -talet var de flesta MIPS -processorerna för dessa applikationer.

I mitten till slutet av 1990-talet uppskattades att var tredje RISC-mikroprocessor som producerades var en MIPS-processor.

I slutet av 2010 -talet användes fortfarande MIPS -maskiner på inbäddade marknader, inklusive fordon, trådlös router, LTE -modem (främst via MediaTek ) och mikrokontroller (till exempel Microchip Technology PIC32M ). De har för det mesta bleknat ur det personliga, server- och applikationsutrymmet.

Simulatorer

Open Virtual Platforms (OVP) innehåller fritt tillgängliga för icke-kommersiell användning simulator OVPsim , ett bibliotek med modeller av processorer, kringutrustning och plattformar och API: er som gör det möjligt för användare att utveckla sina egna modeller. Modellerna i biblioteket är öppen källkod, skrivna i C och inkluderar MIPS 4K, 24K, 34K, 74K, 1004K, 1074K, M14K, microAptiv, interAptiv, proAptiv 32-bitars kärnor och MIPS 64-bitars 5K kärnor . Dessa modeller skapas och underhålls av Imperas och i samarbete med MIPS Technologies har de testats och tilldelats MIPS-verifierat märke. Exempel på MIPS-baserade plattformar inkluderar både nakna metallmiljöer och plattformar för att starta omodifierade Linux-binära bilder. Dessa plattformar-emulatorer är tillgängliga som källa eller binära filer och är snabba, gratis för icke-kommersiell användning och är lätta att använda. OVPsim är utvecklat och underhållet av Imperas och är mycket snabbt (hundratals miljoner instruktioner per sekund) och byggt för att hantera flerkärniga homogena och heterogena arkitekturer och system.

Det finns en fritt tillgänglig MIPS32 -simulator (tidigare versioner simulerade endast R2000/R3000) kallad SPIM för användning i utbildning. EduMIPS64 är en GPL grafisk MIPS64 CPU-simulator över flera plattformar, skriven i Java/Swing. Den stöder en bred delmängd av MIPS64 ISA och låter användaren grafiskt se vad som händer i pipelinen när ett monteringsprogram körs av processorn.

MARS är en annan GUI-baserad MIPS-emulator utformad för användning i utbildning, speciellt för användning med Hennessys datororganisation och design .

WebMIPS är en webbläsarbaserad MIPS-simulator med visuell representation av en generisk, pipelined processor. Denna simulator är ganska användbar för registerspårning under stegvis utförande.

QtMips tillhandahåller enkla 5-stegs pipeline-visualisering samt cacheprincipvisualisering för grundläggande kurser inom datorarkitektur. Windows, Linux , macOS och onlineversion är tillgänglig.

Mer avancerade gratisemulatorer finns tillgängliga från GXemul (tidigare känt som mips64emul -projektet) och QEMU -projekt. Dessa efterliknar de olika MIPS III och IV mikroprocessorerna utöver hela datorsystem som använder dem.

Kommersiella simulatorer är tillgängliga särskilt för inbyggd användning av MIPS -processorer, till exempel Wind River Simics (MIPS 4Kc och 5Kc, PMC RM9000, QED RM7000, Broadcom/Netlogic ec4400, Cavium Octeon I), Imperas (alla MIPS32- och MIPS64 -kärnor), VaST System (R3000, R4000) och CoWare (MIPS4KE, MIPS24K, MIPS25Kf och MIPS34K).

CREATOR-simulatorn är bärbar och låter dig lära dig olika monteringsspråk för olika processorer (CREATOR har exempel med implementering av MIPS32- och RISC-V-instruktioner).

WepSIM är en webbläsarbaserad simulator där en delmängd av MIPS-instruktioner är mikroprogrammerade. Denna simulator är mycket användbar för att lära sig hur en CPU fungerar (mikroprogrammering, MIPS -rutiner, fällor, avbrott, systemsamtal, etc.).

Se även

Referenser

Vidare läsning

externa länkar