这里概述的都是一些传统意义上ARM处理器的一些方面,提醒自己看了之后会想起相关知识,或是对ARM有一个总体上的概念,其实都是些简述性的总结,很多都来自网上资料或教学课件,贴在这里,方便以后随时随地的复习!
ARM微处理器包括ARM7、ARM9、ARM9E、ARM10E、SecurCore、以及Intel的StrongARM、XScale和其它厂商基于ARM体系结构的处理器,除了具有ARM体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点和应用领域。
支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件。Thumb指令集比通常的8位和16位CISC/RISC处理器具有更好的代码密度;
● 指令执行采用3级流水线/5级流水线技术;
● 带有指令Cache和数据Cache,大量使用寄存器,指令执行速度更快。大多数数据操作都在寄存器中完成。寻址方式灵活简单,执行效率高。指令长度固定(在ARM状态下是32位,在Thumb状态下是16位);
● 支持大端格式和小端格式两种方法存储字数据;
● 支持Byte(字节,8位)、Halfword(半字,16位)和Word(字,32位)三种数据类型。
● 支持用户、快中断、中断、管理、中止、系统和未定义等7种处理器模式,除了用户模式外,其余的均为特权模式;
● 处理器芯片上都嵌入了在线仿真ICE-RT逻辑,便于通过JTAG来仿真调试ARM体系结构芯片,可以避免使用昂贵的在线仿真器。另外,在处理器核中还可以嵌入跟踪宏单元ETM,用于监控内部总线,实时跟踪指令和数据的执行;
● 具有片上总线AMBA(Advanced Micro-controller Bus Architecture)。 AMBA定义了3组总线:先进高性能总线AHB(Advanced High performance Bus);先进系统总线ASB(Advanced System Bus);先进外围总线APB(Advanced Peripheral Bus)。通过AMBA可以方便地扩充各种处理器及I/O,可以把DSP、其他处理器和I/O(如UART、定时器和接口等)都集成在一块芯片中;
● 采用存储器映像I/O的方式,即把I/O端口地址作为特殊的存储器地址;
● 具有协处理器接口。ARM允许接16个协处理器,如CP15用于系统控制,CP14用于调试控制器;
● 采用了降低电源电压,可工作在3.0V以下;减少门的翻转次数,当某个功能电路不需要时禁止门翻转;减少门的数目,即降低芯片的集成度;降低时钟频率等一些措施降低功耗;
● 体积小、低成本、高性能。
包含有32位ALU、31个32位通用寄存器及6位状态寄存器、32×8位乘法器、32×32位桶形移位寄存器、指令译码及控制逻辑、指令流水线和数据/地址寄存器等。
1).ALU
ARM体系结构的ALU与常用的ALU逻辑结构基本相同,由两个操作数锁存器、加法器、逻辑功能、结果及零检测逻辑构成。ALU的最小数据通路周期包含寄存器读时间、移位器延迟、ALU延迟、寄存器写建立时间、双相时钟间非重叠时间等几部分。
2).桶形移位寄存器
ARM采用了32×32位桶形移位寄存器,左移/右移n位、环移n位和算术右移n位等都可以一次完成,可以有效的减少移位的延迟时间。在桶形移位寄存器中,所有的输入端通过交叉开关(Crossbar)与所有的输出端相连。交叉开关采用NMOS晶体管来实现。
3).高速乘法器
ARM为了提高运算速度,采用两位乘法的方法,2位乘法可根据乘数的2位来实现“加-移位”运算。ARM的高速乘法器采用32×8位的结构,完成32×2位乘法也只需5个时钟周期。
4).浮点部件
在ARM体系结构中,浮点部件作为选件可根据需要选用,FPA10浮点加速器以协处理器方式与ARM相连,并通过协处理器指令的解释来执行。
浮点的Load/Store指令使用频度要达到67%,故FPA10内部也采用Load/Store结构,有8个80位浮点寄存器组,指令执行也采用流水线结构。
5).控制器
ARM的控制器采用硬接线的可编程逻辑阵列PLA,其输入端有14根、输出端有40根,分散控制Load/Store多路、乘法器、协处理器以及地址、寄存器ALU和移位器。
6).寄存器
ARM内含37个寄存器,包括31个通用32位寄存器和6个状态寄存器。
包括ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ几种类型。其中,ARM7TDMI是目前使用最广泛的32位嵌入式RISC处理器,主频最高可达130MIPS,采用能够提供0.9MIPS/MHz的三级流水线结构,内嵌硬件乘法器(Multiplier),支持16为压缩指令集Thumb,嵌入式ICE,支持片上Debug,支持片上断点和调试点。指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,支持Windows CE、Linux、Palm OS等操作系统。典型产品如Samsung公司的S< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />3C4510B。
ARM7TDMI处理器内核:
n ARM7TDMI还提供了存储器接口、MMU接口、协处理器接口和调试接口,以及时钟与总线等控制信号,如图2.2.2所示。
n 存储器接口包括了32位地址A[31:0]、双向32位数据总线D[31:0]、单向32位数据总线DIN[31:0]与DOUT[31:0]、以及存储器访问请求MREQ、地址顺序SEQ、存储器访问控制MAS[1:0和数据锁存控制BL[3:0]等控制信号。
n ARM7TDMI处理器内核也可以ARM7TDMI-S软核(Softcore)形式向用户提供。同时,提供多种组合选择,例如可以省去嵌入式ICE单元等。
n 2.ARM720T/ARM740T处理器内核
n ARM720T处理器内核是在ARM7TDMI处理器内核基础上,增加8KB的数据与指令Cache,支持段式和页式存储的MMU(Memory Management Unit)、写缓冲器及AMBA(Advanced Microcontroller Bus Architecture)接口而构成,如图2.2.3所示。
n ARM740T处理器内核与ARM720T处理器内核相比,结构基本相同,ARM740T处理器核没有存储器管理单元MMU,不支持虚拟存储器寻址,而是用存储器保护单元来提供基本保护和Cache的控制。合适低价格低功耗的嵌入式应用。
ARM9系列微处理器包含ARM920T、ARM922T和ARM940T几种类型,可以在高性能和低功耗特性方面提供最佳的性能。采用5级整数流水线,指令执行效率更高。提供1.1MIPS/MHz的哈佛结构。支持数据Cache和指令Cache,具有更高的指令和数据处理能力。 支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA总线接口。全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。MPU支持实时操作系统。
ARM920T处理器核在ARM9TDMI处理器内核基础上,增加了分离式的指令Cache和数据Cache,并带有相应的存储器管理单元I-MMU和D-MMU、写缓冲器及AMBA接口等。
ARM9系列微处理器主要应用于无线通信设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。典型产品如Samsung公司的S3C2410A。
ARM的体系结构或处理器结构主要体现在:ARM微处理器的寄存器结构、异常处理、存储器结构、指令系统、接口等方面。
ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄器包括:
● 31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。
● 6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。
ARM微处理器支持7种运行模式,分别为:
● usr(用户模式):ARM处理器正常程序执行模式。
● fiq(快速中断模式):用于高速数据传输或通道处理
● irq(外部中断模式):用于通用的中断处理
● svc(管理模式):操作系统使用的保护模式
● abt (数据访问终止模式): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
● sys(系统模式): 运行具有特权的操作系统任务。
● und(未定义指令中止模式):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。
大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(Privileged Modes);其中除去用户模式和系统模式以外的5种又称为异常模式(Exception Modes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。
ARM处理器在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0~R14)、一至二个状态寄存器和程序计数器。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。
ARM处理器有32位ARM和16位Thumb两种工作状态。在32位ARM状态下执行字对齐的ARM指令,在16位Thumb状态下执行半字对齐的Thumb指令。
在Thumb状态下,程序计数器PC(Program Counter)使用位[1]选择另一个半字。
ARM处理器在两种工作状态之间可以切换,切换不影响处理器的模式或寄存器的内容。
(1)当操作数寄存器的状态位(位[0])为1时,执行BX指令进入Thumb状态。如果处理器在Thumb状态进入异常,则当异常处理(IRQ、FIQ、Undef、Abort和SWI)返回时,自动转换到Thumb状态。
(2)当操作数寄存器的状态位(位[0])为0时,执行BX指令进入ARM状态,处理器进行异常处理(IRQ、FIQ、Reset、Undef、Abort和SWI)。在此情况下,把PC放入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM状态。
ARM处理器的37个寄存器被安排成部分重叠的组,不能在任何模式都可以使用,寄存器的使用与处理器状态和工作模式有关。如图2.3.1所示,每种处理器模式使用不同的寄存器组。其中15个通用寄存器(R0~R14)、1或2个状态寄存器和程序计数器是通用的。
(1).通用寄存器
通用寄存器(R0~R15)可分成不分组寄存器R0~R7、分组寄存器R8~R14和程序计数器R15 三类。
1)不分组寄存器R0~R7:不分组寄存器R0~R7是真正的通用寄存器,可以工作在所有的处理器模式下,没有隐含的特殊用途。
2)分组寄存器R8~R14
n 分组寄存器R8~R14取决于当前的处理器模式,每种模式有专用的分组寄存器用于快速异常处理。寄存器R8~Rl2可分为两组物理寄存器。一组用于FIQ模式,另一组国用于除FIQ以外的其他模式。第1组访问R8_fiq~R12_fiq,允许快速中断处理。第二组访问R8_usr~R12_usr,寄存器R8~R12没有任何指定的特殊用途。
n 寄存器R13~R14可分为6个分组的物理寄存器。1个用于用户模式和系统模式,而其他5个分别用于svc、abt、und、irq和fiq五种异常模式。访问时需要指定它们的模式,如:R13_<mode>,R14_<mode>;其中:<mode>可以从usr、svc、abt、und、irq和fiq六种模式中选取一个。
n 寄存器R13通常用作堆栈指针,称作SP。每种异常模式都有自己的分组R13。通常R13应当被初始化成指向异常模式分配的堆栈。在入口处,异常处理程序将用到的其他寄存器的值保存到堆栈中;返回时,重新将这些值加载到寄存器。这种异常处理方法保证了异常出现后不会导致执行程序的状态不可靠。
n 寄存器R14用作子程序链接寄存器,也称为链接寄存器LK (Link Register)。当执行带链接分支(BL)指令时,得到R15的备份。
n 在其他情况下,将R14当做通用寄存器。类似地,当中断或异常出现时,或当中断或异常程序执行BL指令时,相应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。
n FIQ模式有7个分组的寄存器R8~R14,映射为R8_fiq~R14_fiq。在ARM状态下,许多FIQ处理没必要保存任何寄存器。User、IRQ、Supervisor、Abort和Undefined模式每一种都包含两个分组的寄存器R13和R14的映射,允许每种模式都有自己的堆栈和链接寄存器。
3)程序计数器R15
n 寄存器R15用作程序计数器(PC)。在ARM状态,位[1:0]为0,位[31:2]保存PC。
n 在Thumb状态,位[0]为0,位[31:1]保存PC。R15虽然也可用作通用寄存器,但一般不这么使用,因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。
① 读程序计数器。指令读出的R15的值是指令地址加上8字节。由于ARM指令始终是字对齐的,所以读出结果值的位[1:0]总是0(在Thumb状态下,情况有所变化)。读PC主要用于快速地对临近的指令和数据进行位置无关寻址,包括程序中的位置无关转移。
② 写程序计数器。写R15的通常结果是将写到R15中的值作为指令地址,并以此地址发生转移。由于ARM指令要求字对齐,通常希望写到R15中值的位[1:0]=0b00。
n 由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。
(2).程序状态寄存器
寄存器R16用作程序状态寄存器CPSR(Current Program Status Register,当前程序状态寄存器)。在所有处理器模式下都可以访问CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。每种异常模式都有一个程序状态保存寄存器SPSR(Saved Program Status Register)。当异常出现SPSR用于保留CPSR的状态。
CPSR和SPSR的格式如下:
1)条件码标志
n N、Z、C、V(Negative、Zero、Carry、oVerflow)均为条件码标志位(Condition Code Flags),它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。CPSR中的条件码标志可由大多数指令检测以决定指令是否执行。在ARM状态下,绝大多数的指令都是有条件执行的。在Thumb状态下,仅有分支指令是有条件执行的。
n 通常条件码标志通过执行比较指令(CMN、CMP、TEQ、TST)、一些算术运算、逻辑运算和传送指令进行修改。
n 条件码标志的通常含义如下:
N:如果结果是带符号二进制补码,那么,若结果为负数,则N=1;若结果为正数或0,则N=0。
Z:若指令的结果为0,则置1(通常表示比较的结果为“相等”),否则置0。
C:可用如下4种方法之一设置:
一-加法(包括比较指令CMN)。若加法产生进位(即无符号溢出),则C置1;否则置0。
一-减法(包括比较指令CMP)。若减法产生借位(即无符号溢出),则C置0;否则置1。
一-对于结合移位操作的非加法/减法指令,C置为移出值的最后1位。
一-对于其他非加法/减法指令,C通常不改变。
V:可用如下两种方法设置,即
一-对于加法或减法指令,当发生带符号溢出时,V置1,认为操作数和结果是补码形式的带符号整数。
一-对于非加法/减法指令,V通常不改变。
2)控制位
程序状态寄存器PSR(Program Status Register)的最低8位I、F、T和M[4:0]用作控制位。当异常出现时改变控制位。处理器在特权模式下时也可由软件改变。
n a.中断禁止位
I:置1,则禁止IRQ中断;
F:置1,则禁止FIQ中断。
n b.T位
T=0 指示ARM执行;
T=1 指示Thumb执行。
n c.模式控制位
M4、M3、M2、Ml和M0(M[4:0])是模式位,决定处理器的工作模式,如下表所列。
< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />
Thumb状态与ARM状态的寄存器关系
在一个正常的程序流程执行过程中,由内部或外部源产生的一个事件使正常的程序产生暂时的停止时,称之为异常。异常是由内部或外部源产生并引起处理器处理一个事件,例如一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,当异常处理完成之后,恢复保留的当前处理器状态,继续执行当前程序。多个异常同时发生时,处理器将会按固定的优先级进行处理。
ARM体系结构中的异常,与单片机的中断有相似之处,但异常与中断的概念并不完全等同,例如外部中断或试图执行未定义指令都会引起异常。
ARM体系结构支持7种类型的异常,异常类型、异常处理模式和优先级如下表所示。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量(Exception Vectors)。
异常类型及异常处理模式:
异常类型 |
异常 |
进入模式 |
地址(异常向量) |
优先级 |
复位 |
复位 |
管理模式 |
0x0000,0000 |
1(最高) |
未定义指令 |
未定义指令 |
未定义模式 |
0x0000,0004 |
6(最低) |
软件中断 |
软件中断 |
管理模式 |
0x0000,0008 |
6(最低) |
指令预取中止 |
中止(预取指令) |
中止模式 |
0x0000,000C |
5 |
数据中止 |
中止(数据) |
中止模式 |
0x0000,0010 |
2 |
IRQ(外部中断请求) |
IRQ |
IRQ |
0x0000,0018 |
4 |
FIQ(快速中断请求) |
FIQ |
FIQ |
0x0000,001C |
3 |
1)复位:
当处理器的复位电平有效时,产生复位异常,ARM处理器立刻停止执行当前指令。复位后,ARM处理器在禁止中断的管理模式下,程序跳转到复位异常处理程序处执行(从地址0x00000000或0xFFFF0000开始执行指令)。
2)未定义指令异常
当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。当ARM处理器执行协处理器指令时,它必须等待任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,就会出现未定义指令异常。若试图执行未定义的指令,也会出现未定义指令异常。未定义指令异常可用于在没有物理协处理器(硬件)的系统上,对协处理器进行软件仿真,或在软件仿真时进行指令扩展。
3)软件中断异常(SoftWare Interrupt,SWI):
软件中断异常由执行SWI指令产生,可使用该异常机制实现系统功能调用,用于用户模式下的程序调用特权操作指令,以请求特定的管理(操作系统)函数。
4)指令预取中止
若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出存储器中止(Abort)信号,但当预取的指令被执行时,才会产生指令预取中止异常。
5)数据中止(数据访问存储器中止)
若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。存储器系统发出存储器中止信号。响应数据访问(加载或存储)激活中止,标记数据为无效。在后面的任何指令或异常改变CPU状态之前,数据中止异常发生。
6)外部中断请求(IRQ)异常
当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。IRQ异常的优先级比FIQ异常的低。当进入FIQ处理时,会屏蔽掉IRQ异常。
7)快速中断请求(FIQ)异常
当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。FIQ支持数据传送和通道处理,并有足够的私有寄存器。
当一个异常出现以后,ARM微处理器会执行以下几步操作:
① 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4(Thumb)或PC+8(ARM),与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量。
② 将CPSR状态传送到相应的SPSR中。
③ 根据异常类型,强制设置CPSR的运行模式位。
④ 强制PC从相关的异常向量地址取下一条指令执行,跳转到相应的异常处理程序。还可以设置中断禁止位,以禁止中断发生。
如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。
异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:
① 将连接寄存器LR的值减去相应的偏移量后送到PC中。
② 将SPSR内容送回CPSR中。
③ 若在进入异常处理时设置了中断禁止位,要在此清除。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
在应用程序的设计中,异常处理采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序。当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。
ARM体系结构允许使用现有的存储器和I/O器件进行各种各样的存储器系统设计。
ARM体系结构使用232个字节的单一、线性地址空间。将字节地址做为无符号数看待,范围为0~232-1。
对于字对齐的地址A,地址空间规则要求如下:
● 地址位于A的字由地址为A、A+1、A+2和A+3的字节组成;
● 地址位于A的半字由地址为A和A+1的字节组成;
● 地址位于A+2的半字由地址为A+2和A+3的字节组成;
● 地址位于A的字由地址为A和A+2的半字组成。
ARM存储系统可以使用小端存储或者大端存储两种方法,大端存储和小端存储格式如下图所示。
ARM体系结构通常希望所有的存储器访问能适当地对齐。特别是用于字访问的地址通常应当字对齐,用于半字访问的地址通常应当半字对齐。未按这种方式对齐的存储器访问称作非对齐的存储器访问。
若在ARM态执行期间,将没有字对齐的地址写到R15中,那么结果通常是不可预知或者地址的位[1:0]被忽略。若在Thumb态执行期间,将没有半字对齐的地址写到R15中,则地址的位[0]通常忽略。
ARM处理器有的带有指令Cache和数据Cache,但不带有片内RAM和片内ROM。系统所需的RAM和ROM(包括Flash)都通过总线外接。由于系统的地址范围较大(232=4GB),有的片内还带有存储器管理单元MMU(Memory Management Unit)。ARM架构处理器还允许外接PCMCIA。
ARM系统使用存储器映射I/O。I/O口使用特定的存储器地址,当从这些地址加载(用于输入)或向这些地址存储(用于输出)时,完成I/O功能。加载和存储也可用于执行控制功能,代替或者附加到正常的输入或输出功能。然而,存储器映射I/O位置的行为通常不同于对一个正常存储器位置所期望的行为。例如,从一个正常存储器位置两次连续的加载,每次返回的值相同。而对于存储器映射I/O位置,第2次加载的返回值可以不同于第1次加载的返回值。
基本寻址方式:寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,ARM处理器有9 种基本寻址方式。
1).寄存器寻址
操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。
例如指令:
MOV R1,R2 ;R1←R2
2).立即寻址
在立即寻址指令中数据就包含在指令当中,立即寻址指令的操作码字段后面的地址码部分就是操作数本身,取出指令也就取出了可以立即使用的操作数(也称为立即数)。立即数要以“#”为前缀,表示16进制数值时以“0x”表示。
ADD R0,R0,#1 ;R0←R0 + 1
3).寄存器移位寻址
寄存器移位寻址是ARM指令集特有的寻址方式。第2个寄存器操作数在与第1个操作数结合之前,先进行移位操作。
4).寄存器间接寻址
5).变址寻址
变址寻址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,变址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。
6).多寄存器寻址
7).堆栈寻址
堆栈是一种数据结构,堆栈是特定顺序进行存取的存储区,操作顺序分为“后进先出”和“先进后出”,堆栈寻址时隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元就是堆栈的栈顶。存储器生长堆栈可分为两种:
● 向上生长:向高地址方向生长,称为递增堆栈(Ascending Stack)。
● 向下生长:向低地址方向生长,称为递减堆栈(Decending Stack)。
8).块复制寻址
9).相对寻址
ARM 伪指令:ARM 伪指令不是ARM 指令集中的指令,只是为了编程方便编译器定义的指令,使用时可以像其它ARM 指令一样使用,但在编译时这些指令将被等效的ARM 指令代替。ARM伪指令有ADR,ADRL,LDR,NOP四条。
为了便于片上系统SoC的设计,ARM可以通过协处理器(CP)来支持一个通用指令集的扩充,通过增加协处理器来增加系统的功能。
在逻辑上,ARM可以扩展16个(CP15~CP0)协处理器,其中:CP15作为系统控制,CP14作为调试控制器,CP7~4作为用户控制器,CP13~8和CP3~0保留。每个协处理器可有16个寄存器。例如MMU和保护单元的系统控制都采用CP15协处理器;JTAG调试中的协处理器为CP14,即调试通信通道DCC(Debug Communication Channel)。
ARM处理器内核与协处理器接口有以下4类。
① 时钟和时钟控制信号:MCLK、nWAIT、nRESET;
② 流水线跟随信号:nMREQ、SEQ、nTRANS、nOPC、TBIT;
③ 应答信号:nCPI、CPA、CPB;
④ 数据信号:D[31:0]、DIN[31:0]、DOUT[31:0]。
协处理器也采用流水线结构,为了保证与ARM处理器内核中的流水线同步,在每一个协处理器内需有1个流水线跟随器(Pipeline Follower),用来跟踪ARM处理器内核流水线中的指令。由于ARM的Thumb指令集无协处理器指令,协处理器还必须监视TBIT信号的状态,以确保不把Thumb指令误解为ARM指令。
协处理器也采用Load/Store结构,用指令来执行寄存器的内部操作,从存储器取数据至寄存器或把寄存器中的数保存至存储器中,以及实现与ARM处理器内核中寄存器之间的数据传送。而这些指令都由协处理器指令来实现。
n ARM处理器内核可以通过先进的微控制器总线架构AMBA(Advanced Microcontroller Bus Architecture)来扩展不同体系架构的宏单元及I/O部件。AMBA已成为事实上的片上总线OCB(On Chip Bus)标准。
n AMBA有AHB(Advanced High-performance Bus,先进高性能总线)、ASB(Advanced System Bus,先进系统总线)和APB(Advanced Peripheral Bus,先进外围总线)等三类总线。
n ASB是目前ARM常用的系统总线,用来连接高性能系统模块,支持突发(Burst)方式数据传送。
n AHB不但支持突发方式的数据传送,还支持分离式总线事务处理,以进一步提高总线的利用效率。特别在高性能的ARM架构系统中,AHB有逐步取代ASB的趋势,例如在ARM1020E处理器核中。
n APB为外围宏单元提供了简单的接口,也可以把APB看作ASB的余部。
n AMBA通过测试接口控制器TIC(Test Interface Controller)提供了模块测试的途径,允许外部测试者作为ASB总线的主设备来分别测试AMBA上的各个模块。
n AMBA中的宏单元也可以通过JTAG方式进行测试。虽然AMBA的测试方式通用性稍差些,但其通过并行口的测试比JTAG的测试代价也要低些。
一个基于AMBA的典型系统
ARM处理器内核一般都没有I/O的部件和模块,ARM处理器中的I/O可通过AMBA总线来扩充。
ARM采用了存储器映像I/O的方式,即把I/O端口地址作为特殊的存储器地址。一般的I/O,如串行接口,它有若干个寄存器,包括发送数据寄存器(只写)、数据接收寄存器(只读)、控制寄存器、状态寄存器(只读)和中断允许寄存器等。这些寄存器都需相应的I/O端口地址。应注意的是存储器的单元可以重复读多次,其读出的值是一致的;而I/O设备的连续2次输入,其输入值可能不同。
在许多ARM体系结构中I/O单元对于用户是不可访问的,只可以通过系统管理调用或通过C的库函数来访问。
ARM架构的处理器一般都没有DMA(直接存储器存取)部件,只有一些高档的ARM架构处理器才具有DMA的功能。
为了能提高I/O的处理能力,对于一些要求I/O处理速率比较高的事件,系统安排了快速中断FIQ(Fast Interrupt reQuest),而对其余的I/O源仍安排一般中断IRQ。
为提高中断响应的速度,在设计中可以采用以下办法:
● 提供大量后备寄存器,在中断响应及返回时,作为保护现场和恢复现场的上下文切换(Context Switching)之用。
● 采用片内RAM的结构,这样可以加速异常处理(包括中断)的进人时间。
● 快存Cache和地址变换后备缓冲器TLB(Translation Lookaside Buffer)采用锁住 (Locked down)方式以确保临界代码段不受“不命中”的影响。
/*********************************** THE END ****************************************/