ARM中流水线分析

您所在的位置:网站首页 五级流水线技术 ARM中流水线分析

ARM中流水线分析

2023-06-09 21:22| 来源: 网络整理| 查看: 265

一、ARM流水线技术基础知识

       流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器的效率和吞吐率。ARM7是冯·诺依曼结构,采用了典型的三级流水线,而ARM9则是哈佛结构,采用五级流水线技术,而ARM11则更是使用了7级流水线。通过增加流水线级数,简化了流水线的各级逻辑,进一步提高了处理器的性能。         在ARM7中,执行单元完成了大量的工作,包括与操作数相关的寄存器和存储器的读写操作、ALU操作和相关器件之间的数据传输,因此占用了多个时钟周期。ARM9增加了两个功能部件,分别访问存储器并写回结果,同时,ARM9将读寄存器的操作转移到译码部件上,使得流水线各部件的功能更平衡。

以三级流水线分析:      pc代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:            1.取指(从存储器装载一条指令);            2.译码(识别将要被执行的指令);                   而r15(pc)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执 行的指令作为参考点”,称之为当前第一条指令,因此pc总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以pc始终指向该指 令地址加8字节的地址,即:pc值=当前程序执行位置+8;           3.执行(处理指令并将结果写回寄存器)。

 

二、流水线几种情况总结(以三级流水线+冯·诺依曼结构分析)

Step1:单周期指令——一步到位

1)三级流水线

 

 

3级流水线--->>ARM7--->>>冯诺依曼结构--->>>一条线传输数据和地址

       (1)使用条件:三级流水线在处理简单的寄存器操作指令时(不包括存储器访问指令和跳转指令)

       (2)上图中的MOV、ADD、SUB等指令为单周期指令,并且都是简单的寄存器指令

       (3)从T1开始,用3个时钟周期执行了3条指令,指令平均周期数(CPI)等于1个时钟周期。

        三级流水线在处理简单的寄存器操作指令时,吞吐率为平均每个时钟周期一条指令;但是在存在存储器访问指令、跳转指令的情况下会出现流水线阻断情况,导致流水线的性能下降。图1给出了流水线的最佳运行情况,图中的MOV、ADD、SUB指令为单周期指令。从T1开始,用3个时钟周期执行了3条指令,指令平均周期数(CPI)等于1个时钟周期。

 

Step2:分步指令——有先有后:

2)带有存储器访问指令的流水线LDR和STR

3级流水线--->>ARM7--->>>冯诺依曼结构--->>>一条线传输数据和地址

   ARM指令LDR(装载)

       eg. ldr r0,#0x11223344 (将数据0x11223344装载到soc内的寄存器r0中)

       (1)将数据移进片内(soc)导致了指令/数据总线(冯诺依曼就一根线)被占用,LDR指令移进内存(Memory)中。

       (2)因此随后紧跟了内部的写周期(writeback)以完成将数据写回寄存器。

 

工作流程:

(1)LDR和STR指令,存储器访问指令

(2)一条指令执行有两个先后动作

(3)LDR指令

      step1:访问内存——取数据——冯诺依曼一根线被占用——AND指令被延时(stall)

      step2:数据写回寄存器——写数据——冯诺依曼一根线被占用——其他指令被延时

(4)由于冯诺依曼结构,仅有一个线作为数据和地址传输,所以执行LDR/STR指令时,线被占用,等待LDR指令执行结束,数据/地址总线才被释放——这就是阻断流水线的原因和过程

说明:S ——stall——表示三级流水线部分被拖延了

        对存储器的访问指令LDR就是非单周期指令,如图2所示。这类指令在执行阶段,首先要进行存储器的地址计算,占用控制信号线,而译码的过程同样需要占用控制信号线,所以下一条指令(第一个SUB)的译码被阻断,并且由于LDR访问存储器和回写寄存器的过程中需要继续占用执行单元,所以下一条(第一个 SUB)的执行也被阻断。由于采用冯·诺伊曼体系结构,不能够同时访问数据存储器和指令存储器,当LDR处于访存周期的过程中时,MOV指令的取指被阻断。因此处理器用8个时钟周期执行了6条指令,指令平均周期数(CPI)=1.3个时钟周期。

 

3)分支流水线——跳转指令

分析跳转指令的动作 = B(跳转=调整程序指针) + L(写连接寄存器)

3级流水线--->>ARM7--->>>冯诺依曼结构--->>>一条线传输数据和地址

ARM跳转指令BL

    eg.BL 9X8FEC

    step1:先Link到目的地址(L)

    step2:连接到地址后,修改程序指针进行跳转(B)

工作流程:(三级流水线)

(1)一条指令执行有两个先后动作

(2)BL指令

step1:找地址(Link)——连接相关地址——冯诺依曼一根线被占用

step2:跳转(B)——跳转到相关位置——冯诺依曼一根线被占用

step3:执行完上面两个步骤后,BL指令才执行结束,此时跳到被连接的指令,如上图SUB和ORR指令被抛弃

(3)由于冯诺依曼结构,仅有一个线作为数据和地址传输,所以执行BL(分步执行)指令时,线被占用,等待BL指令执行结束,数据/地址总线才被释放——这就是阻断流水线的原因和过程

        当指令序列中含有具有分支功能的指令(如BL等)时,流水线也会被阻断。分支指令在执行时,其后第1条指令被译码,其后第2条指令进行取指,但是这两步操作的指令并不被执行。因为分支指令执行完毕后,程序应该转到跳转的目标地址处执行,因此在流水线上需要丢弃这两条指令,同时程序计数器就会转移到新的位置接着进行取指、译码和执行。此外还有一些特殊的转移指令需要在跳转完成的同时进行写链接寄存器、程序计数寄存器,如BL执行过程中包括两个附加操作——写链接寄存器和调整程序指针。这两个操作仍然占用执行单元,这时处于译码和取指的流水线被阻断了。

 

Step3:中断(进入异常模式)——随时来

4)中断流水线(IRQ 外部中断为例)

3级流水线--->>ARM7--->>>冯诺依曼结构--->>>一条线传输数据和地址

中断发生后,当前指令和中断哪个优先处理,怎么工作的?

     step1:中断发生后,不打断当前正在执行的指令,即等待当前指令执行结束

      step2:执行完当前指令在取处理中断

 

ARM发生外部中断,进入中断处理模式IRQ

      发生异常后,CPU进入异常模式,硬件执行四大步三小步

 

     按照上面硬件处理异常的四大步三小步来的

           step1:当前指令执行阶段:当有中断发生时,当前指令在执行

           step2:中断处理入口:当前指令执行结束后,处理中断——上图蓝色框

           step3:解码阶段:DI——中断使能,设置相应标志位——进入ARM态——异常向量表的跳转start.S

           step4:中断处理:EI——中断处理——void do_irq

           step5:连接(LR寄存器)地址——跳转回ARM指令程序中——LR

           step6:修正返回地址——pc = lr -4

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3