[理工] [计组] 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