在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5734|回复: 20

[求助] 流水线中每一级的操作

[复制链接]
发表于 2012-9-26 16:46:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
比如在流水线的DC stage里。从寄存器 (或后面的级bypass) 取出操作数到流水线寄存器,以便在EX级运算,
那么为什么要这一级呢,直接在EX级取操作数不就可以了吗。
    在EX级运算好了的结果,为什么是先存入流水线寄存器,在WB级写回寄存器,而不是直接写回寄存器。
     高手指点一下。
发表于 2012-10-3 14:06:12 | 显示全部楼层
坐等回答
 楼主| 发表于 2012-10-3 15:25:00 | 显示全部楼层
回复 2# rvisk


   唉,我都等了好久了,高手快现身啊。。。。。。
发表于 2012-10-4 12:48:01 | 显示全部楼层
我认为,ex级和dc级,或者说运算部件和regfile的设计,属于不同的两个集合。
从设计哲学上考虑,需要把这两部分分别独立起来。
从性能上讲,regfile比较复杂,和运算部件合并起来,只能降低总体性能。
还有一点,有些指令需要访存,然后保存数据进regfile。如果不考虑类似的指令,将其他不访存的指令ex之后,直接写regfile,好像也没什么不可以。不过这样做大概会使流水线分配复杂化。

基本上其实可以有很多中不同的方案,只不过复杂度不一样,代价不一样。
发表于 2012-10-4 12:52:40 | 显示全部楼层
另外流水间的寄存器(pipeline register),和指令译码级那里面的寄存器(register file)不是一个东西。
所以不管你在ex级是读还是写regfile,只要你把他俩直接连起来,就会造成设计复杂化,而且流水性能会降低。

总体性能怎么样,就不好说了。如果流水性能降低了。
在某些指令上得到的便利,很可能不能弥补总体上性能的降低。
毕竟是通用处理器。
 楼主| 发表于 2012-10-6 00:10:43 | 显示全部楼层
本帖最后由 syrtic 于 2012-10-6 00:17 编辑

回复 5# patrick007


        不过,在使用流水线的时候,比如mips的5级流水线,都有bypass。比如这种情景:instruction 1 : r1=r2+r3.    instruction 2 : r4=r1+r5.那么指令1在EX级算好了r1, 指令2在EX级就要用r1,这时就是把指令1的结果bypass到指令2来用。                                                            难道是在DC级和EX级都取操作数,是为了在EX级的时候取操作数只是从pipeline register里面取?这样的话,确实运算单元不会直接与regfile相连接了。不过为什么直接相连就会使速度变慢(流水线性能降低)呢?
发表于 2012-10-6 00:58:30 | 显示全部楼层
看您的回复,我觉得您可能对regfile和pipeline reg的理解有些模糊。
regfile 需要寻址,其实是一个ram,数据要保存多个周期。
pipeline reg 不需要寻址,只保存一周期,可以做成dff。

所以regfile里面,是有combination logic的。
像renaming之类的方案,还会增加这部分的复杂度。
所以在它前面或者后面,要有pipeline reg 把它和其他级隔开。

另外您说的流水线间的bypass,我想应该叫forwarding。bypass一般指什么东西不用的时候,旁边加一条通路,把不用的东西pass掉。

forwarding的时候,可以把上一级的结果存到dff中,因为只需要保存一周期。具体forward到哪里,可以通过流水线控制器去判断,然后选择。这个过程不涉及寻址,因为上一级的结果就一个,就放在那一个dff里面。当然如果超标量而且能互访的情况下,会复杂一些。

从设计上讲,用简单的时序部件 把 不相关的 逻辑或者复杂时序部件分隔开,也是正确的。
发表于 2012-10-12 13:53:26 | 显示全部楼层
回复 1# syrtic


坐等回答
发表于 2012-10-19 16:19:07 | 显示全部楼层
还有一个MEM级那,EX直接到DX的寄存器了;那WB级的数据还能不能写DX的寄存器了?一定不能从EX到DX的寄存器的;否则就会撞车的;
发表于 2012-10-20 02:56:21 | 显示全部楼层
对于寻址方式比较单一的处理器,比如多数是寄存器寻址的处理器,其实确实是有很多指令在mem级什么都没做。

从设计上讲,如果mem级也允许写寄存器,那么和wb级的写寄存器就会冲突,有没有工业界的解决方法我不清楚,即使有,也一定会增加寄存器设计的复杂性。而且这么做所得到的东西并不是很有吸引力,仅仅是在寄存器中早一个周期得到结果,而这个结果是可以在forwarding reg之类的地方来保存的。看起来并不实际增加性能的提升。

说白了,已经有方法让exe级得到上一周期刚刚运算出来的,还没有保存进regfile内的结果,就不需要破坏指令流水的统一性了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-24 13:25 , Processed in 0.029866 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表