作者wacheck (94不愛喝水)
看板Grad-ProbAsk
標題[理工] forwarding的問題
時間Sat Dec 15 15:20:38 2018
大家好
想請教一個問題
forwarding的偵測碼中有分為Ex hazard跟mem hazard
(分別是看執行指令與下一、下下一指令有沒有hazard)
EX Hazard
if (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0) and (EX/MEM.RegisterRd ==
ID/EX.RegisterRs)) ForwardA = 10
if (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0) and (EX/MEM.RegisterRd ==
ID/EX.RegisterRt)) ForwardB = 10
MEM Hazard
if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠ 0) and (MEM/WB.RegisterRd ==
ID/EX.RegisterRs)) and not(Ex Hazard)ForwardA = 01
if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠ 0) and (MEM/WB.RegisterRd ==
ID/EX.RegisterRt)) and not(Ex Hazard) ForwardB = 01
-------------------
以下是我的認知:
mem hazard的偵測碼的成立條件必須要not (Ex hazard)
也就是兩個不會同時發生?
那今天有沒有可能有這種情況:
and $3 $3 $6 IF ID EXE MEM WB
or $0 $7 $3 IF ID EXE MEM WB
xor #7 $3 $0 IF ID EXE MEM WB
這樣and指令跟xor指令的$3要前饋
但同時or指令跟xor指令的$0要前饋?
假設就照上述偵測碼 那這樣fowfardingA跟fowardingB要分別設什麼?
(計組好難RRRRRR)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.196.132
※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1544858440.A.0C7.html
※ 編輯: wacheck (59.115.196.132), 12/15/2018 15:37:31
推 skyHuan: 如果你的$0不是0號暫存器就兩條都會forwarding 12/15 15:43
推 skyHuan: 指令三在EX stage會用到$3跟$0的結果 12/15 15:47
→ skyHuan: 但指令1, 2這時還沒寫回暫存器所以需要前饋 12/15 15:47
→ skyHuan: 紅色那條是來自指令1的前饋$3給rs用 12/15 15:47
→ skyHuan: 藍色那條是來自指令2的前饋$0給rt用 12/15 15:47
→ skyHuan: 看起來應該應該要設成forwardingB=10, forwardingA=01 12/15 15:53
推 anonimo: 在C.C.(clock cycle) 3時 forwardA=00 forwardB=10 此時 12/15 16:17
→ anonimo: and的$3傳給or的$3 在C.C.4時 forwardA=01 forwardB=10 12/15 16:17
→ anonimo: 此時and的$3傳給or的$3且or的$0傳給xor的$0 12/15 16:17
→ anonimo: 然後你的例子舉的不太好 因為$0不會做forwarding 12/15 16:22
→ wacheck: 對耶$0是存0 ORZ 我想確認一下not那個條件是在何種情形 12/15 16:47
→ wacheck: 像(1)and $1,$2,$3 (2)and $1,$4,$5 (3)and $6,$1,$6 12/15 16:50
→ wacheck: 這種看似(1),(3)指令有相依但實際上是2,3有相依 這樣的 12/15 16:51
→ wacheck: 情形才需要加not條件嗎? 12/15 16:51
→ anonimo: Yes 12/15 18:34
→ wacheck: 感謝多次救援 12/16 14:16