第二章嵌入式处理器体系结构六.流水线技术1.背景采用流水线技术后,能够提高处理器的性能。这一结论可以从分析处理器执行一个程序所花费的时间得到(Ninst----程序所包含指令的数目,CPI----执行一条指令的平均周期数):T=(Ninst*CPI)/fclk·单纯的提高fclk会带来处理器功耗的增加·程序所包含指令的数目基本不变·减小CPI是改善处理器性能最有效的方法----采用流水线技术(以3级流水线技术为例,硬件资源的功能被模块化并彼此独立,从指令的角度而言每条指令的执行时间是3个周期,但从处理器的角度而言每个周期完成了1条指令)。2.特点·流水线的一条指令只有在完全通过“执行”阶段才被处理·在指令“执行”阶段,pc总是指向当前指令地址加8字节的地方(使用pc计算相对偏移量时这点很重要)·执行一条分支指令或直接修改pc而发生跳转时,会使ARM内核清空流水线·即使产生一个中断,处于“执行”阶段的指令也将会完成(流水线中其它指令被放弃,处理器将从向量表的适当入口开始填充流水线)·ARM10使用分支预测技术,通过预测可能的分支并在指令执行前装载新的分支地址,从而减小清空流水线的影响3.5级流水线随着主频的提高,每个周期内所能完成的任务就必须变得更简单(即流水线越多),系统性能也越好。但流水线级数的增加也意味着可能更多的产生数据相关,需要相应技术来缓解。·5级流水线采用哈佛结构,增加了硬件资源使访问指令和数据互不影响·常见的3种相关:结构相关(即资源冲突‘资源重复’I-cache和D-cache、数据相关(采用定向技术等加以解决)和控制相关(借助于指令预测来解决)4.关于PC=PC+8ARM7采用3级流水线,ARM9采用5级流水线,但二者在程序中使用PC时都同样涉及PC+8的问题----对于二者而言都是PC=PC+8。·3级和5级流水线中“执行”阶段都位于第3个阶段·PC的值总是保存正在被取指的指令的地址·PC=PC+4x中的x和流水线的级数没有关系,只和“执行阶段”所处的“位置”有关(执行阶段是用到PC值的阶段)七.异常中断1.异常的定义·任何打断程序正常执行顺序的情况都被视为异常(中断是一种特殊的异常,是由外设引起的程序执行顺序的间断);·异常可以翻译为:a.Exception─从处理器被动接受异常角度而言;b.Interrupt─从处理器主动申请角度而言;·程序的运行状态总是在‘正常执行’和‘处理异常’之间来回切换,所以异常处理是嵌入式系统的核心内容之一。2.异常的类型2-1.ARM支持7种类型的异常中断,各种异常中断的触发条件分别为:•复位异常----处理器的nReset电平有效时产生•指令预取中止异常----若处理器预取指令的地址不存在或该地址不允许当前指令访问,则存储器通过外部信号ABORT向处理器发出中止信号,当预取的指令到执行阶段时(相当于中止信号经历取指、译码阶段,到执行阶段才出发异常的产生)才产生异常•数据中止异常----数据访问指令的地址不存在或该地址不允许当前指令访问,则存储器通过外部信号ABORT向处理器发出中止信号•FIQ异常----当外部事件促使nFIQ=0且CPSR中的F=0时触发该异常,可以减少系统上下文切换时的开销,适合进行数据或通道的快速处理•IRQ异常----当外部事件促使nIRQ=0且CPSR中的I=0时触发该异常,系统外设通过该异常请求中断服务•未定义指令异常----采用该机制可以通过软件仿真扩展ARM/Thumb指令集•SWI异常----可用于用户模式下的程序调用特权操作指令,实现系统功能调用(如执行特定的管理功能)2-2.异常对应的工作模式和地址向量7种异常对应于5种工作模式(即5种异常模式),每种异常的产生都会导致内核进入一种特定的模式。系统响应异常中断时,会把pc设置为一个特定的存储器地址----向量表。3.异常的优先级在七种异常中有三种是中断----FIQ、IRQ和软件中断,共分为6个等级,如下表所示表格中的顺序只是一般情况下各种异常的相对级别关系,实际中的异常处理顺序不一定和表格的完全一致,而和系统所采用的具体机制有关。4.异常的响应4-1.概述·当异常中断发生后,处理器首先执行完当前处于执行阶段的命令,然后进入异常中断响应过程;·内核的异常处理是系统自动完成的,不需要人工的干预;·Reset异常不需要返回,而其他的6种异常均需要返回到原程序继续执行。4-2.响应过程•将CPSR复制到相应的SPSR_mode中•将下一条指令的地址存入LR_mode中(异类型不同,保存的地址也不同)•根据异常类型强行设置CPSR运行模式位,并使处理器状态进入ARM状态•强制PC跳转到异常向量表的相应入口处•设置中断禁止位到此,系统进入到相应的工作模式且PC也已经指向异常向量表的入口处准备执行异常处理程序。5.异常的返回5-1.返回过程•修正链接寄存器LR的值并复制到PC•将SPSR_mode复制回CPSR•若在进入异常处理时设置了中断禁止位,则要在此清除在进入异常时PCLR_mode的工作是由“硬件”完成的,而从异常返回时LR_modePC的工作是由程序员用“软件”来完成的。5-2.确定返回地址从异常处理中返回时所作的工作和进入异常前所作的工作基本是相反的(返回时CPSR和断点地址是同时恢复的),但是对于返回地址值的设置则要特别加以重视(根据具体的异常类型确定具体的返回地址)。在程序的跳转和处理异常时,系统为了正确的返回会对lr的取值进行一次自动调整:lr=lr-0x04(目的是程序返回时自动指向下一条未执行的指令)。此操作对于程序跳转指令(B、BL等)适用,但对异常则不能通用,程序员要根据异常的具体情况再次对lr的值进行一次‘人为’的调整。•未定义指令异常和SWI异常----B指令相当于SWI或未定义指令,异常是在B的执行阶段被激发,且应返回至下一条指令,故不用修改LR值;•预取指异常、IRQ和FIQ异常----A指令执行期间出现异常,系统响应异常,B指令在异常返回后应被执行,且应返回至本指令重新执行,故LR值要减4;•数据中止异常----B指令相当于触发异常的指令,且是在B执行阶段完成后(即执行后续的数据操作时)激发异常,此时PC值由PC+8更新至PC+12,且要返回本指令重新执行,故LR要减8。6.举例6-1.IRQ异常响应过程如下首先,将下一条指令的地址(PC+4)保存至LR_irq;其次,复制当前CPSR至SPSR_irq;然后,将向量表地址0x00000018写入PC(同时,ARM工作模式发生转变,CPSR中的I被设置为1);接着,PC从向量表处开始执行中断服务程序的跳转指令;最后,跳转指令将PC引导真正的服务程序处执行(在中断服务程序的起始处必须将服务程序要用到的R0-R12保存至IRQ堆栈空间)。2.从IRQ异常中返回八.ARM体系结构的缓存和内核扩展1.ARM体系结构的缓存·缓存(Cache)是一种小容量、高速度的存储器,位于处理器和主存储器之间,用来存放当前被使用的主存部分内容,使得内核能够在大多数时间全速运行而无需等待低速的外部存储器访问。·Cache的工作原理2.内核扩展2-1.硬件扩展是置于ARM内核外围的标准组件,可以改善性能、管理资源以及提供额外的功能,为处理特殊的应用提供了灵活性,每个ARM处理器都有不同的扩展;2-2.常见的硬件扩展有3种类型:cache和紧耦合器(TCM――TightlyCoupledMemory)、存储管理和协处理器接口。·Cache改善性能的同时会带来程序执行时间的不可预测性(而对于实时系统来说代码执行的确定性至关重要),TCM是一种快速SRAM,能保证取指或操作数的时钟周期数;·ARM内核的存储器管理硬件有3种类型:无保护(没有提供扩展,没有硬件保护)、MPU(提供有限保护的存储器保护单元)、MMU(提供全面保护的存储器管理单元);·协处理器通过扩展指令集或提供配置寄存器来扩展内核处理功能,本身通过一组专门的、提供load/store类型接口的ARM指令访问。