Loading AI tools
指令集架構 来自维基百科,自由的百科全书
MIPS(Microprocessor without Interlocked Pipeline Stages)[1],是一種採取精簡指令集(RISC)的指令集架構(ISA)[2]:A-1[3]:19,由美國MIPS計算機系統公司開發,現為美普思科技。MIPS廣泛被使用在許多電子產品、網路設備、個人娛樂裝置與商業裝置上。最早的MIPS架構是32位元,最新的版本已經變成64位元。商業市場主要競爭對手為ARM與RISC-V。
MIPS架構有多個版本,包括MIPS I、II、III、IV,以及MIPS V,它們各是MIPS32/64( 32位元、64位元的實現)發布的五個版本。早期的MIPS架構只有32位的版本,隨後才開發64位的版本。截至2017年4月,MIPS32/64的當前版本是MIPS32/64 Release 6[4][5]。MIPS32/64與MIPS I-V的主要區別不僅在於它除了用戶態架構外,還定義了特權內核模式的系統控制協處理器。
MIPS架構有幾個可選的拓展,比如MIPS-3D,它是一個專用於常見3D計算任務的浮點SIMD指令集的簡單集合[6];MDMX(MaDMaX)是一個應用更加廣泛的整數SIMD指令集,它使用了64位浮點數寄存器;MIPS16e則為提供了指令流壓縮的功能,這可以減小程序的體積[7];MIPS MT則提供了多線程的能力[8]。
在一些大學和技術學校中計算機架構的課程上,學生們通常會學習MIPS架構[9]。這個架構極大地影響了後來的精簡指令集架構,如Alpha。2021年3月,MIPS宣布MIPS架構的開發已經結束,因為該公司正在向RISC-V過渡[10]。
![]() | 此章節需要擴充。 (2020年2月) |
MIPS架構的第一個版本是由MIPS計算機系統公司為其R2000微處理器設計的,這是第一個MIPS的實現。MIPS和R2000都是在1985年一起推出的[來源請求]。當MIPS II推出時,MIPS更名為MIPS I,以區別於新版本[3]:32。
MIPS計算機系統公司的R6000微處理器(1989年)是第一個MIPS II實現[3]:8,專為服務器設計,由Bipolar Integrated Technology製造和銷售,但在商業上失敗了。在1990年代中期,許多用於嵌入式系統的新32位MIPS處理器都是MIPS II實現,因為1991年引入64位MIPS III架構,使得直到1999年MIPS 32推出前,MIPS II都是最新的32位MIPS架構[3]:19。
MIPS計算機系統公司的R4000微處理器(1991年)是第一個MIPS III實現。它設計用於個人、工作站和服務器計算機。MIPS計算機系統積極推廣MIPS架構和R4000,建立高級計算環境(ACE)聯盟以推進其高級RISC計算(ARC)標準,旨在將MIPS建立為主導的個人計算平台。ARC在個人計算機上幾乎沒有成功,但R4000(和R4400衍生產品)廣泛用於工作站和服務器計算機,尤其是其最大的用戶硅谷圖形公司(SGI)。R4000的其他用途包括高端嵌入式系統和超級計算機。MIPS III最終由許多嵌入式微處理器實現。Quantum Effect Design的R4600(1993年)及其衍生產品廣泛應用於高端嵌入式系統和低端工作站和服務器。MIPS科技的R4200(1994年)專為嵌入式系統、筆記本電腦和個人電腦而設計。NEC製造的衍生產品R4300i用於N64遊戲機。N64和PlayStation是1990年代中期MIPS架構處理器的最大用戶之一。
第一個MIPS IV實現是MIPS科技R8000微處理器芯片組(1994年)。R8000的設計始於硅谷圖形公司,它僅用於高端工作站和服務器,用於高性能浮點工作負載關鍵的科學和技術應用。後來的實現是MIPS科技的R10000(1996年),Quantum Effect Devices的R5000(1996年)和RM7000(1998年)。NEC和東芝製造和銷售的R10000及其衍生產品被NEC、Pyramid Technology、SGI和Tandem Computers(以及其他公司)用於工作站、服務器和超級計算機。R5000和R7000可用於高端嵌入式系統、個人計算機以及低端工作站和服務器。東芝R5000的衍生產品R5900用於索尼的Emotion Engine,該引擎為其PlayStation 2遊戲機提供動力。
MIPS V於1996年10月21日在微處理器論壇上與MIPS數字媒體擴展(MDMX)擴展一起發布,旨在提高3D圖形變換的性能[11]。在1990年代中期,非嵌入式MIPS微處理器的主要用途是SGI的圖形工作站。MIPS V使用僅整數的MDMX擴展,以此提高3D圖形應用程序的性能[12]。MIPS V從未真正實現。1997年5月12日,SGI發布了「H1」(「野獸」)和「H2」(「船長」)微處理器。前者計劃是第一個MIPS V實現,預計於1999年上半年推出[13]。「H1」和「H2」項目後來合併,最終在1998年取消。雖然沒有任何MIPS V實現,但MIPS64 Release 1(1999年)基於MIPS V並保留其所有功能作為可選的協處理器1(FPU)功能,稱為配對單精度(Paired-Single)。
當MIPS科技公司於1998年從SGI分拆出來時,它重新專注於嵌入式市場。直到MIPS V,每個後續版本都是前一個版本的嚴格超集,但是發現這是一個問題[來源請求],隨後架構更改為分別定義32位和64位:MIPS32和MIPS64。兩者都於1999年推出[14]。MIPS32基於MIPS II,,並帶有MIPS III、MIPS IV和MIPS V的一些附加特性;MIPS64基於MIPS V[14]。NEC、東芝和SiByte(後來被博通收購)在MIPS64發布後都獲得了許可證。飛利浦、LSI Logic、IDT、Raza Microelectronics, Inc.、凱為、龍芯和君正已加入其中。MIPS32/MIPS64 Release 5於2012年12月6日發布[15]。第4版被跳過,因為在許多亞洲文化中,數字4被認為是不吉利的[16]。
2018年6月—美國矽谷新創AI晶片公司Wave Computing宣佈完成收購MIPS公司股權,MIPS公司維持獨立運作,並預計開源MIPS架構[17]。
2018年12月,MIPS架構的新所有者Wave Computing宣布MIPS ISA將在一個名為MIPS開放計劃的項目中開源[18]。該計劃旨在開放對32位和64位設計的最新版本的訪問,使其無需任何許可或版稅即可使用,並授予參與者現有MIPS專利的許可[19][20][21]。
2019年3月,該架構的一個版本在免版稅許可下可用[22],但該年晚些時候該程序再次關閉[23]。
2021年3月,WaveComputing宣布停止MIPS架構的開發。該公司已加入RISC-V基金會,未來的處理器設計將基於RISC-V架構[24][25]。
![]() | 此章節需要擴充。 (2020年2月) |
MIPS是一種模塊化架構,最多支持四個協處理器(CP0/1/2/3)。在MIPS術語中,CP0是系統控制協處理器(MIPS I-V中處理器的重要部分,與實現相關),CP1是可選的浮點運算器(FPU),CP2/3是可選的由實現定義的協處理器(MIPS III刪除了CP3並將其操作碼重新用於其他目的)。例如,在PlayStation視頻遊戲機中,CP2是幾何變換引擎(GTE),它可以加速3D計算機圖形中的幾何處理。
MIPS是一種載入-儲存架構(也稱為寄存器-寄存器架構);除了用於訪問電腦記憶體的加載/存儲指令外,所有指令都對寄存器進行操作。
MIPS I有32個32位通用寄存器(GPR)。寄存器$0硬編碼為零,寫入的內容將被丟棄。寄存器$31是鏈接寄存器。對於與其他指令異步運行的整數乘法和除法指令,提供了一對32位寄存器HI和LO。有一小組指令用於在通用寄存器和HI/LO寄存器之間複製數據。
程序計數器(PC)有32位。低二位總是為零,因為MIPS I指令有32位長,並且與它們的自然字邊界對齊。
指令分為三種類型:R型(Register)、I型(Immediate)和J型(Jump)。三種類型的指令的最高6位均為6位的opcode碼。從25位往下,
三種用於核心指令集的指令圖示如下:
類型 | 位 | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
R | opcode (6) | rs (5) | rt (5) | rd (5) | shamt (5) | funct (6) | ||||||||||||||||||||||||||
I | opcode (6) | rs (5) | rt (5) | immediate (16) | ||||||||||||||||||||||||||||
J | opcode (6) | address (26) |
MIPS I有加載和存儲8位的字節、16位的半字和32位的字的指令。僅支持一種尋址模式:基址+位移。由於MIPS I是32位架構,因此加載少於32位的值需要將數據有符號或無符號擴展到32位。以「unsigned」為後綴的加載指令執行無符號擴展;否則執行有符號擴展。加載指令從GPR(rs)的內容中獲取基址,並將結果寫入另一個GPR(rt)。存儲指令從GPR(rs)的內容中獲取基址,從另一個GPR(rt)獲取存儲數據。所有加載和存儲指令都通過將基址與符號擴展的16位立即數相加來計算內存地址。MIPS I要求所有內存訪問都與其自然字邊界對齊,否則會發出異常信號。「左」或「右」為後綴的加載/存儲字指令用以支持高效的未對齊內存訪問。所有加載指令後都有一條指令的加載延遲槽。加載延遲槽中的指令不能使用加載指令加載的數據。加載延遲槽可以填充一條不依賴於加載的指令;如果找不到這樣的指令,則用nop代替。
MIPS I有執行加法和減法的指令。這些指令從兩個GPR(rs和rt)獲取它們的操作數,並將結果寫入第三個GPR(rd)。此外,加法可以從16位立即數(有符號擴展為32位)中獲取操作數之一。加減法指令有兩種變體:默認情況下,如果結果溢出則發出異常信號;帶有「unsigned」後綴的指令不會發出異常信號。溢出檢查將結果解釋為32位二進制補碼整數。MIPS I有執行按位邏輯AND、OR、XOR和NOR的指令。這些指令從兩個GPR獲取其操作數並將結果寫入第三個GPR。AND、OR和XOR指令也可以從16位立即數(無符號擴展到32位)中獲取操作數之一。如果指定的關係為真或假,則Seton關係指令將1或0寫入目標寄存器。這些指令的操作數來自兩個GPR或一個GPR和一個16位立即數(符號擴展為32位),並將結果寫入第三個GPR。默認情況下,操作數被解釋為有符號整數。以「unsigned」為後綴的指令的變體將操作數解釋為無符號整數(即使是對於來自有符號擴展16位立即數的操作數)。
Load Immediate Upper指令將16位立即數複製到GPR的高16位。它與Or Immediate指令結合使用以將32位立即數加載到寄存器中。
MIPS I有執行左右邏輯移位和右算術移位的指令。操作數從一個GPR(rt)中獲得,並將結果寫入另一個GPR(rd)。位移距離是從GPR(rs)或5位「位移量」(「sa」字段)中獲得的。
MIPS I有有符號和無符號整數乘法和除法的指令。這些指令從兩個GPR獲取其操作數,並將其結果寫入一對稱為HI和LO的32位寄存器,因為它們可能與其他CPU指令分開(並同時)執行。對於乘法,64位乘積的高位和低位分別寫入HI和LO。對於除法,商寫入LO,餘數寫入HI。為了訪問結果,提供了一對指令(從HI移動和從LO移動)將HI或LO的內容複製到GPR。這些指令是互鎖的:對HI和LO的讀取不會越過未完成的要寫入HI和LO的算術指令。另一對指令(Move to HI或Move to LO)將GPR的內容複製到HI和LO。這些指令用於在異常處理後將HI和LO恢復到其原始狀態。讀取HI或LO的指令必須由不寫入HI或LO的兩條指令分隔。
所有MIPS I控制流指令後需要接一個分支延遲槽。除非分支延遲槽用執行有用工作的指令填充,否則要使用nop。MIPS I分支指令將GPR(rs)的內容與零或另一個GPR(rt)的內容作為有符號整數進行比較,如果指定的條件為真,則跳轉分支。執行位置將轉移到通過將16位偏移量左移兩位、對18位結果進行有符號擴展,並將32位符號擴展結果與程序計數器(指令地址)和810作和得到。跳轉有兩個版本:絕對跳轉和寄存器間接跳轉。絕對跳轉(「Jump」和「Jump and Link」)通過將26位instr_index左移兩位,並將28位結果與分支延遲槽指令的指令地址高四位連接來計算跳轉的地址。寄存器間接跳轉將控制轉移到來自GPR(rs)的地址處的指令。來自GPR的地址必須是字對齊的,否則在執行分支延遲槽中的指令後會發出異常信號。鏈接的分支和跳轉指令(「Jump and Link Register」除外)將返回地址保存到GPR 31。「Jump and Link Register」指令允許將返回地址保存到任何可寫的GPR。
MIPS I有兩條軟件用於發出異常信號的指令:System Call和Breakpoint。System Call被用戶態軟件用來進行內核調用;Breakpoint用於內核異常處理程序轉移控制到調試器。兩條指令都有一個20位的代碼(Code)字段,可存儲給異常處理程序的操作環境特定信息。
MIPS有32個浮點寄存器。兩兩寄存器配對用於雙精度數。奇數號寄存器不能用於算術或分支,只是作為雙精度寄存器對的一部分,導致大多數指令只有16個可用寄存器(移動/複製和加載/存儲不受影響)。
單精度指令由.s後綴表示,而雙精度由.d後綴表示。
MIPS II移除了加載延遲槽[3]:41並添加了幾組指令。對於共享內存多處理,添加了「Synchronize Shared Memory」、「Load Linked Word」和「Store Conditional Word」指令。添加了一組Trap-on-Condition指令。如果求值為真,這些指令將導致異常。所有現有的分支指令都有了「可能」分支的版本,僅在分支跳轉要執行時才執行分支延遲槽中執行指令[3]:40。在某些情況下,這些指令允許用有用的指令填充分支延遲槽,以此提高性能[3]:212。為COP1-3添加了雙字加載和存儲指令。與其他內存訪問指令一致,這些加載和存儲要求雙字自然對齊。
浮點協處理器指令集也添加了幾條指令。添加了符合IEEE 754的浮點平方根指令。它支持單精度和雙精度操作數。添加了一組將單精度和雙精度浮點數轉換為32位字的指令。它們補充了現有的轉換指令,允許用指令控制IEEE捨入模式,而不是通過浮點控制和狀態(Floating Point Control and Status)寄存器。
MIPS III是向後兼容MIPS II的擴展,增加了對64位元內存尋址和整數運算的支持。64位數據類型稱為雙字,MIPS III將通用寄存器、HI/LO寄存器和程序計數器擴展到64位以支持。添加了新指令來加載和存儲雙字,對它們執行整數加、減、乘、除和移位運算,以及在GPR和HI/LO寄存器之間移動雙字。必要時,現有最初定義為對32位字進行操作的指令被重新定義,以對32位結果進行符號擴展,使得大多數指令對字和雙字進行的處理行為相同。在這些重新定義的指令中包括「Load Word」。在MIPS III中,它將字有符號擴展到64位。為了補充「Load Word」,添加了一個無符號擴展版本。
R指令格式無法指定完整的64位位移距離(其5位位移量字段太窄,無法指定雙字的位移距離),MIPS III對於每個MIPS I的位移指令,提供了三個64位的版本。第一個版本是原始移位指令的64位版本,用於指定介於0-31位之間的常量位移距離。第二個版本與第一個版本類似,但將位移量字段的值加上3210,以便可以指定32-64位之間的常量位移距離。第三個版本從GPR的六個低位獲取位移距離。
MIPS III在現有內核和用戶權限級別之間添加了一個「管理員」權限級別。此功能僅影響由實現定義的系統控制處理器(協處理器0)。
MIPS III移除了協處理器3(CP3)相關支持指令,並為新的雙字指令重新使用了其操作碼。其餘的協處理器獲得了在協處理器寄存器和GPR之間移動雙字的指令。浮點通用寄存器(FGR)擴展到64位,並且取消了指令僅使用偶數寄存器的要求。這與早期版本的架構不兼容;浮點控制/狀態寄存器中的一位用於在MIPS I和II兼容模式下操作MIPS III浮點單元(FPU)。浮點控制寄存器沒有為兼容性進行擴展。添加的唯一新浮點指令是在CPU和FPU之間複製雙字的指令,將單精度和雙精度浮點數轉換為雙字整數,反之亦然。
MIPS IV是該架構的第四個版本。它是MIPS III的超集,與MIPS的所有現有版本兼容。MIPS IV主要旨在提高浮點(FP)性能。為了改進對操作數的訪問,添加了用於FP加載和存儲的索引尋址模式(基址+索引,均來自GPR),以及用於執行內存預取和指定緩存提示的預取指令(這些指令同時支持基址+偏移量和基址+索引尋址模式)。
MIPS IV添加了幾個特性來改進指令級並行性。為了緩解由單個條件位引起的瓶頸,在浮點控制和狀態寄存器中添加了七個條件代碼位,使總數達到八個。重新定義了FP比較和分支指令,以便它們可(分別)指定寫入或讀取哪個條件位;並且刪除了FP比較與讀取由比較指令寫入條件位的FP分支之間的延遲槽。通過GPR和FPR條件移動指令的形式部分添加了對分支預測的支持;並且實現可以選擇為IEEE 754陷阱提供精確或不精確的例外。
MIPS IV為單精度和雙精度浮點數添加了幾個新的浮點算術指令:融合乘加減、倒數和倒數平方根。FP融合乘加減指令執行一次或兩次捨入(由實現定義),(分別)超過或達到IEEE 754精度要求。FP倒數和倒數平方根指令不符合IEEE 754精度要求,並且產生的結果與所需精度相差一到兩個單位(它是實現定義的)。這些指令服務於指令延遲比準確性更重要的應用程序。
MIPS V添加了一種新的數據類型,配對單精度(PS),它由兩個單精度(32位)浮點數組成,存儲在現有的64位浮點寄存器中。添加了現有算術、比較和條件移動浮點指令的變體,以便以SIMD方式對這種數據類型進行操作。添加了用於加載、重排和轉換PS數據的新指令[3]:426–429。這是第一個利用現有資源實現的浮點SIMD指令集[12]。
MIPS32的第一個版本基於MIPS II,添加了來自R4000和R5000系列64位處理器的條件移動、預取指令和其他特性[14]。MIPS64的第一個版本增加了一個MIPS32模式來運行32位代碼[14]。向MIPS32和MIPS64規範添加了以前在某些實現中可用的MUL和MADD(乘加)指令,同樣的還有緩存控制指令[14]。
2014年的MIPS32/MIPS64 Release 6添加了以下內容:[29]
刪除了不常用的指令:
重新組織指令編碼,為未來的擴展騰出空間。
microMIPS32/64架構(分別)是MIPS32和MIPS64架構的超集,旨在取代MIPS16e ASE。MIPS16e的一個缺點是在處理任何16位指令之前需要切換模式。microMIPS將最常用的32位指令編碼為16位指令版本。允許程序混合16位和32位指令而無需切換模式。microMIPS與MIPS32/64 Release 3一起推出,MIPS32/64的每個後續版本都有相應的microMIPS32/64版本。處理器可以單獨實現microMIPS32/64,或同時實現microMIPS32/64及其相應的MIPS32/64子集。從MIPS32/64 Release 6開始,對MIPS16e的支持結束,microMIPS是MIPS中唯一的代碼壓縮形式。
基本的MIPS32和MIPS64架構可以補充一些可選的架構擴展,這些擴展統稱為「應用程序特定擴展」(ASE)。這些ASE提供的功能可以提高某些工作負載的效率和性能,例如數字信號處理。
MIPS有幾個調用約定,尤其是在32位平台上。
O32 ABI是最常用的ABI,因為它是MIPS的原始System V ABI[34][35]。它嚴格基於堆棧,只有四個寄存器$a0-$a3可用於傳遞參數。堆棧上的空間是保留的,以防被調用者需要保存其參數,但調用者不會將寄存器存儲在那裡。返回值存儲在寄存器$v0中;第二個返回值可以存儲在$v1中。ABI形成於1990年,最後一次更新是在1994年。這種肉眼可見的緩慢,以及只有16個寄存器的老式浮點模型,促進了許多其他調用約定的擴散。它僅針對32位MIPS定義,但GCC創建了一個名為O64的64位變體[36]。
對64位,最常用的是SGI的N64 ABI。最重要的改進是現有八個寄存器可用於參數傳遞;它還將浮點寄存器的數量增加到32個。還有一個稱為N32的ILP32版本,它使用32位指針來處理較小的代碼,類似於x32 ABI。兩者都在CPU的64位模式下運行[36]。N32和N64 ABI將前八個參數傳遞給寄存器$a0-$a7中的函數;後續參數在堆棧上傳遞。返回值(或指向它的指針)存儲在寄存器$v0中;第二個返回值可以存儲在$v1中。在N32和N64 ABI中,所有寄存器都被認為是64位寬。
已有一些嘗試,使用更類似於N32的32位ABI替換O32。1995年的一次會議提出了MIPS EABI,其32位版本非常相似[37]。EABI啟發MIPS科技提出更激進的「NUBI」ABI,重用參數寄存器作為返回值[38]。GCC支持MIPS EABI,但LLVM不支持,兩者也不支持NUBI。
對於O32及N32/N64,返回地址存儲在$ra寄存器中。這是使用JAL(跳轉和鏈接)或JALR(跳轉和鏈接寄存器)指令自動設置的。(非葉子)MIPS子例程的函數序言將返回地址(在$ra中)推入堆棧[39][40]。
在O32和N32/N64上,堆棧向下增長,但N32/N64 ABI需要所有堆棧條目64位對齊。幀指針($30)是可選的,實際上很少使用,除非需要在運行時確定函數中的堆棧分配,例如調用了alloca()
。
對於N32和N64,返回地址通常存儲在棧指針之前的8個字節,儘管這可能是可選的。
對於N32和N64 ABI,函數必須保留$S0-$s7寄存器、全局指針($gp或$28)、棧指針($sp或$29)和幀指針($30)。O32 ABI相同,只是$gp寄存器需要由調用函數保存而不是被調用函數。
對於多線程代碼,線程本地存儲指針通常存儲在特殊硬件寄存器$29中,並通過使用mfhw(從硬件移動)指令訪問。已知至少有一個供應商將此信息存儲在$k0寄存器中,該寄存器通常保留供內核使用,但這不是標準的。
$k0和$k1寄存器($26-$27)保留供內核使用,不應由應用程序使用,因為內核可以隨時由於中斷、上下文切換或其他事件而更改這些寄存器。
名稱 | 編號 | 用途 | 被調保留? |
---|---|---|---|
$zero | $0 | 常量0 | 不適用 |
$at | $1 | 匯編臨時用 | 否 |
$v0–$v1 | $2–$3 | 函數返回值和表達式求值 | 否 |
$a0–$a3 | $4–$7 | 函數參數 | 否 |
$t0–$t7 | $8–$15 | 臨時 | 否 |
$s0–$s7 | $16–$23 | 臨時保存值 | 是 |
$t8–$t9 | $24–$25 | 臨時 | 否 |
$k0–$k1 | $26–$27 | 保留內核用 | 不適用 |
$gp | $28 | 全局指針 | 是(除PIC代碼) |
$sp | $29 | 棧指針 | 是 |
$fp | $30 | 幀指針 | 是 |
$ra | $31 | 返回地址 | 不適用 |
跨調用保留的寄存器是(按照約定)不會被系統調用或過程(函數)調用更改的寄存器。例如,$s-寄存器必須由需要使用它們的過程保存到堆棧中,而$sp和$fp總是按常量遞增,並在過程完成後遞減(以及它們指向的內存)。相比之下,$ra由任何普通函數調用(使用jal的函數調用)自動更改,並且$t-寄存器必須在任何過程調用之前由程序保存(如果程序在調用後需要其中的值)。
Linux上位置無關代碼的用戶空間調用約定還要求,當調用函數時,$t9寄存器必須包含該函數的地址[42]。這個約定可以追溯到MIPS的System V ABI補充規定[43]。
![]() | 此章節需要擴充。 (2020年2月) |
MIPS處理器用於嵌入式系統,例如住宅網關和路由器。最初,MIPS是為通用計算而設計的。在1980年代和1990年代,許多公司在個人、工作站和服務器計算機上使用MIPS處理器,例如DEC、MIPS Computer Systems、NEC、Pyramid Technology、SiCortex、Siemens Nixdorf、SGI,和Tandem Computers.
從歷史上看,N64、索尼PlayStation、PlayStation 2和PlayStation Portable等電子遊戲機都使用MIPS處理器。MIPS處理器在1990年代也曾在超級計算機中流行,但所有此類系統都從TOP500名單中掉了下來。這些用途最初由嵌入式應用程序補充,但在1990年代,MIPS成為嵌入式處理器市場的主流選擇,到2000年代,大多數MIPS處理器都用於這類應用。
在1990年代中後期,據估計生產的RISC微處理器中有三分之一是MIPS處理器[44]。
到2010年代後期,MIPS機器仍然普遍用於嵌入式市場,包括汽車、無線路由器、LTE調製解調器(主要為聯發科)和微控制器(例如PIC32M)。它們大多已淡出個人、服務器和應用領域。
開放虛擬平台(OVP)[45]包括可免費用於非商業用途的模擬器OVPsim、處理器模型庫、外圍設備和平台,以及使用戶能夠開發自己的模型的API。庫中的模型是用C語言編寫的開源模型,包括MIPS4K、24K、34K、74K、1004K、1074K、M14K、microAptiv、interAptiv、proAptiv 32位內核和MIPS64位5K系列內核.這些模型由Imperas[46]創建和維護,並與MIPS技術公司合作進行了測試,並得到了MIPS驗證標記。基於MIPS的示例平台包括裸機環境和用於引導未修改的Linux二進制映像的平台。這些平台模擬器可作為源代碼或二進制文件使用,速度快,非商業用途免費,並且易於使用。OVPsim由Imperas開發和維護,速度非常快(每秒數億條指令),旨在處理多核同構和異構架構和系統。
有一個免費的MIPS32模擬器(早期版本僅模擬R2000/R3000)稱為SPIM,用於教育。EduMIPS64[47]是一個GPL圖形跨平台MIPS64CPU模擬器,用Java/Swing編寫。它支持MIPS64 ISA的較大子集,並允許用戶以圖形方式查看CPU運行匯編程序時流水線中發生的情況。
MARS[48]是另一個基於GUI的MIPS仿真器,設計用於教育,特別是與Hennessy的《計算機組織和設計》一起使用。
WebMIPS[49]是一個基於瀏覽器的MIPS模擬器,具有通用流水線處理器的可視化表示。該模擬器對於逐步執行期間的寄存器跟蹤非常有用。
QtMips[50][51][52]為基礎計算機架構課程提供簡單的5階段管道可視化以及緩存原理可視化。提供Windows、Linux、macOS和在線版本。
GXemul(以前稱為mips64emul項目)和QEMU項目提供了更高級的免費模擬器。除了使用它們的整個計算機系統之外,它們還模擬各種MIPS III和IV微處理器。
商業模擬器特別適用於MIPS處理器的嵌入式使用,例如Wind River Simics(MIPS 4Kc和5Kc、PMC RM9000、QED RM7000、Broadcom/Netlogic ec4400、Cavium Octeon I)、Imperas(所有MIPS32和MIPS64內核)、VaST系統(R3000、R4000)和CoWare(MIPS4KE、MIPS24K、MIPS25Kf和MIPS34K)。
WepSIM[53]是一個基於瀏覽器的模擬器,其中MIPS指令的子集是微編程的。該模擬器對於學習CPU的工作方式(微編程、MIPS例程、陷阱、中斷、系統調用等)非常有用。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.