[計組] pipeline疑問 交大102

看板Grad-ProbAsk作者 (YenC)時間7年前 (2016/11/09 12:26), 編輯推噓3(3046)
留言49則, 3人參與, 最新討論串1/1
最近讀到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指令? 麻煩板上大大幫忙解惑 感激不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.130.102 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1478665573.A.E8C.html

11/09 13:51, , 1F
試想 Forwarding 的用處是將ID傳進EX錯誤的值提前先
11/09 13:51, 1F

11/09 13:52, , 2F
把上一個指令OR上上個指令的正確值 直接傳回「EX」的
11/09 13:52, 2F

11/09 13:54, , 3F
input端 那把BEQ運算提前改為由ID Stage就先行運算
11/09 13:54, 3F

11/09 13:55, , 4F
是否 Forwarding在「ID」內就失去功用了
11/09 13:55, 4F

11/09 13:56, , 5F
我認為 BEQ 必須乖乖等到 LW到WB才可以開始運算 @@
11/09 13:56, 5F

11/09 13:57, , 6F
許久未碰Pipeline 有誤請更正 謝謝
11/09 13:57, 6F

11/09 14:00, , 7F
Beq 要等到C6才能用forwarding 從lw的MEM拿到正確
11/09 14:00, 7F

11/09 14:00, , 8F
的s1,所以C6時beq還在ID,C7時add才會IF
11/09 14:00, 8F

11/09 14:17, , 9F
大概了解兩位想表達的意思 若beq在X階段決定是否分支 前
11/09 14:17, 9F

11/09 14:17, , 10F
提是在X階段 須拿到正確的資料
11/09 14:17, 10F

11/09 14:18, , 11F
在書上都找不太到相關說明 不知道是不是太顯而易見.....
11/09 14:18, 11F

11/09 14:38, , 12F
應該吧...在哪個階段決定只是硬體不一樣,但是程式
11/09 14:38, 12F

11/09 14:38, , 13F
要正確執行input當然要是正確的資料
11/09 14:38, 13F

11/09 14:39, , 14F
再難的題目把原理攤開來看基本上都可以解決
11/09 14:39, 14F

11/09 14:41, , 15F
剩下的就是解題速度了
11/09 14:41, 15F

11/09 14:56, , 16F
感謝兩位大大的指點 第一個問題 不知道有沒有什麼看法 還
11/09 14:56, 16F

11/09 14:56, , 17F
是覺得我語焉不詳...
11/09 14:56, 17F

11/09 15:29, , 18F
第一個問題 是可以呀 並沒有衝突
11/09 15:29, 18F

11/09 15:31, , 19F
2.a或2.b吧
11/09 15:31, 19F

11/09 15:35, , 20F
不過 如果是lw連beq然後又是在ID決定的話就不是上述
11/09 15:35, 20F

11/09 15:35, , 21F
四種了
11/09 15:35, 21F

11/09 15:43, , 22F
以lw連beq來說的話 forwarding
11/09 15:43, 22F

11/09 15:44, , 23F
是該看 MEM/WB.RegisterRt ?
11/09 15:44, 23F

11/09 15:57, , 24F
應該說從lw前饋回去都要看Rt不是嘛?
11/09 15:57, 24F

11/09 15:58, , 25F
可是上述四種都是只有從Rd看
11/09 15:58, 25F

11/09 16:10, , 26F
噢對,lw要看rt,所以不行
11/09 16:10, 26F

11/09 16:48, , 27F
Forwarding看Rd 呀@@ 跟hazard Detect Unit搞混了吧
11/09 16:48, 27F

11/09 16:49, , 28F
If (ID/EX.MemRead and ((ID/EX.Register.Rt = IF/ID
11/09 16:49, 28F

11/09 16:50, , 29F
.RegisterRs)or(ID/EX.RegisterRt =IF/ID.RigisterRt
11/09 16:50, 29F

11/09 16:51, , 30F
))) then stall Pipeline
11/09 16:51, 30F

11/09 16:53, , 31F
在ID中偵測是否為load-use 後 EXE 偵測是否需要For-
11/09 16:53, 31F

11/09 16:53, , 32F
warding 這兩段偵測是不同的 沒有衝突
11/09 16:53, 32F

11/09 16:56, , 33F
若在ID偵測到是Load-use 就先Stall一次
11/09 16:56, 33F

11/09 17:06, , 34F
可是lw不是沒有Rd嘛?
11/09 17:06, 34F

11/09 17:17, , 35F
我大概知道哪邊誤解了 所以Rd帶入0 不合forwarding
11/09 17:17, 35F

11/09 17:18, , 36F
但對於整個系統不會有衝突 我的意思是這個
11/09 17:18, 36F

11/09 17:25, , 37F
那lw要怎在MEM/WB 前饋給 ID/EX ?
11/09 17:25, 37F

11/09 17:25, , 38F
Load use 時 會先stall 也因此不用再帶入forwarding
11/09 17:25, 38F

11/09 17:45, , 39F
抱歉講錯 Rd不會為0 而是由IF/EXE RegisterRs Regis-
11/09 17:45, 39F

11/09 17:46, , 40F
更正 是由 ID/EXE RegisterRt,RegisterRd mux控制
11/09 17:46, 40F

11/09 17:47, , 41F
根據Mux來決定 哪一個為EXE/MEM RegisterRd 及
11/09 17:47, 41F

11/09 17:48, , 42F
MEM/WB RegisterRd 隨意找一張擁有pipeline的圖便知
11/09 17:48, 42F

11/09 17:52, , 43F
也不能隨便找啦@@
11/09 17:52, 43F

11/09 18:02, , 44F
啊啊啊 IF/ID
11/09 18:02, 44F

11/09 18:09, , 45F
感謝大大 懂了~ 看到那個mux了QAQ
11/09 18:09, 45F

11/09 18:10, , 46F
怎麼計組每張圖都東簡化一點西簡化一點... 找到快起笑
11/09 18:10, 46F

11/09 18:31, , 47F
不會 pipeline我也都忘記了QQ..
11/09 18:31, 47F

11/09 20:37, , 48F
感謝大大,都忘了那個mux,雖然實際上是rt不過名字
11/09 20:37, 48F

11/09 20:37, , 49F
都是rd
11/09 20:37, 49F
文章代碼(AID): #1O8gLbwC (Grad-ProbAsk)