2014-10-04 58 views
1

考慮執行以下5級流水線中的指令 (IF-ID-EX-MEM-WB) 其中「SD N(R2),R1」表示從寄存器R1到存儲器位置M [N + R2],「ADD R3,R1,R2」執行操作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 

是否有第4次循環時I1危險是否在MEM階段,ID階段是I2,因爲兩個指令都想同時訪問R2? 或者是沒有危險,因爲R2只在ID階段讀取,因此它不在MEM階段訪問?

回答

0

所有的寄存器都是在ID階段讀取的,因此在嘗試讀取寄存器時沒有危險。

這個確實表示如果他們想要讀取的寄存器尚未完成,某些指令將不得不停止在ID中。這就是「繞過」可以提供幫助的地方。