作者wacheck (94不爱喝水)
看板Grad-ProbAsk
标题[理工] forwarding的问题
时间Sat Dec 15 15:20:38 2018
大家好
想请教一个问题
forwarding的侦测码中有分为Ex hazard跟mem hazard
(分别是看执行指令与下一、下下一指令有没有hazard)
EX Hazard
if (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0) and (EX/MEM.RegisterRd ==
ID/EX.RegisterRs)) ForwardA = 10
if (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0) and (EX/MEM.RegisterRd ==
ID/EX.RegisterRt)) ForwardB = 10
MEM Hazard
if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠ 0) and (MEM/WB.RegisterRd ==
ID/EX.RegisterRs)) and not(Ex Hazard)ForwardA = 01
if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠ 0) and (MEM/WB.RegisterRd ==
ID/EX.RegisterRt)) and not(Ex Hazard) ForwardB = 01
-------------------
以下是我的认知:
mem hazard的侦测码的成立条件必须要not (Ex hazard)
也就是两个不会同时发生?
那今天有没有可能有这种情况:
and $3 $3 $6 IF ID EXE MEM WB
or $0 $7 $3 IF ID EXE MEM WB
xor #7 $3 $0 IF ID EXE MEM WB
这样and指令跟xor指令的$3要前馈
但同时or指令跟xor指令的$0要前馈?
假设就照上述侦测码 那这样fowfardingA跟fowardingB要分别设什麽?
(计组好难RRRRRR)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.115.196.132
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Grad-ProbAsk/M.1544858440.A.0C7.html
※ 编辑: wacheck (59.115.196.132), 12/15/2018 15:37:31
1F:推 skyHuan: 如果你的$0不是0号暂存器就两条都会forwarding 12/15 15:43
3F:推 skyHuan: 指令三在EX stage会用到$3跟$0的结果 12/15 15:47
4F:→ skyHuan: 但指令1, 2这时还没写回暂存器所以需要前馈 12/15 15:47
5F:→ skyHuan: 红色那条是来自指令1的前馈$3给rs用 12/15 15:47
6F:→ skyHuan: 蓝色那条是来自指令2的前馈$0给rt用 12/15 15:47
7F:→ skyHuan: 看起来应该应该要设成forwardingB=10, forwardingA=01 12/15 15:53
8F:推 anonimo: 在C.C.(clock cycle) 3时 forwardA=00 forwardB=10 此时 12/15 16:17
9F:→ anonimo: and的$3传给or的$3 在C.C.4时 forwardA=01 forwardB=10 12/15 16:17
10F:→ anonimo: 此时and的$3传给or的$3且or的$0传给xor的$0 12/15 16:17
11F:→ anonimo: 然後你的例子举的不太好 因为$0不会做forwarding 12/15 16:22
12F:→ wacheck: 对耶$0是存0 ORZ 我想确认一下not那个条件是在何种情形 12/15 16:47
13F:→ wacheck: 像(1)and $1,$2,$3 (2)and $1,$4,$5 (3)and $6,$1,$6 12/15 16:50
14F:→ wacheck: 这种看似(1),(3)指令有相依但实际上是2,3有相依 这样的 12/15 16:51
15F:→ wacheck: 情形才需要加not条件吗? 12/15 16:51
16F:→ anonimo: Yes 12/15 18:34
17F:→ wacheck: 感谢多次救援 12/16 14:16