【发布时间】:2016-07-10 17:40:01
【问题描述】:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
ADD R1,R2,R3 | IF | ID | EX | MA | WB | | | | | | |
SUB R4,R1,R3 | | IF | ID | EX | MA | WB | | | | | |
AND R6,R1,R7 | | | IF | ID | EX | MA | WB | | | | |
OR R8,R1,R9 | | | | IF | ID | EX | MA | WB | | | |
XOR R10,R1,R11 | | | | | IF | ID | EX | MA | WB | | |
所以我明白,查看所有后续指令取决于写入的 R1 值。所以要解决这个问题,我需要插入档位。
AFTER (Using Stalls)
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
ADD R1,R2,R3 | IF | ID | EX | MA | WB | | | | | | |
SUB R4,R1,R3 | | IF | ID | * | * | EX | MA | WB | | | |
AND R6,R1,R7 | | | IF | ID | EX | MA | WB | | | | |
OR R8,R1,R9 | | | | IF | ID | EX | MA | WB | | | |
XOR R10,R1,R11 | | | | | IF | ID | EX | MA | WB | | |
在内存访问发生后我需要插入另一个停顿吗?
如果我使用转发,时间会是什么样子?我该怎么做?
【问题讨论】:
-
AFAICT,
SUB的摊位要晚一点才会开始。它会仍然在T2处执行IF,因为它甚至不知道在ID处T3之后它需要停顿。也就是说,SUB应该看起来像- IF ID * * EX MA WB,因为只有SUB的EX必须停止到T6(在ADD的WB之后在T5)。其他指令的IF和ID没有延迟,因此它们也“按计划”启动。如果您同意,我会在继续分析之前修改第二张图表。 -
我想我做了你建议的改变。你说的是这个吗?
-
关闭。现在重复其他人。
IF和ID不会拖延,所以它们会在常规位置进行。因此,AND的IF是T3(不是T5)等等......
标签: mips