分类: 嵌入式
2012-05-26 13:14:23
PowerPC处理器采用多发射(Superscaler)和乱序执行(Out-Of-Order)技术实现指令的流水执行。所谓指令的流水执行是指将一条指令的执行全过程分解为若干个子任务,然后建立相关的流水线,将一个指令分为若干段分别执行。
处理器采用指令流水线的原因有两条,一是因为现代处理器中在一个机器时钟周期之内无法完成从取值到指令完成的全过程,因此必须将指令执行分解为若干段;二是为了充分利用流水线哥哥功能部件。
指令的流水执行是处理器内核中的重要组成部件。E500内核使用的指令流水深度为7级,如果3.5所示。
图 3.5 E500内核的指令流水线
l 指令预取(Instruction Fetch)。E500内核使用两级流水线实现指令的预取,首先从L1指令Cache中获得需要执行的指令;如果所取的指令在L1 Cache没有命中,E500内核将依次访问L2 Cache和外部存储器。
l 指令译码(Instruction Decode/Dispatch)。指令译码模块激昂根据指令的OPCD码,将指令和与此指令有关的操作数进行分解,分别放入指令译码模块的缓冲中。
l 执行发射(Instruction Issue)。指令发射模块根据指令执行模块的使用情况,决定是否将指令发射到指令执行模块中执行。
l 指令执行(Instruction Execution)。指令执行模块将执行指令。E500内核中一共有BU,L/SU,SU1,SU2和MU共5个执行单元。其中BU(Branch Unit)用来执行转移指令和对CR寄存器操作的指令,L/SU(Load/Store Unit)用来执行存储器访问指令,SU1/SU2用来执行简单的算术逻辑运算,而MU(Multiple-cycle Instruction Unit)用来执行一些需要多个机器周期的指令。
l 指令完成(Instruction Completion)。该模块将完成指令的执行,将执行结果保存到相应的寄存器中,同时释放相应指令所占用的流水线资源。
l 指令回写(Instruction Write-Back)。同步Rename Register(重命名寄存器)与系统通用寄存器,有些指令的执行不经过此流水部件。
E500内核在指令运行的各个环节之间设置了许多缓冲,并在指令发射部件中使用重命名寄存器实现程序的乱序执行。E500内核采用7级流水结构运行指令,在一个机器周期内可以发射两条指令,并可以完成两条指令的运行。
E500内核的乱序执行是指在指令的执行阶段,由于不同指令的执行速度不同或者由于其他原因,后执行的指令可以提早执行完毕。为此在E500内核中设立了一些重命名寄存器用来实现这一技术。但是在E500内核中,指令在发射阶段和完成阶段必须顺序进行。