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