使用5级流水线CPU的给定指令序列所需的时钟周期数是多少?

时间:2011-12-18 09:07:18

标签: cpu-architecture instructions pipelining

5级流水线CPU具有以下阶段序列:

  • IF - 从指令存储器中取指令。

  • RD - 指令解码和寄存器读取。

  • EX - 执行:数据和地址计算的ALU操作。

  • MA - 数据存储器访问 - 对于写访问,在RD状态读取的寄存器是 使用

  • WB - 注册回写。

考虑以下指令序列:

I1: L  R0, loc 1       ; R0 <=M[loc1]
I2: A  R0, R0 1        ; R0 <= R0 + R0
I3: S  R2, R0 1        ; R2 <= R2 - R0

让每个阶段花费一个时钟周期。 完成上述序列所需的时钟周期数是多少 从I1的获取开始的指令?

所以这是我的解决方案。

    1   2   3   4   5   6   7   8   9   10  11  12  13
I1: IF  RD  EX  MA  WB
I2:     IF  -   -   -   RD  EX  MA  WB
I3:         IF  -   -   -   -   -   -   RD  EX  MA  WB

通过这种方式,我总共得到13个周期。我假设因为在问题中没有明确提到操作数转发。所以注册只能在WB阶段之后才能使用。但选项如下:

  • 甲。 8
  • B中。 10
  • ℃。 12
  • d。 15

2 个答案:

答案 0 :(得分:2)

对于写访问,使用在RD阶段读取的寄存器 - 这意味着如果我们不能操作数将值转发到MA阶段。因此,我们可以假设操作数转发可以用于其他阶段。

使用数据转发:

T1 T2 T3 T4 T5 T6 T7 T8

如果RD EX MA WB
-IF RD - EX MA WB
--IF - RD EX MA WB

因此,答案将是8.

http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/forward.html

答案 1 :(得分:1)

由于以下行

,给定的问题是基于结构性危险

MA - 数据存储器访问 - 用于写访问,使用RD状态读取的寄存器

而不是数据依赖,尽管它似乎有数据依赖性。因此,在问题中没有提到有关数据转发的内容。

结构危险适用于加载指令。因此,在执行第一条指令之前,下一条指令的执行才能开始,因为 M [loc1] 引用的存储单元的有效地址将仅在管道的执行阶段计算。因此,在此之前总线将不会被释放,因此无法获取第二条指令。因此,第二条指令将需要额外的 2个时钟周期

第三条指令无法开始执行,直到第一条指令成功将数据加载到寄存器R0。这导致第三条指令具有 3个更多时钟周期。

Hence, total clock cycles = (CC for I1) + (CC for I2) + (CC for I3) 
= 5 + 2 + 3
= 10 clock cycles