[計組] pipeline疑問 交大102

作者: Gabino (YenC)   2016-11-09 12:26:10
最近讀到pipeline有些疑問
希望板上的大大能幫小弟解答
1.) load-use data hazard
在白算盤上看到的forwarding hardware 可分成以下四種情況
1a. EX/MEM.RegisterRd = ID/EX.RegisterRs
1b. EX/MEM.RegisterRd = ID/EX.RegisterRt
2a. MEM/WB.RegisterRd = ID/EX.RegisterRs
2b. MEM/WB.RegisterRd = ID/EX.RegisterRt
想請問load-use的情況使用stall+forwarding來解決的話
其中forwarding 可否歸類於上述四種
還是白算盤上的forwarding hardware並沒有寫出這種情形的實作
2.)題目如下
http://i.imgur.com/uERHSsL.jpg
小弟有參考到前面討論的文章
請參考這篇#1KCePaVb (Grad-ProbAsk)
也更正了a,b小題的答案
但做到這題的「分支是否發生在ID階段決定」和解答以及先前參考文章算得不同,看了許
久仍不確定哪裡錯
以下是我做出來的答案
http://i.imgur.com/iEKKZdN.jpg
有想過是不是在ID階段決定的前提是拿到正確的$s1
但如果等到C6的EX再從C5前饋過來亦可正常執行beq指令?
麻煩板上大大幫忙解惑
感激不盡
作者: gary19941208   2016-11-09 20:37:00
感謝大大,都忘了那個mux,雖然實際上是rt不過名字都是rd
作者: ken52011219 (呱)   2016-11-09 18:31:00
不會 pipeline我也都忘記了QQ..
作者: Gabino (YenC)   2016-11-09 18:09:00
感謝大大 懂了~ 看到那個mux了QAQ怎麼計組每張圖都東簡化一點西簡化一點... 找到快起笑
作者: ken52011219 (呱)   2016-11-09 17:25:00
Load use 時 會先stall 也因此不用再帶入forwarding抱歉講錯 Rd不會為0 而是由IF/EXE RegisterRs Regis-更正 是由 ID/EXE RegisterRt,RegisterRd mux控制根據Mux來決定 哪一個為EXE/MEM RegisterRd 及MEM/WB RegisterRd 隨意找一張擁有pipeline的圖便知http://i.imgur.com/qPNu07m.jpg 也不能隨便找啦@@啊啊啊 IF/ID
作者: Gabino (YenC)   2016-11-09 17:25:00
那lw要怎在MEM/WB 前饋給 ID/EX ?
作者: ken52011219 (呱)   2016-11-09 17:17:00
我大概知道哪邊誤解了 所以Rd帶入0 不合forwarding但對於整個系統不會有衝突 我的意思是這個
作者: Gabino (YenC)   2016-11-09 17:06:00
可是lw不是沒有Rd嘛?
作者: gary19941208   2016-11-09 16:10:00
噢對,lw要看rt,所以不行
作者: ken52011219 (呱)   2016-11-09 16:48:00
Forwarding看Rd 呀@@ 跟hazard Detect Unit搞混了吧If (ID/EX.MemRead and ((ID/EX.Register.Rt = IF/ID.RegisterRs)or(ID/EX.RegisterRt =IF/ID.RigisterRt))) then stall Pipeline在ID中偵測是否為load-use 後 EXE 偵測是否需要For-warding 這兩段偵測是不同的 沒有衝突若在ID偵測到是Load-use 就先Stall一次
作者: Gabino (YenC)   2016-11-09 15:43:00
以lw連beq來說的話 forwarding是該看 MEM/WB.RegisterRt ?應該說從lw前饋回去都要看Rt不是嘛?可是上述四種都是只有從Rd看
作者: gary19941208   2016-11-09 15:31:00
2.a或2.b吧不過 如果是lw連beq然後又是在ID決定的話就不是上述四種了
作者: ken52011219 (呱)   2016-11-09 15:29:00
第一個問題 是可以呀 並沒有衝突
作者: Gabino (YenC)   2016-11-09 14:56:00
感謝兩位大大的指點 第一個問題 不知道有沒有什麼看法 還是覺得我語焉不詳...
作者: ken52011219 (呱)   2016-11-09 14:39:00
再難的題目把原理攤開來看基本上都可以解決剩下的就是解題速度了
作者: gary19941208   2016-11-09 14:38:00
應該吧...在哪個階段決定只是硬體不一樣,但是程式要正確執行input當然要是正確的資料
作者: Gabino (YenC)   2016-11-09 14:17:00
大概了解兩位想表達的意思 若beq在X階段決定是否分支 前提是在X階段 須拿到正確的資料在書上都找不太到相關說明 不知道是不是太顯而易見.....
作者: gary19941208   2016-11-09 14:00:00
Beq 要等到C6才能用forwarding 從lw的MEM拿到正確的s1,所以C6時beq還在ID,C7時add才會IF
作者: ken52011219 (呱)   2016-11-09 13:51:00
試想 Forwarding 的用處是將ID傳進EX錯誤的值提前先把上一個指令OR上上個指令的正確值 直接傳回「EX」的input端 那把BEQ運算提前改為由ID Stage就先行運算是否 Forwarding在「ID」內就失去功用了我認為 BEQ 必須乖乖等到 LW到WB才可以開始運算 @@許久未碰Pipeline 有誤請更正 謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com