ARM结构

**ARM** 架構，過去稱作**進階精簡指令集機器**（英語：Advanced RISC Machine，更早稱作艾康精簡指令集機器，Acorn RISC Machine），是一個精簡指令集（RISC）處理器架構家族，其廣泛地使用在許多嵌入式系統設計。由於節能的特點，其在其他領域上也有很多作為。ARM 處理器非常適用於行動通訊領域，符合其主要設計目標為低成本、高效能、低耗電的特性。另一方面，超級電腦消耗大量電能，ARM 同樣被視作更高效的選擇。安謀控股（ARM Holdings）開發此架構並授權其他公司使用，以供他們實現 ARM 的某一個架構，開發自主的系統單晶片和系統模組（system-on-module，SoC）。

ARM 架構版本從 ARMv3 到 ARMv7 支援 32 位元空間和 32 位元算數運算，大部分架構的指令為定長 32 位元（Thumb）指令集支援變長的指令集，提供對 32 位元和 16 位元指令集的支援），而 2011 年發佈的 ARMv8-A 架構添加了對 64 位元空間和 64 位元算術運算的支援，同時也更新了 32 位元定長指令集。

至 2009 年為止，ARM 架構處理器佔市面上所有 32 位元嵌入式 RISC 處理器 90% 的比例，使它成為占全世界最多數的 32 位元架構之一。ARM 處理器可以在很多消費性電子產品上看到，從可攜式裝置（PDA、行動電話、多媒體播放器、掌上型電玩和計算機）到電腦週邊設備（硬碟、桌上型路由器），甚至在飛彈的彈載電腦等軍用設施中都有他的存在。在此還有一些基於 ARM 設計的衍伸產品，重要產品還包括 Marvell 的 XScale 架構和德州儀器的 OMAP 系列。

2011 年，ARM 的客戶報告 79 億 ARM 處理器出貨量，占有 95% 的智慧型手機、90% 的硬碟機、40% 的數位電視和機上盒、15% 的微控制器、和 20% 的移動電腦。在 2012 年，微軟與 ARM 科技生產新的 Surface 平板電腦，AMD 宣布它將於 2014 年開始生產基於 ARM 核心的 64 位元伺服器晶片，2016 年，日本富士通公司宣布「京」超級電腦的後繼機種將採用 ARM 架構，該超級電腦於 2019 年 5 月定名為「富岳」，2020 年 6 月於 TOP500 奪冠。

2016 年 7 月 18 日，日本軟銀集團斥資 3.3 兆日元（約合 311 億美元）收購了安謀控股。

## 特色和應用

自 2005 年，每年超過一億的手機銷售約 98% 使用了 ARM 處理器。截至 2009 年，占大約 90% 的嵌入式 32 位元 RISC 處理器和 ARM 處理器被廣泛使用在消費性電子產品，包括個人數字助理（PDA）、平板電腦、行動電話、數位媒體和音樂播放器、手持式遊戲遊戲機、計算機和電腦外圍裝置（如硬碟機和路由器）。

除了消費電子，ARM 架構處理器也開始用於以往 x86、x64 處理器獨大的個人電腦、伺服器。而在 2020 年成為 TOP500 排名第一的「富岳」為首部奪冠的 ARM 架構超級電腦。

## 歷史

ARM 的設計是艾康電腦公司於 1983 年開始的發展計畫。

這個團隊由 Roger Wilson 和 Steve Furber 帶領，著手開發一種類似進階 6502 架構的處理器。Acorn 電腦有一大堆建構在 6502 處理器上的電腦，因此能設計出一顆類似的晶片即意味著對公司有很大的優勢。

### Acorn RISC Machine：ARM2

