0

对于以下代码段,我需要插入最少数量的 nop 来解决所有潜在的管道危险。

lw $t3, 4($t5)
beq $t2, $t3, -2
addi $t2, $t2, 1 

我提出的解决方案是

lw $t3, 4($t5)           
beq $t2, $t3, -2 
addi $t2, $t2, 1
NOP     
NOP

但是,我不太确定上面的答案,所以任何人都可以帮助我吗?

4

1 回答 1

0

似乎这里唯一需要考虑的是确保在下一个周期命中$t2之前获得正确的值 ($t2 + 1) 。beq答案实际上取决于将值写$t2回内存或缓存需要多少个周期-您已经省略了该细节,但假设您只有一个 3 阶段管道并且每个操作需要 1 个周期,我相信即使一个 NOP 可以工作:

  1. 在周期 0 中,随着来自的值变得可用 ,lw进入管道addi
  2. 在周期 1 中,beq比较 和 的值,$t3$t2上一个周期开始可用

无法说您的实现是否支持这种类型的转发。安全的赌注是两个 NOP,但是您遗漏了很多细节,而且我还没有足够的代表发表评论以进行澄清:(希望这会有所帮助。

于 2013-09-30T21:28:34.243 回答