3级流水线ARM组织概念

Posted CodeAllen嵌入式

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3级流水线ARM组织概念相关的知识,希望对你有一定的参考价值。

3级流水线ARM组织如图:

 (1)处理器状态的寄存器堆(Register Bank):它有两个读端口和一个写端口,每个端口都可以访问任意寄存器,再加上专门访问程序计数器PC的一个附加读端口和一个附加写端口。

(2)桶形移位寄存器(Barrel Shifter):它可以把一个操作数移位或循环移位任意位数。

(3)ALU:完成指令集要求的算术或逻辑功能。

(4)地址寄存器(Address Register)和增值器(Incrementer):它选择和保存所用的存储器地址,并在需要时产生顺序地址。

(5)数据输出寄存器(Data-out Register)和数据输入寄存器(Data-in Register):保存传输到存储器和从存储器输出的数据。

(6)指令译码器和相关的控制逻辑(Instruction Decode and Control)。

下面的例子显示了一条单周期指令在流水线上的执行过程。

ADD  r1,r2

单周期指令在流水线上的执行过程如下图所示。

在ADD指令中,需要访问两个寄存器操作数,B总线上的数据移位后与A总线上的数据在ALU中组合,再将结果写回寄存器堆。在指令执行过程中,程序计数器的数据放在地址寄存器中,地址寄存器的数据送入增值器。然后将增值后的数据复制到寄存器堆的r15(程序计数器),同时还复制到地址寄存器,作为下一次取指的地址。

到ARM7为止的ARM处理器使用简单的3级流水线,包括下列流水线级。

(1)取指(fetch)——从寄存器装载一条指令。

(2)译码(decode)——识别被执行的指令,并为下一个周期准备数据通路的控制信号。在这一级,指令占有译码逻辑,不占用数据通路。

(3)执行(excute)——处理指令并将结果写回寄存器。

下图显示了3级流水线指令执行过程。

当处理器执行简单的数据处理指令时,流水线使得平均每个时钟周期能完成一条指令。但一条指令需要3个时钟周期来完成,因此,有3个时钟周期的延时(latency),但吞吐率(throughput)是每个周期一条指令。下面通过一个简单的例子说明流水线的机制。

指令序列为:

ADD r1 r2
SUB r3 r2
CMP r1 r3

流水线指令序列如下图所示。

在第一个周期,内核从存储器取出指令ADD;在第二个周期,内核取出指令SUB,同时对ADD译码;在第三个周期,指令SUB和ADD都沿流水线移动,ADD被执行,而SUB被译码,同时又取出CMP指令。可以看出,流水线使得每个时钟周期就可以执行一条指令。

当执行多条指令时,流水线的执行不一定会按照如下图所示的规则,下图显示了有STR指令时的流水线状态。

图中在单周期指令ADD后出现了一条数据存储指令STR。访问主存储器的指令用阴影表示,可以看出在每个周期都使用了存储器。同样,在每一个周期也使用了数据通路。在执行周期、地址计算和数据传输周期,数据通路都是被占用的。在译码周期,译码逻辑负责产生下一周期用到的数据通路的控制信号。

从图中的指令序列中可以看出,处理器的每个逻辑单元在每个指令都是活动的,流水线的执行与存储器访问密切相关,存储器访问限制了程序执行必须花费的指令周期数。

ARM的流水线执行模式导致了一个结果,就是程序计数器PC(对使用者而言为r15)必须在当前指令执行前计数。例如,指令在其第一个周期为下下条指令取指,这就意味着PC必须指向当前指令的后8个字节(其后的两条指令)。

当程序中必须用到PC时,程序员要特别注意这一点。但在大多数正常情况下,不用考虑这一点,汇编器或编译器可自动处理这些细节。

下面的例子显示了流水线下程序计数器PC的使用情况。

指令序列为:

0x8000 LDR pc,[pc,#0]
0x8004 NOP
0x8008 DCD jumpAdress

当指令LDR处于执行阶段时,pc=address+8即0x8008。

嵌入式:ARM的流水线技术

三级流水线ARM的组织

ARM的3级流水线介绍

到ARM7为止的ARM处理器使用的简单3级流水线分别为

  • 取指级 :读取指令。
  • 译码级 :对指令进行译码。占有“译码逻辑”,不占有“数据路径”。
  • 执行级 :指令占有“数据路径”,寄存器堆栈被读取,操作数在桶式移位器中被移位,ALU产生相应的运算结果,并写回目的寄存器中。并根据需求更改状态寄存器的条件位。

嵌入式:ARM的流水线技术_操作数

ARM3级流水线下PC的行为

在3级流水线的执行过程中,当通过R15寄存器直接访问PC时,必须考虑到此时流水线的执行过程的真实情况

嵌入式:ARM的流水线技术_ARM_02

程序执行时间计算公式

嵌入式:ARM的流水线技术_寄存器_03

  • 嵌入式:ARM的流水线技术_寄存器_04

  • :指令数 (固定)。
  • CPI : 每条指令的平均时钟周期数。
  • 嵌入式:ARM的流水线技术_流水线_05

  • : 时钟频率。

减少Tprog的方法:

  1. 减少CPI: 将程序和数据分开
  2. 提高
  3. 嵌入式:ARM的流水线技术_流水线_06

  4. : 增加流水数,简化每一级的逻辑。

五级流水线ARM的组织

使用5级流水线的ARM处理器包含下面5个流水线级:

  • 取指:取指令。
  • 译码 :读取寄存器操作数,寄存器堆中有3个操作数读端口,大多数ARM指令能在一个周期内读取其操作数。
  • 执行 :把一个操作数移位,并产生ALU结果,如果是Load/Store指令,在ALU中计算存储器地址。
  • 缓冲\\数据 :如果需要,则访问数据存储器,否则ALU的结果只是简单地缓冲一个时钟周期,以便使得所有指令都有相同的流水线流程。
  • 回写 :将指令产生的结果写回到寄存器堆,包括任何从存储器读取的数据。

嵌入式:ARM的流水线技术_寄存器_07

进一步减少CPI

要改进CPI,必须增加指令存储器的带宽,ARM10TDMI采用64位存储器结构来解决存储器的瓶颈问题。

  1. 采用转移预测逻辑。可以把时钟频率提高,达到每一时钟周期取2条指令。转移预测单元在流水线的发射阶段之前(在流水线的取指阶段),能识别转移指令,并把它从指令流中移去,从而,尽可能地把转移所引起的周期损失降至零。
  2. 采用非阻塞(Non-blocking)存取执行。一般的存储器存储加载指令,不能在单一存储器周期中完成。采用非阻塞存取措施,就不会在流水线的执行阶段产生停顿。
  3. 采用64位数据存储器。这样,允许在每个时钟周期传送2个寄存器的指令存取。ARM10TDMI的寄存器组具有4个读端口和3个写端口。

参考文献:

孟祥莲.嵌入式系统原理及应用教程(第2版)[M].北京:清华大学出版社,2017.

以上是关于3级流水线ARM组织概念的主要内容,如果未能解决你的问题,请参考以下文章

ARM中断深入分析几点

ARM流水线是否级数越高在相同时间执行的指令越少啊

ARM11的内核特点

Arm基础

ARM PC寄存器

基于ARM的嵌入式