2012-12-30 117 views
6

我需要多少個攤位才能正確執行以下說明。我對我所做的有點困惑,所以我在這裏看到專家的答案。裝配流水線

lw $1,0($2); 

beq $1,$2,Label; 

請注意,檢查分支是否會發生將在解碼階段完成。但是在這種情況下$ 1的beq的源寄存器rs將在lw指令的寫回階段後更新。所以我們需要在存儲器階段將新數據從存儲器轉發到beq指令的解碼階段。

階段是這樣的:

enter image description here

IF:指令的讀取; ID:指令解碼 例如:執行/ ALU階段 MEM:在目的地存儲數據寄存器

這是我迄今所做的:從內存 WB讀取數據。

當lw處於執行階段並且在解碼階段beq時,失速條件變爲真並且產生氣泡。現在lw處於Mem階段,由於氣泡,beq仍處於解碼階段,失速狀態再次變爲真,第二個失速發生。現在lw處於WB(寫回)狀態,beq處於解碼階段,但仍然是數值1美元將在WB階段結束時更新,這最終意味着beq仍然會以1美元的錯誤價值工作。

+0

「檢查分支是否會發生」 - 您的意思是檢查。根據http://www.csc.gatech.edu/~copeland/3055-00/lab/lab-2/MIPS_pipes.JPEG分支在EX中完成;並且新的PC被轉發到MEM的PC寄存器。 – osgx

+0

由於延遲分支,您需要添加1個額外的攤位。所以你需要7個攤位。 – Blood

+0

它如何成爲7檔?最多的攤位可以是2 – Alfred

回答

2

看起來您需要第三個暫停以允許在解碼之前將寄存器寫回寄存器文件,或將數據從寫回階段轉發到解碼階段。無論哪種方式,如果要寫入的寄存器等於rs,則應該執行該操作。

你似乎是因爲在解碼階段,這是良好的早期檢測的分支,因爲它節省了獲取這無論如何都會被清空不必要的指令,需要太多的攤位,但你必須有正確的危險探測去這一點。

+0

好。那就是我所想的。我和我的教授發生了爭執,他說我只需要兩個攤位,而不是爲了上面的情況而回信。這就是我感到困惑的原因 – Alfred

+0

@Alfred你的教授可能假設寄存器文件是異步的,它會在下一個時鐘之前更新,但這可能不是你正在使用或想要使用的內存類型。 – iabdalkader