与商店的管道危险处理

时间:2014-10-04 19:14:01

标签: memory pipeline

考虑以下5阶段管道中的指令执行 (IF - ID - EX - MEM - WB) 其中" SD N(R2),R1"表示将数据从寄存器R1存储到存储位置M [N + R2]," ADD R3,R1,R2和#34;执行操作R1 + R2并将结果存储在R3中,NOP是气泡。

据我所知,ID阶段会读取寄存器。

所以,如果我有以下说明:

I1: SD 0(R2), R6
NOP
I2: ADD R3, R1, R2

然后执行如下(我希望看起来很清楚)

         R2 is read
             ^     Store M[0+R2] <- R6
             ^          ^
I1:   | IF | ID | EX | MEM | WB |
NOP:       |////|////|////|////|////|
I2:             | IF | ID | EX | MEM | WB |
                        v
                     R2 is read

当I1在MEM阶段而I2在ID阶段时,第4个周期是否存在危险,因为两个指令都想同时访问R2? 或者没有危险,因为R2仅在ID阶段读取,因此不能在MEM阶段访问?

1 个答案:

答案 0 :(得分:0)

所有寄存器都在ID阶段读取,因此尝试读取寄存器没有危险。

这个 意味着如果他们想要读取的寄存器还没有完成,某些指令必须在ID中停止。那就是&#34;绕过&#34;可以帮忙。