【发布时间】:2016-07-22 10:04:40
【问题描述】:
我正在尝试了解 MIPS 管道内衬以及与之相关的危害。我无法想象 MIPS 指令中的结构性危害是什么样的。
我了解到,这是两个(或更多)指令的情况 需要同时使用给定的硬件资源。而且我之前已经看到过以时钟周期显示的示例。但是谁能提供一个简单的 MIPS 指令集示例供我查看?我很难在网上找到一个。只需查看大量有关数据危害的示例,这不是我想要的。谢谢!
【问题讨论】:
标签: mips mips32 pipelining
我正在尝试了解 MIPS 管道内衬以及与之相关的危害。我无法想象 MIPS 指令中的结构性危害是什么样的。
我了解到,这是两个(或更多)指令的情况 需要同时使用给定的硬件资源。而且我之前已经看到过以时钟周期显示的示例。但是谁能提供一个简单的 MIPS 指令集示例供我查看?我很难在网上找到一个。只需查看大量有关数据危害的示例,这不是我想要的。谢谢!
【问题讨论】:
标签: mips mips32 pipelining
这可能有效,但我不是 MIPS 的大佬:
add $t0, $t1, $t2
sw $t3, 0($t4)
sub $t5, $t6, $t7
sub $t8, $t9, $t0
sw $t0, 0($s0)
【讨论】:
你很难遇到这个问题,因为它通常在硬件架构中解决......
这里有两个例子:
假设在第 5 阶段 (WB) 期间对寄存器文件 (RF) 进行了写入,并且在第 2 阶段 (ID) 对 RF 上的同一寄存器进行了读取同时。这是一个结构性风险,因为两条指令试图在相同的时钟周期访问相同的资源(将读取什么值?)。这可以解决(在硬件中),例如,通过将 RF 访问分成两个时钟相位,在 HIGH 上写入并在 LOW 上读取。此外,如果您考虑一下,结构性风险就是为什么 RF 中有单独的 2 个读端口和 1 个写端口。
假设正在从 内存(第 1 阶段,IF)获取指令,并且在第 4 阶段 (MEM) 对 内存 进行了另一次读/写.同样,在同一周期访问相同的资源。通过分离数据和指令存储器(哈佛架构)解决了这个问题。这对您来说可能很明显,但您可以查找普林斯顿建筑并查看统一记忆的示例。
因此,如果我们以第一个示例为例:任何带有加载(lw)命令的指令集与在其他两个指令之后的 R 类型命令(如 add)相同的寄存器都可以解决问题:
lw $8, 100($9)
add $10, $11, $12
add $10, $11, $12
add $10, $8, $12
希望对您有所帮助。
【讨论】: