分类: LINUX
2011-09-16 16:03:19
ARM==Advanced RISC Machines
它开创了一种崭新的商业模式,实现了无厂房式工厂,依靠出售芯片技术知识产权的授权来盈利。
其次,ARM是一种architecture,同MIPS、PowerPC、X86等并列。谈到架构,这实际上本身就是一个很复杂的概念。就现在的理解来看,架构是一种系统设计蓝图,规划了方方面面的技术规范。应该说,架构是理论,那么采用同样的架构,实现的形式可以不相同。这也就是为什么同一架构会有那么多衍生的处理器实现。
ARM可以看作是一种技术,是RISC的代表。 应该说,ARM公司位于产业链的最上层,盈利也最多。中国国内的一些OEM厂商,只是处于下游的小鱼,盈利有限。中国的信息产业要想发展,就必须有自己的核心技术。写到这里,希望龙芯带给我们的,是梦想的接近,甚至是实现!(龙芯是兼容MIPS架构)
二、命名规则
这里提到的命名规则,应该分成两类。
一类是基于ARM Architecture的版本命名规则;
另一类是基于ARM Architecture版本的处理器系列命名规则。
Naming of ARM Architecture versions
| ARMv | n | variants | x(variants) |
分成四个组成部分:
ARMv -- 固定字符,即ARM Version
n -- 指令集版本号。迄今为之,ARM架构版本发布了7个系列,所以n=[1:7]。其中最新的版本是第7版,具体看ARM官方网站。
variants -- 变种。
x(variants) -- 排除x后指定的变种
常见的变种有:
T -- Thumb指令集
M -- 长乘法指令
E -- 增强型DSP指令
J -- Java加速器Jazelle
SIMD -- ARM媒体功能扩展
例如,ARMv5TxM表示ARM指令集版本为5,支持T变种,不支持M变种。
Naming of ARM Processor
采用上述的架构,形成一系列的处理器。有时候还要区分处理器核和处理器系列。不过,在这里其实不用区分太细,毕竟这是功能的小部分的变化,核心是相同的。
规则:ARM{x}{y}{z}{T}{D}{M}{I}{E}{J}{F}{-S}
x -- 处理器系列
y -- 存储管理/保护单元
z -- cache
T -- 支持Thumb指令集
D -- 支持片上调试
M -- 支持快速乘法器
I -- 支持Embedded ICE,支持嵌入式跟踪调试
E -- 支持增强型DSP指令
J -- 支持Jazelle
F -- 具备向量浮点单元VFP
-S -- 可综合版本
ARM体系结构处理器自诞生以来,不断发展与创新,ARM体系的指令集功能形成了多种版本,为了适合不同的应用场合,各个版本又增加了新的变种,这些变种为该版本的指令集增加了新的功能。不同版本的指令集应用于不同的处理器,这也就形成了ARM处理器系列,ARM系列处理器不同版本实现技术、性能、应用场合个不相同。
ARM体系结构的基本版本
1 版本1
该版本的原型机是ARM1,没有用于商业产品。 包括下列指令:
l 除乘法指令之外的基本的数据处理指令。
l 基于字节、字和多字的存储器访问指令(Load/Store)。
l 包括子程序调用指令BL在内的跳转指令。
l 供操作系统使用的软件中断指令SWI。
本版本中地址空间是26位,目前已经不再使用。
2 版本2
对V1版进行了扩展,包含了对32位结果的乘法指令和协处理器指令的支持。
版本2a是版本2的变种,ARM3芯片采用了版本2a,是第一片采用片上Cache的ARM处理器。版本2a增加了合并Load和Store(SWP)指令。
与版本V1相比,增加了以下指令:
l 乘法指令和乘加指令。
l 支持协处理器操作指令。
l 对于FIQ模式,提供了额外的两个备份寄存器。
l SWP指令和SWPB指令。
本版本中地址空间是26位,目前已经不再使用。
3 版本3
ARM公司第一个微处理器ARM6核心是版本3的,它作为IP核、独立的处理器、具有片上高速缓存、MMU和写缓冲的集成CPU。
版本3的变种版本有版本3G和版本3M。版本3G是不与版本2a向前兼容的版本3,版本3M引入了有符号和无符号数乘法和乘加指令,这些指令产生全部64位结果。
版本3版较以前的版本有较大的改动,主要包括:
l 处理器的地址空间扩展到32位,但除了版本3G外的其他版本是向前兼容的,支持26位的地址空间。
l 当前程序状态信息从原来的R15寄存器移到当前程序状态寄存器CPSR中(Current Program Status Register)。
l 增加了程序状态保存寄存器SPSR(Saved Program Status Register)。
l 增加了两种异常模式,使操作系统代码可方便地使用数据访问中止异常、指令预取中止异常和未定义指令异常。
l 增加了MRS/MSR指令,用于访问新增的CPSR/SPSR寄存器。
l 修改了原来的从异常中返回的指令。
4 版本4
版本4增加了下列指令:
l 有符号和无符号的半字读取和写入指令。
l 带符号的字节读取和写入指令。
l 增加了处理器的系统模式(特权模式)。在该模式下,使用的是用户模式下的寄存器。
l 为结构定义的操作预留一些SWI(软中断指令)空间
版本4中明确定义了哪些指令会引起未定义指令异常,不再强制要求与以前的26位地址空间兼容。
ARMv4T在ARMv4的基础上增加了Thumb指令集:处理器有了Thumb状态,并且有了在ARM状态和Thumb状态切换的指令,处理器在ARM状态执行ARM指令集,在Thumb状态执行Thumb指令集。
ARMv4和ARMv4T结构的处理器得到了广泛的应用。SA-110、SA-1110等是基于ARMv4的;ARM7TDMI、ARM720T、ARM9TDMI、ARM940T、ARM920T、Intel的StrongARM等是基于ARMv4T版本。
5 版本5
版本5在版本4的基础上增加或修改以下指令:
l 提高了T变种中ARM/Thumb混合使用的效率。
l 对于T变种的指令和非T变种的指令使用相同的代码生成技术。
l 增加了前导零计数(CLZ)指令,该指令可以使整数除法和中断优先级排队操作更为有效。
l 增加了软件断点(BKPT)指令。
l 为协处理器设计提供了更多可选择的指令。
l 更加严格的定义了乘法指令对条件标志位的影响。
l 带状态切换的子程序调用(BLX)指令。
版本5包括v5TE和v5TEJ,v5TE在v5T的基础上增加了信号处理(DSP)指令集,v5TEJ除了具备v5T的功能外,还可以执行JAVA字节代码,是在ARM上执行JAVA指令的效率提高了5-10倍,并且降低了功耗。
ARM1020T 是ARMv5T的。
ARM9E-S、ARM966E-S、ARM1020E、ARM 1022E以及XScale是ARMv5TE的。
ARM9EJ-S、ARM926EJ-S、ARM7EJ-S、ARM1026EJ-S是基于ARMv5EJ的。
6 版本6
ARM体系版本6是2001年发布的。其目标是在有效的芯片面积上为嵌入式系统提供更高的性能。ARMv6 包含了ARMv5TEJ的所有指令。为了使现有的软件,开发方法、设计技术可再利用,ARMv6兼容了ARMv5的内存管理和异常处理。ARMv6主要在多媒体处理、存储器管理、多处理器支持、数据处理、异常和中断响应等方面做了改进。
l SIMD(单指令多数据)指令,可使音视频处理能力提高2-4倍。
l Thumb-2新指令集,混合执行AMR和Thumb代码,可以提供ARM指令级别的性能和Thumb指令级别的代码密度。
l 混合大小端和非对齐存储访问支持
l TrustZone安全技术,在硬件上提供可信区域和不可信区域,两个区域里运行的代码有不同的权限。让经过认证的代码运行在可信区域,未经过认证的代码运行在不可信区域,从而提高系统的安全性。
采用ARMv6核的处理器是ARM11系列。
ARM1136J(F)-S基于ARMv6主要特性有SIMD、Thumb、Jazelle、DBX、(VFP)、MMU。
ARM1156T2(F)-S基于ARMv6T2 主要特性有SIMD、Thumb-2、(VFP)、MPU。
ARM1176JZ(F)-S基于ARMv6KZ 在 ARM1136EJ(F)-S 基础上增加MMU、TrustZone。
ARM11 MPCore基于ARMv6K 在ARM1136EJ(F)-S基础上可以包括1-4 核SMP、MMU。
7 版本7
2004年发布了新的ARMv7体系结构。全新的ARMv7是基于ARMv6的,ARMv7采用了Thumb-2技术,体积比32位ARM代码减小31%,性能比16位Thumb代码高出38%。同时,ARMv7保持了对已有ARM代码的兼容性。此外,ARMv7还支持改良的运行环境,以迎合不断增加的JIT(Just In Time)和DAC(DynamicAdaptive Compilation)技术的使用。
ARMv7的增加的特性有:
l 改进的Thumb-2指令集。
l NEON多媒体技术,将DSP和多媒体处理能力提高了近4倍。
l VFPv3改良的浮点运算。
l 动态编译支持。
ARM体系结构的变种
1 Thumb指令集(T变种)
Thumb指令集是将ARM指令集中的一部分指令重新编码形成的一个子集, Thumb指令长度是16位的。使用Thumb指令可以得到比ARM指令更高的代码密度,这有助于减小系统的存储器容量,从而降低系统的成本。另外,对于数据线是8或16位的系统,使用Thumb指令集可以取得好于使用ARM指令集的性能。在ARM体系命名中通用“T”来表示该版本支持Thumb指令集。在ARMv4T中使用v1版Thumb指令集;ARMv5T使用v2版的Thumb指令集。和Thumb v1相比Thumb v2 具有如下特点:
l 通过对指令的修改,来提高ARM指令和Thumb指令混合使用是的效率。
l 增加软件断点指令。
l 严格定义了Thumb乘法指令对条件标志位的影响。
与ARM指令集相比,Thumb指令集具有以下局限性:
l 完成相同的操作,Thumb指令通常需要更多的指令。
l Thumb指令集没有包含进行异常处理时需要的一些指令,异常返回时需要从ARM状态返回。
2 长乘法指令(M变种)
M变种增加了两条用于进行长乘法的ARM指令。其中一条用于实现32位整数乘以32位整数,生成64位整数的长乘法操作;另一条指令用于实现32位整数乘以32位位整数,然后加上32位整数,生成64位整数的长乘加操作。
3 增强型DSP指令(E变种)
l E变种包含了一些附加的指令,这些指令用于增强处理器对一些典型的DSP算法的处理性能。主要包括:
l 几条新的实现16位数据乘法和乘加操作的指令
l 实现饱和的带符号数的加减法操作的指令。所谓饱和的带符号数的加减法操作是在加减法操作溢出时,结果并不进行卷绕(Wrapping around),而是使用最大的整数或最小的负数来表示。
l 进行双字数据操作的指令,包括双字读取指令LDRD、双字写入指令STRD和协处理器的寄存器传输指令MCRR/MRRC。
l Cache预取指令PLD
4 Java加速器Jazelle(J变种)
ARM的Jazelle技术将Java的优势和先进的32位RISC芯片完美地结合在一起。Jazelle技术提供了Java加速功能,可以得到比普通Java虚拟机高得多的性能。与普通的Java虚拟机相比,Jazelle使代码运行速度提高了8倍,而且功耗降低了80%,Jazelle技术使得程序员可以在一个单独的处理器上同时运行Java应用程序、已经建立好的操作系统、中间件以及其他的应用程序。与使用协处理器和双处理器相比,使用单独得处理器可以在提供高性能的同时,保证低功耗和低成本。ARM体系版本4TEJ最早包含了J变种,用字符J表示J变种。
5 SIMD变种(ARM媒体功能扩展)
ARM媒体功能扩展SIMD技术极大地提高了嵌入式应用系统的音频和视频处理器能力,它可使微处理器的音频和视频性能提高4倍。新一代的Internet应用产品、移动电话和PDA等设备终端需要提供高性能的流式媒体,包括音频和视频等。而且这些设备需要提供更加人性化的界面,包括语言输入和手写输入等。这样,就对处理器的数字信号处理能力提出了很高的要求,同时还必须保证低功耗。ARM的SIMD媒体功能扩展为这些应用系统提供了解决方案,它为包括音频和视频处理在内的应用系统提供了优化功能,其主要特点如下:
●使处理器的音频和视频处理的性能提高了2~4倍。
●可同时进行2个16位操作数或者4个8位操作数的运算。
●用户可自定义饱和运算的模式。
●可进行2个16位操作数的乘加/乘减运算及32位乘以32位的小数乘加运算。
●同时8 /16位选择操作。
ARM11是基于ARMv6架构建成的。基于ARMv6架构的处理器包括ARM1136J(F)‐S,ARM1156T2(F)‐S,以及ARM1176JZ(F)‐S。ARMv6是ARM进化史上的一个重要里程碑:从那时候起,许多突破性的新技术被引进,存储器系统加入了很多的崭新的特性,单指令流多数据流(SIMD)指令也是从v6开始首次引入的。而最前卫的新技术,就是经过优化的Thumb‐2指令集,它专为低成本的单片机及汽车组件市场。
基于从ARMv6开始的新设计理念,ARM进一步扩展了它的CPU设计,成果就是ARMv7架构的闪亮登场。在这个版本中,内核架构首次从单一款式变成3种款式。
1) 款式A:设计用于高性能的"开放应用平台"--越来越接近电脑了。
2) 款式R:用于高端的嵌入式系统,尤其是那些带有实时要求的--又要快又要实时。
3) 款式M:用于深度嵌入的,单片机风格的系统中--本书的主角。
让我们再进距离地考察这3种款式:
1) 款式A(ARMv7‐A):需要运行复杂应用程序的"应用处理器"。支持大型嵌入式操作系统,比如Symbian,Linux,以及微软的WindowsCE和智能手机操作系统WindowsMobile。这些应用需要劲爆的处理性能,并且需要硬件MMU实现的完整而强大的虚拟内存机制,还基本上会配有Java支持,有时还要求一个安全程序执行环境。典型的产品包括高端手机和手持仪器,电子钱包以及金融事务处理机。
2) 款式R(ARMv7‐R):硬实时且高性能的处理器。标的是高端实时市场。那些高级的玩意,像高档轿车的组件,大型发电机控制器,机器手臂控制器等,它们使用的处理器不但要很好很强大,还要极其可靠,对事件的反应也要极其敏捷。
3) 款式M(ARMv7‐M):认准了旧世代单片机的应用而量身定制。在这些应用中,尤其是对于实时控制系统,低成本、低功耗、极速中断反应以及高处理效率,都是至关重要的。
Cortex系列是v7架构的第一次亮相,其中Cortex‐M3就是按款式M设计的。
到目前为止,Cortex‐M3也是款式M中被抚养成人的独苗。其它Cortex家族的处理器包括款式A的Cortex‐A8(应用处理器),款式R的Cortex‐R4(实时处理器)。
处理器命名法
以前,ARM使用一种基于数字的命名法。在早期(1990s),还在数字后面添加字母后缀,用来进一步明细该处理器支持的特性。就拿ARM7TDMI来说,T代表Thumb指令集,D是说支持JTAG调试(Debugging),M意指快速乘法器,I则对应一个嵌入式ICE模块。后来,这4项基本功能成了任何新产品的标配,于是就不再使用这4个后缀--相当于默许了。但是新的后缀不断加入,包括定义存储器接口的,定义高速缓存的,以及定义"紧耦合存储器(TCM)"的,于是形成了新一套命名法,这套命名法也是一直在使用的。
表一:ARM处理器名字
Jazelle是ARM处理器的硬件Java加速器。
MMU,存储器管理单元,用于实现虚拟内存和内存的分区保护,这是应用处理器与嵌入式处理器的分水岭。电脑和数码产品所使用的处理器几乎清一色地都带MMU。但是MMU也引入了不确定性,这有时是嵌入式领域--尤其是实时系统不可接受的。然而对于安全关键(safety‐critical)的嵌入式系统,还是不能没有内存的分区保护的。为解决矛盾,于是就有了MPU。可以把MPU认为是MMU的功能子集,它只支持分区保护,不支持具有"定位决定性"的虚拟内存机制。
到了架构7时代,ARM改革了一度使用的,冗长的、需要"解码"的数字命名法,转到另一种看起来比较整齐的命名法。比如,ARMv7的三个款式都以Cortex作为主名。这不仅更加澄清并且"精装"了所使用的ARM架构,也避免了新手对架构号和系列号的混淆。