0

嗨假设以下指令:

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 呢?

4

1 回答 1

1

因为从内存中读取的要加载到 R1 的值还没有写入寄存器文件。如果您要从 R1 读取值,您将获得 R1<-M1 指令之前包含的值 R1。新的 R1 值存储在 ME1 之后的 ME->WB 流水线寄存器中。

于 2012-01-15T16:22:00.780 回答