作者Max112358 (考研不是人)
看板Grad-ProbAsk
標題[理工] [計組] Hazard疑問
時間Wed Sep 21 19:59:00 2022
如圖
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產生
這是為什麼啊?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.244.247 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Grad-ProbAsk/M.1663761542.A.46B.html
2F:→ takanano0528: 嗨嗨第一次解題,有點緊張 09/21 21:30
3F:→ takanano0528: 我拿這個圖作為解釋好了,第一個add跟or不會發生da 09/21 21:30
4F:→ takanano0528: ta hazard的原因是因為,WB會在clock的前半部完成 09/21 21:30
5F:→ takanano0528: ,ID則是在clock的後半部 09/21 21:30
6F:→ ping990579: clock前寫後讀?所以沒hazard 09/21 21:31
7F:→ ping990579: 他那個diagram的畫法 圖是中間有填色意思就是這個吧 09/21 21:32
8F:推 takanano0528: 所以按照你的時序圖,$2在stage4的前半段有已經被 09/21 21:34
9F:→ takanano0528: 寫入$2中,下一個指令會在clock的下半段抓到$2=10 09/21 21:34
10F:→ takanano0528: 正確的資料 09/21 21:34
11F:推 takanano0528: Sorry更正,stage5,不是stage4 09/21 21:38
12F:→ Max112358: 不好意思,我問過很多人,都說什麼前半後半。但是我不 09/21 23:38
13F:→ Max112358: 能理解前半後半指什麼東西。希望能更詳細的解釋,謝謝 09/21 23:38
14F:→ Max112358: 你 09/21 23:38
15F:→ Max112358: WB那個stage不是只是要寫入的資料ready以及regWrite為 09/21 23:53
16F:→ Max112358: 1而已嗎?要怎麼寫入資料 09/21 23:53
17F:推 jemmy9211: clock被往上拉就是前半 像下掉就是後半 這部分張凡有 09/22 01:53
18F:→ jemmy9211: 說過 學校應該也有教 09/22 01:53
19F:→ jemmy9211: T大說的我認為很清楚了 09/22 01:54
20F:→ Max112358: 同時讀寫同一地址時,讀出來的值會是正要被寫入的值, 09/22 02:13
21F:→ Max112358: 但實際上暫存器還沒被寫入。這樣對嗎?但是我不知道課 09/22 02:13
22F:→ Max112358: 本哪邊有這樣說過 09/22 02:13
23F:推 jemmy9211: 先寫入後才被讀出來的 09/22 02:20
24F:→ jemmy9211: Clock上半週期 寫入registers 09/22 02:20
25F:→ jemmy9211: 下半週期 才被較晚進去的指令讀到 所以沒有hazard 09/22 02:20
26F:→ Max112358: 但是要怎麼寫入,如果regWrite這個控制訊號跟著pipeli 09/22 02:31
27F:→ Max112358: ne跑,到WB這個stage他才是1不是嗎?下個週期才能寫入 09/22 02:31
28F:→ Max112358: 才對啊 09/22 02:31
29F:推 oxtin15: regWrite為1且現在為positive edge時register裡的值就會 09/22 23:19
30F:→ oxtin15: (ideally)馬上被更新為input的值,當到negative egde時r 09/22 23:19
31F:→ oxtin15: egister裡的值就會被keep住,所以後半部讀出來的值才會 09/22 23:19
32F:→ oxtin15: 是新寫入的值,更詳細的可以去看一下數位邏設的內容 09/22 23:19
33F:→ Max112358: 樓上這樣說就不合理了,regWrite在posedge後才變成1, 09/23 01:36
34F:→ Max112358: register何德何能讀到這個1把資料寫進去 09/23 01:36
35F:推 oxtin15: 什麼意思?posEdge後變1不就可以把data寫入了嗎,而且re 09/23 10:44
36F:→ oxtin15: gWrite是register的control signal又不用讀 09/23 10:44
37F:→ Max112358: register是posedge時regWrite為1才能把資料寫入。 09/23 12:25
38F:→ Max112358: 實際上register還沒被寫入,但是讀的出來,這是一種fo 09/23 12:35
39F:→ Max112358: rward 09/23 12:35
41F:→ takanano0528: 它沒有用到forward path所以並非forwarding 09/23 14:45
42F:→ takanano0528: 然後我能解釋的範圍就到這裡了,身為可悲跨考仔聽 09/23 14:47
43F:→ takanano0528: 到的東西都來自於講義跟張凡的嘴巴,如果還是有什 09/23 14:47
44F:→ takanano0528: 麼不懂的地方,感覺可以問一下學校的老師會比較好 09/23 14:47
45F:→ takanano0528: 一點(有錯誤再勞煩大神更正) 09/23 14:47
46F:→ Max112358: 其實你們說的我都知道,但是我的問題都不在此 09/23 14:48
49F:→ Max112358: 不合理啊,既然暫存器是依照正緣觸發當下的RegWrite來 09/23 14:57
50F:→ Max112358: 決定要不要寫入,那他就不應該寫入不是嗎 09/23 14:57
51F:推 ping990579: WB stage的regw 信號是不用過pipeline register的我 09/23 18:58
52F:→ ping990579: 看圖長那樣 09/23 18:58
53F:推 ping990579: Memtoreg那根線 直接抵達regfile不用等下個cycle 09/23 19:04
54F:→ Max112358: 沒有吧 我看都有跟著跑啊 09/23 20:45
56F:推 ping990579: 目的位置跟資料寫入都沒擋阿 09/23 21:20
58F:→ Max112358: 不是都跟著跑到WB stage嗎 09/23 23:12
59F:推 ping990579: 阿跑到wb就代表寫入了 你看我畫的紅線 是沒有東西擋 09/23 23:35
60F:→ ping990579: 著他的訊號的 他咻一下直接寫入regfile 09/23 23:35
61F:→ ping990579: 阿reg後半cycle才讀 就讀得到 09/23 23:36
62F:→ ping990579: 我看你上面的留言好像是說 wb要等下個週期才寫來不及 09/23 23:37
63F:→ ping990579: 嘛 09/23 23:37
64F:→ ping990579: Wb沒有下個週期才寫 一過mem/wb 就直接衝回id stage 09/23 23:38
65F:→ ping990579: 了而這是在一個週期內完成 09/23 23:38
67F:→ ping990579: 這張圖比較好有control signal 09/23 23:49
68F:→ Max112358: 啊暫存器不是正緣觸發寫入嗎?你訊號在正緣後衝過來有 09/24 00:07
69F:→ Max112358: 甚麼用 09/24 00:07
70F:推 ping990579: 如果先不管正緣 我上面那樣說你可以接受嗎 09/24 00:11
71F:→ ping990579: 正緣一到pipeline暫存器就打開讓訊號出去了 也就寫入 09/24 00:24
72F:→ ping990579: 了 你那張圖好像是畫正緣過後才寫入的意思嗎 09/24 00:24
73F:→ ping990579: 我記得張凡是說正緣區間 而不是後哦 09/24 00:25
74F:→ ping990579: 而且就算正緣後衝過來 也是可以寫入的吧 至少比讀( 09/24 00:27
75F:→ ping990579: 下緣)在先了 09/24 00:27
76F:→ Max112358: 暫存器可以在正緣後寫入,那不叫正緣觸發寫入了吧。se 09/24 00:40
77F:→ Max112358: tup time都不用顧嗎? 09/24 00:40
78F:→ ping990579: 正緣後寫入不是你說的嗎 09/24 00:45
79F:→ ping990579: 反正張凡是說沿著邊邊 這樣 09/24 00:46
80F:→ ping990579: 你那張畫的很精美的圖不是就是正緣後寫入嗎 我是看那 09/24 00:49
81F:→ ping990579: 張圖說的 09/24 00:49
82F:→ ping990579: 我想說的是 不管是那種 一定比下緣先吧 09/24 00:51
83F:→ ping990579: 比下緣先就不會有hazard了 09/24 00:51
84F:→ ping990579: 0-1write 1-0讀這樣 09/24 01:15