團隊在 1985 年時開發出樣本「ARM1」，而首顆真正能量產的「ARM2」於次年投產。ARM2 具有 32 位元的資料匯流排、26 位元的定址空間，並提供 64 Mbyte 的定址範圍與 16 個 32-bit 的暫存器。暫存器中有一個作為程式計數器，其前面 6 位元和後面 2 位元用來儲存處理器狀態標記。ARM2 可能是全世界最簡單實用的 32 位元微處理器，僅容納了 30,000 個電晶體（六年後的摩托羅拉 68000 包含了 70,000 顆）。之所以精簡的原因在於它不含微碼（這大概占了 68000 的電晶體數約 1/4 至 1/3）；而且與當時大多數的處理器相同，它沒有包含任何的快取。這個精簡的特色使它只需消耗很少的電能，卻能發揮比 Intel 80286 更好的效能。後繼的處理器「ARM3」則備有 4KB 的快取，使它能發揮更佳的效能。

### Apple、DEC、Intel、Marvell：ARM6、StrongARM、XScale

在 1980 年代晚期，蘋果電腦開始與艾康電腦合作開發新版的 ARM 核心。由於這專案非常重要，艾康電腦甚至於 1990 年將設計團隊另組成一間名為安謀國際科技（Advanced RISC Machines Ltd.）的新公司。也基於這原因，使得 ARM 有時候反而稱作 Advanced RISC Machine 而不是 Acorn RISC Machine。由於其母公司 ARM Holdings plc 於 1998 年在倫敦證券交易所和 NASDAQ 掛牌上市，使得 Advanced RISC Machines 成了 ARM Ltd 旗下擁有的產品。

這個專案到後來進入「ARM6」，首版的樣品在 1991 年釋出，然後蘋果電腦使用 ARM6 架構的 ARM 610 來當作他們 Apple Newton 產品的處理器。在 1994 年，艾康電腦使用 ARM 610 做為他們個人電腦產品的處理器。

在這些變革之後，核心部份卻大多維持一樣的大小 ——ARM2 有 30,000 顆電晶體，但 ARM6 卻也只增長到 35,000 顆。主要概念是以 ODM 的方式，使 ARM 核心能搭配一些選配的零件而製成一顆完整的 CPU，而且可在現有的晶圓廠裡製作並以低成本的方式達到很大的效能。

ARM 的經營模式在於販售其 IP 核，授權廠家依照設計製作出建構於此核的微控制器和中央處理器。最成功的實作案例屬 ARM7TDMI，幾乎賣出了數億套內建微控制器的裝置。

迪吉多曾購買這個架構的產權並研發出「StrongARM」。在 233 MHz 的頻率下，這顆 CPU 只消耗 1 瓦特的電能（後來的晶片消耗得更少）。這項設計後來為了和英特爾的控訴和解而技術移轉，英特爾因而利用 StrongARM 架構補強他們老舊的 i960 產品。英特爾後來開發出他們自有的高效能架構產品 XScale，之後賣給了邁威爾科技。

2020 年 11 月 11 日，蘋果公司發布基於 ARM 晶片 (Apple M1) 的蘋果桌上型電腦和筆記型電腦，2021 年 4 月 21 日，蘋果公司發布基於 M1 CPU 的 24 吋 Mac 和新 iPad Pro

## 核心種類

由 ARM 提供了一個廠商匯總，是在其設計中實現 ARM 核心的眾多廠商一個總結。

## 架構

從 1995 年開始，《ARM 體系結構參考手冊》是 ARM 文件的主要來源，提供了關於 ARM 處理器架構和指令集，區分介面，所有的 ARM 處理器的支援（如指令語意）的實現細節可能會有所不同。該體系結構隨著時間的演變，並與 Cortex 系列的核心開始，存在三個「組態」的定義如下：

* "應用" 組態: Cortex-A 系列
* "嵌入式" 組態: Cortex-R 系列
* "微處理器" 組態: ARM Cortex-M 系列。

每個組態允許有其子集的架構。例如，用於 ARMv6-M 組態（所使用的 Cortex M0 / M0+/ M1）的一個子集 ARMv7-M 架構（支援較少的指令）。

### CPU 模式

CPU ARM 架構指定了以下的 CPU 模式。在任何時刻，CPU 只可處於某一種模式，但可由於外部事件（中斷）或編程方式進行模式切換。

