【问题标题】:Pipelining -Mips instructions流水线 -Mips 指令
【发布时间】:2013-09-08 00:01:05
【问题描述】:

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

接下来的两个代码中的数据依赖是什么?其中哪一个可以通过使用stall(泡沫)或转发来解决。为方便起见,您可以使用形状 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

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

谢谢。

【问题讨论】:

  • 硬件分配?究竟是什么问题,到目前为止您是如何解决的?

标签: mips pipelining


【解决方案1】:

我们来看第一个:

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2020-10-23
    • 2019-02-19
    • 2011-08-17
    • 2014-12-17
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2013-07-10
    • 2013-11-22
    相关资源
    最近更新 更多