通过流水线理解MIPS程序集

时间:2015-11-26 15:12:47

标签: assembly mips pipeline

使用MIPS架构的标准5级流水线并假设某些指令相互依赖,如何将管道气泡插入到以下汇编代码中?

I1: lw   $1, 0($0)
I2: lw   $2, 4($0)
I3: add  $3, $1, $2      ; I1 & I2 -> I3
I4: sw   $3, 12($0)      ; I3 -> I4
I5: lw   $4, 8($0)
I6: add  $5, $1, $4      ; I1 & I5 -> I6
I7: sw   $5, 16($0)      ; I6 -> I7

首先我们插入一个泡泡,我们

I1:  IF   ID   EX   MEM   WB 
I2:       IF   ID   EX    MEM
I3:            IF   ID    --
I4:                 IF    ID

正如您所看到的,当I3停止时,I4可以继续进行解码。不是吗?接着,

I1:  IF   ID   EX   MEM   WB 
I2:       IF   ID   EX    MEM   WB
I3:            IF   ID    --    EX   MEM  WB
I4:                 IF    ID    --   --   EX   MEM   WB
I5:                       IF    ID   EX   MEM  WB 
I6:                             IF   ID   --   EX    MEM   WB
I7:                                  IF   ID   --    --    EX   MEM   WB

我认为使用MIPS的标准管道是可能的,但有些人说,无论何时插入气泡,整个管道都会停滞不前。怎么能搞清楚?

1 个答案:

答案 0 :(得分:3)

在上一个问题中你使用的是Patterson的书,所以让我借一个图表来说:

hazard detection unit

这里的重要部分是危险检测单元,它会引起气泡。如果您已阅读随附文本,您知道它执行该操作的方法是

  • NOP输出控制信号,
  • 暂停IF (保持IF / ID缓冲区固定,不要推进PC)

这意味着您的管道图不会发生这种情况。每个周期都不会有新指令进入。还要考虑如果你有不同的代码,你可以安排硬件危险发生,正如杰斯特所描述的那样。所以这显然很糟糕,解决方案是停止IF。

这是会发生的事情:

I1:  IF   ID   EX   MEM   WB 
I2:       IF   ID   EX    MEM   WB
I3:            IF   ID    --    --    --
I3:                 IF    ID    --    --    --
I3:                       IF    ID    EX    MEM   WB
I4:                             IF    ID    --    --    --