2013-07-31 30 views
1

我剛剛觸及pipeline理論幾個小時。也許這是一個簡單的問題,但我真的需要你的幫助。我們爲什麼要將NPC存儲在管道註冊表中?

我知道我們應該存儲mem[pc]IF/ID流水線寄存器中讀取階段,我們將在下一階段對其進行解碼,還應該更新獲取階段,我們將通過該更新PC下一個週期feteh下一條指令PC,但我真的不明白爲什麼我們也應該把NPC存入管道註冊表。

下面

Computer Organization and Design衍生的解釋,我不明白這一點。

This incremented address is also saved in the IF/ID pipeline register in case it is needed later for an instruction, such as beq

回答

3

原因在管道節省NPC是因爲有時在管道中的下一個指令將要使用它。

看那beq定義。它必須計算分支的目標地址。有些分行使用目標地址的固定位置,如「分行至地址A」。這被稱爲「分支到絕對地址」。

另一種分支的是一個「相對」分支,在該分支目標不是絕對的地址,但偏移,即「分支向前X指令。」 (如果X是負數,則最終成爲後向分支。)現在考慮這一點:從哪裏前進/後退?來自NPC。也就是說,對於一個相對分支指令,新的PC值的計算是:

NewPC = NPC + X 

爲什麼架構包括執行相對轉移的能力嗎?因爲它佔用更少的空間。讓我們說,X具有一個小的值,像16,一種用於一個絕對分支到目標地址所需要的存儲是:

sizeof(branch opcode) + sizeof(address) 

但對於偏移16的相對分支存儲只有:

sizeof(branch opcode) + 1  ## number of bytes needed to hold the value 16! 

當然,可以通過增加用於保存偏移值的字節數來適應更大的偏移量。其他類型的節省空間,增加範圍的表示也是可能的。

0

如果異常點位於分支延遲槽中,則需要兩臺PC重新啓動執行: 指向異常指令(延遲槽),另一個指向下一條指令。第二臺PC需要 ,因爲延遲時隙後面的指令可能是下一個 順序指令(如果分支未被採用)或分支目標(如果分支被採用)。 儘管MIPS具有相同的問題,但在重新啓動執行之前,它依靠軟件將異常點備份到先前的 指令(當它是分支時)這是可行的,因爲分支機構是 idempotent。

Credits:http://www.cs.berkeley.edu/~kubitron/courses/cs252-S09/handouts/oldquiz/sp09-quiz1_soln.pdf

相關問題