**使用者模式**
: 僅非特權模式。

**系統模式**
: 僅無需例外進入的特權模式。僅以執行明確寫入 CPSR 的模式位元的指令進入。

**Supervisor (svc) 模式**
: 在 CPU 被重設或者 SWI 指令被執行時進入的特權模式。

**Abort 模式**
: 預讀取中斷或資料中斷異常發生時進入的特權模式。

**未定義模式**
: 未定義指令異常發生時進入的特權模式。

**干預模式**
: 處理器接受一條 IRQ 干預時進入的特權模式。

**快速干預模式**
: 處理器接受一條 IRQ 干預時進入的特權模式。

**Hyp 模式**
: armv-7a 為 cortex-A15 處理器提供硬體虛擬化引進的管理模式。

### 指令集

講求精簡又快速的設計方式，整體電路化卻又不採用微碼，就像早期使用在艾康微電腦的 8 位元 6502 處理器。

ARM 架構包含了以下精簡指令集處理器的特性：

* 載入 - 儲存架構
* 不支援位址不對齊記憶體存取（ARMv6 核心現已支援）
* 大量的 16 × 32-bit 暫存器堆
* 固定的 32 bits 操作碼（opcode）長度，降低編碼數量所產生的耗費，減輕解碼和管線的負擔。
* 大多均為一個 CPU 周期執行。

為了補強這種簡單的設計方式，相較於同時期的處理器如 Intel 80286 和 Motorola 68020，還多加了一些特殊設計：

* 大部分指令可以條件式地執行，降低在分支時產生的負重，彌補早期晶片分支預測器的不足。
* 算數指令只會在要求時更改條件編碼（condition code）
* 32-bit 筒型位元移器可用來執行大部分的算數指令和定址計算而不會損失效能
* 強大的索引定址模式
* 支援快速葉端函式呼叫的鏈暫存器
* 精簡但快速的雙優先級中斷子系統，具有可切換的暫存器組

#### 暫存器

暫存器 R0-R7 對於所有 CPU 模式都是相同的，它們不會被分塊。

對於所有的特權 CPU 模式，除了系統 CPU 模式之外，R13 和 R14 都是分塊的。也就是說，每個因為一個異常（exception）而可以進入模式，有其自己的 R13 和 R14。這些暫存器通常分別包含堆疊指標和函式呼叫的返回位址。

同名的名稱:

* R13 也被指為 SP（Stack Pointer）
* R14 也被指為 LR（Link Register）
* R15 也被指為 PC（Program Counter）

#### 有條件執行

有個附加在 ARM 設計中好玩的東西，就是在每個指令前頭使用一個 4-bit 的 _條件編碼_，表示該指令是否為有條件式地執行。

這大大的減低了在記憶體存取指令時用到的編碼位元，換句話說，它避免了在小型敘述（如 `if`）中做分支。以下為參照歐幾里得的最大公因數演算法的標準範例：

在 C 語言中，迴圈為：

在 ARM 組合語言中，迴圈為：

這避開了 `then` 和 `else` 子句之間的分支。

#### 其他特色

另一項指令集的特色是，能將位元移（shift）和迴轉（rotate）等功能併成 "資料處理" 型的指令（算數、邏輯、和暫存器之間的搬移），因此舉例來說，一個 C 語言的敘述

在 ARM 之下，可簡化成只需一個 word 和一個 cycle 即可完成的指令

這結果可讓一般的 ARM 程式變得更加緊密，而不需經常使用記憶體存取，管線也可以更有效地使用。即使在 ARM 以一般認定為慢速的速度下執行，與更複雜的 CPU 設計相比它仍能執行得不錯。

ARM 處理器還有一些在其他 RISC 的架構所不常見到的特色，例如程式計數器 - 相對定址（的確在 ARM 上程式計數器為 16 個暫存器的其中一個）以及前遞加或後遞加的定址模式。

