前言:身為嵌入式處理器矽智財提供廠商的巨頭,MIPS也是以技術見長的領導廠商之一,從1984年成立以來,開發出了許多款廣為人知的32以及64位元處理器,雖然目前在市佔率上遜色於ARM架構,但是在整個處理器的發展歷史上,可說佔有比ARM架構更重要的地位。
■
RISC簡史 在談到MIPS架構之前,我們先瞭解一下RISC架構的起源。在傳統加速處理器效能的方式中,內建大量的暫存器以及快取記憶體,在設計上是最直覺且方便的方式,不過大量的暫存器與快取記憶體將會佔用大量的電晶體,而既然暫存器與快取記憶體的內建已經是不可避免的趨勢,那麼只好從縮減指令集的方向去著手,以求減少晶片的空間使用。
處理器所使用的指令稱為機器碼(machine code),每個機器碼在處理器內部則是由一連串的微指令所構成。由於機器碼分解成微指令的所需時間相當多,為了節省時間,處理器設計者便將這些微指令以硬體線路(hardwired)的方式內建在處理器中,這些硬體線路指令越多,理論上執行的速度也會越快,但是所佔得晶片空間也會相對變大,因此如何去取捨,變成了後來RISC與CISC兩大架構處理器在設計概念上的不同。
RISC架構中,最初被入選的指令及僅僅只有39條,由於數目非常的少,因此就被稱為精簡指令集(RISC,Reduced Instruction Set Computer),而另一派認為指令集越完備越好的設計概念,就成了CISC的始祖。由於兩派出發點不同,基本上也很難分出兩者架構的優劣,但是就實際應用來說,RISC可以在最精簡的電晶體數目內,在同一個時脈週期中,達成較多的指令執行目的,除了在省電方面可以有較佳的表現以外,對於晶片製造的複雜度也可以有效降低。
除了在指令集的精簡之外,RISC架構處理器中也搶先引進了幾個非常先進的概念,這些概念也被後來出名的CISC架構所引用。首先,便是大量增加暫存器的數目,減少存取主記憶體的機會,其次,便是將指令管線化,利用管線化,可在單一週期內執行更多指令,而為了加強管線化的效益,進一步加入了分支預測功能,並且採用超純量執行概念,可內建多組執行單元等。
RISC架構已經被證明是遠遠先進於過去的CISC競爭者,但是CISC陣營的優勢在於市場普及率高,九成以上的電腦環境中,皆是採用CISC技術,在大環境的驅使之下,CISC陣營也有更多本錢去改進CISC本身架構的瓶頸,雖然基本上,就是將RISC已使用的技術給搬到CISC處理器中而已。
在個人電腦以及伺服器環境中的競爭失利,以及對整個市場動態掌握的不佳,讓許多優秀的RISC處理器研發廠商就此從市場中消失,因此,RISC陣營除了鞏固在大型電腦中的競爭優勢以外,並進一步往嵌入式應用發展,由於RISC架構上非常適用於精簡以及低耗電量訴求的運算環境,在嵌入式應用之中,幾乎可說是RISC陣營的天下。
■
MIP架構的起源 MIPS架構起源,可追溯到1980年代,當時主要有兩所大學在進行RISC架構研發,其中之一是史丹佛大學的團隊,而另一所則是柏克萊大學。柏克萊大學的RISC架構主要著重在硬體架構的改進,除了管線(pipeline)概念的引進以外,也加入了分支延遲(branch delay)的技術,而史丹佛大學團隊的概念就顯得簡單許多,利用簡單的硬體架構,以及編譯器的最佳化,來達到可觀的效能輸出。就當時的研究成果顯示,史丹佛大學團隊的MIPS架構,效能表現明顯要高出柏克萊大學團隊的管線式RISC架構一截。
MIPS公司成立於1984年,隨後在1986年推出第一款R2000處理器,在1992年時被SGI所併購,後來在1998年脫離了SGI,成為MIPS技術公司,並且在1999年重新制定公司策略,將市場目標導向嵌入式系統,並且統一旗下處理器架構,區分為32-bit以及64-bit兩大家族,以技術授權成為主要營利模式。
■
MIPS處理器指令時序與最佳化 由於MIPS處理器是個以管線方式工作的處器,因此執行程式碼的速度,就相當依賴管線的工作方式。絕大多數MIPS指令需要在管線RD階段取得足夠的operands,並且在緊接著ALU階段之後產生結果。由於MIPS架構中,大多數的指令皆能遵照這樣的運作方式進行處理,因此在指令處理效率上幾乎都能夠達到理論上的最大值。不過少部份狀況之下,比如說,如果下一條指令必須要靠前一條指令的執行結果來進行運算處理的話,如果在前一條指令處理完之前,另一條指令就搶著進入管線,那麼將會遭遇到不可預料的錯誤。因此即使MIPS的名稱是來自於Microprocessor without interlocked pipeline stages,亦即不含Interlock機制的管線階層微處理器,結果還是無法避免的也在R4000處理器中加入了interlock機制,避免兩個具有結果相依性的指令在第一個結果還運算沒出來時,第二個指令就搶先進入管線的狀況。
當然,早從MIPS初代架構中,就已經針對管線中Interlock對於效能減損的現象做出相對應的設計,不過在效能需求之下,走向管線設計已經成為趨勢,隨著處理器內部管線設計越趨複雜,當初的構想已經明顯不符實際應用所需,因此除了加入Interlock機制以外,在編譯器方面的加強也是重點。透過編譯器的最佳化,可以有效的避免Interlock現象的發生,同時也降低了因為Interlock而帶來的效能減損。在大多數單一執行緒的MIPS處理器中,大多數指令可在一個時脈週期內完成,因此在程式設計階段中,某些需要4或5個週期以上才能完成的指令應該可以被輕易的辨識出來,並且與其他指令進行合併處理。通常這樣的方式對浮點運算方面會有相當程度的助益,不過對於整數運算方面影響不大。
■
MIPS架構的限制 此外,MIPS系架構還有一些缺點,或應該說是設計上的特性,主要也是集中在處理管線部份,這些問題主要有以下幾種:
分支延遲:在所有的MIPS處理器中,跟在分支指令之後的指令,即使在與前一個分支指令流向分歧之後,依然會被處理器所執行,因此在之後的MIPSⅡ體系中,加入了Branch-likely指令,在處理類似的狀況時,在分支指令其後的指令只有在前一個分支被接受時,才會被執行,不過除非自行指定分之後的指令,在加強後的編譯器的處理下,分支所帶來的延遲將顯得不明顯。
載入延遲:在MIPSⅠ指令集中,load指令將無法再次載入才剛被load指令本身所載入的資料,若是有需要再度載入,那麼必須在兩個load流程之間,使用其他指令來區隔,甚至是使用空指令來空轉一週,以便讓load指令可再度進行載入。當然,在這方面的處理特性上,大多也是由編譯器代勞了,程式設計師不需要太特別去注意。
整數乘法與除法的問題:由於MIPS架構中,整數乘法/除法單元是與ALU單元分開的,因此並沒有PRECISE EXCEPTION處理,當處理器在進行處理時,萬一遇到一場狀況而必須中斷時,能夠精確定位,並且讓暫存器重新指向中斷處理後恢復程式執行的正確位址,雖然PRECISE EXCEPTION處理的代價非常大,它等於是中斷了整個管線的運作,而其所帶來的效能減損在越多階管線的處理器中越明顯,因此在編譯器階段中,通常會會確認過運算指令不會帶來異常,才能進入處理單元中進行處理。
浮點運算單元的問題:由於浮點運算需要耗費多個處理器時脈週期來進行,因此在MIPS處理器架構中,大多會有獨立的浮點運算處理管線,構成內部的輔助處理器架構,由於浮點運算單元可以與其後的指令並行處理,因此當並行處理的指令要去存取尚未計算完成的浮點運算結果暫存器時,處理器便會停止執行,因此這部份的處理也需要大量的編譯器最佳化。
處理器控制指令:由於改變處理器的狀態暫存器內容時,將會連帶影響到處於管線內部所有階段的東西,因此在盡興這方面的操作時,就必須格外的謹慎,以避免產生意料之外的結果。
■
MIPS處理器家族介紹
▲R2000電晶體架構。(圖片來源:cpu-world.com)
R2000:最初商業化的MIPS處理器型號為R2000,於1985年所發表。R2000的特色就是在晶片架構中,附加了一個獨立的多重週期乘法與除法單元,而為了從這個單元中獲取計算結果,也增加了幾條新指令來進行處理,而為了增加編譯之後的程式碼密度,這些指令也是被Interlock處理的。
R2000具有兩個32-bit的通用暫存器,並且可支援高達4個輔助處理器,其中之一內建於處理器內部,專門負責exceptions以及traps狀況的處理,這些輔助處理器中也包含了一個可選購的浮點運算器,稱為R2010 FPU,這個浮點運算器可處理32個32-bit暫存器,並且可以被當作是16個64-bit的倍精度暫存器使用。
▲被應用於SONY遊樂器的R3000A。(圖片來源:cpu-world.com)
R3000:繼承了大為風光的R2000架構,R3000處理器增加了64KB的快取記憶體作為指令與資料的快取。並且支援了快取的一致性處理,以備將來作為多處理器平行處理之用。雖然R3000的多路處理器支援其實並不完備,不過它仍成為當時多路處理器架構的典範之一。R3000也內建了記憶體管理單元,而作為MIPS首次在市場上獲得成功行銷的產品,R3000成功銷售了100萬顆以上,而後續的R3000A更是成為傳奇,光是在SONY公司的PlayStation遊樂器中,就銷售了超過1億顆以上(截至2006年PlayStation停止生產為止)。
R3000家族中,後續也有Pacemips公司生產R3400處理器,而已經被VIA所併購的IDT公司也生產過R3500處理器。這些R3000家族中都有個一樣的特點,那就是都與專用的浮點運算處理器R3010配對設計。其後東芝公司的R3900則可說是最初應用於手持式裝置的MIPS架構SoC產品,支援WinCE作業系統。
▲R4400處理器晶片。(圖片來源:cpu-world.com)
R4000:此一系列處理器是在1991年發表,是MIPS最初的全64位元架構處理器,與R3000家族不同的是,其浮點運算單元是採用獨立的晶片架構,透過外部連結的設計,在產品設計彈性上也可以有所提昇,畢竟不是所有的運算還經都需要浮點運算能力。藉由當時所稱的super pipeline架構(deep pipeline架構的別稱),可達到相當高的時脈表現,而為了讓晶片更容易達到高時脈,降低了內部的快取容量。隨後推出的R4400,則是將一階快取增加到16KB,彆且能夠控制附加的2階快取記憶體,容量可達1MB。隨後也推出了低成本R4200方案,以針對各種入門產品運算需求。而過不久所推出的R4300,在成本控制上更為精進,基本上它只是一個具有32-bit匯流排的R4200處理器。R4300也被應用在任天堂公司的Nintendo64遊樂器中,當時是由NEC所生產。
後來由MIPS脫離出來的Quantum Effect Devices公司,設計了R4600與R4700、R4650以及R5000處理器,由於MIPS所設計的R4000系列,為了重視時脈表現,而犧牲了快取記憶體的容量,QED便強調大容量快取記憶體所能帶來的好處。R4600與R4700被使用於SGI公司的Indy工作站中,同樣的也被廣泛應用於CISCO公司的路由器產品中。而R5000處理器則是內建了更具有彈性的單精度浮點運算, 因此基於R5000處理器的SGI Indy圖形工作站,在圖形加速能力上,相較起R4000平台,有著相當大的進步。
而隨後的RM7000系列與RM9000系列則是瞄準了嵌入式應用,像是網通產品,以及雷射印表機等。而QED公司後來被PMC-Sierra所併購,之後也持續發展MIPS架構的產品。
▲R8000電晶體架構。(圖片來源:MIPS)
R8000:這是MIPS首個超純量架構的處理器,具有在1個時脈週期內同時進行2個ALU以及兩個記憶體操作的能力,該處理器架構被平均分散到6個模組中:整數處理單元、浮點運算單元、3個可完全自訂的二階快取旗標記憶體(2個負責存取,1個負責匯流排監聽),以及1個快取記憶體控制ASIC。在R8000中,包含了2個完全管線化的倍精度乘加運算單元,可以從晶片外部的4MB二階快取串流傳輸大量資料。雖然R8000在整數運算上的效能並不是特別突出,但是其高性能價格比,仍然可以滿足大部分精打細算的使用者,而在浮點運算方面,也能徹底滿足科學運算等的需求,但是R8000僅在市面上出現了短短一年,而且售出的數量也相當稀少,在商品化上,並不能算是相當成功。
▲R10000處理晶片。(圖片來源:cpu-world.com)
R10000:1995年推出的R10000,採用單一晶片設計,並以高於R8000的時脈速度執行,而且也擁有較大的32KB指令和資料快取記憶體,同樣的,R10000也是個超純量架構處理器。R10000最主要的進化,在於其具有非循序執行的能力,即使在一個只具有單一記憶體管線,以及更為單純的處理器上,都能帶來非常大的整數效能增長。低價,且集積度高,使得R10000備受歡迎。而其後的R10000系列處理器,也都是基於同一個架構之下的核心,R12000單純是製程改進的高時脈版R10000,R14000則是支援了具備有更高時脈表現的外接DDR SRAM,並且支援了高達200MHz的前端匯流排運作速度,而R16000集R16000A則是以更佳的製程、更大的一階快取,以及更小的晶片面積來作為主要訴求。
▲MIPS32 24K架構圖。(圖片來源:MIPS)
▲MIPS32 34K架構圖。(圖片來源:MIPS)
MIPS32和MIPS64:近年來,MIPS改採用以32位元以及64位元核心的區分方式,來分類其產品線,並依此準則開發行銷其產品,在32位元處理器方面,主要有4K家族、24K家族,以及最新推出的34K家族。4K家族其實就是過去的R4000架構改進版,在這個家族中分為主打多路處理器的M4K、內建安全機制的4KS,以及加強效能表現的高時脈4KE處理器。4K家族都是5階管線架構,並內建64KB的快取記憶體。在24K家族方面,主要是8階管線,內建64KB的快取記憶體,主要是針對掌上型行動裝置、DVD播放機、機上盒、數位電視等嵌入式應用。而在最新的34K家族中,則是在9階管線架構中,加入了多執行緒的支援,可同時並行處理多個軟體,甚至可作為虛擬切割應用,同時安裝多個作業系統。在24K家族中,也加入了不少DSP特性,可提供更高的計算能量。
▲PlayStation2所使用的EmotionEngine核心即是採用MIPS64架構。(圖片來源:SONY)
而MIPS64家族中,則分為5K家族以及20Kc核心,5K家族針對消費性電子所設計,其高效能表現以及64-bit浮點運算能力表現算是相當優秀,而20Kc核心則是1個全雙執行緒設計,並內建MIPS3D ASE的SIMD多媒體加速指令,5K家族是6階管線架構,20Kc則為7階管線,20Kc主要針對高效能多媒體嵌入式系統應用所設計,因此不論在浮點運算以及多媒體加速方面,都比MIPS其他產品更出色。
不過在64位元處理器方面,由於需求較小,產品開發難度上也較高,因此較少被採用,自從2000年推出5K家族以及20Kc以後,並把MIPS64架構授權給SONY開發出PlayStation2遊戲機,大出過一陣子鋒頭,之後便沒有推出過新的64位元家族了。因此目前MIPS處理器在嵌入式系統市場的主流任務,就落在了32位元架構上,並且也得到了相當不錯的迴響。
文章评论(0条评论)
登录后参与讨论