2015-05-30 108 views
1

我有关于MIPS代码和依赖关系的问题。 如果我有以下MIPS代码。MIPS sw依赖关系

它如何在没有任何转发单元的情况下工作?

需要插入几个档位?

7 ADD $t5, $t4, $t5 
8 SUB $t5, $t5, $t3 
9 SW $t5, 24($t0) 

在我看来:

线7-8 WAW,RAW依赖T5 2周期的暂停

线8-9 RAW依赖T5,1个周期的暂停

是吗?还是我错过了什么?

第7行和第9行之间是否存在任何依赖关系?

回答

1

我想你靠近

ADD $t5, $t4, $t5 

执行ALU,并需要写回下一行$t5。这意味着MEM和WB失速,因此2个周期。

SUB $t5, $t5, $t3 

也在ALU中执行,这就是为什么它停滞了2个周期。

SW $t5, 24($t0) 

现在问题来了。我相信寄存器是在ID上读取的,这意味着这里的停顿将再次是2个周期,等待WB的$t5。它可能不是如此,但直到SUB的WB,SW可能不得不在ID等待。 MIPS pipeline

编辑: 我写下的管道,使其更容易看到的。

+----+-----+-------+-------+ 
| | ADD | SUB | SW | 
+----+-----+-------+-------+ 
| 1 | IF | -  | -  | 
| 2 | ID | IF | -  | 
| 3 | EX | ID | IF | 
| 4 | MEM | stall | stall | 
| 5 | WB | stall | stall | 
| 6 | - | EX | ID | 
| 7 | - | MEM | stall | 
| 8 | - | WB | stall | 
| 9 | - | -  | EX | 
| 10 | - | -  | MEM | 
| 11 | - | -  | WB | 
| 12 | - | -  | -  | 
+----+-----+-------+-------+ 
+0

感谢回答,如果添加5个的NOP 7 ADD $ T5,$ T4,$ T5 2nops 8 SUB $ T5,$ T5,$ T3 3nops 9 SW $ T5,24($ T0 ) 那么它工作正常? – eclipse0922

+1

呃,在第9行之前,我还会放2个nops,原因在最后一段。 – user35443

+0

对不起,只是困惑。 SUB的结果在WB阶段回写。如果我在第9行之前放2个节点,第9行的ID节将与SUB的WB节点处于同一个周期。 – eclipse0922