5级流水线ARM组织

所有的处理器都要满足对高性能的要求。指定ARM7为止,在ARM核中使用的3级流水线的性价比是很高的。但是,为了得到更高的性能,需要重新考虑处理器的组织结构。执行一个给定的程序需要的时间由下面公式决定:

Tprog=(Ninst×CPI)/ fclk

式中:

Ninst——在程序中执行的ARM指令数;

CPI——每条指令的平均时钟周期;

fclk——处理器的时钟频率。

因为对给定程序(假设使用给定的优化集并用给定的编译器来编译)是常数,所以,仅有以下两种方法来提高性能。

第一,可以提高时钟频率。时钟频率的提高,必然引起指令执行周期的缩短,所以要求简化流水线每一级的逻辑,因而流水线的级数就增加了。

第二,减少每条指令的平均指令周期数CPI。这就要求重新考虑3级流水线ARM中多于一条流水线周期的实现方法,以便使其占有较少的周期;或者减少因指令相关造成的流水线停顿,也可以将两者结合起来。

3级流水线ARM核在每一个时钟周期都访问存储器,或者取指令,或者传输数据。只是抓住存储器不用的几个周期来改善系统性能,效果是不明显的。为了改善CPI,存储器系统必须在每个时钟周期中给出多于一个的数据。方法是在每个时钟周期从单个存储器中给出多于32位数据,或为指令或数据分别设置存储器。

基于以上原因,较高性能的ARM核使用了5级流水线,而且具有分开的指令和数据存储器。把指令的执行分割为5部分而不是3部分,这就在每个时钟周期内增加了必须完成的工作量,进而可以使用更高的时钟频率,分开的指令和数据存储器使核的CPI明显减少。

在ARM9TDMI中使用了典型的5级流水线。ARM9TDMI的组织结构如图1所示。

图1 ARM9TDMI的组织结构

5级流水线包括下面的流水线级。

(1)取指(fetch):从存储器中取出指令,并将其放入指令流水线。

(2)译码(decode):指令被译码,从寄存器堆中读取寄存器操作数。在寄存器堆中有3个操作数读端口,因此,大多数ARM指令能在一个周期内读取其操作数;

(3)执行(execute):将其中一个操作数移位,并在ALU中产生结果。如果指令是Load或Store指令,则在ALU中计算存储器的地址;

(4)缓冲/数据(buffer/data):如果需要则访问数据存储器;否则ALU只是简单地缓冲一个时钟周期;

(5)回写(write-back):将指令的结果回写到寄存器堆,包括任何从寄存器读出的数据。

图2显示了5级流水线指令的执行过程。

图2 5级流水线指令的执行过程

在程序执行过程中,PC值是基于3级流水线操作特性的。5级流水线中提前1级来读取指令操作数,得到的值是不同的,由此产生的代码不兼容是不容许的。但5级流水线ARM完全仿真3级流水线的行为。在取指级增加的PC值被直接送到译码级的寄存器,穿过两级之间的流水线寄存器。因此,未使用额外的硬件便得到了正确的r15。

猜你喜欢

转载自blog.csdn.net/super828/article/details/129849512