流水线 - 提示说明

时间:2013-09-04 12:58:44

标签: mips pipelining

我在mips指令中使用流水线操作感到困惑。任何帮助都会很棒。提前谢谢。

接下来的两个代码中的数据依赖性是什么?使用失速(气泡)或转发可以解决哪些问题。为方便起见,您可以使用形状1。

          shape 1:

           If-Id-Ex-Mem-Wb

解释:

if=instruction fetch

id=instruction decode register fetch

ex=execute

mem=memory access

wb=write back 

代码1:

add $3,$4,$2

sub $5,$3,$1

lw  $6,200($5)

sw  $6,200($2)

lw  $6,200($3)

add $7,$4,$6

代码2:

add $3,$4,$2

sub $5,$3,$1

lw $6,200($3)

add $7,$3,$6

(抱歉发帖不好,但我还不能发布图片)

感谢。

1 个答案:

答案 0 :(得分:0)

让我们看看第一个:

add $3,$4,$2  

sub $5,$3,$1

add中使用sub的结果,因此存在数据危险。我们必须插入一定数量的NOP阶段来解决它。假设所有指令占用5个周期,我们插入3个NOP,我们就完成了。

add $3,$4,$2  IF  ID  EX MEM  WB  

sub $5,$3,$1     NOP NOP NOP  IF  ID  EX MEM  WB

我们可以为所有后续指示执行此操作。现在,指令在EX和MEM阶段产生新值。在WB阶段之前,这些值不会写入寄存器(出于学习目的,我们假设这是真的)。由于寄存器是在ID阶段读取的,因此会留下一个三个周期的窗口,旧的错误值通过管道“流动”。在我们的案例中,转发可以帮助解决此问题 - 将结果从add:EX转发到sub:ID

希望这有帮助。