【问题标题】:MIPS pipeline with beq following a lw instruction?在 lw 指令之后带有 beq 的 MIPS 流水线?
【发布时间】:2020-10-23 17:59:48
【问题描述】:

我正在尝试在完全绕过的 MIPS 处理器上提取停顿。我有点困惑,当它遵循 lw 时,它将如何在像 beq 这样的条件分支上工作。我现在我们无法从 lw 中检索值,直到它被写入内存,但我也知道分支需要在解码阶段检索其条件寄存器。 假设管道的阶段是 F D E M W,其中哪一个是正确的转发路径?

lw $t0, 0($a0)     F D E M W 
                         |            # M-D bypass
beq $t0, $0, ret     F D D E M W      # mandatory stall from the lw
lw $t0, 0($a0)     F D E M W 
                           |          # W-E bypass
beq $t0, $0, ret     F D D E M W      # mandatory stall from the lw
lw $t0, 0($a0)     F D E M W 
                         \
                          \         #M-E bypass
beq $t0, $0, ret     F D D E M W      # mandatory stall from the lw

【问题讨论】:

    标签: assembly mips pipeline


    【解决方案1】:

    根据How does MIPS I handle branching on the previous ALU instruction without stalling?,条件分支需要将其输入转发到 EX 阶段。

    所以这里是 M->E 转发,从 M 的末尾到 E 的开头。您的第三张图有一个注释,上面写着“ME”,但您实际上已经 画了从 E 的结尾(或 M 的开头?)转发到 E。

    lw $t0, 0($a0)     F D E M W 
                              \           # M-E bypass
    beq $t0, $0, ret     F D D E M W      # mandatory stall from the lw
    

    (我不确定将它显示在 E 中是否更正确,例如 FDEEMW;我不这么认为,因为 Decode 负责确定是否停止。)


    在您的偏移图中,您可以在其中显示时间延迟的阶段,垂直线表示时间向后移动。所以1和2是不可能的,可以排除。只有 1 个停顿周期,您不能向后前进 3 个阶段的长度(记住它是从一个阶段的 end 到另一个阶段的 start,所以它是 3 个阶段计算两端)。虽然公平地说,如果回写发生在前半个周期,而寄存器读取发生在第二个半周期,那么它可以工作。

    转发总是 E,无论是从M还是E。解码是确定需要什么转发并读取寄存器文件以将数据馈送到E的阶段。如果需要转发,您只需直接前往需要它的地方,而不是更早的阶段,以最大限度地减少延迟/停顿周期数。

    (如果您想为存储的存储数据操作数转发到 M 是可能的;E 只需要存储地址操作数。我想我已经看到了在前面的问答中提到的转发到 M所以我不会在这里深入挖掘。)


    这当然假设 MIPS 具有互锁负载。经典 MIPS I (R2000)不会检测到 RAW 危险并且不会停止,因此 beq 将使用旧值 $t0。除非加载在缓存中丢失,否则管道将停止直到加载到达,使用刚刚加载的值。即经典 MIPS 我有一个 load delay slot;不要在加载后立即在指令中使用加载结果。

    后来 MIPS 添加了互锁,因此软件可以避免使用 NOP 填充,从而在编译器找不到任何东西来填充加载延迟槽的情况下节省 I-cache 占用空间。分支延迟槽在架构上是可见的,并且在不破坏机器代码兼容性的情况下无法删除,因此需要更长的时间才能摆脱(MIPS32r6 / MIPS64r6 reorganized opcodes 并引入了新的分支指令)。

    【讨论】:

      猜你喜欢
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 2011-08-17
      • 2014-12-17
      • 2019-08-07
      • 2021-10-31
      相关资源
      最近更新 更多