我试图了解MIPS管道衬里及其相关危害。我在制作MIPS指令中的 结构性危险 时遇到了问题。
我已经读到这是两个(或更多)指令的情况 需要同时使用给定的硬件资源。我之前看过时钟周期中的例子。但是,任何人都可以提供一个简单的MIPS指令集示例供我查看吗?我很难在网上找到一个。只是看到很多数据危害的例子,而这不是我想要的。谢谢!
答案 0 :(得分:4)
这个问题很难解决,因为它通常在硬件架构中得到解决......
以下是两个例子:
假设在第5阶段(WB)期间对寄存器文件(RF)进行写入,并且同时读取第2阶段(ID)上的RF上的相同寄存器< / strong>即可。这是一种结构性危险,因为两条指令试图在同一时钟周期访问同一资源(将读取什么值?)。这可以解决(在HW中),例如,通过将RF访问分成两个时钟相位,写入HIGH并读取LOW。此外,如果您考虑一下,结构性危险就是为什么RF中有单独的2个读端口和1个写端口。
假设正在从内存(第1阶段,IF)获取指令,并对第4阶段(MEM)上的内存进行另一次读/写操作。同样,在同一周期访问相同的资源。这是通过分离数据和指令存储器来解决的(哈佛架构)。它看起来很明显,但您可以查找普林斯顿架构并查看统一内存的示例。
因此,如果我们以第一个例子为例:任何一组带有load(lw)命令的指令到与另一个指令之后的R类型命令(如add)相同的寄存器就可以解决问题:
lw $8, 100($9)
add $10, $11, $12
add $10, $11, $12
add $10, $8, $12
希望有所帮助。
答案 1 :(得分:0)
这可能有用,但我不是一个大MIPS人:
add $t0, $t1, $t2
sw $t3, 0($t4)
sub $t5, $t6, $t7
sub $t8, $t9, $t0
sw $t0, 0($s0)