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 | | |
這樣做還是需要在內存訪問發生後插入另一個停頓?
如果我使用轉發,時間會是什麼樣子?我怎麼做?
AFAICT,'SUB'檔位直到後期纔會啓動。它會在'T2'處做'IF',因爲它甚至不知道它需要一個攤位,直到在'T3'處的'ID'之後。也就是說,'SUB'應該看起來像' - IF ID * * EX MA WB',因爲它只是'SUB'的'EX',必須停止到'T6'(在ADD的'WB'後面]在'T5')。其他指令的「IF」和「ID」沒有任何延遲,所以它們也「按期」啓動。如果您同意,我會在繼續分析之前修改第二個圖表。 –
我認爲,我提出了建議。那是你在說什麼? – brandenwagner
關閉。現在重複其他人。 「IF」和「ID」不會失速,所以他們會進入正常的位置。因此,'AND'的'IF'是'T3'(_not_'T5')等等...... –