另外值得注意的是 ARM 處理器會隨著時間不斷地增加它的指令集。譬如某些早期的 ARM 處理器（比 ARM7TDMI 更早），可能並未具備指令可以讀取 2 Bytes 的數量；因此嚴格來講，對這些處理器產生程式碼時，就不可能處理如 C 語言物件中使用「volatile short」的資料型態。

#### 管線

ARM7 和大多數較早的設計具備三階段的管線：提取指令、解碼，並執行。較高效能的設計，如 ARM9，則有更深階段的管線： Cortex-A8 有 13 階段的管線。提高效能的額外方式，包含一顆較快的加法器，和更廣的分支預測邏輯線路。例如，在 ARM7DI 核與 ARM7DMI 核之間的差異，是一種改進的乘法器（因此添加的「M」）。

#### 輔助處理器

這個架構使用「輔助處理器」提供一種非侵入式的方法來延伸指令集，可透過軟體下 MCR、MRC、MRRC 和 MCRR 等指令來對輔助處理器定址。輔助處理器空間邏輯上通常分成 16 個輔助處理器，編號分別從 0 至 15；而第 15 號輔助處理器是保留用作某些常用的控制功能，像是使用快取和記憶管理單元運算（若包含於處理器時）。

* 在 ARM 架構的機器中，週邊裝置連接處理器的方式，通常透過將裝置的實體暫存器對應到 ARM 的記憶體空間、輔助處理器空間，或是連接到另外依序接上處理器的裝置（如匯流排）。輔助處理器的存取延遲較低，所以有些周邊裝置（例如 XScale 中斷控制器）會設計成可透過不同方式存取（透過記憶體和輔助處理器）。

### 除錯

> DSP 增強指令
> 
> 

### 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 技術的處理器是「ARM7EJ-S」：Jazelle 以一個英文字母 'J' 標示於 CPU 名稱中。它用來讓手機製造商能夠加速執行 Java ME 的遊戲和應用程式，也因此促使了這項技術不斷地發展。

### Thumb-2

Thumb-2 技術首見於「ARM1156 核心」，並於 2003 年發表。Thumb-2 擴充了受限的 16 位元 Thumb 指令集，以額外的 32 位元指令讓指令集的使用更廣泛。因此 Thumb-2 的預期目標是要達到近乎 Thumb 的編碼密度，但能表現出近乎 ARM 指令集在 32 位元記憶體下的效能。

Thumb-2 至今也從 ARM 和 Thumb 指令集中衍伸出多種指令，包含位元欄操作、分支建表和條件執行等功能。

### Thumb Execution Environment（ThumbEE）

ThumbEE，也就是所謂的 Thumb-2EE，業界稱為 Jazelle RCT （頁面存檔備份，存於網際網路檔案館）技術，於 2005 年發表，首見於「Cortex-A8」處理器。ThumbEE 提供從 Thumb-2 而來的一些擴充性，在所處的執行環境下，使得指令集能特別適用於執行階段的編碼產生（例如即時編譯）。Thumb-2EE 是專為一些語言如 Limbo、Java、C#、Perl 和 Python，並能讓即時編譯器能夠輸出更小的編譯碼卻不會影響到效能。

ThumbEE 所提供的新功能，包括在每次存取指令時自動檢查是否有無效指標，以及一種可以執行陣列範圍檢查的指令，並能夠分支到分類器，其包含一小部份經常呼叫的編碼，通常用於高階語言功能的實作，例如對一個新物件做記憶體組態。

### 進階 SIMD（NEON）

進階 SIMD 延伸集，業界稱為「NEON」技術，它是一個結合 64 位元和 128 位元的單指令多重數指令集（SIMD），其針對多媒體和訊號處理程式具備標準化加速的能力。NEON 可以在 10 MHz 的處理器上執行 MP3 音效解碼，且可以執行 13 MHz 以下的自適應多速率音訊壓縮編碼。NEON 具有一組廣泛的指令集、各自的暫存器檔案，以及獨立執行的硬體。NEON 支援 8、16、32 和 64 位元的整數及單精度浮點數據，並以單指令多重數的方式運算，執行圖形和遊戲處理中關於語音及視訊的部分。單指令多重指令集在向量超級處理機中是個決定性的要素，它具備同時多項處理功能。在 NEON 技術中，SIMD 最高可同時做 16 個運算。

