ARM架构的介绍和详细信息

历史上,主要用于路由器的Conexant ARM处理器是Acorn Computers Ltd在1983年开始的开发项目。

在Roger Wilson和Steve Furber的领导下,这个团队开始开发一种新的架构,类似于先进的MOS技术6502处理器。Acorn有大量基于6502架构的计算机,因此设计类似的芯片对公司来说意味着巨大的优势。

团队在1985年开发了ARM1样片的版本,第一个“真正”量产的ARM2在次年量产。ARM2具有32位数据总线和26位寻址空间,并提供64 Mbyte和16个32位寄存器的寻址范围。其中一个寄存器用作程序计数器(字长),其前6位和后2位用于存储处理器状态标志。ARM2可能是世界上最简单、最实用的32位微处理器,只有3万个晶体管(相比6年后摩托罗拉的6.8万个,它包含了7万个晶体管)。之所以紧凑,是因为它不包含微码(见微码)(这意味着它只有68000的1/3到1/4左右),而且不像今天的大多数CPU,它不包含任何高速缓存。这种精简的特性使得它的功耗很小,但却能发挥比Intel 80286更好的作用。后续处理器ARM3配备了4KB高速缓存,使其能够发挥更好的作用。

1980年代后期,苹果开始与Acorn合作开发新版ARM内核。由于这个项目的重要性,Acorn甚至在1990成立了一家新公司,名为Advanced RISC Machines Ltd。正因如此,ARM有时被称为高级RISC机,而不是Acorn RISC机。因为其母公司ARM Holdings plc于1998 [1]在伦敦证券交易所和纳斯达克上市,高级RISC机器成为ARM Ltd .旗下的产品

这个项目后来进入ARM6,第一个版本发布于1991。然后苹果电脑用ARM6架构的ARM610作为他们苹果牛顿PDA的基础。1994年,Acorn在他们的Risc PC中使用ARM 610作为CPU。

经过这些变化后,大部分核心部分保持不变。ARM2有30000个晶体管,但ARM6只增长到35000个。主要概念是ARM核可以通过ODM与一些选定的部件匹配,制成一个完整的CPU,并且可以在现有的晶圆厂中制造,以低成本实现高效率。

ARM的商业模式是出售其知识产权核心(IP核),授权厂商根据设计制作基于该核心的微控制器和中央处理器。最成功的实施案例是ARM7TDMI,它已经销售了几乎数亿台内置微控制器的设备。

