关于 MIPS R3051 流水线行为的查询(MIPS-I 架构)
Query about MIPS R3051 pipeline behaviour (MIPS-I architecture)
作为我大学项目的一部分,我目前正在软件中实现 MIPS R3051。
我在 IDT 的程序员手册中注意到,它指定计算指令可以在其 RD 阶段访问管道中位于它们前面的其他计算指令的结果,即使前面的指令尚未将其结果提交给WB阶段的相关注册。这是通过 "special logic within the execution engine" 完成的,以防止出现停顿。
我的问题是这是否也适用于非计算指令(例如跳转指令)?
举个例子:如果一条ADD指令在它的ALU阶段计算一个值给r1,在RD的流水线后面有一条JR[r1]指令,JR指令会得到:
(a) r1 的旧内容
或者
(b) "special logic" 是否允许将 r1 的新值转发给它?或者
(c) 在 WB 处正确提交 r1 之前,管道是否会停止?
如果在别处问到这个问题(我还没有发现),我深表歉意。非常感谢。
此致,
菲尔
这里的关键是牢记这个"special logic"只是一个优化:它使事情变得更快,这里绕过一些东西以避免停顿,但它仍然必须确保结果不变.否则将不可能或至少难以使用此硬件进行编程。
因此,要回答您的问题,您会看到情况 (b) 或 (c),但绝不会看到情况 (a)。
作为我大学项目的一部分,我目前正在软件中实现 MIPS R3051。
我在 IDT 的程序员手册中注意到,它指定计算指令可以在其 RD 阶段访问管道中位于它们前面的其他计算指令的结果,即使前面的指令尚未将其结果提交给WB阶段的相关注册。这是通过 "special logic within the execution engine" 完成的,以防止出现停顿。
我的问题是这是否也适用于非计算指令(例如跳转指令)?
举个例子:如果一条ADD指令在它的ALU阶段计算一个值给r1,在RD的流水线后面有一条JR[r1]指令,JR指令会得到:
(a) r1 的旧内容 或者
(b) "special logic" 是否允许将 r1 的新值转发给它?或者
(c) 在 WB 处正确提交 r1 之前,管道是否会停止?
如果在别处问到这个问题(我还没有发现),我深表歉意。非常感谢。
此致, 菲尔
这里的关键是牢记这个"special logic"只是一个优化:它使事情变得更快,这里绕过一些东西以避免停顿,但它仍然必须确保结果不变.否则将不可能或至少难以使用此硬件进行编程。
因此,要回答您的问题,您会看到情况 (b) 或 (c),但绝不会看到情况 (a)。