2016-07-10 32 views
0
   | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
ADD R1,R2,R3 | IF | ID | EX | MA | WB | | | | | | | 
SUB R4,R1,R3 | | IF | ID | EX | MA | WB | | | | | | 
AND R6,R1,R7 | | | IF | ID | EX | MA | WB | | | | | 
OR R8,R1,R9 | | | | IF | ID | EX | MA | WB | | | | 
XOR R10,R1,R11 | | | | | IF | ID | EX | MA | WB | | | 

所以我明白,看這個所有後續指令取決於R1值被寫入。所以要解決這個問題,我需要插入攤位。MIPS指令時序和固定危險

AFTER (Using Stalls) 
       | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
ADD R1,R2,R3 | IF | ID | EX | MA | WB | | | | | | | 
SUB R4,R1,R3 | | IF | ID | * | * | EX | MA | WB | | | | 
AND R6,R1,R7 | | | IF | ID | EX | MA | WB | | | | | 
OR R8,R1,R9 | | | | IF | ID | EX | MA | WB | | | | 
XOR R10,R1,R11 | | | | | IF | ID | EX | MA | WB | | | 

這樣做還是需要在內存訪問發生後插入另一個停頓?

如果我使用轉發,時間會是什麼樣子?我怎麼做?

+0

AFAICT,'SUB'檔位直到後期纔會啓動。它會在'T2'處做'IF',因爲它甚至不知道它需要一個攤位,直到在'T3'處的'ID'之後。也就是說,'SUB'應該看起來像' - IF ID * * EX MA WB',因爲它只是'SUB'的'EX',必須停止到'T6'(在ADD的'WB'後面]在'T5')。其他指令的「IF」和「ID」沒有任何延遲,所以它們也「按期」啓動。如果您同意,我會在繼續分析之前修改第二個圖表。 –

+0

我認爲,我提出了建議。那是你在說什麼? – brandenwagner

+0

關閉。現在重複其他人。 「IF」和「ID」不會失速,所以他們會進入正常的位置。因此,'AND'的'IF'是'T3'(_not_'T5')等等...... –

回答

0

攤位,時間是這樣的:

   | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
ADD R1,R2,R3 | IF | ID | EX | MA | WB | | | | | | | 
SUB R4,R1,R3 | | IF | ID | * | * | EX | MA | WB | | | | 
AND R6,R1,R7 | | | IF | ID | * | EX | MA | WB | | | | 
OR R8,R1,R9 | | | | IF | ID | EX | MA | WB | | | | 
XOR R10,R1,R11 | | | | | IF | ID | EX | MA | WB | | | 

這是因爲只有初始ADD寫入R1。而且,指令的目標寄存器和後續指令的源寄存器之間不再有重疊。

隨着轉發的ADD(即R1)的輸出將可其在T3EX階段(即它是提供給任何後續指令在T4開始)

所以,即使是最由於轉發,硬按下指令(SUB)的EX階段的值可用於T4

因此,轉發時,時間與初始圖(即轉發修復危險)相同。