嵌入式系统技术与设计第2章ARM体系结构与指令集ARM体系结构的特点2.1ARM处理器工作模式2.2寄存器组织2.3流水线2.4ARM存储系统2.5异常2.6ARM处理器的寻址方式2.7ARM处理器的指令集2.8本章将要介绍ARM体系结构、ARM处理器的工作模式及常用指令集等。通过本章的学习,希望读者能够了解ARM处理器内部的主要工作单元、基本工作原理,掌握常用指令集,并为以后的程序设计打下基础。本章主要内容:●ARM体系结构的特点●ARM处理器的工作模式●寄存器组织●流水线●ARM存储●异常●ARM处理器的寻址方式●ARM处理器的指令集2.1ARM体系结构的特点ARM内核采用RISC体系结构。RISC技术的主要特点参见1.3节。ARM体系结构的主要特征如下(在本书的后续章节中将对这些特征做详细讲解):(1)大量的寄存器,它们都可以用于多种用途;(2)Load/Store体系结构;(3)每条指令都条件执行;(4)多寄存器的Load/Store指令;(5)能够在单时钟周期执行的单条指令内完成一项普通的移位操作和一项普通的ALU操作;(6)通过协处理器指令集来扩展ARM指令集,包括在编程模式中增加了新的寄存器和数据类型。(7)如果把Thumb指令集也当作ARM体系结构的一部分,那么还可以加上:在Thumb体系结构中以高密度16位压缩形式表示指令集。2.2ARM处理器工作模式表2-1ARM处理器的工作模式处理器工作模式简写描述用户模式(User)usr正常程序执行模式,大部分任务执行在这种模式下快速中断模式(FIQ)fiq当一个高优先级(fast)中断产生时将会进入这种模式,一般用于高速数据传输和通道处理外部中断模式(IRQ)irq当一个低优先级(normal)中断产生时将会进入这种模式,一般用于通常的中断处理特权模式(Supervisor)svc当复位或软中断指令执行时进入这种模式,是一种供操作系统使用的保护模式数据访问中止模式(Abort)abt当存取异常时将会进入这种模式,用于虚拟存储或存储保护未定义指令中止模式(Undef)und当执行未定义指令时进入这种模式,有时用于通过软件仿真协处理器硬件的工作方式系统模式(System)sys使用和User模式相同寄存器集的模式,用于运行特权级操作系统任务除用户模式外的其他6种处理器模式称为特权模式(PrivilegedModes)。在特权模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式切换。其中以下5种又称为异常模式:(1)快速中断模式(FIQ);(2)外部中断模式(IRQ);(3)特权模式(Supervior);(4)数据访问中止模式(Abort);(5)未定义指令中止模式(Undef)。2.3寄存器组织ARM处理器有如下37个32位长的寄存器:(1)30个通用寄存器;(2)6个状态寄存器:1个CPSR(CurrentProgramStatusRegister,当前程序状态寄存器),5个SPSR(SavedProgramStatusRegister,备份程序状态寄存器);(3)1个PC(ProgramCounter,程序计数器)。ARM处理器共有7种不同的处理器模式,在每一种处理器模式中有一组相应的寄存器组。表2-2列出了ARM处理器的寄存器组织概要。表2-2ARM处理器的寄存器组织概要UserFIQIRQSVCUndefAbortR0UsermodeR0~R7,R15和CPSRUsermodeR0~R12,R15和CPSRUsermodeR0~R12,R15和CPSRUsermodeR0~R12,R15和CPSRUsermodeR0~R12,R15和CPSRR1R2R3R4R5R6R7R8R8R9R9R10R10R11R11R12R12R13(SP)R13(SP)R13R13R13R13R14(LR)R14(LR)R14R14R14R14R15(PC)CPSRSPSRSPSRSPSRSPSRSPSR2.3.1通用寄存器通用寄存器根据其分组与否可分为以下2类。(1)未分组寄存器(theUnbankedRegister),包括R0~R7。(2)分组寄存器(theBankedRegister),包括R8~R14。未分组寄存器包括R0~R7。未分组寄存器没有被系统用于特殊的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。1.未分组寄存器对于分组寄存器R13和R14来说,每个寄存器对应6个不同的物理寄存器。其中的一个是用户模式和系统模式公用的,而另外5个分别用于5种异常模式。访问时需要指定它们的模式。名字形式如下:(1)R13_mode(2)R14_mode其中,mode可以是以下几种模式之一:usr、svc、abt、und、irp及fiq。2.分组寄存器寄存器R14又被称为连接寄存器(LinkRegister,LR),在ARM体系结构中具有下面两种特殊的作用。(1)每一种处理器模式用自己的R14存放当前子程序的返回地址。(2)当异常中断发生时,该异常模式特定的物理寄存器R14被设置成该异常模式的返回地址,对于有些模式R14的值可能与返回地址有一个常数的偏移量(如数据异常使用SUBPC,LR,#8返回)。R14也可以被用做通用寄存器使用。2.3.2状态寄存器当前程序状态寄存器(CurrentProgramStatusRegister,CPSR)可以在任何处理器模式下被访问,它包含下列内容:(1)ALU(ArithmeticLogicUnit,算术逻辑单元)状态标志的备份;(2)当前的处理器模式;(3)中断使能标志;(4)设置处理器的状态(只在4T架构)。图2-1程序状态寄存器格式N(Negative)、Z(Zero)、C(Carry)和V(oVerflow)通称为条件标志位。(1)N(2)Z(3)C(4)V1.标志位在带DSP指令扩展的ARMv5及更高版本中,bit[27]被指定用于指示增强的DAP指令是否发生了溢出,因此也就被称为Q标志位。同样,在SPSR中bit[27]也被称为Q标志位,用于在异常中断发生时保存和恢复CPSR中的Q标志位。2.Q标志位CPSR的低8位(I、F、T及M[4∶0])统称为控制位。当异常发生时,这些位的值将发生相应的变化。另外,如果在特权模式下,也可以通过软件编程来修改这些位的值。(1)中断禁止位(2)状态控制位(3)模式控制位3.控制位表2-3状态控制位M[4∶0]含义M[4∶0]处理器模式可以访问的寄存器0b10000UserPC,R14~R0,CPSR0b10001FIQPC,R14_fiq~R8_fiq,R7~R0,CPSR,SPSR_fiq0b10010IRQPC,R14_irq~R13_irq,R12~R0,CPSR,SPSR_irq0b10011SupervisorPC,R14_svc~R13_svc,R12~R0,CPSR,SPSR_svc0b10111AbortPC,R14_abt~R13_abt,R12~R0,CPSR,SPSR_abt0b11011UndefinedPC,R14_und~R13_und,R12~R0,CPSR,SPSR_und0b11111SystemPC,R14~R0,CPSR(ARMv4及更高版本)2.3.3程序计数器程序计数器R15又被记为PC。程序计数器在下面两种情况下用于特殊的目的。(1)读程序计数器。(2)写程序计数器。2.4流水线2.4.1流水线的概念与原理处理器按照一系列步骤来执行每一条指令,典型的步骤如下:(1)从存储器读取指令(fetch);(2)译码以鉴别它是属于哪一条指令(decode);(3)从指令中提取指令的操作数(这些操作数往往存在于寄存器中)(reg);(4)将操作数进行组合以得到结果或存储器地址(ALU);(5)如果需要,则访问存储器以存储数据(mem);(6)将结果写回到寄存器堆(res)。2.4.2流水线的分类到ARM7为止的ARM处理器使用简单的3级流水线,它包括下列流水线级。(1)取指令(fetch):从寄存器装载一条指令。(2)译码(decode):识别被执行的指令,并为下一个周期准备数据通路的控制信号。在这一级,指令占有译码逻辑,不占用数据通路。(3)执行(excute):处理指令并将结果写回寄存器。1.3级流水线ARM组织在ARM9TDMI中使用了典型的5级流水线,5级流水线包括下面的流水线级。(1)取指令(fetch):从存储器中取出指令,并将其放入指令流水线。(2)译码(decode):指令被译码,从寄存器堆中读取寄存器操作数。在寄存器堆中有3个操作数读端口,因此,大多数ARM指令能在1个周期内读取其操作数。2.5级流水线ARM组织(3)执行(execute):将其中1个操作数移位,并在ALU中产生结果。如果指令是Load或Store指令,则在ALU中计算存储器的地址。(4)缓冲/数据(buffer/data):如果需要则访问数据存储器,否则ALU只是简单地缓冲1个时钟周期。(5)回写(write-back):将指令的结果回写到寄存器堆,包括任何从寄存器读出的数据。在ARM10中,将流水线的级数增加到6级,使系统的平均处理能力达到了1.3DMIPS/MHz。3.6级流水线ARM组织图2-46级流水线指令的执行过程2.4.3影响流水线性能的因素1.互锁2.跳转指令2.5ARM存储系统将某个分区或是设备挂载了以后才能使用,但是当计算机重新启动以后,又需要重新挂载,这个时候可以通过修改/etc/fstab文件实现开机自动挂载文件系统。ARM存储系统有非常灵活的体系结构,可以适应不同的嵌入式应用系统的需要。ARM存储器系统可以使用简单的平板式地址映射机制(就像一些简单的单片机一样,地址空间的分配方式是固定的,系统中各部分都使用物理地址),也可以使用其他技术提供功能更为强大的存储系统。例如:(1)系统可能提供多种类型的存储器件,如Flash、ROM、SRAM等;(2)Cache技术;(3)写缓存技术(writebuffers);(4)虚拟内存和I/O地址映射技术。大多数的系统通过下面的方法之一可实现对复杂存储系统的管理。(1)使用Cache,缩小处理器和存储系统速度差别,从而提高系统的整体性能。(2)使用内存映射技术实现虚拟空间到物理空间的映射。(3)引入存储保护机制,增强系统的安全性。(4)引入一些机制保证将I/O操作映射成内存操作后,各种I/O操作能够得到正确的结果。(1)内核级的寄存器。(2)芯片级的紧耦合存储器TCM。(3)芯片级的片上Cache存储器的容量在8~32KB之间,访问时间大约为10ns。(4)板卡级的DRAM。(5)外设级的后援存储器,通常是硬盘,可能从几百MB到几个GB,访问时间为几十ms。2.5.1协处理器(CP15)ARM处理器支持16个协处理器。CP15,即通常所说的系统控制协处理器(SystemControlCoprocesssor),它负责完成大部分的存储系统管理。CP15包含16个32位寄存器,其编号为0~15。CP15中的寄存器可能是只读的,也可能是只写的,还有一些是可读可写的。2.5.2存储管理单元(MMU)在创建多任务嵌入式系统时,最好有一个简单的方式来编写、装载及运行各自独立的任务。目前大多数的嵌入式系统不再使用自己定制的控制系统,而使用操作系统来简化这个过程。较高级的操作系统采用基于硬件的存储管理单元(MMU)来实现上述操作。MMU提供的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间中运行。在带MMU的操作系统控制下,运行的任务无须知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计。MMU提供了一些资源以允许使用虚拟存储器(将系统物理存储器重新编址,可将其看成一个独立于系统物理存储器的存储空间)。MMU作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的物理地址,即在物理主存中的地址。这个转换过程允许运行的多个程序使用相同的虚拟地址,而各