ARM架構(gòu)的歷史
一顆主要用于路由器的Conexant ARM處理器是Acorn電腦公司(Acorn Computers Ltd)于1983年開始的開發(fā)計(jì)劃。這個團(tuán)隊(duì)由Roger Wilson和Steve Furber帶領(lǐng),著手開發(fā)一種新架構(gòu),類似進(jìn)階的MOS Technology 6502處理器。Acorn有一大堆建構(gòu)在6502架構(gòu)上的電腦,因此能設(shè)計(jì)出一顆類似的芯片即意味著對公司有很大的優(yōu)勢。團(tuán)隊(duì)在1985年時開發(fā)出ARM1 Sample版,而首顆"真正"的產(chǎn)能型ARM2于次年量產(chǎn)。ARM2具有32位的數(shù)據(jù)總線、26位的尋址空間,并提供64 Mbyte的尋址范圍與16個32-bit的暫存器。這些暫存器其中有一顆做為(word大小)程式計(jì)數(shù)器,其前面6 bits和后面2 bits用來保存處理器狀態(tài)標(biāo)記(Processor Status Flags)。ARM2可能是全世界最簡單實(shí)用的32位微處理器,其僅容納了30,000個晶體管(相較于Motorola六年后的68000其包含了70,000顆)。
之所以精簡的原因在于它不含微碼(請參閱microcode)(這表示大概只有68000的1/3至1/4),而與現(xiàn)今大多數(shù)的 CPU 不同,它沒有包含任何的高速緩存。這個精簡的特色使它只需消耗很少的電能,卻能發(fā)揮比 Intel 80286 更好的效能。后繼的處理器ARM3更備有4KB的高速緩存,使它能發(fā)揮更佳的效能。在1980年代晚期,蘋果電腦開始與Acorn合作開發(fā)新版的ARM核心,由于這專案非常重要,Acorn甚至于1990年將設(shè)計(jì)團(tuán)隊(duì)另組成一間名為安謀國際科技(Advanced RISC Machines Ltd.)的新公司。也基于這原因,使得ARM有時候反而稱作Advanced RISC Machine而不是Acorn RISC Machine。由于其母公司ARM Holdings plc于1998年的倫敦交易市場和NASDAQ掛牌上市,使得Advanced RISC Machines成了ARM Ltd旗下?lián)碛械漠a(chǎn)品。這個專案到后來進(jìn)入了ARM6,首版的式樣在1991年釋出,然后蘋果電腦使用ARM6架構(gòu)的ARM 610來當(dāng)作他們Apple Newton PDA的基礎(chǔ)。在1994年,Acorn使用ARM 610做為他們Risc PC電腦內(nèi)的CPU。在這些變革之后,內(nèi)核部份卻大多維持一樣的大小。ARM2有30,000顆晶體管,但ARM6卻也只增長到35,000顆。主要概念是以O(shè)DM的方式,使ARM核心能搭配一些選配的零件而制成一顆完整的CPU,而且可在現(xiàn)有的晶圓廠里制作并以低成本的方式達(dá)到很大的效能。ARM的經(jīng)營模式在于出售其知識產(chǎn)權(quán)核(IP core),授權(quán)廠家依照設(shè)計(jì)制作出建構(gòu)于此核的微控制器和中央處理器。最成功的實(shí)作案例屬 ARM7TDMI,幾乎賣出了數(shù)億套內(nèi)建微控制器的裝置。DEC 購買這個架構(gòu)的產(chǎn)權(quán)(此處會造成混淆在于其本身也制造 DEC Alpha 并研發(fā)出StrongARM。在 233 MHz 的頻率下,這顆 CPU 只消耗一瓦特的電能(后來的芯片消耗得更少)。這項(xiàng)設(shè)計(jì)后來為了和 Intel 的控訴和解而技術(shù)移轉(zhuǎn),Intel 因而趁機(jī)以 StrongARM 架構(gòu)補(bǔ)強(qiáng)他們老舊的 i960 產(chǎn)線。Intel 后來開發(fā)出他們自有的高效能實(shí)作,稱作XScale,之后也賣給了 Marvell。
支援智能型手機(jī)、PDA和其他手持裝置最常見的架構(gòu)是ARMv4。XScale 和 ARM926 處理器是ARMv5TE,而且比起建構(gòu)在 ARMv4 的 StrongARM、ARM925T 和 ARM7TDMI 等處理器還更常見于許多高階裝置上。架構(gòu)版本如下欄所示。設(shè)計(jì)文件講求精簡又快速的設(shè)計(jì)方式,整體電路化卻又不采用微碼,就像早期使用在Acorn微電腦的8位6502處理器。ARM架構(gòu)包含了下述RISC特性:讀取/儲存 架構(gòu)不支援地址不對齊內(nèi)存存取(ARMv6內(nèi)核現(xiàn)已支持)正交指令集(任意存取指令可以任意的尋址方式存取數(shù)據(jù)Orthogonal instruction set)大量的16 × 32-bit 寄存器陣列(register file)固定的32 bits 操作碼(opcode)長度,降低編碼數(shù)量所產(chǎn)生的耗費(fèi),減輕解碼和流水線化的負(fù)擔(dān)。大多均為一個CPU周期執(zhí)行。為了補(bǔ)強(qiáng)這種簡單的設(shè)計(jì)方式,相較于同時期的處理器如Intel 80286和Motorola 68020,還多加了一些特殊設(shè)計(jì):大部分指令可以條件式地執(zhí)行,降低在分支時產(chǎn)生的負(fù)重,彌補(bǔ)分支預(yù)測器(branch predictor)的不足。算數(shù)指令只會在要求時更改條件編碼(condition code)32-bit筒型位移器(barrel shifter)可用來執(zhí)行大部分的算數(shù)指令和尋址計(jì)算而不會損失效能強(qiáng)大的索引尋址模式(addressing mode)精簡但快速的雙優(yōu)先級中斷子系統(tǒng),具有可切換的暫存器組有個附加在ARM設(shè)計(jì)中好玩的東西,就是使用一個4-bit 條件編碼 在每個指令前頭,表示每支指令的執(zhí)行是否為有條件式的這大大的減低了在內(nèi)存存取指令時用到的編碼位,換句話說,它避免在對小型敘述如if做分支指令。有個標(biāo)準(zhǔn)的范例引用歐幾里得的最大公因子算法:在C編程語言中,循環(huán)為:int gcd (int i, int j){while (i != j)if (i > j)i -= j;elsej -= i;return i;}在ARM 匯編語言中,循環(huán)為:loop CMP Ri, Rj ; 設(shè)定條件為 "NE"(不等於) if (i != j); "GT"(大於) if (i > j),; or "LT"(小於) if (i < j)SUBGT Ri, Ri, Rj ; 若 "GT"(大於), i = i-j;SUBLT Rj, Rj, Ri ; 若 "LT"(小於), j = j-i;BNE loop ; 若 "NE"(不等於),則繼續(xù)回圈這避開了then和else子句之間的分支。
另一項(xiàng)指令集的特色是,能將位移(shift)和回轉(zhuǎn)(rotate)等功能并成"資料處理"型的指令(算數(shù)、邏輯、和暫存器之間的搬移),因此舉例來說,一個C語言的敘述a += (j << 2);在ARM之下,可簡化成只需一個word和一個cycle即可完成的指令A(yù)DD Ra, Ra, Rj, LSL #2這結(jié)果可讓一般的ARM程式變得更加緊密,而不需經(jīng)常使用內(nèi)存存取,流水線也可以更有效地使用。即使在ARM以一般認(rèn)定為慢速的速度下執(zhí)行,與更復(fù)雜的CPU設(shè)計(jì)相比它仍能執(zhí)行得不錯。ARM處理器還有一些在其他RISC的架構(gòu)所不常見到的特色,例如PC-相對尋址(的確在ARM上PC為16個暫存器的其中一個)以及 前遞加或后遞加的尋址模式。另外一些注意事項(xiàng)是 ARM 處理器會隨著時間,不斷地增加它的指令集。某些早期的 ARM 處理器(比ARM7TDMI更早),譬如可能并未具備指令可以讀取兩 Bytes 的數(shù)量,因此,嚴(yán)格來講,對這些處理器產(chǎn)生程式碼時,就不可能處理如 C 語言物件中使用 "volatile short" 的資料型態(tài)。ARM7 和大多數(shù)較早的設(shè)計(jì)具備三階段的流水線化(Pipeline):提取指令、解碼,并執(zhí)行。較高效能的設(shè)計(jì),如 ARM9,則有五階段的流水線化。
提高效能的額外方式,包含一顆較快的加法器,和更廣的分支預(yù)測邏輯線路。這個架構(gòu)使用“協(xié)處理器”提供一種非侵入式的方法來延伸指令集,可透過軟件下 MCR、MRC、MRRC和MCRR 等指令來對協(xié)處理器尋址。協(xié)處理器空間邏輯上通常分成16個協(xié)處理器,編號分別從 0 至 15 ,而第15號協(xié)處理器(CP15)是保留用作某些常用的控制功能,像是使用高速緩存和記憶管理單元運(yùn)算(若包含于處理器時)。在 ARM 架構(gòu)的機(jī)器中,周邊裝置連接處理器的方式,通常透過將裝置的實(shí)體暫存器對應(yīng)到 ARM 的內(nèi)存空間、協(xié)處理器空間,或是連接到另外依序接上處理器的裝置(如總線)。協(xié)處理器的存取延遲較低,所以有些周邊裝置(例如 XScale 中斷控制器)會設(shè)計(jì)成可透過不同方式存取(透過內(nèi)存和協(xié)處理器)。