修复管道中的负载使用危险问题(MIPS)

时间:2015-02-26 21:38:52

标签: mips pipeline forwarding pipelining

我一直在使用5阶段流水线进行一些低级编程。但我遇到了障碍。

假设此图http://i.imgur.com/7kTFi.png 和mips代码:

lw $ 4,1000($ 6)

sw $ 4,2000($ 6)

实际会发生什么?我以为会有气泡,我在ID阶段计算了两个气泡。

我们可以通过向新的转发单元添加输入来修复它吗?我在哪里可以添加多路复用器和新数据路径以避免冒泡+错误?

2 个答案:

答案 0 :(得分:0)

你是对的,会有两个泡泡。

假设数据转发:

1. IF ID EX MM WB

2.    IF S  S  ID EX MM WB

(S表示失速或泡沫)。

你无法修复'它因为在任何情况下你必须等待 MM 阶段的结束才能使值为1000($ 6)。如果没有数据转发,你甚至可能要等到 WB 阶段,这意味着3个档位。

阻止此类行为的唯一方法是让智能编译器以不同的方式安排这两个指令(即 space 通过添加其他指令)。

请注意,该程序具有无用途在内存地址获取值[1000 + Regs [$ 6]],并将其复制到地址[2000 + Regs [ $ 6]]

答案 1 :(得分:0)

您需要MEM到ALU转发