【问题标题】:Organizing pipeline in MIPS在 MIPS 中组织管道
【发布时间】:2015-07-25 12:06:34
【问题描述】:

我不确定以下属性如何影响 5 阶段 MIPS 设计(IF、ID、EX、MEM、WB)的管道执行。我只是需要清理一下。

  • 只有 1 个内存端口
  • 没有数据转发。
  • 分支停顿到 * 阶段结束

1个内存端口是否意味着我们在读/写内存时无法获取或写入(即lw,sw上的MEM阶段你不能进入IF或其他MEM)? 如果没有转发,这是否意味着一条指令在它所依赖的前一条指令之后或在 WB 阶段之后才会进入 ID 阶段? 我知道分店摊位是什么意思

【问题讨论】:

    标签: mips pipeline


    【解决方案1】:

    一个常见的假设是,您可以在周期的前半部分写入,而在周期的后半部分读取

    假设 I1 是您的第一条指令,而 I2 是您的第二条指令,而 I2 正在使用 I1 正在修改。

    • 只有 1 个内存端口。 这意味着您不能在管道的两个不同阶段同时读取或写入内存。 例如,如果 I1 处于 MEM 阶段,另一条指令不能同时处于 IF 阶段时间,因为两者都需要内存访问。

    • 无数据转发。数据转发反映了在I1EX阶段结束时,您转发I2ID 循环数据。 因此,无转发意味着管道必须等待 I1WB 阶段转到 ID I2 阶段。假设你可以和上一条指令的WB阶段同时进入ID阶段,因为WB会写入内存在周期的前半部分,ID 将在周期的后半部分从内存中读取。

    • 分支停止直到 EX 阶段结束。这是一个常见的假设,不使用分支预测技术。它只是说明分支之后的指令必须等到EX 阶段结束 才能开始ID 阶段。回想一下,下一条要执行的指令的地址只有在分支指令的EX阶段才知道。

    【讨论】:

    • 对于 1 个内存端口,因为 R-type 在 MEM 阶段不做任何事情(基本上跳过它)。当 R 型在 MEM 中时,我们可以有一个 IF 阶段吗?我有理由认为我们可以
    • 是的,当 R 型在 MEM 中时,您可以有一个 IF 阶段。
    【解决方案2】:

    注释:IF 和 MEM 访问不同的内存段。一个是数据存储器(.data),另一个是指令存储器(.code.text)。它是这样设计的,以便在 IF 和 MEM 期间访问内存不会导致结构停顿。 .data 使用的区域是堆栈使用的区域,堆栈传统上放置在.data 扇区的“末端”。这就是为什么如果在将数据保存到堆栈之前不从堆栈指针地址中减去,则会冒着覆盖程序代码的风险。由于 MIPS 允许您手动指定堆栈地址,因此有些人选择将堆栈放在“结束前”位以避免出现问题,如果他们知道他们将有空间并且不会覆盖 MEM 中的变量。例如,将堆栈放置在 0x300 而不是 WinMIPS64 中的 0x400。我不确定这是否是好的做法。但我听说有人这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2019-10-24
      相关资源
      最近更新 更多