作者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/cn.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