2016-11-03 87 views
2

首先,抱歉我的英文不好。這個問題是我的計算機體系結構課程教科書中的一個問題,我在網上找到了答案,但仍然無法找到詳細信息。計算機體系結構流水線檔位

以下是五階段(取指,解碼,執行,存儲,寫)指令階段的單流水線微架構沒有轉發機制。 所有的操作都是除LW和SW一個週期是1 + 2,而分公司是1 + 1

Loop:    C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 ... 
LW R3, 0(R0) F D E M - - W 
LW R1, 0(R3)  F D - - - E M - - W 
ADDI R1, R1, #1   F - - - D - - - E M W 
SUB R4, R3, R2       F - - - D E M W 
SW R1, 0(R3)           F D W M ... 
BNZ R4, Loop             F D E ... 
... 

而且我有幾個問題如下。

  1. 爲什麼第二條指令可以在C2中啓動D?正如我所看到的,D階段包括「寄存器讀取」,但前面的指令回寫到R3直到C7。

  2. 與前一個類似,導致第三個D在C7開始,E從C11開始的原因是什麼?

  3. 爲什麼4th inst必須從C7而不是C4開始?

此問題源於「計算機體系結構:定量方法5e」一書,示例3.11。

+0

你可以編輯問題的鏈接到你找到的地方嗎? –

回答

0

Classic RISC pipeline wiki article是非常好的。如果你沒有,請檢查它。

  1. 爲什麼第二條指令可以在C2中啓動D? D包含reg-read,但前面的指令不會寫回到R3,直到C7。

我不知道,我還沒有對經典RISC管線花了大量的時間。根據我們對此和ADDI的看法,它看起來像寄存器讀取發生在E階段。

這完美地解釋了E拖延,直到前面的負載回寫。如果您確定在您正在研究的管道的D階段中,reg讀取會發生,那麼此解決方案與您的管道不匹配;對於一個不同的管道來說是正確的,直到Execute纔會讀取寄存器。

第三次的D從C7開始,E從C11開始?

流水線的D階段被先前的指令佔用,直到C7,此時它可以解碼。

R1是沒有準備好,直到週期11,在該點從the data can be forwarded先前指令的存儲器階段,所以ADDI的Execute可以在先前指令並行發生與回寫。這被稱爲「旁路」。

旁路可以讓ALU操作以1個週期延遲運行,因此您可以在下一條指令中使用ADD輸出而不會出現停頓。

  1. 爲什麼4th inst必須從C7開始,而不是C4?

因爲先前的指令在提取階段停滯,並且它是有序的流水線;沒有亂序執行。

+0

謝謝,如果寄存器讀取在'EXE'階段完成,那麼指令階段可以完全解釋! – zbqv

1

看起來你的管道在執行內存相關操作(LW)時會凍結整個系統,除非我無法想到ADDI無法在C4中執行其解碼的有效原因。我並不是說它對加載操作是有效的,以凍結整個執行,但這似乎是「唯一」的邏輯解釋。指令2可以在C3中執行其解碼,但它必須等到指令1已將其數據寫回到R1。這就是爲什麼第二條指令的執行延遲到C7

順便說一句,當你說你已經找到了「網」的答案是從一個可信的來源嗎?

+0

我認爲OP在D階段發生reg讀是錯誤的。 ADDI延遲的原因與您確定的指令2被延遲的原因相同:輸入未就緒,沒有任何奇怪的「凍結整個機器」的東西。 –

+0

@PeterCordes如果是這種情況,爲什麼'SUB R4,R3,R2 F - - - D E M W' –

+0

@PeterCordes如果是這種情況,爲什麼SUB指令的解碼被延遲? –

1

爲什麼第二條指令可以在C2中啓動D? D包含reg-read,但前面的指令不會寫回到R3,直到C7。

Ans--這是因爲MIPS簡單pipleline中的DECODER階段有兩個部分/子階段。

DEC = DECODE + RR(REGISTER READ)

指令可以被解碼的,則操作碼可以讀出和解碼,但是由於在這種情況下的依賴,RR將停止,直到第一加載指令執行(取R3從內存中)和簡單的轉發在C7下一個負載可以執行。

爲了避免結構性危害,在兩個子階段中進行了DECODE階段的破解。 如果您再次閱讀「計算機體系結構:定量方法」圖,您將看到虛線和實線被有意繪製以顯示整體工作由2部分決定(DECODE OPCODE + REG READ)。

另外兩個問題我同意@Peter Cordes

希望這有助於。 Jaymin