看板 Grad-ProbAsk 關於我們 聯絡資訊
大家好 想請教一個問題 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: https://i.imgur.com/kooTtKU.jpg 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