ARM架構
维基百科,自由的百科全书
ARM架構(過去稱作進階精簡指令集機器(Advanced RISC Machine),更早稱作Acorn RISC Machine)是一個32位元精簡指令集(RISC) 中央處理器(processor)架構,其廣泛地使用在許多嵌入式系統(embedded)設計。由於節能的特點,ARM處理器非常適用於行動通訊領域,符合其主要設計目標為低耗電的特性。
在今日,ARM家族佔了所有32位元嵌入式處理器75%的比例[1],使它成為占全世界最多數的32位元架構之一。ARM處理器可以在很多消費性電子產品上看到,從可攜式裝置(PDA、行動電話、多媒體播放器、掌上型電玩,和計算機)到電腦週邊設備(硬碟、桌上型路由器)都有。在此家族中衍伸的重要產品還包括Marvell的XScale架構和德州儀器的OMAP系列。
目录 |
[编辑] 歷史

ARM的設計是Acorn電腦公司(Acorn Computers Ltd)於1983年開始的發展計畫。
這個團隊由Roger Wilson和Steve Furber帶領,著手開發一種新架構,類似進階的MOS Technology 6502處理器。Acorn有一大堆建構在6502架構上的電腦,因此能設計出一顆類似的晶片即意味著對公司有很大的優勢。
團隊在1985年時開發出ARM1 Sample版,而首顆"真正"的產能型ARM2於次年量產。ARM2具有32位元的資料匯流排、26位元的定址空間,並提供64 Mbyte的定址範圍與16、32-bit的暫存器。這些暫存器其中有一顆做為(word大小) 程式計數器,其前面6 bits和後面2 bits用來保存處理器狀態標記(Processor Status Flags)。ARM2可能是全世界最簡單實用的32位元微處理器,其僅容納了30,000個電晶體(相較於Motorola六年後的68000其包含了70,000顆)。之所以精簡的原因在於它不含微碼(請參閱microcode)(這表示大概只有68000的1/3至1/4),而与現今大多數的 CPU 不同,它沒有包含任何的快取。這個精簡的特色使它只需消耗很少的電能,卻能發揮比 Intel 80286 更好的效能[來源請求]。後繼的處理器ARM3更備有4KB的快取,使它能發揮更佳的效能。
在1980年代晚期,蘋果電腦開始與Acorn合作開發新版的ARM核心,由於這專案非常重要,Acorn甚至於1990年將設計團隊另組成一間名為Advanced RISC Machines Ltd.的新公司。也基於這原因,使得ARM有時候反而稱作Advanced RISC Machine而不是Acorn RISC Machine。由於其母公司ARM Holdings plc於1998年的倫敦交易市場和NASDAQ掛牌上市[1],使得Advanced RISC Machines成了ARM Ltd旗下擁有的產品。
這個專案到後來進入了ARM6,首版的式樣在1991年釋出,然後蘋果電腦使用ARM6架構的ARM 610來當作他們Apple Newton PDA的基礎。在1994年,Acorn使用ARM 610做為他們Risc PC電腦內的CPU。
在這些變革之後,內核部份卻大多維持一樣的大小。ARM2有30,000顆電晶體,但ARM6卻也只增長到35,000顆。主要概念是以ODM的方式,使ARM核心能搭配一些選配的零件而製成一顆完整的CPU,而且可在現有的晶圓廠裡製作並以低成本的方式達到很大的效能。
ARM的經營模式在於出售其知識產權核(IP core),授權廠家依照設計製作出建構於此核的微控制器和中央處理器。最成功的實作案例屬 ARM7TDMI,幾乎賣出了數億套內建微控制器的裝置。
DEC 購買這個架構的產權(此處會造成混淆在於其本身也製造 DEC Alpha 並研發出StrongARM。在 233 MHz 的頻率下,這顆 CPU 只消耗一瓦特的電能(後來的晶片消耗得更少)。這項設計後來為了和 Intel 的控訴和解而技術移轉,Intel 因而趁機以 StrongARM 架構補強他們老舊的 i960 產線。Intel 後來開發出他們自有的高效能實作,稱作XScale,之後也賣給了 Marvell。
支援智慧型手機、PDA和其他手持裝置最常見的架構是ARMv4。XScale 和 ARM926 處理器是ARMv5TE,而且比起建構在 ARMv4 的 StrongARM、ARM925T 和 ARM7TDMI 等處理器還更常見於許多高階裝置上[來源請求]。架構版本如下欄所示。
[编辑] 內核種類
家族 | 代表作 | 內核 | 特色 | 快取 (I/D)/MMU | 常規 MIPS 於 MHz | 應用 |
---|---|---|---|---|---|---|
ARM1 | ARMv1 | ARM1 | 無 | |||
ARM2 | ARMv2 | ARM2 | Architecture 2 加入了MUL(乘法)指令 | 無 | 4 MIPS @ 8MHz | Acorn Archimedes, Chessmachine |
ARMv2a | ARM250 | Integrated MEMC (MMU),圖像與IO處理器。Architecture 2a 加入了SWP和SWPB (置換) 指令。 | 無, MEMC1a | 7 MIPS @ 12MHz | Acorn Archimedes | |
ARM3 | ARMv2a | ARM2a | 首次在ARM架構上使用處理器快取 | 均為4K | 12 MIPS @ 25MHz | Acorn Archimedes |
ARM6 | ARMv3 | ARM610 | v3 架構首創支援定址32位元的記憶體(針對26位元) | 均為4K | 28 MIPS @ 33MHz | Acorn Risc PC 600, Apple Newton |
ARM7TDMI | ARMv4T | ARM7TDMI(-S) | 3-stage pipeline | 無 | 15 MIPS @ 16.8 MHz | Game Boy Advance, Nintendo DS, iPod |
ARM710T | 均為8KB, MMU | 36 MIPS @ 40 MHz | Acorn Risc PC 700, Psion 5 series, Apple eMate 300 | |||
ARM720T | 均為8KB, MMU | 60 MIPS @ 59.8 MHz | Zipit | |||
ARM740T | MPU | |||||
ARMv5TEJ | ARM7EJ-S | Jazelle DBX | 無 | |||
ARM9TDMI | ARMv4T | ARM9TDMI | 5-stage pipeline | 無 | ||
ARM920T | 16KB/16KB, MMU | 200 MIPS @ 180 MHz | Armadillo, GP32,GP2X (第一顆內核), Tapwave Zodiac (Motorola i. MX1) | |||
ARM922T | 8KB/8KB, MMU | |||||
ARM940T | 4KB/4KB, MPU | GP2X (第二顆內核) | ||||
ARM9E | ARMv5TE | ARM946E-S | 可變動,tightly coupled memories, MPU | Nintendo DS, Nokia N-Gage Conexant 802.11 chips | ||
ARM966E-S | 無快取, TCMs |
ST Micro STR91xF,包含Ethernet [2] |
||||
ARM968E-S | 無快取, TCMs | |||||
ARMv5TEJ | ARM926EJ-S | Jazelle DBX | 可變動, TCMs, MMU | 220 MIPS @ 200 MHz | 行動電話: Sony Ericsson (K, W系列),Siemens 和 Benq (x65 系列和新版的) | |
ARMv5TE | ARM996HS | 無振盪器處理器 | 無快取, TCMs, MPU | |||
ARM10E | ARMv5TE | ARM1020E | (VFP), 6-stage pipeline | 32KB/32KB, MMU | ||
ARM1022E | (VFP) | 16KB/16KB, MMU | ||||
ARMv5TEJ | ARM1026EJ-S | Jazelle DBX | 可變動, MMU or MPU | |||
XScale | ARMv5TE | 80200/IOP310/IOP315 | I/O處理器 | |||
80219 | 400/600MHz | Thecus N2100 | ||||
IOP321 | 600 BogoMips @ 600 MHz | Iyonix | ||||
IOP33x | ||||||
IOP34x | 1-2 core, RAID Acceleration | 32K/32K L1, 512K L2, MMU | ||||
PXA210/PXA250 | 應用處理器, 7-stage pipeline | Zaurus SL-5600 | ||||
PXA255 | 32KB/32KB, MMU | 400 BogoMips @ 400 MHz | Gumstix, Palm Tungsten E2 | |||
PXA26x | 可達 400 MHz | Palm Tungsten T3 | ||||
PXA27x | 800 MIPS @ 624 MHz | HTC Universal, Zaurus SL-C1000,3000,3100,3200, Dell Axim x30, x50, 和 x51 系列 | ||||
PXA800(E)F | ||||||
Monahans | 1000 MIPS @ 1.25 GHz | |||||
PXA900 | Blackberry 8700, Blackberry Pearl (8100) | |||||
IXC1100 | Control Plane Processor | |||||
IXP2400/IXP2800 | ||||||
IXP2850 | ||||||
IXP2325/IXP2350 | ||||||
IXP42x | NSLU2 | |||||
IXP460/IXP465 | ||||||
ARM11 | ARMv6 | ARM1136J(F)-S | SIMD, Jazelle DBX, (VFP), 8-stage pipeline | 可變動, MMU | ?? @ 532-665MHz (i.MX31 SoC) | Nokia N93, Zune, Nokia N800 |
ARMv6T2 | ARM1156T2(F)-S | SIMD, Thumb-2, (VFP), 9-stage pipeline | 可變動, MPU | |||
ARMv6KZ | ARM1176JZ(F)-S | SIMD, Jazelle DBX, (VFP) | 可變動, MMU+TrustZone | |||
ARMv6K | ARM11 MPCore | 1-4 core SMP, SIMD, Jazelle DBX, (VFP) | 可變動, MMU | |||
Cortex | ARMv7-A | Cortex-A8 | Application profile, VFP, NEON, Jazelle RCT, Thumb-2, 13-stage pipeline | 可變動 (L1+L2), MMU+TrustZone | up to 2000 (2.0 DMIPS/MHz 從600 MHz到超過1 GHz的速度) | Texas Instruments OMAP3 |
ARMv7-R | Cortex-R4(F) | Embedded profile, (FPU) | 可變動快取, MMU可選配 | 600 DMIPS | Broadcom is a user | |
ARMv7-M | Cortex-M3 | Microcontroller profile | 無快取, (MPU) | 120 DMIPS @ 100MHz | Luminary Micro[3] 微控制器家族 |
[编辑] 設計文件
講求精簡又快速的設計方式,整體電路化卻又不採用微碼,就像早期使用在Acorn微電腦的8位元6502處理器。
ARM架構包含了下述RISC特性:
- 讀取/儲存 架構
- 不支援misaligned記憶體存取(ARMv6內核現已支援)
- Orthogonal指令集(Orthogonal instruction set)
- 大量的16 × 32-bit 暫存器檔案(register file)
- 固定的32 bits opcode寬度,降低編碼數量所產生的耗費,減輕解碼和管線化的負擔。
- 大多均為一個cycle執行。
為了補強這種簡單的設計方式,相較於同時期的處理器如Intel 80286和Motorola 68020,還多加了一些特殊設計:
- 大部分指令可以條件式地執行,降低在分支時產生的負重,彌補分支預測器(branch predictor)的不足。
- 算數指令只會在要求時更改條件編碼(condition code)
- 32-bit筒型位移器(barrel shifter)可用來執行大部分的算數指令和定址計算而不會損失效能
- 強大的索引定址模式(addressing mode)
- 精簡但快速的2-priority-level中斷子系統,具有可切換的暫存器組
有個附加在ARM設計中好玩的東西,就是使用一個4-bit 條件編碼 在每個指令前頭,表示每支指令的執行是否為有條件式的
這大大的減低了在記憶體存取指令時用到的編碼位元,換句話說,它避免在對小型敘述如if
做分支指令。有個標準的範例引用歐幾里德的最大公因數演算法:
在C程式語言中,迴圈為:
int gcd (int i, int j) { while (i != j) if (i > j) i -= j; else j -= i; return i; }
在ARM 組合語言中,迴圈為`:
loop CMP Ri, Rj ; 設定條件為 "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"(不等於),則繼續迴圈
這避開了then
和else
子句之間的分支。
另一項指令集的特色是,能將位移(shift)和迴轉(rotate)等功能併成"資料處理"型的指令(算數、邏輯、和暫存器之間的搬移),因此舉例來說,一個C語言的敘述
a += (j << 2);
在ARM之下,可簡化成只需一個word和一個cycle即可完成的指令
ADD Ra, Ra, Rj, LSL #2
這結果可讓一般的ARM程式變得更加緊密,而不需經常使用記憶體存取,管線也可以更有效地使用。即使在ARM以一般認定為慢速的速度下執行,與更複雜的CPU設計相比它仍能執行得不錯。
ARM處理器還有一些在其他RISC的架構所不常見到的特色,例如PC-相對定址(的確在ARM上PC為16個暫存器的其中一個)以及 前遞加或後遞加的定址模式。
另外一些注意事項是 ARM 處理器會隨著時間,不斷地增加它的指令集。某些早期的 ARM 處理器(比ARM7TDMI更早),譬如可能並未具備指令可以讀取兩 Bytes 的數量,因此,嚴格來講,對這些處理器產生程式碼時,就不可能處理如 C 語言物件中使用 "volatile short" 的資料型態。
ARM7 和大多數較早的設計具備三階段的管線化(Pipeline):提取指令、解碼,並執行。較高效能的設計,如 ARM9,則有五階段的管線化。提高效能的額外方式,包含一顆較快的加法器,和更廣的分支預測邏輯線路。
這個架構使用「協處理器」提供一種非侵入式的方法來延伸指令集,可透過軟體下 MCR、MRC、MRRC和MCRR 等指令來對協處理器定址。協處理器空間邏輯上通常分成16個協處理器,編號分別從 0 至 15 ,而第15號協處理器(CP15)是保留用作某些常用的控制功能,像是使用快取和記憶管理單元運算(若包含於處理器時)。
在 ARM 架構的機器中,週邊裝置連接處理器的方式,通常透過將裝置的實體暫存器對應到 ARM 的記憶體空間、協處理器空間,或是連接到另外依序接上處理器的裝置(如匯流排)。協處理器的存取延遲較低,所以有些周邊裝置(例如 XScale 中斷控制器)會設計成可透過不同方式存取(透過記憶體和協處理器)。
[编辑] 'Thumb'
較新的ARM處理器有一種16-bit指令模式,叫做Thumb,也許跟每個條件式執行指令均耗用4位元的情形有關。在Thumb模式下,較小的opcode有更少的功能性。例如,只有分支可以是條件式的,且許多opcode無法存取所有CPU的暫存器。然而,較短的opcode提供整體更佳的編碼密度(注:意指程式碼在記憶體中佔的空間),即使有些運算需要更多的指令。特別在記憶體埠或匯流排寬度限制在32 以下的情形時,更短的Thumb opcode能更有效地使用有限的記憶體頻寬,因而提供比32位元程式碼更佳的效能。典型的嵌入式硬體僅具有較小的32-bit datapath定址範圍以及其他更窄的16 bits定址(例如Game Boy Advance)。在這種情形下,通常可行的方案是編譯成 Thumb 程式碼,並自行最佳化一些使用(非Thumb)32位元指令集的CPU相關程式區,因而能將它們置入受限的32-bit匯流排寬度的記憶體中。
首顆具備 Thumb 技術的處理器是 ARM7TDMI。所有 ARM9 和後來的家族,包括 XScale 都納入了 Thumb 技術。
[编辑] Jazelle
ARM 還開發出一項技術,Jazelle DBX (Direct Bytecode eXecution),允許它們在某些架構的硬體上加速執行Java bytecode,就如其他執行模式般,當呼叫一些無法支援bytecodes的特殊軟體時,能提供某些bytecodes的加速執行。它能在現存的ARM與Thumb模式之間互相執行。
首顆具備Jazelle技術的處理器是ARM926EJ-S:Jazelle以一個英文字母'J'標示於CPU名稱中。它用來讓手機製造商能夠加速執行Java ME的遊戲和應用程式,也因此促使了這項技術不斷地發展。
[编辑] Thumb-2
Thumb-2 技術首見於 ARM1156 核心 ,並於2003年發表。Thumb-2 擴充了受限的 16-bit Thumb 指令集,以額外的 32-bit 指令讓指令集的使用更廣泛。因此 Thumb-2 的預期目標是要達到近乎 Thumb 的編碼密度,但能表現出近乎 ARM 指令集在 32-bit 記憶體下的效能。
Thumb-2 至今也從 ARM 和 Thumb 指令集中衍伸出多種指令,包含位元欄(bit-field)操作、分支建表(table branches),和條件執行等功能。
[编辑] Thumb Execution Environment (ThumbEE)
ThumbEE,也就是所謂的Thumb-2EE,,業界稱為Jazelle RCT技術,於2005年發表,首見於 Cortex-A8 處理器。ThumbEE 提供從 Thumb-2 而來的一些擴充性,在所處的執行環境(Execution Environment)下,使得指令集能特別適用於執行階段(Runtime)的編碼產生(例如即時編譯)。Thumb-2EE 是專為一些語言如 Limbo、Java、C#、Perl 和 Python,並能讓 即時編譯器 能夠輸出更小的編譯碼卻不會影響到效能。
ThumbEE 所提供的新功能,包括在每次存取指令時自動檢查是否有無效指標,以及一種可以執行陣列範圍檢查的指令,並能夠分支到分類器(handlers),其包含一小部份經常呼叫的編碼,通常用於高階語言功能的實作,例如對一個新物件做記憶體配置。
[编辑] 進階 SIMD (NEON)
進階 SIMD 延伸集,業界稱為NEON技術,它是一個結合 64 和 128 bit 的 SIMD (Single Instruction Multiple Data 單指令多重數據)指令集,其針對多媒體和訊號處理程式具備標準化加速的能力。NEON 可以在 10 MHz 的 CPU 上執行 MP3 音效解碼,且可以執行 13 MHz 頻率以下的 GSM AMR (Adaptive Multi-Rate) 語音編碼。NEON具有一組廣泛的指令集、各自的暫存器檔案,以及獨立執行的硬體。NEON 支援 8-, 16-, 32- 和 64-bit 的整數及單精度浮點數據,並以 SIMD 的方式運算,執行圖形和遊戲處理中關於語音/視訊的部分。SIMD 在 向量超級處理機 中是個決定性的要素,它具備同時多項處理功能。在 NEON 技術中,SIMD 最高可支援到同時 16 個運算。
[编辑] VFP
VFP 是在協同處理器針對ARM架構的衍生技術。它提供低成本的單精度和倍精度浮點運算能力,並完全相容於ANSI/IEEE Std 754-1985 二進位浮點算數標準。VFP 提供大多數適用於浮點運算的應用,例如PDA、智慧手機、語音壓縮與解壓、3D圖像以及數位音效、印表機、機上盒,和汽車應用等。VFP 架構也支援 SIMD(單指令多重數據)平行化的短向量指令執行。這在圖像和訊號處理等應用上,非常有助於降低編碼大小並增加輸出效率。
在ARM-based處理器中,其他可見的浮點、或 SIMD 的協同處理器還包括了 FPA, FPE, iwMMXt。他們提供類似 VFP 的功能但在opcode層面上來說並不具有相容性。
[编辑] 安全性擴充 (TrustZone)
TrustZone(TM) 技術出現在 ARMv6KZ 以及較晚期的應用核心架構中。它提供了一種低成本的方案,針對系統單晶片(SoC)內加入專屬的安全核心,由硬體建構的存取控制方式支援兩顆虛擬的處理器。這個方式可使得應用程式核心能夠在兩個狀態之間切換(通常改稱為領域(worlds)以避免和其他功能領域的名稱混淆),在此架構下可以避免資訊從較可信的核心領域洩漏至較不安全的領域。這種內核領域之間的切換通常是與處理器其他功能完全無關聯性(orthogonal),因此各個領域可以各自獨立運作但卻仍能使用同一顆內核。記憶體和周邊裝置也可因此得知目前內核運作的領域為何,並能針對這個方式來提供對裝置的機密和編碼進行存取控制。典型的 TrustZone 技術應用是要能在一個缺乏安全性的環境下完整地執行作業系統,並在可信的環境下能有更少的安全性的編碼。
[编辑] ARM 授權方
ARM 公司本身並不靠自有的設計來製造或販售 CPU 裝置,反而是將處理器架構授權給有興趣的廠家。ARM 提供了多樣的授權條款,包括售價與散播性等項目。對於授權方來說,ARM 提供了 ARM 內核的整合硬體敘述,包含完整的軟體開發工具(編譯器、debugger、SDK),以及針對內含 ARM CPU 矽晶片的銷售權。對於無晶圓廠的授權方來說,其希望能將 ARM 內核整合到他們自行研發的晶片設計中,,通常就僅針對取得一份生產就緒的智財核心技術(IP Core)認證。對這些客戶來說,ARM 會釋出所選的 ARM 核心的閘極電路圖,連同抽象模擬模型和測試程式,以協助設計整合和驗證。需求更多的客戶,包括整合元件製造商(IDM)和晶圓廠家,就選擇可合成的RTL(暫存器轉移層級,如 Verilog)形式來取得處理器的智財權(IP)。藉著可整合的 RTL,客戶就有能力能進行架構上的最佳化與加強。這個方式能讓設計者完成額外的設計目標(如高震盪頻率、低能量耗損、指令集延伸等)而不會受限於無法更動的電路圖。雖然 ARM 並不授予授權方再次販售 ARM 架構本身,但授權方可以任意地販售製品(如晶片元件、評估板、完整系統等)。商用晶圓廠是特殊例子,因為他們不僅授予能販售包含 ARM 內核的矽晶成品,對其它客戶來講,他們通常也保留重製 ARM 內核的權利。
就像大多數 IP 販售方, ARM 依照使用價值來決定 IP 的售價。在架構上而言,較低效能的 ARM 內核比較高效能的內核擁有較低的授權費。以矽晶片實作而言,一顆可整合的內核要比一顆硬體巨集(黑箱)內核要來得貴。更複雜的價位問題來講,持有 ARM 授權的商用晶圓廠(例如韓國三星和日本富士通)可以提供更低的授權價格給他們的晶圓廠客戶。透過晶圓廠自有的設計技術,客戶可以更低或是免費的ARM預付授權費來取得 ARM 內核。相較於不具備自有設計技術的專門半導體晶圓廠(如台積電和聯電),富士通/三星對每片晶圓多收取了兩至三倍的費用。對中少量的應用而言,具備設計部門的晶圓廠提供較低的整體價格(透過授權費用的補助)。對於量產而言,由於長期的成本縮減可藉由更低的晶圓價格,減少ARM的NRE成本,使得專門的晶圓廠也成了一個更好的選擇。
許多半導體公司持有 ARM 授權:Atmel、Broadcom、Cirrus Logic、Freescale(於2004從摩托羅拉公司獨立出來)、富士通、英特爾(藉由和迪吉多的控訴調停)、IBM, 英飛凌科技, 任天堂, 恩智浦半導體(於2006年從飛利浦獨立出來)、OKI電氣工業, 三星電子, Sharp, STMicroelectronics, 德州儀器 和 VLSI等許多這些公司均擁有各個不同形式的ARM授權。雖然ARM的授權項目由保密合約所涵蓋,在智慧財產權工業,ARM是廣為人知最昂貴的CPU內核之一。單一的客戶產品包含一個基本的 ARM 內核可能就需索取一次高達美金20萬的授權費用。而若是牽涉到大量架構上修改,則費用就可能超過千萬美元。
[编辑] 延伸閱讀
- Inferno
- DirectBand
- AMULET - 非同步ARM家族
- Philips LPC2000 ARM7TDMI-S Microcontrollers
- Texas Instruments OMAP - 一顆加上DSP的ARM核心以及應用軟體加速內核
[编辑] 參考資料
[编辑] 外部連結
- ARM Ltd.
- ARM Assembler Programming; tutorial, resources, and examples
- TrustZone(TM) Technology
- ARM Microcontroller Development Resources - header files, schematics, CAD files, etc..
RISC |
---|
Power Architecture · ARM架構 · DEC Alpha · Atmel AVR · MIPS architecture · PA-RISC · Parallax Propeller · PIC microcontroller · SPARC · SuperH · XAP processor · I960 · Motorola 88000 |