ARM架構

ARM架構，過去稱作進階精簡指令集機器（，更早稱作艾康精簡指令集機器，），是一個精簡指令集（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语言中，循环為：
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 < 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的架構所不常見到的特色，例如程式計數器-相對定址（的確在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行不行？

ARM架構
指令集架構
带有代码示例的条目