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

修复管道中的负载使用危险问题(MIPS),mips,pipeline,forwarding,pipelining,Mips,Pipeline,Forwarding,Pipelining,我一直在做一些5阶段流水线的低级编程。但我遇到了一个障碍 假设这个图 以及mips代码: lw$41000$6 西南$42000$6 实际会发生什么?我假设会有气泡,我数了两个气泡进入ID阶段 我们可以通过向新的转发单元添加输入来修复它吗?我在哪里可以添加多路复用器和新的数据路径以避免冒泡+错误?你是对的,将有两个冒泡 假设数据转发: S的意思是停滞或泡沫 您无法“修复”它,因为在任何情况下,您都必须等待MM阶段结束时的值为1000$6。如果没有数据转发,情况可能更糟,因为您必须等到WB阶段,这

我一直在做一些5阶段流水线的低级编程。但我遇到了一个障碍

假设这个图 以及mips代码:

lw$41000$6

西南$42000$6

实际会发生什么?我假设会有气泡,我数了两个气泡进入ID阶段


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

你是对的,将有两个冒泡

假设数据转发:

S的意思是停滞或泡沫

您无法“修复”它,因为在任何情况下,您都必须等待MM阶段结束时的值为1000$6。如果没有数据转发,情况可能更糟,因为您必须等到WB阶段,这意味着3次暂停

防止这种行为的唯一方法是让智能编译器以不同的方式调度这两条指令,即通过在指令之间添加其他指令来分隔指令


请注意,实际上,程序在内存地址[1000+Regs[$6]]处没有实际用途的get值,并在地址[2000+Regs[$6]]处复制它。

您需要从MEM到ALU转发。

您可以使用从MM/WB中间寄存器到ID/EX中间寄存器的转发。你只需要一个摊位,对吗?
1. IF ID EX MM WB

2.    IF S  S  ID EX MM WB