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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: syrtic

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

[复制链接]
发表于 2012-11-9 17:06:55 | 显示全部楼层
xuexie xuexi
发表于 2012-11-9 20:07:09 | 显示全部楼层
本帖最后由 Jstalin 于 2012-11-9 20:43 编辑

在设计的直观上前面几位都提到了。
假设是经典五级流水线,私以为从延迟的角度看:
最占用时间的是MEM,其次是EX。
当MEM可以通过Cache技术来优化的时候,需要优化的就是EX了。
在DC阶段(或者叫ID),除了有比普通逻辑部件的regfile,还有一个control ROM,这两者都是延迟较大的。
ALU延迟自然很大,所以有必要有DC(或叫ID)阶段,将延迟分散开来,也就是提高并行度,留给耗时很大的MEM和IF阶段更大的改进空间(如果说你辛辛苦苦让cache响应很快,但偏偏因为你把EX和DC串行在一个阶段导致反而是这个阶段延迟限制了你的时钟频率,是不是很冤枉),让时钟频率走的更快。

至于前面所说的MEM阶段直接到REGFILE,我想是有的,超标量处理器的设计本来就蕴含了这个思想,因为数据总是最及时的到它所要到的地方去。楼主所说的经典五级流水线,是处理不了MEM阶段不需要访问内存的时候却浪费了一个时钟时间的问题的。
假设现在1:load -> R1, 2:add -> R1,那么很明显,load是需要MEM阶段读内存的,所以它写回regfile是在wb阶段,然而按照楼主的想法,add可以在mem写回,所以:
它们就在同一个时钟cycle里撞车了。(也就是9楼提到的情况)
即使你有个神奇的regfile支持同时写入两个不同的寄存器,你也必须判断存在WAW冒险的情况,引入额外的逻辑,判断出WAW冒险后,串行化写入需要的寄存器,这样如果你没有支持renaming的能力,参考l1指令cache和数据cache串行读l2cache的arbiter方法,不同的是,你不想把这个串行分成两个周期做(那么跟你把所有东西都留在WB写有什么区别,还增加复杂度)。你就必须引入另一个时钟,让它在本时钟周期的一小半部分写入WB的值进入寄存器,后一小半部分写MEM的值到寄存器。

之所以说经典五级流水线解决不了这个问题,是因为,你必须引入额外的renaming或者是变频时钟的硬件支持,变频时钟的问题在于,目前的工艺很难让两个时钟sync,或者说让给你做layout的人痛骂你,renaming的问题在于,如果你已经能够支持renaming了,也有了可以支持同时写的regfile了,那么你为什么要设计经典五级流水线去低效率地使用你的硬件呢?还不如设计超标量好。
发表于 2012-11-23 21:09:37 | 显示全部楼层


regfile可以用ram实现,也可以是multi-entry FF,关键是速度和面积的平衡
 楼主| 发表于 2013-1-9 15:39:30 | 显示全部楼层
关于流水线每一级的操作。以tms320c62xx为例,流水线是: PG,PS,PW,PR,  DP,DC,  E1,E2,E3,E4,E5

1.关于取指的过程:(denoted from ti's doc)
 PG: Program address generate
 PS: Program address send
 PW: Program access ready wait
 PR: Program fetch packet receive

我不太明白的是,PS,PW,PR到底是怎么划分的。我感觉流程应该是这样的:下一条指令的地址在PG产生了,然后存到一个寄存器(prog_addr)里面去,这个寄存器是连接到程序存储器(prog_mem)的地址线(PAB)上的。然后在下一时钟沿程序存储器(prog_mem)就把指令放在了程序数组总线(PDB)上了。再下一个时钟周期的上升沿,处理器就从PDB上读到指令寄存器(INSN)里面。这样来看的话在三个时钟周期就取指完成了。所以我不太明白取指的四步与上面我所叙述的过程是怎么对应的,或者我说的过程有误。

2.关于译码译码过程:
DP: Instruction dispatch
 DC: Instruction decode

关于译码(DC),我一直不太明白到底做了什么,很多书上就说是在译码,比如ti's doc:(In the DC phase, the the source registers, destination registers, and associated paths are decoded for the execution of the instructions in the functional units),那么从寄存器传输的角度来说到底是做什么呢?就是说经过这一级哪些寄存器改变了。

3.关于执行的过程:
在c6xx里面有的指令只执行1级,有的要2级,etc,算数运算类的指令还是挺好理解的,我的困惑主要还是在与存储器打交道的指令上,下面分析一下load类指令。先看ti's doc怎么说的:
E1  address generation is performed.
E2  the address is sent to memory.
E3  Data memory accesses are performed.
E4  data is brought to the CPU.
E5  data is written into a register.

问题还是这样的,从寄存器传输级的角度来说,每一级是在做什么。按理说,这应该和取指的过程类似,那么为什么这里却用了5级,虽然按我的推理这个过程至多三级就够了,两级也可以,要更多级的话就是在中间某些级什么也不做。
发表于 2013-2-4 11:30:07 | 显示全部楼层
你说的这个是sparc的吧,里面有用到寄存器窗口技术,你可以去查看资料
发表于 2013-2-25 22:23:42 | 显示全部楼层
如果论坛能提出一些项目来来让整个论坛一起讨论设计,有空的人参与,有经验的人提供建议跟解决就好了
发表于 2013-2-26 09:38:18 | 显示全部楼层
高手很多呢~~~~
 楼主| 发表于 2013-2-28 14:04:00 | 显示全部楼层
回复 16# adsam


   你有没有什么项目或者想法分享一下呗。
 楼主| 发表于 2013-2-28 14:04:54 | 显示全部楼层
回复 15# stormyoyo


   就是tms320c6。
发表于 2013-10-18 05:11:57 | 显示全部楼层
这是有原因的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-5 23:31 , Processed in 0.027226 second(s), 7 queries , Gzip On, Redis On.

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