推 sarsman: 不會,因為clock time是根據執行時間最久的stage來設定09/22 12:42
clock time 不會變沒錯,我指的是execution time~
→ sarsman: 就算t1還沒算出來,第二行指令也會被卡在DE/EX之間,等到09/22 12:45
→ sarsman: 下個clock來了才會跟t1一起輸入EX做運算09/22 12:45
我會這樣覺得是因為張凡上冊p527的第四小題答案有提到,而且如果卡在ID/EX Pipeline
register的話 forwarding 似乎就沒辦法在當下的那個clock來做 forwarding 的判斷
※ 編輯: leoone (1.164.146.245), 09/22/2017 12:55:26
推 sarsman: 考古7第四小題?
09/22 13:19
對~ 因為他有說from beginning 但那個cycle 是NOP在 EXE 但add的rs rt 一樣會流到E
XE的MUX 進到ALU 但ALU的control signal為0所以不作用,不知道這樣理解這題對不對XD
※ 編輯: leoone (1.164.146.245), 09/22/2017 13:43:35
※ 編輯: leoone (1.164.146.245), 09/22/2017 13:44:27
推 sarsman: 我想法是那一階段的九個控制信號都被flush成0了,故為NOP09/22 14:38
→ sarsman: *第6 cycle時的EXE 09/22 14:43
根據白算盤來看,只有control signal會清成0不會整根pipeline register都清掉,所以
還是會有資料流過去,只是都會卡在control signal為0的input前面
※ 編輯: leoone (1.164.146.245), 09/22/2017 14:47:58
→ ken52011219: 你要重考@@?09/22 14:51
K大 對QQ 都只找到3年的教授XDD
推 sarsman: 的確資料一樣會流進ALU,只是因控制信號都變0而無影響09/22 14:55
→ sarsman: 不過這個題目的情況是stall了一個cycle,才有這種狀況吧09/22 14:57
→ sarsman: lw緊接add、add緊接beq才需要stall 09/22 14:59
→ sarsman: 還有lw緊接beq,要stall兩個cycle09/22 15:00
※ 編輯: leoone (49.217.116.4), 09/22/2017 15:03:57
S大 這題最後張凡改的答案感覺還是怪怪的 Src1跟2的 初始應該是跟著cycle5的穩態 但
張凡給的感覺是 cycle6lw 跟add已經穩態後的control signal@@
※ 編輯: leoone (49.217.116.4), 09/22/2017 15:07:04
→ ken52011219: 有題目嗎 09/22 15:06
→ sarsman: HYVp.jpg 09/22 15:08
→ leoone: K大 第四題~ 09/22 15:09
→ ken52011219: 我太久沒碰可能有點生疏所以會講錯 QQ 09/22 15:23
→ ken52011219: 當第4 Cycle 時 lw & add 到達 ID & EXE 時 09/22 15:23
→ ken52011219: 位於ID 的「 hazard Detection」偵測到會data hazard 09/22 15:24
→ ken52011219: 因此此時Stall指令執行(flush all signal=xx) 09/22 15:25
→ ken52011219: 此時已經於 4th cycle 末 ~ 5 cycle 初,因此就只考 09/22 15:26
→ ken52011219: 慮 5th Cycle 被 stall (EXE signal=XX) 09/22 15:27
→ ken52011219: 而到了 6th Cycle 則藉由forwarding signal就恢復原 09/22 15:30
→ ken52011219: 樣了 09/22 15:30
→ ken52011219: 講錯 (ID Signal = XX) 09/22 15:33
→ ken52011219: 簡單來看,被Stall的stage 是第一個ID ,其Signal是 09/22 15:34
→ ken52011219: 被暫停的,而第二個ID 才是正常執行,不知道是不是 09/22 15:35
→ ken52011219: L大對這個地方有疑慮@@? 09/22 15:35
→ ken52011219: 想稍微更正一下 forwarding 可能會被誤會的說法 09/22 15:36
→ ken52011219: 應該說 hazard detection 偵測到 data hazard的條件 09/22 15:37
→ ken52011219: 已經消失了,故signal 由1改0 而不是靠著forwarding 09/22 15:38
→ ken52011219: signal 才恢復正常 09/22 15:38
→ leoone: 咦 k大說的data hazard 應該是第3跟4的instruction吧XD 09/22 16:00
→ leoone: 那應該是stall是在5被hazard dection才對? 09/22 16:00
→ ken52011219: 我怎麼記得 Hazard dection 條件式是IF & ID @@ 09/22 16:07
→ ken52011219: 這樣不會拖到 lw 進 alu 時才被dection到 09/22 16:08
→ ken52011219: detection XD 09/22 16:09
→ leoone: 算是在ID跟EXE 偵測的 EXE的lw跟ID的instruction做hazard 09/22 16:12
→ leoone: detection IF的時候 還不知道哪個reg啦XDD 09/22 16:12
→ ken52011219: ID/IF pipeline register & ID/EXE pipeline regist 09/22 16:21
→ ken52011219: 還沒進 EXE stage 剛剛稍微查了一下 09/22 16:21
→ ken52011219: 4th cycle(lw: ID stage) 偵測到Data hazard 09/22 16:29
→ ken52011219: add: IF stage 09/22 16:31
→ ken52011219: 5th cycle ,stall ID stage(signal=xx)讓lw先跑 09/22 16:32
→ ken52011219: 6th cycle hazard Detection沒偵測到Data hazard 09/22 16:32
→ ken52011219: 因此接收IF/ID pipeline register的暫存值(含signal) 09/22 16:33
→ ken52011219: 執行add 在 ID stage中未完成的工作 09/22 16:34
→ leoone: K大我想問另一個問題! hazard detection跟forwarding uni 09/22 16:52
→ leoone: t都是在pipeline register拉出所需的值嗎? 而不是在stage 09/22 16:52
→ leoone: 的線路上? 09/22 16:52
→ ken52011219: 對,它們都是從pipeline reg. 獨自拉出的值 09/22 16:55
→ leoone: 囧 到現在才知道 看圖一直以為是“順便”從stage拉一條線 09/22 17:14
→ leoone: 到unit上的... 09/22 17:14