标题:
ARM流水线分析
[打印本页]
作者:
look_w
时间:
2017-9-24 18:47
标题:
ARM流水线分析
流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。
ARM7
处理器核使用了典型三级流水线的冯
·
诺伊曼结构,
ARM9
系列则采用了基于五级流水线的哈佛结构。通过增加流水线级数简化了流水线各级的逻辑,进一步提高了处理器的性能。
ARM7
的三级流水线在执行单元完成了大量的工作,包括与操作数相关的寄存器和存储器读写操作、
ALU
操作以及相关器件之间的数据传输。执行单元的工作往往占用多个时钟周期,从而成为系统性能的瓶颈。
ARM9
采用了更为高效的五级流水线设计,增加了
2
个功能部件分别访问存储器并写回结果,且将读寄存器的操作转移到译码部件上,使流水线各部件在功能上更平衡;同时其哈佛架构避免了数据访问和取指的总线冲突。
然而不论是三级流水线还是五级流水线,当出现多周期指令、跳转分支指令和中断发生的时候,流水线都会发生阻塞,而且相邻指令之间也可能因为寄存器冲突导致流水线阻塞,降低流水线的效率。本文在对流水线原理及运行情况详细分析的基础上,研究通过调整指令执行序列来提高流水线运行性能的方法。
1 ARM7
/
ARM9
流水线技术
1
.
1 ARM7
流水线技术
ARM7
系列处理器中每条指令分取指、译码、执行三个阶段,分别在不同的功能部件上依次独立完成。取指部件完成从存储器装载一条指令,通过译码部件产生下一周期数据路径需要的控制信号,完成寄存器的解码,再送到执行单元完成寄存器的读取、
ALU
运算及运算结果的写回,需要访问存储器的指令完成存储器的访问。流水线上虽然一条指令仍需
3
个时钟周期来完成,但通过多个部件并行,使得处理器的吞吐率约为每个周期一条指令,提高了流式指令的处理速度,从而可达到
O
.
9 MIPS
/
MHz
的指令执行速度。
在三级流水线下,通过
R15
访问
PC(
程序计数器
)
时会出现取指位置和执行位置不同的现象。这须结合流水线的执行情况考虑,取指部件根据
PC
取指,取指完成后
PC+4
送到
PC
,并把取到的指令传递给译码部件,然后取指部件根据新的
PC
取指。因为每条指令
4
字节,故
PC
值等于当前程序执行位置
+8
。
1
.
2 ARM9
流水线技术
ARM9
系列处理器的流水线分为取指、译码、执行、访存、回写。取指部件完成从指令存储器取指;译码部件读取寄存器操作数,与三级流水线中不占有数据路径区别很大;执行部件产生
ALU
运算结果或产生存储器地址
(
对于存储器访问指令来讲
)
;访存部件访问数据存储器;回写部件完成执行结果写回寄存器。把三级流水线中的执行单元进一步细化,减少了在每个时钟周期内必须完成的工作量,进而允许使用较高的时钟频率,且具有分开的指令和数据存储器,减少了冲突的发生,每条指令的平均周期数明显减少。
2
三级流水线运行情况分析
三级流水线在处理简单的寄存器操作指令时,吞吐率为平均每个时钟周期一条指令;但是在存在存储器访问指令、跳转指令的情况下会出现流水线阻断情况,导致流水线的性能下降。图
1
给出了流水线的最佳运行情况,图中的
MOV
、
ADD
、
SUB
指令为单周期指令。从
T1
开始,用
3
个时钟周期执行了
3
条指令,指令平均周期数
(CPI)
等于
1
个时钟周期。
流水线中阻断现象也十分普遍,下面就各种阻断情况下的流水线性能进行详细分析。
2
.
1
带有存储器访问指令的流水线
对存储器的访问指令
LDR
就是非单周期指令,如图
2
所示。这类指令在执行阶段,首先要进行存储器的地址计算,占用控制信号线,而译码的过程同样需要占用控制信号线,所以下一条指令
(
第一个
SUB)
的译码被阻断,并且由于
LDR
访问存储器和回写寄存器的过程中
需要继续占用执行单元,所以下一条
(
第一个
SUB)
的执行也被阻断。由于采用冯
·
诺伊曼体系结构,不能够同时访问数据存储器和指令存储器,当
LDR
处于访存周期的过程中时,
MOV
指令的取指被阻断。因此处理器用
8
个时钟周期执行了
6
条指令,指令平均周期数
(CPI)=1
.
3
个时钟周期。
2
.
2
带有分支指令的流水线
当指令序列中含有具有分支功能的指令
(
如
BL
等
)
时,流水线也会被阻断,如图
3
所示。分支指令在执行时,其后第
1
条指令被译码,其后第
2
条指令进行取指,但是这两步操作的指令并不被执行。因为分支指令执行完毕后,程序应该转到跳转的目标地址处执行,因此在流水线上需要丢弃这两条指令,同时程序计数器就会转移到新的位置接着进行取指、译码和执行。此外还有一些特殊的转移指令需要在跳转完成的同时进行写链接寄存器、程序计数寄存器,如
BL
执行过程中包括两个附加操作
——
写链接寄存器和调整程序指针。这两个操作仍然占用执行单元,这时处于译码和取指的流水线被阻断了。
2
.
3
中断流水线
处理器中断的发生具有不确定性,与当前所执行的指令没有任何关系。在中断发生时,处理器总是会执行完当前正被执行的指令,然后去响应中断。如图
4
所示,在
Ox90000
处的指令
ADD
执行期间
IRQ
中断发生,这时要等待
ADD
指令执行完毕,
IRQ
才获得执行单元,处理器开始处理
IRQ
中断,保存程序返回地址并调整程序指针指向
Oxl8
内存单元。在
Oxl8
处有
IRO
中断向量
(
也就是跳向
IRQ
中断服务的指令
)
,接下来执行跳转指令转向中断服务程序,流水线又被阻断,执行
0x18
处指令的过程同带有分支指令的流水线。
3
五级流水线技术
五级流水线技术在多种
RISC
处理器中被广泛使用,被认为是经典的处理器设计方式。五级流水线中的存储器访问部件
(
访存
)
和寄存器回写部件,解决了三级流水线中存储器访问指令在指令执行阶段的延迟问题。图
5
为五级流水线的运行情况
(
五级流水线也存在阻断
)
。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0