考虑以下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阶段访问?
答案 0 :(得分:0)
所有寄存器都在ID阶段读取,因此尝试读取寄存器没有危险。
这个 意味着如果他们想要读取的寄存器还没有完成,某些指令必须在ID中停止。那就是&#34;绕过&#34;可以帮忙。