MIPS指令定时和固定危险

时间:2016-07-10 17:40:02

标签: mips

               |  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 |    |    |

这是否有效或者我是否需要在发生内存访问后插入另一个档位?

如果我使用转发,时间会是什么样的?我该怎么做?

1 个答案:

答案 0 :(得分:0)

对于摊位,时间看起来像:

               |  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 |    |    |

这是因为只有初始ADD写入R1。并且,指令的目标寄存器和后面指令的源寄存器之间不再存在重叠。

通过转发,ADD的输出(R1)将在EX T3的{​​{1}}阶段之后 可用于T4

开头的任何后续指令

因此,即使是最难按的指令(SUB),由于转发,EX的{​​{1}}阶段的值也可用。

因此,通过转发,时间与初始图表相同(即转发可以解决危险)。