ARM架构
ARM架构(过去称作进阶精简指令集机器(Advanced RISC Machine),更早称作Acorn RISC Machine)是一个32位精简指令集(RISC) 中央处理器(processor)架构,其广泛地使用在许多嵌入式系统(embedded)设计。由于节能的特点,ARM处理器非常适用于行动通讯领域,符合其主要设计目标为低耗电的特性。
在今日,ARM家族占了所有32位嵌入式处理器75%的比例[1],使它成为占全世界最多数的32位架构之一。ARM处理器可以在很多消费性电子产品上看到,从可携式装置(PDA、行动电话、多媒体播放器、掌上型电玩,和计算器)到计算机外设设备(硬盘、桌上型路由器)甚至在飞弹的弹载计算机等军用设施中都有他的存在。在此家族中衍伸的重要产品还包括Marvell的XScale架构和德州仪器的OMAP系列。
目录 ∙ 1 历史 ∙ 2 内核种类 ∙ 3 设计文件 o 3.1 'Thumb' o 3.2 Jazelle o 3.3 Thumb-2 o 3.4 Thumb Execution Environment (ThumbEE) o 3.5 进阶 SIMD (NEON) o 3.6 VFP o 3.7 安全性扩充 (TrustZone) ∙ 4 ARM 授权方 ∙ 5 延伸阅读 ∙ 6 参考数据 ∙ 7 外部连结 |
|
[编辑] 历史
一颗主要用于路由器的Conexant ARM处理器
ARM的设计是Acorn计算机公司(Acorn Computers Ltd)于1983年开始的发展计划。
这个团队由Roger Wilson和Steve Furber带领,着手开发一种新架构,类似进阶的MOS Technology 6502处理器。Acorn有一大堆建构在6502架构上的计算机,因此能设计出一颗类似的芯片即意味着对公司有很大的优势。
团队在1985年时开发出ARM1 Sample版,而首颗"真正"的产能型ARM2于次年量产。ARM2具有32位的数据总线、26位的寻址空间,并提供64 Mbyte的寻址范围与豆腐怎么炒16个32-bit
的缓存器。这些缓存器其中有一颗做为(word大小) 程序计数器,其前面6 bits和后面2 bits用来保存处理器状态标记(Processor Status Flags)。ARM2可能是全世界最简单实用的32位微处理器,其仅容纳了30,000个晶体管(相较于Motorola六年后的68000其包含了70,000颗)。之所以精简的原因在于它不含微码(请参阅microcode)(这表示大概只有68000的1/3至1/4),而与现今大多数的 CPU 不同,它没有包含任何的快取。这个精简的特色使它只需消耗很少的电能,却能发挥比 Intel 80286 更好的效能[来源请求]。后继的处理器ARM3更备有4KB的快取,使它能发挥更佳的效能。
在1980年代晚期,苹果计算机开始与Acorn合作开发新版的ARM核心,由于这项目非常重要,Acorn甚至于1990年将设计团队另组成一间名为Advanced RISC Machines Ltd.的新公司。也基于这原因,使得ARM有时候反而称作Advanced RISC Machine而不是Acorn RISC Machine。由于其母公司ARM Holdings plc于1998年的伦敦交易市场和NASDAQ挂牌上市[1],使得Advanced RISC Machines成了ARM Ltd旗下拥有的产品。
这个项目到后来进入了ARM6,首版的式样在1991年释出,然后苹果计算机使用ARM6架构的ARM 610来当作他们Apple Newton PDA的基础。在1994年,Acorn使用ARM 610做为他们Risc PC计算机内的CPU。
在这些变革之后,内核部份却大多维持一样的大小。ARM2有30,000颗晶体管,但ARM6却也只增长到35,000颗。主要概念是以ODM的方式,使ARM核心能搭配一些选配的零件而制成一颗完整的CPU,而且可在现有的晶圆厂里制作并以低成本的方式达到很大的效能。
ARM的经营模式在于出售其知识产权核(IP core),授权厂家依照设计制作出建构于此核的微控制器和中央处理器。最成功的实作案例属 ARM7TDMI,几乎卖出了数亿套内建微控制器的装置。
DEC 购买这个架构的产权(此处会造成混淆在于其本身也制造 DEC Alpha 并研发出StrongARM。在 233 MHz 的频率下,这颗 CPU 只消耗一瓦特的电能(后来的芯片消耗得更少)。这项设计后来为了和 Intel 的控诉和解而技术移转,Intel 因而趁机以 StrongARM 架构补强他们老旧的 i960 产线。Intel 后来开发出他们自有的高效能实作,称作XScale,之后也卖给了 Marvell。
支援智能型手机、PDA和其它手持装置最常见的架构是ARMv4。XScale 和 ARM926 处理器是ARMv5TE,而且比起建构在 ARMv4 的 StrongARM、ARM925T 和 ARM7TDMI 等处
理器还更常见于许多高阶装置上[来源请求]。架构版本如下栏所示。
[编辑] 内核种类
家族 | 架构 | 内核 | 特色 | 快取 (I/D)/MMU | 常规 MIPS 于 MHz | 应用 |
ARM1 | ARMv1 | ARM1 | | 无 | | |
ARM2 | ARMv2 | ARM2 | Architecture 2 加入了MUL(乘法凉的反义词)指令 | 无 | 4 MIPS @ 8MHz | Acorn Archimedes, Chessmachine |
ARMv2a | ARM250 | Integrated MEMC (MMU),图像与IO处理器。Architecture 2a 加入了SWP和SWPB (置换文雅的诗句) 指令。 | 无, MEMC1a | 7 MIPS @ 12MHz | Acorn Archimedes |
ARM3 | ARMv2a | ARM2a | 首次在ARM架构上使用处理器快取 | 均为4K | 12 MIPS @ 25MHz | Acorn Archimedes |
ARM6 | ARMv3 | ARM610 | v3 架构首创支持寻址32位的内存(针对26位) | 均为4K | 28 MIPS @ 33MHz | Acorn Risc PC 600, Apple Newton |
ARM7TDMI | ARMv4T | ARM7TDMI(-S) | 三级流水线 | 无 | 15 MIPS @ 16.8 MHz | Game Boy Advance, Nintendo DS, iPod |
| | ARM710T | | 均为8KB, MMU | 36 MIPS @ 40 MHz | Acorn Risc PC 700, Psion 5 ries, Apple eMate 300 |
| | ARM720T | | 均为8KB, MMU | 60 MIPS @ 59.8 MHz | Zipit |
| | ARM740T | | MPU | | |
| ARMv5TEJ | ARM7EJ-S | Jazelle DBX | 无 | | |
ARM9TDMI | ARMv4T | ARM9TDMI | 五级流水线 | 无 | | |
| | | ARM920T | | 16KB/16KB, MMU | 200 MIPS @ 180 MHz | Armadillo, GP32,GP2X (第一颗内核), Tapwave Zodiac (Motorola i. MX1) |
| | | ARM922T | | 8KB/8KB, MMU | | |
| | | ARM940T | | 4KB/4KB, MPU | | GP2X (第二颗内核) |
| ARM9E | ARMv5TE | ARM946E-S | | 可变动,tightly coupled memories, MPU | | Nintendo DS, Nokia N-Gage Conexant 802.11 chips |
| | | ARM966E-S | | 无快取, TCMs | | ST Micro STR91xF,包含Ethernet [2] |
| | | ARM968E-S | | 无快取, TCMs | | |
| | ARMv5TEJ | ARM926EJ-S | Jazelle DBX | 可变动, TCMs, MMU | 220 MIPS @ 200 MHz | 行动电话: Sony Ericsson (K, W系列),Siemens 和 Benq (x65 系列和新版的) |
| | ARMv5TE | ARM996HS | 无振荡器处理器 | 无快取, TCMs, MPU | | |
| ARM10E | ARMv5TE | ARM1020E | (VFP), 六级流水线 | 32KB/32KB, MMU | | |
| | | ARM1022E | (VFP) | 16KB/16KB, MMU | | |
| | ARMv5TEJ 2013是什么年 | ARM1026EJ-S | Jazelle DBX | 可变动, MMU or MPU | | |
| XScale | ARMv5TE | 80200/IOP310/IOP315 | I/O处理器 | | | |
| | | 80219 | | | 400/600MHz | Thecus N2100 |
| | | IOP321 | | | 600 BogoMips @ 600 MHz 几月份去三亚好 | Iyonix |
| | | IOP33x | | | | |
| | | IOP34x | 1-2核, RAID加速器 | 32K/32K L1, 512K L2, MMU | | |
| | | PXA210/PXA250 | 应用处理器, 七级流水线 | | | Zaurus SL-5600 |
| | | PXA255 | | 32KB/32KB, MMU | 400 BogoMips @ 400 MHz | Gumstix, Palm Tungsten E2 |
| | | PXA26x | | | 可达 400 MHz | Palm Tungsten T3 |
| | | PXA27x | | | 800 MIPS @ 624 MHz | HTC Universal, Zaurus SL-C1000,3000,3100,3200, Dell Axim x30, x50, 和 x51 系列 |
| | | PXA800(E)F | | | | |
| | | Monahans | | | 1000 MIPS @ 1.25 GHz | |
| | | PXA900 | | | | Blackberry 8700, Blackberry Pearl (8100) |
| | | IXC1100 | Control Plane Processor | | | |
| | | IXP2400/IXP2800 | | | | |
| | | IXP2850 | | | | |
| | | IXP2325/IXP2350 | | | | |
| | | IXP42x | | | | NSLU2 |
| | | IXP460/IXP465 | | | | |
| ARM11 | ARMv6 | ARM1136J(F)-S | SIMD, Jazelle DBX, (VFP), 八级流水线 | 可变动, MMU | ?? @ 532-665MHz (i.MX31 SoC) | Nokia N93, Zune, Nokia N800 |
| ARMv6T2 | ARM1156T2(F)-S | SIMD, Thumb-2, (VFP), 九级流水线 | 可变动, MPU | | |
| ARMv6KZ | ARM1176JZ(F)-S | SIMD, Jazelle DBX, (VFP) | 可变动, MMU+TrustZone | | |
| ARMv6K | ARM11 MPCore | 1-4核对称多处理器, SIMD, Jazelle DBX, (VFP) | 可变动, MMU | | |
| Cortex | ARMv7-A | Cortex-A8 | Application profile, VFP, NEON, Jazelle RCT, Thumb-2, 13-stage pipeline | 可变动 (L1+L2), MMU+TrustZone | up to 2000 (2.0 DMIPS/MHz 从600 MHz到超过1 GHz的速度) | Texas Instruments OMAP3 |
| | ARMv7-R | Cortex-R4(F) | Embedded profile, (FPU) | 可变动快取, MMU可选配 | 600 DMIPS | Broadcom is a ur |
| | ARMv7-M | Cortex-M3 | Microcontroller profile | 无快取, (MPU) | 120 DMIPS @ 100MHz | Luminary Micro[3] 微控制器家族 |
| | | | | | | |
[编辑] 设计文件
讲求精简又快速的设计方式,整体电路化却又不采用微码,就像早期使用在Acorn微电脑的8位6502处理器。
ARM架构包含了下述RISC特性:
∙ 读取/储存 架构
∙ 不支持地址不对齐内存存取(ARMv6内核现已支持)
∙ 正交指令集(任意存取指令可以任意的寻址方式存取数据Orthogonal instruction t)
∙ 大量的16 × 32-bit 缓存器档案(缓存器数组register file)
∙ 固定的32 bits 操作码宽(opcode),降低编码数量所产生的耗费,减轻译码和管线化的负担。
∙ 越后之龙大多均为一个CPU周期执行。
消防防火手抄报
为了补强这种简单的设计方式,相较于同时期的处理器如Intel 80286和Motorola 68020,还多加了一些特殊设计:
∙ 大部分指令可以条件式地执行,降低在分支时产生的负重,弥补分支预测器(branch predictor)的不足。
∙ 算数指令只会在要求时更改条件编码(condition code)
∙ 32-bit筒型位移器(barrel shifter)可用来执行大部分的算数指令和寻址计算而不会损失效能
∙ 强大的索引寻址模式(addressing mode)
∙ 精简但快速的双优先级中断子系统,具有可切换的缓存器组
有个附加在ARM设计中好玩的东西,就是使用一个4-bit 条件编码 在每个指令前头,表示每支指令的执行是否为有条件式的
这大大的减低了在内存存取指令时用到的编码位,换句话说,它避免在对小型叙述如if做分支指令。有个标准的范例引用欧几里德的最大公因子算法:
在C程序语言中,循环为:
int gcd (int i, int j)
{
while (i != j)
if (i > j)
i -= j;
el
j -= i;
return i;
}
在ARM 汇编语言中,循环为:
loop CMP Ri, Rj ; 设定条件为 "NE"(不等于) if (i != j)
; "GT"(大于) if (i > j),
; or "LT"(小于) if (i < j)
SUBGT Ri, Ri, Rj ; 若 "GT"(大于), i = i-j;
SUBLT Rj, Rj, Ri ; 若 "LT"(小于), j = j-i;
BNE loop ; 若 "NE"(不等于),则继续循环
这避开了then和el子句之间的分支。
另一项指令集的特色是,能将位移(shift)和回转(rotate)等功能并成"数据处理"型的指令(算数、逻辑、和缓存器之间的搬移),因此举例来说,一个C语言的叙述
a += (j << 2);
在ARM之下,可简化成只需一个word和一个cycle即可完成的指令
ADD Ra, Ra, Rj, LSL #2
这结果可让一般的ARM程序变得更加紧密,而不需经常使用内存存取,管线也可以更有效地使用。即使在ARM以一般认定为慢速的速度下执行,与更复杂的CPU设计相比它仍能执行得不错。
ARM处理器还有一些在其它RISC的架构所不常见到的特色,例如PC-相对寻址(的确在ARM上PC为16个缓存器的其中一个)以及 前递加或后递加的寻址模式。
qq笔记
另外一些注意事项是 ARM 处理器会随着时间,不断地增加它的指令集。某些早期的 ARM 处理器(比ARM7TDMI更早),譬如可能并未具备指令可以读取两 Bytes 的数量,因此,严格来讲,对这些处理器产生程序代码时,就不可能处理如 C 语言对象中使用 "volatile short" 的数据型态。
ARM7 和大多数较早的设计具备三阶段的管线化(Pipeline):提取指令、译码,并执行。较高效能的设计,如 ARM9,则有五阶段的管线化。提高效能的额外方式,包含一颗较快的加法器,和更广的分支预测逻辑线路。