我一直在使用 5 阶段流水线进行一些低级编程。但我遇到了障碍。
假设此图http://i.imgur.com/7kTFi.png 和 mips 代码:
长 4,1000 美元(6 美元)
瑞郎 $4,2000($6)
实际会发生什么?我以为会有气泡,我在 ID 阶段计算了两个气泡。
我们可以通过向新的转发单元添加输入来修复它吗?我在哪里可以添加多路复用器和新数据路径以避免气泡+错误?
我一直在使用 5 阶段流水线进行一些低级编程。但我遇到了障碍。
假设此图http://i.imgur.com/7kTFi.png 和 mips 代码:
长 4,1000 美元(6 美元)
瑞郎 $4,2000($6)
实际会发生什么?我以为会有气泡,我在 ID 阶段计算了两个气泡。
我们可以通过向新的转发单元添加输入来修复它吗?我在哪里可以添加多路复用器和新数据路径以避免气泡+错误?
你是对的,会有两个气泡。
假设数据转发:
1. IF ID EX MM WB
2. IF S S ID EX MM WB
(S 表示失速或气泡)。
您无法“修复”它,因为无论如何您都必须等待MM阶段结束才能获得 1000(6 美元)的值。如果没有数据转发,情况可能会更糟,您必须等到WB阶段,这意味着 3 个档位。
防止这种行为的唯一方法是让智能编译器以不同的方式调度这两条指令(即通过在它们之间添加其他指令来分隔它们)。
请注意,实际上,该程序没有真正的目的(在内存地址 [1000+Regs[$6]] 处获取值,并将其复制到地址 [2000+Regs[$6]] 处)
您需要 MEM 到 ALU 转发