流水线-Mips指令

流水线-Mips指令,mips,pipelining,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

在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
(很抱歉发布了错误的帖子,但我还不能发布图片)


谢谢

让我们看看第一个:

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


希望这有帮助。

HW作业?问题到底是什么?到目前为止你是如何解决的?