【问题标题】:MIPS Structural HazardMIPS 结构危害
【发布时间】:2016-07-22 10:04:40
【问题描述】:

我正在尝试了解 MIPS 管道内衬以及与之相关的危害。我无法想象 MIPS 指令中的结构性危害是什么样的。

我了解到,这是两个(或更多)指令的情况 需要同时使用给定的硬件资源。而且我之前已经看到过以时钟周期显示的示例。但是谁能提供一个简单的 MIPS 指令集示例供我查看?我很难在网上找到一个。只需查看大量有关数据危害的示例,这不是我想要的。谢谢!

【问题讨论】:

    标签: mips mips32 pipelining


    【解决方案1】:

    这可能有效,但我不是 MIPS 的大佬:

    add $t0, $t1, $t2 
    sw  $t3, 0($t4)
    sub $t5, $t6, $t7
    sub $t8, $t9, $t0
    sw  $t0, 0($s0)
    

    【讨论】:

    • 危险在哪里?
    • 在第 4 行,我认为是 $t0。
    【解决方案2】:

    你很难遇到这个问题,因为它通常在硬件架构中解决......

    这里有两个例子:

    1. 假设在第 5 阶段 (WB) 期间对寄存器文件 (RF) 进行了写入,并且在第 2 阶段 (ID) 对 RF 上的同一寄存器进行了读取同时。这是一个结构性风险,因为两条指令试图在相同的时钟周期访问相同的资源(将读取什么值?)。这可以解决(在硬件中),例如,通过将 RF 访问分成两个时钟相位,在 HIGH 上写入并在 LOW 上读取。此外,如果您考虑一下,结构性风险就是为什么 RF 中有单独的 2 个读端口和 1 个写端口。

    2. 假设正在从 内存(第 1 阶段,IF)获取指令,并且在第 4 阶段 (MEM) 对 内存 进行了另一次读/写.同样,在同一周期访问相同的资源。通过分离数据和指令存储器(哈佛架构)解决了这个问题。这对您来说可能很明显,但您可以查找普林斯顿建筑并查看统一记忆的示例。

    因此,如果我们以第一个示例为例:任何带有加载(lw)命令的指令集与在其他两个指令之后的 R 类型命令(如 add)相同的寄存器都可以解决问题:

    lw $8, 100($9)
    add $10, $11, $12
    add $10, $11, $12
    add $10, $8, $12
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-08-24
      • 1970-01-01
      • 2014-06-20
      • 2012-10-14
      • 2019-06-03
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      相关资源
      最近更新 更多