[计组] pipeline疑问 交大102

楼主: Gabino (YenC)   2016-11-09 12:26:10
最近读到pipeline有些疑问
希望板上的大大能帮小弟解答
1.) load-use data hazard
在白算盘上看到的forwarding hardware 可分成以下四种情况
1a. EX/MEM.RegisterRd = ID/EX.RegisterRs
1b. EX/MEM.RegisterRd = ID/EX.RegisterRt
2a. MEM/WB.RegisterRd = ID/EX.RegisterRs
2b. MEM/WB.RegisterRd = ID/EX.RegisterRt
想请问load-use的情况使用stall+forwarding来解决的话
其中forwarding 可否归类于上述四种
还是白算盘上的forwarding hardware并没有写出这种情形的实作
2.)题目如下
http://i.imgur.com/uERHSsL.jpg
小弟有参考到前面讨论的文章
请参考这篇#1KCePaVb (Grad-ProbAsk)
也更正了a,b小题的答案
但做到这题的“分支是否发生在ID阶段决定”和解答以及先前参考文章算得不同,看了许
久仍不确定哪里错
以下是我做出来的答案
http://i.imgur.com/iEKKZdN.jpg
有想过是不是在ID阶段决定的前提是拿到正确的$s1
但如果等到C6的EX再从C5前馈过来亦可正常执行beq指令?
麻烦板上大大帮忙解惑
感激不尽
作者: gary19941208   2016-11-09 20:37:00
感谢大大,都忘了那个mux,虽然实际上是rt不过名字都是rd
作者: ken52011219 (呱)   2016-11-09 18:31:00
不会 pipeline我也都忘记了QQ..
楼主: Gabino (YenC)   2016-11-09 18:09:00
感谢大大 懂了~ 看到那个mux了QAQ怎么计组每张图都东简化一点西简化一点... 找到快起笑
作者: ken52011219 (呱)   2016-11-09 17:25:00
Load use 时 会先stall 也因此不用再带入forwarding抱歉讲错 Rd不会为0 而是由IF/EXE RegisterRs Regis-更正 是由 ID/EXE RegisterRt,RegisterRd mux控制根据Mux来决定 哪一个为EXE/MEM RegisterRd 及MEM/WB RegisterRd 随意找一张拥有pipeline的图便知http://i.imgur.com/qPNu07m.jpg 也不能随便找啦@@啊啊啊 IF/ID
楼主: Gabino (YenC)   2016-11-09 17:25:00
那lw要怎在MEM/WB 前馈给 ID/EX ?
作者: ken52011219 (呱)   2016-11-09 17:17:00
我大概知道哪边误解了 所以Rd带入0 不合forwarding但对于整个系统不会有冲突 我的意思是这个
楼主: Gabino (YenC)   2016-11-09 17:06:00
可是lw不是没有Rd嘛?
作者: gary19941208   2016-11-09 16:10:00
噢对,lw要看rt,所以不行
作者: ken52011219 (呱)   2016-11-09 16:48:00
Forwarding看Rd 呀@@ 跟hazard Detect Unit搞混了吧If (ID/EX.MemRead and ((ID/EX.Register.Rt = IF/ID.RegisterRs)or(ID/EX.RegisterRt =IF/ID.RigisterRt))) then stall Pipeline在ID中侦测是否为load-use 后 EXE 侦测是否需要For-warding 这两段侦测是不同的 没有冲突若在ID侦测到是Load-use 就先Stall一次
楼主: Gabino (YenC)   2016-11-09 15:43:00
以lw连beq来说的话 forwarding是该看 MEM/WB.RegisterRt ?应该说从lw前馈回去都要看Rt不是嘛?可是上述四种都是只有从Rd看
作者: gary19941208   2016-11-09 15:31:00
2.a或2.b吧不过 如果是lw连beq然后又是在ID决定的话就不是上述四种了
作者: ken52011219 (呱)   2016-11-09 15:29:00
第一个问题 是可以呀 并没有冲突
楼主: Gabino (YenC)   2016-11-09 14:56:00
感谢两位大大的指点 第一个问题 不知道有没有什么看法 还是觉得我语焉不详...
作者: ken52011219 (呱)   2016-11-09 14:39:00
再难的题目把原理摊开来看基本上都可以解决剩下的就是解题速度了
作者: gary19941208   2016-11-09 14:38:00
应该吧...在哪个阶段决定只是硬件不一样,但是程式要正确执行input当然要是正确的资料
楼主: Gabino (YenC)   2016-11-09 14:17:00
大概了解两位想表达的意思 若beq在X阶段决定是否分支 前提是在X阶段 须拿到正确的资料在书上都找不太到相关说明 不知道是不是太显而易见.....
作者: gary19941208   2016-11-09 14:00:00
Beq 要等到C6才能用forwarding 从lw的MEM拿到正确的s1,所以C6时beq还在ID,C7时add才会IF
作者: ken52011219 (呱)   2016-11-09 13:51:00
试想 Forwarding 的用处是将ID传进EX错误的值提前先把上一个指令OR上上个指令的正确值 直接传回“EX”的input端 那把BEQ运算提前改为由ID Stage就先行运算是否 Forwarding在“ID”内就失去功用了我认为 BEQ 必须乖乖等到 LW到WB才可以开始运算 @@许久未碰Pipeline 有误请更正 谢谢

Links booklink

Contact Us: admin [ a t ] ucptt.com