【问题标题】:MIPS instruction timing and fixing hazardMIPS 指令时序和修复风险
【发布时间】: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,因为它甚至不知道在IDT3 之后它需要停顿。也就是说,SUB 应该看起来像 - IF ID * * EX MA WB,因为只有 SUBEX 必须停止到 T6(在 ADDWB 之后在 T5)。其他指令的IFID 没有延迟,因此它们也“按计划”启动。如果您同意,我会在继续分析之前修改第二张图表。
  • 我想我做了你建议的改变。你说的是这个吗?
  • 关闭。现在重复其他人。 IFID 不会拖延,所以它们会在常规位置进行。因此,ANDIFT3不是 T5)等等......

标签: mips


【解决方案1】:

有档位,时间如下:

               |  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 之后可用(即它可用于开始时的任何后续指令T4)

因此,由于转发,即使是最困难的指令(SUB)也会在T4 处具有可用于其EX 阶段的值。

因此,对于转发,时序与初始图相同(即转发修复了危险)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2012-08-17
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多