MIPS sw依赖

时间:2015-05-30 10:23:45

标签: dependencies mips

我对MIPS代码和依赖性有疑问。  如果我有以下MIPS代码。

没有任何转发单位如何运作?

需要插入多少个摊位?

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 个答案:

答案 0 :(得分:1)

我认为你很亲密

ADD $t5, $t4, $t5

在ALU中执行,需要为下一行写回$t5。这意味着MEM和WB的停顿,因此2个周期。

SUB $t5, $t5, $t3 

也在ALU中执行,这就是它停顿了两个周期的原因。

SW  $t5, 24($t0)

现在问题来了。我相信寄存器是在ID上读取的,这意味着此处的停顿将再次为2个周期,等待$t5的WB。可能看起来不是这样,但在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 | -   | -     | -     |
+----+-----+-------+-------+