ARM系统架构
ARM系统架构
一.ARM概要
ARM架构,曾称进阶精简指令集机器(Advanced RISC Machine)更早称作Acorn RISC Machine,是一个32位精简指令集(RISC)处理器架构。还有基于ARM设计的派生产品,重要产品包括Marvell的XScale架构和德州仪器的OMAP系列。
ARM家族占比所有32位嵌入式处理器的75%,成为占全世界最多数的32位架构。
ARM处理器广泛使用在嵌入式系统设计,低耗电节能,非常适用移动通讯领域。消费性电子产品,例如可携式装置(PDA、移动电话、多媒体播放器、掌上型电子游戏,和计算机),电脑外设(硬盘、桌上型路由器),甚至导弹的弹载计算机等军用设施。
ARM架构包含了下述RISC特性:
读取/储存 架构
不支援地址不对齐内存存取(ARMv6内核现已支持)
正交指令集(任意存取指令可以任意的寻址方式存取数据Orthogonal instruction set)
大量的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;
else
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和else子句之间的分支。
另一项指令集的特色是,能将位移(shift)和回转(rotate)等功能并成”资料处理”型的指令(算数、逻辑、和暂存器之间的搬移),因此举例来说,一个C语言的叙述
a += (j << 2);
在ARM之下,可简化成只需一个word和一个cycle即可完成的指令
ADD Ra, Ra, Rj, LSL #2
这结果可让一般的ARM程式变得更加紧密,而不需经常使用内存存取,流水线也可以更有效地使用。即使在ARM以一般认定为慢速的速度下执行,与更复杂的CPU设计相比它仍能执行得不错。
ARM处理器还有一些在其他RISC的架构所不常见到的特色,例如PC-相对寻址(的确在ARM上PC为16个暂存器的其中一个)以及 前递加或后递加的寻址模式。
另外一些注意事项是 ARM 处理器会随着时间,不断地增加它的指令集。某些早期的 ARM 处理器(比ARM7TDMI更早),譬如可能并未具备指令可以读取两 Bytes 的数量,因此,严格来讲,对这些处理器产生程式码时,就不可能处理如 C 语言物件中使用 “volatile short” 的资料型态。
ARM7 和大多数较早的设计具备三阶段的流水线化(Pipeline):提取指令、解码,并执行。较高效能的设计,如 ARM9,则有五阶段的流水线化。提高效能的额外方式,包含一颗较快的加法器,和更广的分支预测逻辑线路。
这个架构使用“协处理器”提供一种非侵入式的方法来延伸指令集,可透过软件下 MCR、MRC、MRRC和MCRR 等指令来对协处理器寻址。协处理器空间逻辑上通常分成16个协处理器,编号分别从 0 至 15 ,而第15号协处理器(CP15)是保留用作某些常用的控制功能,像是使用高速缓存和记忆管理单元运算(若包含于处理器时)。
在 ARM 架构的机器中,周边装置连接处理器的方式,通常透过将装置的实体暂存器对应到 ARM 的内存空间、协处理器空间,或是连接到另外依序接上处理器的装置(如总线)。协处理器的存取延迟较低,所以有些周边装置(例如 XScale 中断控制器)会设计成可透过不同方式存取(透过内存和协处理器)。
二.ARM 微处理器的应用领域及特点
ARM处理器市场覆盖率最高、发展趋势广阔,基于ARM技术的32位微处理器,市场的占有率目前已达到80%。绝大多数IC制造商都推出了自己的ARM结构芯片。我国的中兴集成电路、大唐电讯、华为海思、中芯国际和上海华虹,以及国外的一些公司如德州仪器、意法半导体、Philips、Intel、Samsung等都推出了自己设计的基于ARM核的处理器。
工业控制领域:作为32 的RISC 架构,基于ARM 核的微控制器芯片不但占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展,ARM 微控制器的低功耗、高性价比,向传统的8 位/16 位微控制器提出了挑战。
无线通讯领域:目前已有超过85%的无线通讯设备采用了ARM 技术, ARM 以其高性能和低成本,在该领域的地位日益巩固。
网络设备:随着宽带技术的推广,采用ARM 技术的ADSL 芯片正逐步获得竞争优势。此外,ARM 在语音及视频处理上进行了优化,并获得广泛支持,也对DSP 的应用领域提出了挑战。
消费类电子产品:ARM 技术在目前流行的数字音频播放器、数字机顶盒和游戏机中得到广泛采用。
成像和安全产品:现在流行的数码相机和打印机中绝大部分采用ARM 技术。手机中的32位SIM 智能卡也采用了ARM 技术。
ARM处理器的特点:
1、体积小、低功耗、低成本、高性能;
2、支持Thumb(16 位)/ARM(32 位)双指令集,能很好的兼容8 位/16 位器件;
3、大量使用寄存器,指令执行速度更快;
4、大多数数据操作都在寄存器中完成;
5、寻址方式灵活简单,执行效率高;
6、指令长度固定;
ARM相关的几个重要概念
冯·诺依曼体系
结构模型:
冯·诺依曼体系的特点:
1、数据与指令都存储在同一存储区中,取指令与取数据利用同一数据总线。
2、被早期大多数计算机所采用。
3、ARM7——冯诺依曼体系结构简单,但速度较慢。取指不能同时取数据。
哈佛体系
结构模型:
结构特点:
1、程序存储器与数据存储器分开.
2、提供了较大的存储器带宽,各自有自己的总线。
3、适合于数字信号处理.
4、大多数DSP都是哈佛结构.
5、ARM9是哈佛结构,取指和取数在同一周期进行,提高速度,改进哈佛体系结构分成三个存储区:程序、数据、程序和数据共用。
CISC复杂指令集(Complex Instruction Set Computer)
特点:
1、具有大量的指令和寻址方式
2、8/2原则:80%的程序只使用20%的指令
3、大多数程序只使用少量的指令就能够运行。
4、CISC CPU 包含有丰富的单元电路,因而功能强、面积大、功耗大。
三.RISC精简指令集(Reduced Instruction Set Computer)
特点:
1、在通道中只包含最有用的指令,只提供简单的操作。
2、确保数据通道快速执行每一条指令。
3、Load-store结构—— 处理器只处理寄存器中的数据,load-store指令用来完成数据在寄存器和外部存储器之间的传送。
4、使CPU硬件结构设计变得更为简单, RISC CPU包含较少的单元电路,因而面积小、功耗低。
四.RISC与CISC主要差别
1、寄存器方面
RISC指令集:拥有更多的通用寄存器,每个可以存放数据和地址,寄存器为所有的数据操作提供快速的存储访问。
CISC指令集:多用于特定目的的专用寄存器。
2、LOAD –STORE结构方面
RISC结构:Cpu 仅处理寄存器中的数据,采用独立的、专用的LOAD –STORE 指令来完成数据在寄存器和外存之间的传送。(访存费时,处理和存储分开,可以反复的使用保存在寄存器中的数据,而避免多次访问外存)。
CISC结构:能直接处理存储器中的数据。
五.ARM存储格式
ARM存储器以8位为一个单元存储数据(一个字节),每个存储单元分配一个存储地址。
ARM将存储器看作是从零地址开始的字节的线性组合。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB(232字节)。从零字节到三字节放置第一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。32位的字数据要使用4个地址单元,16位半数据要使用2个地址单元。这样,就存在一个所存储的字或半字数据的排列顺序问题。ARM体系结构可以用两种方法存储字数据,称为大端格式和小端格式。
大端格式(big-endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
小端格式(low-endian):与大端存储格式相反。低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。缺省设置为小端格式。
六.ARM体系结构
ARM系列产品表示
七.ARM处理器的分类
基于指令集体系结构的分类:v1,v2,v5,v5TEJ,v6等。
基于处理器内核的分类:ARM7,ARM9,ARM10,ARM11,StrongARM,XScale等。
八.ARM体系结构版本
ARM架构自诞生至今,已经发生了很大的演变,至今已定义的版本有:V1版架构、V2版架构、V3版架构、V4版架构、V5版架构、V6版架构。
V1版架构
该版架构只在原型机ARM1出现过,其基本性能:
1、基本的数据处理指令(无乘法)
2、字节、半字和字的LOAD/STORE指令
3、转移指令,包括子程序调用及链接指令
4、软件中断指令
5、寻址空间:64M字节(26)
V2版架构
该版架构对V1版进行了扩展,如ARM2架构,增加了以下功能:
1、乘法和乘加指令
2、支持协处理器操作指令
3、快速中断模式
4、SWP/SWPB基本存储器与寄存器交换指令
5、寻址空间:64M字节
V3版架构
1、把寻址空间增至32位(4G字节),
2、增加了当前程序状态寄存器CPSR和程序状态保存寄存器SPSR以便于异常的处理。
3、增加了中止和未定义二种处理器模式。
4、ARM6就采用该版架构。
5、指令集变化:增加了MRS/MSR指令,以访问新增的CPSR/SPSR寄存器;增加了从异常处理返回的指令功能。
V4版架构
V4版架构是目前应用最广的ARM体系结构,对V3版架构进行了进一步扩充,有的还引进了16位的Thumb指令集,使ARM使用更加灵活。ARM7、ARM8、ARM9和StrongARM都采用该版架构。
指令集中增加了以下功能:
1、有符号、无符号的半字和有符号字节的Load/Store指令。
2、增加了16位Thumb指令集
3、完善了软件中断SWI指令的功能
4、增加了处理器的特权模式。
V5版架构
这是最近几年推出ARM架构,在V4版基本上增加了一些新的指令,ARM10和XScale都采用该版架构,这些新增指令有:
1、带有链接和交换的转移BLX指令
2、计数前导零CLZ指令
3、BKPT软件断点指令
4、增加了信号处理指令
5、为协处理器增加更多可选择的指令
v6版架构
1、适合使用电池供电的便携式设备
2、增加了 SIMD功能扩展,提高了嵌入式应用系统的音频、视频处理能力。
九.ARM芯片选择的一般原则
从应用的角度,对在选择ARM芯片时所应考虑的主要因素有:
1、ARM芯核:如果希望使用WinCE或Linux等操作系统以减少软件开发时间,就需要选择ARM720T以上带有MMU功能的ARM芯片.
2、系统时钟控制器:系统时钟决定了ARM芯片的处理速度。ARM7的处理速度为0.9MIPS/MHz,常见的ARM7芯片系统主时钟为20MHz-133MHz,ARM9的处理速度为1.1MIPS/MHz,常见的ARM9的系统主时钟为100MHz-233MHz, ARM10最高可以达到700MHz。
3、内部存储器容量:在不需要大容量存储器时,可以考虑选用有内置存储器的ARM芯片。
4、GPIO数量:在某些芯片供应商提供的说明书中,往往申明的是最大可能的GPIO数量,但是有许多引脚是和地址线、数据线、串口线等引脚复用的。这样在系统设计时需要计算实际可以使用的GPIO数量。
5、USB接口:许多ARM芯片内置有USB控制器,有些芯片甚至同时有USB Host和USB Slave控制器。
6、中断控制器:ARM内核只提供快速中断(FIQ)和标准中断(IRQ)两个中断向量。但各个半导体厂家在设计芯片时加入了自己不同的中断控制器,以便支持诸如串行口、外部中断、时钟中断等硬件中断。外部中断控制是选择芯片必须考虑的重要因素,合理的外部中断设计可以很大程度的减少任务调度的工作量。
7、LCD控制器:些ARM芯片内置LCD控制器,有的甚至内置64K彩色TFT LCD控制器。在设计PDA和手持式显示记录设备时,选用内置LCD控制器的ARM芯片较为适宜。
8、扩展总线:大部分ARM芯片具有外部SDRAM和SRAM扩展接口,不同的ARM芯片可以扩展的芯片数量即片选线数量不同,外部数据总线有8位、16位或32位。某些特殊应用的ARM芯片如德国Micronas的PUC3030A没有外部扩展功能。
9、封装:主要的封装有QFP、TQFP、PQFP、LQFP、BGA、LBGA等形式,BGA封装具有芯片面积小的特点,可以减少PCB板的面积,但是需要专用的焊接设备,无法手工焊接。另外一般BGA封装的ARM芯片无法用双面板完成PCB布线,需要多层PCB板布线。
Thumb技术
ARM的RISC体系结构的发展中已经提供了低功耗、小体积、高性能的方案。而为了解决代码长度的问题,ARM体系结构又增加了T变种,开发了一种新的指令体系,这就是Thumb指令集,它是ARM技术的一大特色。
Thumb是ARM体系结构的扩展。它有从标准32位ARM指令集抽出来的36条指令格式,可以重新编成16位的操作码。这能带来很高的代码密度。
支持Thumb的ARM体系结构的处理器状态可以方便的切换、运行到Thumb状态,在该状态下指令集是16位的Thumb指令集。
十.与ARM指令集相比.Thumb指令集具有以下局限:
1、完成相同的操作,Thumb指令通常需要更多的指令,因此在对系统运行时间要求苛刻的应用场合ARM指令集更为适合;
2、Thumb指令集没有包含进行异常处理时需要的一些指令,因此在异常中断时,还是需要使用ARM指令,这种限制决定了Thumb指令需要和ARM指令配合使用。