### VFP

VFP（向量浮點）是在協同處理器針對 ARM 架構的衍生技術。它提供低成本的單精度和倍精度浮點運算能力，並完全相容於 ANSI/IEEE Std 754-1985 二進位元浮點算數標準。VFP 提供大多數適用於浮點運算的應用，例如 PDA、智慧型手機、語音壓縮與解壓、3D 圖像以及數位元音效、印表機、機上盒，和汽車應用等。VFP 架構也支援 SIMD 平行化的短向量指令執行。這在圖像和訊號處理等應用上，非常有助於降低編碼大小並增加輸出效率。

在 ARM 為基礎的處理器中，其他可見的浮點、或 SIMD 的協同處理器還包括了 FPA、FPE、iwMMXt。他們提供類似 VFP 的功能，但在 opcode 層面上來說並不具有相容性。

### 安全性擴充（TrustZone）

TrustZone 技術出現在 ARMv6KZ 以及較晚期的應用核心架構中。它提供了一種低成本的方案，針對系統單晶片內加入專屬的安全核心，由硬體建構的存取控制方式支援兩顆虛擬的處理器。這個方式可使得應用程式核心能夠在兩個狀態（領域）之間切換，在此架構下可以避免資訊從較可信的核心領域洩漏至較不安全的領域。這種核心領域之間的切換通常是與處理器其他功能完全無關聯性，因此各個領域可以各自獨立運作但卻仍能使用同一顆核心。記憶體和周邊裝置也可因此得知目前核心運作的領域為何，並能針對這個方式來提供對裝置的機密和編碼進行存取控制。典型的 TrustZone 技術應用是要能在一個缺乏安全性的環境下完整地執行作業系統，並在可信的環境下能有更少的安全性的編碼。T6 是中國第一個開源的 TrustZone 安全核心 (該專案目前已經在公開領域消失)。OP-TEE (Open Portable Trusted Executive Environment) 成為目前（2017/7）較為成功的可信執行環境（TEE）開源專案。

## 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、NVIDIA、台灣新唐科技（Nuvoton Technology）、英飛凌、任天堂、恩智浦半導體（於 2006 年從飛利浦獨立出來）、沖電氣、三星電子、蘋果、夏普、意法半導體、德州儀器和 VLSI 等許多這些公司均擁有各個不同形式的 ARM 授權。雖然 ARM 的授權項目由保密合約所涵蓋，在智慧財產權工業，ARM 是廣為人知最昂貴的 CPU 核心之一。單一的客戶產品包含一個基本的 ARM 核心可能就需索取一次高達美金 20 萬的授權費用。而若是牽涉到大量架構上修改，則費用就可能超過千萬美元。

## ARM 核心時間線

下表列出每個核心發布年份。未包括 ARM7 之前的核心。

## ARM 核心的授權與應用

## 延伸閱讀

* AMULET - 非同步 ARM 家族
* Arm v7 架構的路由器列表
* Arm v8 架構的路由器列表

## 參考資料

## 外部連結

* ARM Information Center（頁面存檔備份，存於網際網路檔案館）
* （英文）ARM Ltd.（頁面存檔備份，存於網際網路檔案館）
* （英文）ARM Assembler Programming; tutorial, resources, and examples（頁面存檔備份，存於網際網路檔案館）
* （英文）TrustZone（TM）Technology（頁面存檔備份，存於網際網路檔案館）
* （英文）T6: TrustZone Based Trusted Kernel （頁面存檔備份，存於網際網路檔案館）
* （英文）ARM Microcontroller Development Resources（頁面存檔備份，存於網際網路檔案館） - header files, schematics, CAD files, etc.
* （中文）什麼是 ARM？
* （繁體中文）無所不在的 MCU，ARM 行不行？（頁面存檔備份，存於網際網路檔案館）