MIPS 结构危害

MIPS Structural Hazard

我正在尝试了解 MIPS 流水线以及与之相关的危险。我无法想象 MIPS 指令中 结构危险 的样子。

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

这可能行得通,但我不是一个大 MIPS 人:

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

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

这里有两个例子:

  1. 假设在第 5 阶段 (WB) 对寄存器文件 (RF) 进行了写入,并在第 2 阶段 (ID) 对 RF 上的同一寄存器进行了读取 同时。这是一种结构性风险,因为两条指令试图在同一时钟周期访问同一资源(将读取什么值?)。这可以(在 HW 中)解决,例如,通过将 RF 访问分成两个时钟相位,在高电平时写入,在低电平时读取。而且,如果你仔细想想,结构上的危险是为什么在RF中有单独的2个读端口和1个写端口。

  2. 假设正在从 内存 (第 1 阶段,IF)中获取一条指令,并且对 执行另一条 read/write第 4 阶段 (MEM) 上的内存。同样,在同一个周期访问同一个资源。这是通过分离数据和指令存储器(哈佛架构)解决的。这对您来说可能看起来很明显,但您可以查找 Princeton Architecture 并查看统一内存的示例。

因此,如果我们以第一个示例为例:任何一组指令将加载 (lw) 命令加载到与 R 型命令(如 add)中相同的寄存器,紧随其后的是其他两条指令。技巧:

lw , 100()
add , , 
add , , 
add , , 

希望对您有所帮助。