ARM9体系结构Tao内容•计算机体系结构基础•ARM架构•ARM处理器的工作状态•ARM流水线技术•ARM体系结构的存储器格式•ARM处理器工作模式•ARM体系结构的寄存器组织•ARM处理器的异常处理体系结构冯诺依曼结构单一存储、统一编址、分时复用体系结构哈佛结构分开存储、独立编址、两倍带宽、执行效率更高指令集系统嵌入式微处理器的指令系统可采用精简指令集系统RISC(ReducedInstructionSetComputer)或复杂指令集系统CISC(ComplexInstructionSetComputer)CISCRISC价格由硬件完成部分软件功能,硬件复杂性增加,芯片成本高由软件完成部分硬件功能,软件复杂性增加,芯片成本低性能减少代码尺寸,增加指令的执行周期数使用流水线降低指令的执行周期数,增加代码尺寸指令集大量的混杂型指令集,有简单快速的指令,也有复杂的多周期指令,简单的单周期指令,高级语言支持硬件完成软件完成寻址模式复杂的寻址模式,支持内存到内存寻址简单的寻址模式,仅允许LOAD和STORE指令存取内存,其它所有的操作都基于寄存器到寄存器寄存器数目寄存器较少寄存器较多CISCVSRISCARM9TDMI•Harvard架构–增加了可用的存储器宽度指令存储器接口数据存储器接口–可以实现对指令和数据存储器的同时访问•5级流水线•实现了以下改进:–改进CPI到约1.5–提高了最大时钟频率(300M)ARM9TDMIARM9TDMIDCacheICacheMMUGLUE外部存储器ARM9xxTARM920T2x16KcachesMMU支持虚拟地址和内存保护写缓冲带Cache的ARM9TDMIARM9功能框图AMBA总线•AMBA(AdvancedMicrocontrollerBusArchitecture)是ARM公司研发的一种总线规范。•包括–AHB(AdvancedHigh-performanceBus):用于高性能系统模块的连接,支持突发模式数据传输和事务分割;可以有效地连接处理器、片上和片外存储器,支持流水线操作。–APB(AdvancedPeripheralBus):用于较低性能外设的简单连接,一般是接在AHB系统总线上的第二级总线。AMBA总线测试接口ARMCPUSDRAMControlSRAMLCDControl桥并行接口串行接口TimerUART基于AMBA总线的典型系统ARM工作状态•从编程者角度看ARM9有两种工作状态,并且可相互切换•ARM状态,处理执行32位的ARM指令字对齐•Thumb状态,处理执行16位的Thumb指令半字对齐如果在1K的存储空间中,可以放32条ARM指令,就可以放64条Thumb指令,因此在存放Thunb指令时,代码密度高处理器状态切换•处理器状态使用BX指令将ARM9TDMI内核的操作状态在ARM状态和Thumb状态之间进行切换;从Arm状态切换到Thumb状态LDRR0,=Lable+1BXR0;从Thumb状态切换到ARM状态LDRR0,=LableBXR0地址最低位为1,表示切换到Thumb状态地址最低位为0,表示切换到ARM状态跳转地址标号•三级流水线技术流水线技术ARM9TDMI流水线技术InstructionFetchShift+ALUMemoryAccessRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARM9TDMIARMorThumbInstDecodeRegSelectRegReadShiftALURegWriteThumbARMdecompressARMdecodeInstructionFetchFETCHDECODEEXECUTEARM7TDMI流水线技术•ARM9与ARM7比较流水线由三级变到五级,程序的执行时间TprogTprog=Ninst*CPI/FclkTunmb指令由软解码变为硬解码编程模型ARM存储器格式•ARM的寻址空间是线性的地址空间,为232=4G•Bytes0to3存储第一个word,bytes4to7存储第二个word•ARM支持大端(Big-endian)和小端(Little-endian)的内存数据方式,可以通过硬件的方式设置(没有提供软件的方式)端模式ARM存储格式大端的数据存放格式小端的数据存放格式低地址高地址地址A地址A+1地址A+2地址A+3worda=0xf6734bcdf6734bcd低地址高地址地址A地址A+1地址A+2地址A+3f6734bcdARM处理器7种工作模式•用户模式(usr)-正常的程序执行模式•快速中断模式(fiq)-支持高速数据传输或通道处理中断模式(irq)-用于通用中断处理管理员模式(svc)-操作系统的保护模式.中止模式(abt)-支持虚拟内存和/或内存保护系统模式(sys)-支持操作系统的特殊用户模式未定义模式(und)-支持硬件协处理器的软件仿真处理器工作模式决定可以访问的系统资源(寄存器、cache、等)•处理器模式分特权模式,非特权模式特权模式下,允许完全读/写CPSR寄存器非特权模式下,只允许对CPSR的控制域进行读访问,但允许对条件标志的读/写访问ARM微处理器:CPU模式User模式程序不能访问有些受保护的资源只能通过异常的形式来改变CPU的当前运行模式特权模式可以存取系统中的任何资源System模式与User模式的运行环境一样但是它可以不受任何限制的访问任何资源该模式主要用于运行系统中的一些特权任务FIQ模式IRQ模式Supervisor模式Abort模式Undefined模式异常模式:主要是在外部中断或者程序执行非法操作时会触发ARM微处理器:寄存器•ARM处理器有37个寄存器–31个通用寄存器:程序计数器、堆栈及其他通用寄存器–6个状态寄存器•这些寄存器不能同时看到•不同的处理器状态和工作模式确定哪些寄存器是对编程者是可见的ARM微处理器:ARMState寄存器ARM微处理器:ThumbState寄存器ARM微处理器:通用寄存器•通用寄存器是R0-R15的寄存器,分为三类–没有对应影子寄存器的寄存器R0-R7–有对应影子寄存器的寄存器R8-R14–程序计数器R15(或者PC)•影子寄存器是指该寄存器在不同的模式下对应的物理寄存器ARM微处理器:通用寄存器•R0-R7–所有模式下,R0-R7所对应的物理寄存器都是相同的–这八个寄存器是真正意义上的通用寄存器,ARM体系结构中对它们没有作任何特殊的假设,它们的功能都是等同的。–在中断或者异常处理程序中一般都需要对这几个寄存器进行保存。ARM微处理器:通用寄存器•R8-R14–访问的物理寄存器取决于当前的处理器模式,若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。–R8-R12各有两组物理寄存器:一组为FIQ模式,另一组是除FIQ以外的其他模式。–R13-R14各有6个分组的物理寄存器,一个用于用户模式和系统模式,其他5个分别用于5种异常模式。–R13(也被称为SP指针)被用作栈指针,通常在系统初始化时需要对所有模式下的SP指针赋值,当CPU在不同的模式时栈指针会被自动切换成相应模式下的值。–R14有两个用途,一是在调用子程序时用于保存调用返回地址,二是在发生异常时用于保存异常返回地址。ARM微处理器:程序状态寄存器•CPSR(当前程序状态寄存器)在所有的模式下都是可以读写的,它主要包含:–条件标志–中断使能标志–当前处理器的模式–其它的一些状态和控制标志ARM微处理器:程序状态寄存器•置0表示执行32bit的ARM指令•置1表示执行16bit的Thumb指令NegativeZeroCarryOverflowIRQ中断的响应:置1:禁止响应置0:允许响应FIQ中断的响应:置1:禁止响应置0:允许响应条件标志模式控制位ARM/Thumb控制标志中断标志ARM微处理器:程序状态寄存器•模式控制位M0-M4Lable程序A程序BR14•R14寄存器与子程序调用BLLable地址A???MOVPC,LRR14(地址A)???1.程序A执行过程中调用程序B;操作流程2.程序跳转至标号Lable,执行程序B。同时硬件将“BLLable”指令的下一条指令所在地址存入R14;3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;程序调用中断调用•R14寄存器注意要点R14R14_irq用户模式下的程序IRQ模式下的程序AareturnB...XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏中断调用•R14寄存器注意要点R14R14_irq用户模式下的程序IRQ模式下的程序AaB...XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏IRQ模式下的程序BareturnB...XA地址B地址B4.如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断;5.硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误;被破坏6.在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;returnreturn解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。ARM微处理器:异常•异常是由内部或者外部原因引起的,当异常发生时CPU将暂停执行当前指令自动到指定的向量地址读取指令并且执行。–ARM到向量地址的地方读取指令,也就是ARM的向量地址处存放的是一条指令(一般是一条跳转指令)ARM微处理器:异常当异常出现时,异常模式分组的R14和SPSR用于保存状态,即:R14_exception_mode=returnlinkSPSR_exception_mode=CPSRCPSR[4:0]=exceptionmodenumberCPSR[5]=0/*在ARM状态执行*/ifexception_mode==ResetorFIQthenCPSR[6]=1/*禁止快速中断*/CPSR[7]=1/*禁止正常中断*/PC=exceptionvectoraddress当处理异常返回时,将SPSR传送到CPSR,R14传送到PC程序AIRQ服务程序系统(用户)模式IRQ模式程序寄存器组图示进入异常过程1.程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;2.用户程序运行时发生IRQ中断,硬件完成以下动作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式将下一条指令的地址存入IRQ模式的LR寄存器将CPSR寄存器内容存入IRQ模式的SPSR寄存器将跳转地址存入PC,实现跳转IRQ0?1...????BackAddrJumpAddrSYS1?0...????“?”表示对该位不关心在异常处理结束后,异常处理程序完成以下动作:程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示退出异常过程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV将SPSR寄存器的值复制回CPSR寄存器;将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????