[理工] [計組] forwarding unit

看板Grad-ProbAsk作者 (善良老百姓)時間9年前 (2016/08/03 21:42), 9年前編輯推噓4(4016)
留言20則, 1人參與, 最新討論串1/1
晚安 各位 張凡上完 forwarding unit 時有補充 課本在下圖忘記補了 2-1 MUX (P-479) 補上了應該是這下圖這樣? 張凡說直接補 但這樣設計跑以下的 code: #1 add t0, s5, s6 #2 lw t0, 0(s2) ====== 當 #1 在 MEM stage,#2 在 EX stage === ALUrc 設1 lw此時的 rt -> t0, rs -> s2 因為 #1 的 rd 是 t0 且和 EX stage 的 rt 相同 -> 故 forwarding unit 啟動 ALU 最後卻挑了 #1 的 t0 讀進去,原本的 immediate 被忽略掉 0.0 而導致資料不正確 想確認一下我的想法有沒有疏漏的地方? ----- rt------------| 0 | ----- | |-------| 0 | sign extend---| 1 | | | ----- --->| 1 |-------------(ALU) | | | | ALUrc | ->| 2 | | | |___| _________________ | | ^ | | | | |____| Forwarding unit | | | |_________________| | | | |___ MEM/WB rd |_____ EX/MEM rd -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.251.85 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1470231756.A.030.html

08/04 11:11, , 1F
其實我看不太懂意思 但我覺得你誤會 forwarding unit
08/04 11:11, 1F

08/04 11:11, , 2F
是會造成 datahazard的原因@@?
08/04 11:11, 2F

08/04 11:43, , 3F
會造成forwading unit啟動的原因 主要是 當 add在ex
08/04 11:43, 3F

08/04 11:43, , 4F
執行s5+s6時 lw 已經需要t0在add運算完後的值
08/04 11:43, 4F

08/04 11:45, , 5F
此時forwarding 啟動 並在 add MEM STAGE 時 提前將s
08/04 11:45, 5F

08/04 11:45, , 6F
5+s6的值拉回來
08/04 11:45, 6F
問題就是出在這裡,ALU原本是要算 lw 的 memory address 的 故 ALUsrc 選擇了位移量要和 s2 做運算,可是 forwarding 啟動後 卻會選擇前面一個 stage 的 s5+s6(也就是t0) 餵給 ALU 這樣最後會變成 s2 + s5 + s6 當成 memory address 餵給 MEM (其實只要s2而已) ※ 編輯: kyuudonut (220.132.251.85), 08/04/2016 12:12:39

08/04 12:44, , 7F
只要 ALU 下方input 的前面的多工器Mux 接在01的pin
08/04 12:44, 7F
哪一個 MUX 接誰的 01 pin @@

08/04 12:44, , 8F
即可, 而 我有點忘記張凡那本怎麼畫整個PIPELINE
08/04 12:44, 8F

08/04 12:46, , 9F
但 FORWARDING 的圖中 前面那個多工器的 OUTPUT
08/04 12:46, 9F

08/04 12:47, , 10F
又再接一顆多工器判定是否是要傳到MEM'S WRITE DATA
08/04 12:47, 10F
這一行是指 Rs,Rt 挑一個的那個 MUX 嗎?

08/04 12:49, , 11F
GOOGLE FORWARDING UNIT的圖片第二張 就是我再講的
08/04 12:49, 11F
※ 編輯: kyuudonut (220.132.251.85), 08/04/2016 13:43:04

08/04 14:01, , 12F
等我個
08/04 14:01, 12F

08/04 14:27, , 13F
鉛筆路徑就是這次
08/04 14:27, 13F

08/04 14:27, , 14F
所用到的
08/04 14:27, 14F

08/04 14:28, , 15F
黃色和鉛筆的使用差別 在於instruction 隔一行還是
08/04 14:28, 15F

08/04 14:28, , 16F
兩行吧 我想
08/04 14:28, 16F
這我清楚 我問題主要是產生於 張凡說 原圖少了一顆 ALUrc 的 MUX 只是張凡這段是用口述 我以為是把 ALUrc 接在 forwarding 的 MUX 前面,就如同我原文畫的那張圖 只是這樣會出問題(如同前述) 但原來只要把 ALUrc 接在 forwarding 的 MUX 後面就解決了阿... (你畫的那張圖)

08/04 14:34, , 17F
其實在第四章開頭就有說到 這是抽象化設計 會將系統
08/04 14:34, 17F

08/04 14:34, , 18F
底層的細節暫時隱藏 所以我們看到的東西都是簡化過
08/04 14:34, 18F

08/04 14:34, , 19F
08/04 14:34, 19F
另外黃色那條 我其實沒有想到 memory 的 write data 耶 畢竟我舉的例是 lw 阿XD 不過我倒是沒想過 forwarding 的這條線要怎麼拉 (tkb張凡也沒講) 感謝! ※ 編輯: kyuudonut (220.132.251.85), 08/04/2016 15:07:26

08/04 15:16, , 20F
誒靠 哈哈 想成SW了 抱歉抱歉睡昏去了
08/04 15:16, 20F
文章代碼(AID): #1NeVJC0m (Grad-ProbAsk)