通过流水线了解MIPS组装

麻将

对于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的标准管道实现,但是有人说,每当插入气泡时,整个管道就会停滞。如何解决?

哈罗德

在上一个问题中,您正在使用Patterson的书,所以让我借用其中的一张图:

危害检测单元

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

  • NOP发出控制信号,
  • 暂停IF(保持IF / ID缓冲区固定,并且不前进PC)

这意味着您的流水线图不可能那样发生。每个周期都不会有新的指令输入。还应考虑到,如果您使用的是不同的代码,则可以安排发生硬件危险,如Jester所述。因此,这显然很糟糕,解决方案使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    --    --    --

ETC。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章