DEC购买这个架构的产权(这里会引起混乱的是,它也让DEC Alpha化,开发StrongARM。在233 MHz的频率下,这个CPU只消耗一瓦的功率(后来的芯片消耗更少)。这种设计后来被转移到解决英特尔的投诉,所以英特尔借此机会用StrongARM架构来加强他们的旧i960生产线。英特尔后来开发了自己的高性能实现,称为XScale,后来卖给了Marvell。

支持智能手机、PDA和其他手持设备的最常见架构是ARMv4。XScale和ARM926处理器都是ARMv5TE,在很多高端设备中比ARMv4内置的StrongARM、ARM925T和ARM7TDMI处理器更常见。架构版本显示在下一列中。

设计文件

强调简单快速的设计方法,但整个电路不是微码,就像早期Acorn微机用的8位6502处理器。

ARM架构包括以下RISC特性:

读取/存储架构

不支持地址未对齐的内存访问(现在支持ARMv6内核)。

正交指令集(任何访问指令都可以以任何寻址方式访问数据正交指令集)

大量的16 × 32位寄存器文件。

固定的32位操作码长度,减少了代码数量带来的消耗,减轻了解码和流水线的负担。

大部分都是在一个CPU周期内执行的。

为了加强这种简单的设计方法,与同时期的处理器如Intel 80286和摩托罗拉68020相比,增加了一些特殊的设计:

大多数指令可以有条件地执行,减少了分支时的负担,弥补了分支预测器的不足。

算术指令只在需要时改变条件码。

32位桶形移位器可用于执行大多数算术指令和寻址计算,而不会损失性能。

强大的索引寻址模式。

简化但快速的双优先级中断子系统,带可切换寄存器集。

ARM设计附带的一个有趣的事情是,在每条指令前用一个4位的条件码来表示每条指令的执行是否有条件。

这大大减少了内存访问指令中使用的编码位数,换句话说,它避免了为if之类的小语句创建分支指令。有一个参考欧几里德最大公因式算法的标准例子:

在C编程语言中,循环是:

int gcd (int i,int j)

{

而(我!= j)

如果(i & gtj)

I-= j;

其他

j-= I;

返回I;

}

在ARM汇编语言中,循环是:

环路CMP Ri,Rj;将条件设置为“NE”(不等于)if (i!= j)

;“GT”(大于)if (i > j),

;或者“LT”(小于)if (I

子门Ri,Ri,Rj;如果“GT”(大于),I = I-j;

SUBLT Rj,Rj,Ri;如果“LT”(小于),j = j-I;

BNE环线;如果“NE”(不等于),继续循环。

这避免了then和else子句之间的分支。

指令集的另一个特点是,它可以将移位和旋转等功能组合成“数据处理”指令(算术、逻辑和寄存器之间的移动),例如,C语言描述

a+=(j & lt;& lt2);

在ARM下,可以简化成一条只需要一个字一个周期就能完成的指令。

添加Ra,Ra,Rj,LSL #2

这一结果可以使通用ARM程序更加紧凑,并且在不频繁访问内存的情况下可以更有效地使用流水线。即使ARM的执行速度通常被认为很慢,但与更复杂的CPU设计相比,它仍然可以表现得很好。

ARM处理器还有一些其他RISC架构不常见到的特性,比如PC相对寻址(的确,PC是ARM上16寄存器之一)和前加或后加的寻址方式。

其他考虑因素是ARM处理器将随着时间的推移增加其指令集。例如,一些早期的ARM处理器(早于ARM7TDMI)可能没有读取两个字节的指令。因此,严格来说,在为这些处理器生成代码时,无法处理C语言对象中的“volatile short”等数据类型。

ARM7和大多数早期设计都有一个三级流水线:获取指令、解码指令和执行指令。ARM9等高性能设计有五个流水线阶段。提高性能的其他方法包括更快的加法器和更宽的分支预测逻辑电路。

这种架构使用“协处理器”来提供一种非侵入性的方法来扩展指令集,可以通过软件中的MCR、MRC、MRRC和MCRR等指令来寻址协处理器。协处理器空间在逻辑上分为16个协处理器,编号分别从0到15,第15号协处理器(CP15)保留用于一些常见的控制功能,例如使用高速缓存和内存管理单元进行操作(如果包含在处理器中)。

在基于ARM的机器中,外围设备通常通过将设备的物理寄存器映射到ARM的存储空间,即协处理器空间,或者通过连接到另一个依次连接到处理器的设备(如总线)来连接到处理器。协处理器的访问延迟较低,因此一些外围设备(如XScale中断控制器)被设计成可以通过不同的方式访问(通过内存和协处理器)。

Thumb较新的ARM处理器有一个16位的指令模式,叫做Thumb,可能与每个条件执行指令消耗4位的情况有关。在Thumb模式下,较小的操作码功能较少。例如,只有分支可以是有条件的,许多操作码不能访问所有的CPU寄存器。然而,更短的操作码提供了总体上更好的编码密度(注意:这意味着代码占用内存空间),即使一些操作需要更多的指令。特别是当内存端口或总线宽度限制在32位以下时,较短的Thumb操作码可以更有效地使用有限的内存带宽,从而提供比32位代码更好的性能。典型的嵌入式硬件只有很小的32位数据路径寻址范围和其他更窄的16位寻址(比如Game Boy Advance)。在这种情况下,通常可行的做法是编译成Thumb代码,并使用(非Thumb)32位指令集优化一些CPU相关的程序区,使其可以放在32位总线宽度有限的内存中。

第一个采用Thumb技术的处理器是ARM7TDMI。包括XScale在内的所有ARM9和更高版本都采用了Thumb技术。

Jazelle ARM还开发了一项技术,Jazelle DBX(直接字节码执行),允许他们在硬件的某些架构上加速Java字节码的执行。就像其他执行模式一样,在调用一些不能支持字节码的特殊软件时,可以加快一些字节码的执行速度。它可以在现有的ARM和Thumb模式之间相互执行。

第一个采用Jazelle技术的处理器是ARM926EJ-S:Jazelle在CPU名称中用英文字母‘J’标记。用来使手机厂商加快Java ME游戏和应用的执行速度,促使了这项技术的不断发展。

Thumb-2 Thumb-2技术最早出现在ARM1156的内核中,于2003年发表。Thumb-2扩展了16位Thumb的有限指令集,并通过额外的32位指令使该指令集得到了更广泛的应用。所以Thumb-2的预期目标是达到接近Thumb的编码密度,但在32位内存中却能表现出接近ARM指令集的性能。

Thumb-2还从ARM和Thumb指令集派生出多种指令,包括位域操作、表分支和条件执行等功能。

ThumbEE ThumbEE,又称Thumb-2EE,业内称为Jazelle RCT技术,于2005年发布,首次出现在Cortex-A8处理器中。ThumbEE提供了Thumb-2的一些扩展性,使得指令集特别适合在执行环境下的运行时代码生成(比如即时编译)。Thumb-2EE是专门为一些语言设计的,如Limbo、Java、C#、Perl和Python,它使实时编译器能够输出更小的编解码器,而不会影响性能。

ThumbEE提供了新的功能,包括每次访问指令时自动检查是否有无效指针,以及可以执行数组范围检查的指令,并可以分支到处理程序,其中包含少量频繁调用的代码,通常用于高级语言功能的实现,例如为新对象分配内存。

NEON高级SIMD扩展集,业内称为NEON技术,是64位和128位相结合的SIMD(single instruction multiple data)指令集,具有多媒体和信号处理程序的标准化和加速能力。NEON可以在10 MHz的CPU上进行MP3音频解码,可以进行13 MHz以下频率的GSM AMR(自适应多速率)语音编码。NEON拥有广泛的指令集、各自的寄存器阵列和独立执行的硬件。NEON支持8位、16位、32位和64位整数和单精度浮点数据,以SIMD模式运行,执行图形和游戏处理中关于语音/视频的部分。SIMD是向量多处理器的决定性因素,向量多处理器同时具有多个处理功能。在NEON技术中,SIMD可以同时支持多达16个操作。

VFP VFP是协处理器中ARM架构的衍生技术。提供低成本的单精度和双精度浮点运算能力,完全兼容ANSI/IEEE Std 754-1985二进制浮点运算标准。VFP提供了大多数适合浮点运算的应用,如PDA、智能手机、语音压缩和解压缩、3D图像和数字音效、打印机、机顶盒和汽车应用。VFP架构还支持SIMD(单指令多数据)并行短向量指令执行。在诸如图像和信号处理的应用中,这对于减小编码尺寸和提高输出效率非常有帮助。

在基于ARM的处理器中,其他可见的浮点或SIMD协处理器包括FPA、FPE和iwMMXt。它们提供了类似于VFP的功能,但是在操作码级别不兼容。

TrustZone(TM)技术是一种安全扩展,出现在ARMv6KZ及以后的应用核心架构中。它提供了一种低成本的解决方案,旨在一个片上系统(SoC)中增加一个专用的安全核心,通过基于硬件的访问控制支持两个虚拟处理器。这种方法使应用程序核心能够在两种状态之间切换(通常重命名为worlds,以避免与其他功能域的名称混淆)。在该框架下,可以防止信息从更可信的核心域泄漏到不太安全的域。这种核心域之间的切换通常与处理器的其他功能完全无关,因此每个域都可以独立运行,但仍然使用同一个核心。因此,存储器和外围设备可以知道当前的核心操作字段是什么,并且可以通过这种方式为设备的保密性和编码提供访问控制。TrustZone技术的典型应用是能够在不安全的环境中完全执行操作系统,在可信环境中有不太安全的编码。

许可方ARM本身并不依赖于自己的设计来制造或销售CPU,而是将处理器架构授权给有兴趣的制造商。ARM提供了各种许可条款,包括价格和传播等项目。对于授权方,ARM提供ARM核的集成硬件描述,包括完整的软件开发工具(编译器、调试器、SDK)以及销售包含ARM CPU的硅片的权利。对于无晶圆厂工厂的被许可方来说,它希望将ARM核集成到自己的芯片设计中,这通常只是为了获得一个量产就绪的ip核认证。对于这些客户,ARM会发布所选ARM核的版图,连同抽象仿真模型和测试程序,帮助设计集成和验证。需要更多的客户,包括集成元件制造商(IDM)和晶圆制造商,选择RTL(寄存器传输级,如Verilog)的形式来获得处理器的知识产权(IP)。借助集成的RTL,客户能够优化和增强架构。这种方法允许设计者实现额外的设计目标(如高振荡频率、低能耗、指令集扩展等。)而不受不可改变的电路图的限制。虽然ARM没有授权许可方转售ARM架构本身,但是许可方可以销售产品(如芯片组件、评估板、完整系统等。)随意。商业晶圆厂是一个特例,因为他们不仅被授予销售含有ARM内核的硅成品的权利,而且对于其他客户,他们通常会保留再生产ARM内核的权利。

和大多数IP卖家一样,ARM根据IP的使用价值来决定IP的价格。架构方面,性能较低的ARM核比性能较高的核授权费用低。就硅芯片实现而言,集成核心比硬件宏(黑盒)核心更昂贵。对于更复杂的价格问题,拥有ARM许可的商业晶圆厂(如韩国的三星和日本的富士通)可以向其晶圆厂客户提供更低的许可价格。通过晶圆厂自己的设计技术,客户可以以较低或免费的ARM预付费许可费获得ARM内核。与没有自己设计技术的专业半导体工厂(如台积电和UMC)相比,富士通/三星对每片晶圆的收费要高出两到三倍。对于中小型应用,有设计部门的晶圆厂提供较低的整体价格(通过许可费补贴)。对于大规模生产,长期成本的降低可以通过降低晶圆价格来降低ARM的NRE成本,使专业化的晶圆厂成为更好的选择。

许多半导体公司持有ARM许可证:Atmel、Broad、Cirrus Logic、Freescale(2004年从摩托罗拉独立出来)、富士通、英特尔(以数字投诉为中介)、IBM、英飞凌科技、任天堂、恩智浦半导体(2006年从飞利浦独立出来)、OKI电气工业、三星电子、夏普、意法半导体、德州仪器、VLSI等许多公司都有不同形式的ARM授权。虽然ARM的授权项目被保密合同覆盖,但ARM被广泛认为是知识产权行业最昂贵的CPU核心之一。包含基本ARM内核的单个客户产品可能需要高达20万美元的许可费。如果涉及大量的架构修改,成本可能超过1000万美元。