作者:
q1qip123 (wtlee)
2018-01-01 19:06:39想請問
若發生load_use data hazard的,則load的下個指令add必須停在ID ,再下個cycle來才能在EX正確運算
http://i.imgur.com/ZgnPHbj.jpg
那發生branch跟前面指slti資料相依時,為甚麼是停在ID而不是IF
http://i.imgur.com/88Bx8kd.jpg
(圖表分別在張凡課本(上)553跟534)
作者: PunchShadow (PunchShadow) 2018-01-01 20:59:00
要IF完才會知道有沒有Data Hazard吧
作者:
q1qip123 (wtlee)
2018-01-01 21:02:00停在if代表解瑪完了啊
作者: PunchShadow (PunchShadow) 2018-01-01 21:02:00
所以所有Stall都會停在ID(如果我沒記錯的話)對呀,所以要IF後在Hazard Unit裡面再去設定Stall然後Hazard Control Unit我記得是在ID Stage裡
作者:
q1qip123 (wtlee)
2018-01-01 21:15:00但是這樣不就不能重新從if拿到正確的指令了嗎?
作者: PunchShadow (PunchShadow) 2018-01-01 21:19:00
不用重新拿指令,它只是在等資料而已
作者:
q1qip123 (wtlee)
2018-01-01 21:19:00啊啊 我錯了 我重新想一次
作者: PunchShadow (PunchShadow) 2018-01-01 21:20:00
除非是碰到Control Hazard才要Flush掉IF的指令
重看管線圖 beq可以再ID stage判斷完 IF連指令都還不知道吧
作者:
q1qip123 (wtlee)
2018-01-01 21:40:00因為課本沒畫branch資料相依的圖,只有文字敘述而已那這樣其實我也可以把hazard detection移到ex stage只是比較浪費這樣?
作者: PunchShadow (PunchShadow) 2018-01-01 21:58:00
不行,因為branch在ID就已經判斷出下個指令若在EX才進行Hazard訊號線的處理已經太遲
作者:
q1qip123 (wtlee)
2018-01-01 22:14:00本來是想說連判斷也改到EX,不過這樣branch發生就又要flush,好像不會更好我瞭解了 感謝!!!新年快樂XD
作者:
moneylon (bencool)
2018-01-04 23:20:00小弟想順便請問一下 上面那張圖的第4小題 src1 src2 是怎麼判斷的呢