[理工] [計組] Hazard疑問

作者: Max112358 (MAXCHEN)   2022-09-21 19:59:00
如圖
https://imgur.com/a/GLLfY15
有問題的是I1與I4,就是WB跟ID stage重疊那一塊
課本說明是沒有Hazard的問題,講什麼前半後半
我看的不是很明白
底下是我的理解
考慮以下指令
add $2, $2, $2
nop
nop
add $2, $2, $2
https://imgur.com/RiYc5hZ
這是我認為的時序圖
IF/ID、ID/EXE等是pipeline register存的值
明明I4在ID階段時I1的WB還沒被執行
卻說他不會有hazard產生
這是為什麼啊?
作者: takanano0528 (takanono0528)   2022-09-21 21:27:00
https://i.imgur.com/COfru66.jpg嗨嗨第一次解題,有點緊張我拿這個圖作為解釋好了,第一個add跟or不會發生data hazard的原因是因為,WB會在clock的前半部完成,ID則是在clock的後半部
作者: ping990579 (小山青)   2022-09-21 21:31:00
clock前寫後讀?所以沒hazard他那個diagram的畫法 圖是中間有填色意思就是這個吧
作者: takanano0528 (takanono0528)   2022-09-21 21:34:00
所以按照你的時序圖,$2在stage4的前半段有已經被寫入$2中,下一個指令會在clock的下半段抓到$2=10正確的資料Sorry更正,stage5,不是stage4
作者: Max112358 (MAXCHEN)   2022-09-21 23:38:00
不好意思,我問過很多人,都說什麼前半後半。但是我不能理解前半後半指什麼東西。希望能更詳細的解釋,謝謝你WB那個stage不是只是要寫入的資料ready以及regWrite為1而已嗎?要怎麼寫入資料
作者: jemmy9211 (態度地飛行)   2022-09-22 01:53:00
clock被往上拉就是前半 像下掉就是後半 這部分張凡有說過 學校應該也有教T大說的我認為很清楚了
作者: Max112358 (MAXCHEN)   2022-09-22 02:13:00
同時讀寫同一地址時,讀出來的值會是正要被寫入的值,但實際上暫存器還沒被寫入。這樣對嗎?但是我不知道課本哪邊有這樣說過
作者: jemmy9211 (態度地飛行)   2022-09-22 02:20:00
先寫入後才被讀出來的Clock上半週期 寫入registers下半週期 才被較晚進去的指令讀到 所以沒有hazard
作者: Max112358 (MAXCHEN)   2022-09-22 02:31:00
但是要怎麼寫入,如果regWrite這個控制訊號跟著pipeline跑,到WB這個stage他才是1不是嗎?下個週期才能寫入才對啊
作者: oxtin15   2022-09-22 23:19:00
regWrite為1且現在為positive edge時register裡的值就會(ideally)馬上被更新為input的值,當到negative egde時register裡的值就會被keep住,所以後半部讀出來的值才會是新寫入的值,更詳細的可以去看一下數位邏設的內容
作者: Max112358 (MAXCHEN)   2022-09-23 01:36:00
樓上這樣說就不合理了,regWrite在posedge後才變成1,register何德何能讀到這個1把資料寫進去
作者: oxtin15   2022-09-23 10:44:00
什麼意思?posEdge後變1不就可以把data寫入了嗎,而且regWrite是register的control signal又不用讀
作者: Max112358 (MAXCHEN)   2022-09-23 12:25:00
register是posedge時regWrite為1才能把資料寫入。實際上register還沒被寫入,但是讀的出來,這是一種forward
作者: takanano0528 (takanono0528)   2022-09-23 14:43:00
https://i.imgur.com/bpGgdg6.jpg它沒有用到forward path所以並非forwarding然後我能解釋的範圍就到這裡了,身為可悲跨考仔聽到的東西都來自於講義跟張凡的嘴巴,如果還是有什麼不懂的地方,感覺可以問一下學校的老師會比較好一點(有錯誤再勞煩大神更正)
作者: Max112358 (MAXCHEN)   2022-09-23 14:48:00
其實你們說的我都知道,但是我的問題都不在此https://i.imgur.com/T2194f3.jpghttps://i.imgur.com/XGjBUWg.jpg不合理啊,既然暫存器是依照正緣觸發當下的RegWrite來決定要不要寫入,那他就不應該寫入不是嗎
作者: ping990579 (小山青)   2022-09-23 18:58:00
WB stage的regw 信號是不用過pipeline register的我看圖長那樣Memtoreg那根線 直接抵達regfile不用等下個cycle
作者: Max112358 (MAXCHEN)   2022-09-23 20:45:00
沒有吧 我看都有跟著跑啊
作者: ping990579 (小山青)   2022-09-23 21:10:00
https://upload.wikimedia.org/wikipedia/commons/9/9目的位置跟資料寫入都沒擋阿上面圖死掉https://i.imgur.com/SIylTL6.jpg
作者: Max112358 (MAXCHEN)   2022-09-23 23:12:00
不是都跟著跑到WB stage嗎
作者: ping990579 (小山青)   2022-09-23 23:35:00
阿跑到wb就代表寫入了 你看我畫的紅線 是沒有東西擋著他的訊號的 他咻一下直接寫入regfile阿reg後半cycle才讀 就讀得到我看你上面的留言好像是說 wb要等下個週期才寫來不及嘛Wb沒有下個週期才寫 一過mem/wb 就直接衝回id stage了而這是在一個週期內完成https://i.imgur.com/VrUArFv.jpg這張圖比較好有control signal
作者: Max112358 (MAXCHEN)   2022-09-24 00:07:00
啊暫存器不是正緣觸發寫入嗎?你訊號在正緣後衝過來有甚麼用
作者: ping990579 (小山青)   2022-09-24 00:11:00
如果先不管正緣 我上面那樣說你可以接受嗎正緣一到pipeline暫存器就打開讓訊號出去了 也就寫入了 你那張圖好像是畫正緣過後才寫入的意思嗎我記得張凡是說正緣區間 而不是後哦而且就算正緣後衝過來 也是可以寫入的吧 至少比讀(下緣)在先了
作者: Max112358 (MAXCHEN)   2022-09-24 00:40:00
暫存器可以在正緣後寫入,那不叫正緣觸發寫入了吧。setup time都不用顧嗎?
作者: ping990579 (小山青)   2022-09-24 00:45:00
正緣後寫入不是你說的嗎反正張凡是說沿著邊邊 這樣你那張畫的很精美的圖不是就是正緣後寫入嗎 我是看那張圖說的我想說的是 不管是那種 一定比下緣先吧比下緣先就不會有hazard了0-1write 1-0讀這樣

Links booklink

Contact Us: admin [ a t ] ucptt.com