→ ken52011219: 其實我看不太懂意思 但我覺得你誤會 forwarding unit 08/04 11:11
→ ken52011219: 是會造成 datahazard的原因@@? 08/04 11:11
推 ken52011219: 會造成forwading unit啟動的原因 主要是 當 add在ex 08/04 11:43
→ ken52011219: 執行s5+s6時 lw 已經需要t0在add運算完後的值 08/04 11:43
→ ken52011219: 此時forwarding 啟動 並在 add MEM STAGE 時 提前將s 08/04 11:45
→ ken52011219: 5+s6的值拉回來 08/04 11:45
問題就是出在這裡,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
→ ken52011219: 只要 ALU 下方input 的前面的多工器Mux 接在01的pin 08/04 12:44
哪一個 MUX 接誰的 01 pin @@
→ ken52011219: 即可, 而 我有點忘記張凡那本怎麼畫整個PIPELINE 08/04 12:44
→ ken52011219: 但 FORWARDING 的圖中 前面那個多工器的 OUTPUT 08/04 12:46
→ ken52011219: 又再接一顆多工器判定是否是要傳到MEM'S WRITE DATA 08/04 12:47
這一行是指 Rs,Rt 挑一個的那個 MUX 嗎?
推 ken52011219: GOOGLE FORWARDING UNIT的圖片第二張 就是我再講的 08/04 12:49
※ 編輯: kyuudonut (220.132.251.85), 08/04/2016 13:43:04
推 ken52011219: 等我個 08/04 14:01
→ ken52011219: 所用到的 08/04 14:27
→ ken52011219: 黃色和鉛筆的使用差別 在於instruction 隔一行還是 08/04 14:28
→ ken52011219: 兩行吧 我想 08/04 14:28
這我清楚
我問題主要是產生於 張凡說 原圖少了一顆 ALUrc 的 MUX
只是張凡這段是用口述
我以為是把 ALUrc 接在 forwarding 的 MUX 前面,就如同我原文畫的那張圖
只是這樣會出問題(如同前述)
但原來只要把 ALUrc 接在 forwarding 的 MUX 後面就解決了阿... (你畫的那張圖)
→ ken52011219: 其實在第四章開頭就有說到 這是抽象化設計 會將系統 08/04 14:34
→ ken52011219: 底層的細節暫時隱藏 所以我們看到的東西都是簡化過 08/04 14:34
→ ken52011219: 的 08/04 14:34
另外黃色那條 我其實沒有想到 memory 的 write data 耶
畢竟我舉的例是 lw 阿XD
不過我倒是沒想過 forwarding 的這條線要怎麼拉 (tkb張凡也沒講)
感謝!
※ 編輯: kyuudonut (220.132.251.85), 08/04/2016 15:07:26
→ ken52011219: 誒靠 哈哈 想成SW了 抱歉抱歉睡昏去了 08/04 15:16