ARM架構

基於ARM微處理器的片上系統（system on a chip, SoC）的方塊圖
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處理器
用於松下多媒體播放機的晶片
ARM的設計是艾康電腦公司於1983年開始的發展計畫。
這個團隊由Roger Wilson和Steve Furber帶領，著手開發一種類似進階6502架構的處理器。Acorn電腦有一大堆建構在6502處理器上的電腦，因此能設計出一顆類似的晶片即意味著對公司有很大的優勢。

**Acorn RISC Machine：ARM2**
用在BBC Micro上的ARM1 second processor
團隊在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筒型位移器可用來執行大部分的算數指令和定址計算而不會損失效能- 強大的索引尋址模式- 支持快速葉端函數調用的Link register- 精簡但快速的雙優先級中斷子系統，具有可切換的暫存器組

**寄存器**
寄存器 R0-R7 對於所有CPU模式都是相同的，它們不會被分塊。
對於所有的特權CPU模式，除了系統CPU模式之外，R13和R14都是分塊的。也就是說，每個因為一個異常（exception）而可以進入模式，有其自己的R13和R14。這些寄存器通常分別包含堆棧指針和函數調用的返回地址。
同名的名稱:- R13 也被指為 SP（Stack Pointer）- R14 也被指為 LR（Link Register）- R15 也被指為 PC（Program Counter）

**有條件運行**
在每個指令前頭使用一個 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）,
;或"LT"(小於) if（i 
這避開了then和else子句之間的分支。

**其他特色**
另一項指令集的特色是，能將位移（shift）和迴轉（rotate）等功能併成"資料處理"型的指令（算數、邏輯、和暫存器之間的搬移），因此舉例來說，一個C語言的敘述
a += (j 
在ARM之下，可簡化成只需一個word和一個cycle即可完成的指令
ADD     Ra, Ra, Rj, LSL #2 
這結果可讓一般的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 date=20220418053320 技術，於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授權：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 Centerdate=20070823070944 -  ARM Ltd.date=20180415055208 -  ARM Assembler Programming; tutorial, resources, and examplesdate=20070628021816 -  TrustZone（TM）Technologydate=20081121151913 -  T6: TrustZone Based Trusted Kernel date=20220418053339 -  ARM Microcontroller Development Resourcesdate=20130111115802  - header files, schematics, CAD files, etc.-  什麼是ARM？-  無所不在的MCU，ARM行不行？date=20100620065004