嗨假设以下说明:
R1<-M1
R2<-M2
R3<-R1*R2
M3<-R3
现在我们将创建一个像管道一样的管道,而不会绕过:[XXX:bubble]
IF1 ID1 EX1 ME1 WB1
IF2 ID2 EX2 ME2 WB2
IF3 XXX XXX XXX ID3 EX3 WB3
XXX XXX XXX XXX IF4 ID4 EX4 WB4
我们将创建一个像管道一样旁路的管道:[XXX:bubble]
IF1 ID1 EX1 ME1 WB1
IF2 ID2 EX2 ME2 WB2
IF3 XXX ID3 EX3 WB3
XXX XXX IF4 ID4 EX4 WB4
我们应该等到WB1和WB2完成,然后我们才能执行指令3。 因此,在旁路方法中,我们将在EX1和EX2电平之后将R1和R2值存储到缓冲区中。
但是... 在旁路方式中,在EX1之后,我们怎样才能获得寄存器R1的值?我们没有达到WB1的价值。为什么我们需要缓冲区,为什么不直接读取R1?
答案 0 :(得分:1)
因为从要加载到R1的内存中读取的值尚未写入寄存器文件。如果要从R1读取值,则在R1&lt; -M1指令之前得到值R1。在ME1之后,新的R1值存储在ME-> WB流水线寄存器中。