第2章ARM技术与ARM体系结构(2)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1TM第2章ARM技术与ARM体系结构本章主要介绍ARM处理器的产生及版本发展历史,以及各个版本的典型处理器及应用情况和性能分析;ARM处理器的内核调试结构,重点分析了ARM7TDMI-S、ARM9TDMI两种结构;ARM处理器的工作模式及寄存器组织结构,分析了在什么情况下进入到相应的工作模式;ARM处理器支持的内存数据存储格式,分为大端格式和小端格式;最后介绍了ARM7的三级流水线运行机制和ARM9的五级流水线运行机制。2TM2内容提要2.1ARM体系结构版本与内核2.2ARM内核模块2.3ARM处理器的工作模式2.4ARM内部寄存器2.5ARM异常处理2.6存储方式与存储器映射机制2.7ARM流水线技术分析3TM32.5ARM异常处理异常通常定义为:处理器需要中止指令正常执行的任何情形并转向相应的处理,包括ARM内核产生复位,取指或存储器访问失败,遇到未定义指令,执行软件中断指令,或者出现外部中断等。大多数异常都对应一个软件的异常处理程序,也就是在异常发生时执行的软件程序。4TM42.5.1异常入口ARM处理器的异常分为数据中止、快速中断请求、普通中断请求、预取指中止、软件中断、复位及未定义指令共7种。5TM5异常类型处理器模式优先级向量表偏移复位SVC10x00000000未定义指令UND60x00000004软件中断SWISVC60x00000008预取指中止ABT50x0000000c数据中止ABT20x00000010保留//0x00000014IRQ中断IRQ40x00000018FIQ中断FIQ30x0000001c6TM61.复位具有最高的优先级,是系统启动(或芯片复位)时调用的程序。复位程序对异常处理程序和系统进行初始化(包括配置储存器和Cache)。同时要保证在IRQ和FIQ中断允许之前初始化外部中断源,避免在没有设置好相应的处理程序前产生中断。还要设置好各种处理器模式的堆栈指针。7TM72.引起未定义指令异常:ARM试图执行一条真正的未定义指令;ARM遇到一条协处理器指令,可是系统中的协处理器硬件并不存在;ARM遇到一条协处理器指令,系统中协处理器硬件也存在,可是ARM不是在超级用户模式。解决方法:在处理程序中执行软协处理器仿真;禁止在非超级用户模式下操作;报告错误并退出。8TM83.数据中止异常指示访问了无效的存储器地址,或者当前代码没有正确的数据访问权限。9TM94.预取指中止由于处理器预取的指令地址不存在,或者地址无法访问,当被预取的指令执行时,发生预取指中止异常。10TM105.FIQ中断的优先级比IRQ中断的优先级要高,且内核进入FIQ处理程序时,把FIQ和IRQ都禁止6.软中断(SWI)和未定义指令异常的优先级最低,共享同一优先级,两者不可能同时出现。11TM112.5.2异常产生过程与返回在异常发生后,ARM内核会作以下工作:1.在适当的LR中保存下一条指令的地址,当异常入口来自:ARM状态,那么ARM将当前指令地址加4或加8复制(取决于异常的类型)到LR中;为Thumb状态,那么ARM将当前指令地址加2、4或加8(取决于异常的类型)复制到LR中;异常处理器程序不必确定状态。12TM122.将CPSR复制到适当的SPSR中;3.将CPSR模式位强制设置为与异常类型相对应的值;4.强制PC从相关的异常向量处取指。13TM13当异常结束时,异常处理程序必须:1.将LR(R14)中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;2.将SPSR的值复制回CPSR;3.清零在入口置位的中断禁止标志。注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。14TM14VectorTableFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x00异常处理当异常产生时,ARMcore:拷贝CPSR到SPSR_mode设置适当的CPSR位:改变处理器状态进入ARM状态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断(如果需要)保存返回地址到LR_mode设置PC位相应的异常向量返回时,异常处理需要:从SPSR_mode恢复CPSR从LR_mode恢复PCNote:这些操作只能在ARM态执行.15TM152.6存储方式与存储器映射机制ARM处理器地址空间大小为4G字节,这些字节的单元地址是一个无符号的32位数值,其取值范围为0~232-1。各存储单元地址作为32位无符号数,可以进行常规的整数运算。当程序正常执行时,每执行一条ARM指令,当前指令计数器加4个字节;每执行一条Thumb指令,当前指令计数器加2个字节。16TM162.6.1数据存储格式小端存储格式(Little-Endian)17TM17大端存储格式(Big-Endian)18TM18TheARM可以用little/bigendian格式存取数据.r0=0x11223344STRr0,[r1]LDRBr2,[r1]r1=0x100Memory32100123ByteLane312423161587011223344312423161587011223344312423161587011223344312423161587000000044312423161587000000011LittleendianBigendianR2=0x44R2=0x11Formoreinformation,see:“ApplicationNote:BigandLittleEndianByteAddressing”字节顺序19TM192.6.2非对齐存储器地址访问问题分析1.非对齐的指令预取操作如果是在ARM状态下将一个非对齐地址写入PC,则数据在写入PC时数据的第0位和第1位被忽略,最终PC的bit[1:0]为0;如果是在Thumb状态下将一个非对齐地址写入PC,则数据在写入PC时数据的第0位被忽略,最终PC的bit[0]为0。20TM202.非对齐地址内存的访问操作对于LOAD/STORE操作,系统定义了下面3种可能的结果:*执行结果不可预知*忽略字单元地址低两位的值,即访问地址为字单元;忽略半字单元最低位的值,即访问地址为半字单元。这种忽略是由存储系统自动实现的。*在LDR和SWP指令中,对存储器访问忽略造成地址不对齐的低地址位,然后使用这些低地址位控制装载数据的循环。21TM212.7ARM流水线技术分析ARM7流水线技术与三级流水线运行情况分析ARM9流水线技术与五级流水线互锁分析ARM10E系列概述22TM22ARM7流水线技术为增加处理器指令流的速度,ARM7系列使用3级流水线.允许多个操作同时处理,比逐条指令执行要快。PC指向正被取指的指令,而非正在执行的指令FetchDecodeExecute从存储器中读取指令解码指令寄存器读(从寄存器Bank)移位及ALU操作寄存器写(到寄存器Bank)PCPCPC-4PC-2PC-8PC-4ARMThumb23TM23最佳流水线该例中用6个机器周期执行了6条指令所有的操作都在寄存器中(单周期执行)指令周期数(CPI)=1机器周期操作周期123456ADDSUBMOVANDORREORCMPRSBFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDecodeExecuteFetchDecodeFetchFetch24TM24LDR流水线举例该例中,用6机器周期执行了4条指令指令周期数(CPI)=1.5机器周期周期操作123456ADDSUBLDRMOVANDORRFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDataWritebackFetchDecodeExecuteFetchDecodeFetch25TM25分支流水线举例流水线被阻断注意:内核运行在ARM状态周期123450x8000BL0x8004X0x8008XX0x8FECADD0x8FF0SUB0x8FF4MOV地址操作FetchDecodeExecuteFetchDecodeExecuteFetchDecodeFetchFetchDecodeExecuteLinkretAdjustFetchDecodeFetch目标地址26TM26中断流水线举例周期12345678IRQIRQ中断的反应时间最小=7机器周期地址操作FDELinkretAdjustFFDecodeIRQLinkretExecuteIRQAdjustFDEFDFFDEFDFF0x8000ADD0x8008MOV0x0018B(to0xAF00)0x8004SUB0x001CXX0x0020XXX0xAF00STMFD0xAF04MOV0xAF08LDR0x800CXD27TM27ARM9TDMI流水线的变化InstructionFetchShift+ALUMemoryAccessRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARM9TDMIARMorThumbInstDecodeRegSelectRegReadShiftALURegWriteThumbARMdecompressARMdecodeInstructionFetchFETCHDECODEEXECUTEARM7TDMI28TM28周期操作ADDR1,R1,R2SUBR3,R4,R1ORRR8,R3,R4ANDR6,R3,R1EORR3,R1,R2LDRR4,[R7]最佳流水线本例中,用了6个机器周期执行6条指令,CPI=1机器周期。LDR指令没有引起流水线互锁123456789FDEWFDEWFEWFDEWFDWEFDEWF–取指(Fetch)D–解码(Decode)E–执行(Execute)I–互锁(Interlock)M–存储器(Memory)W–写回(Writeback)MD29TM29周期操作ADDR1,R1,R2SUBR3,R4,R1ORRR8,R3,R4ANDR6,R3,R1EORR3,R1,R212345678LDRR4,[R7]9FDEFDEWFDEWFDEWFDWEFDEWF–取指(Fetch)D–解码(Decode)E–执行(Execute)I–互锁(Interlock)M–存储器(Memory)W–写回(Writeback)ILDR互锁本例中,用了7个机器周期执行6条指令,CPI=1.2机器周期。LDR指令之后立即跟一条数据操作指令,由于使用了相同的寄存器,将会导致互锁。WIM互锁:当前指令的执行可能需要前面指令的执行结果,但这时前面的指令还没有执行完毕,从而会导致当前指令的执行无法获得合法的操作数,这时会引起流水线的等待,这种现象称为互锁。30TM30LDM互锁(1)本例中,用了8个机器周期执行5条指令,CPI=1.6在LDM期间,有并行的存储器访问和回写周期周期操作LDMIAR13!,{R0-R3}SUBR9,R7,R8ORRR8,R4,R3ANDR6,R3,R112345678STRR4,[R9]9F–取指(Fetch)D–解码(Decode)E–执行(Execute)MW-存储器和回写同时执行I–互锁(Interlock)M–存储器(Memory)W–写回(Writeback)FDEWFDEWDEFDEWFMDWEIIIIIIMFMWMWMW31TM31LDM互锁(2)本例中,用了9个机器周期执行5条指令,CPI=1.8此处SUB使用了R3,增加了一个额外的互锁周期来完成该寄存器数据的获取这种情况对

1 / 32
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功