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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 11567|回复: 21

[原创] 如何简化V6 DDR3控制器的使用

[复制链接]
发表于 2012-3-28 00:37:24 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lucien_1986 于 2012-3-28 00:38 编辑

在V6 DDR3控制器中,因为写数据通道和命令通道不是简单的fifo接口,无法通过FIFO的将满信号进行写入的控制,只能根据命令通道和数据通道上的app_wdf_rdy信号和app_rdy信号判断数据是否成功写入,如果没有写入成功则需要重新写入。

      为了简化对V6 DDR3控制器的使用,需要对Xilinx提供的DDR3控制器源码做少量修改。DDR3控制器源码中, app_wdf_rdy信号在用户接口侧指示数据是否成功写入,由wdf_rdy_ns延迟一拍产生。wdf_rdy_ns在DDR3控制器内部用于判断数据是否写入有效。wdf_rdy_ns是由一个FIFO写入侧counter计算出来的,counter的值则取决于FIFO的读写状态。如果Counter的值大于设定的将满阈值15,则wdf_rdy_ns为0,写入的数据无效。

       为了使app_wdf_rdy信号具有将满指示效果,即把app_wdf_rdy用作反压信号时,每个写入的数据都是写入有效的,必须使app_wdf_rdy信号比wdf_rdy_ns更早的为0。wdf_rdy_ns是在counter值等于15时为0,而app_wdf_rdy应该在counter值等于15以前就为0。保险起见,可以在counter为12将app_wdf_rdy置为0。

       对于命令通道的app_rdy信号,由于产生机制过于复杂,不容易通过修改Xilinx源码来使得app_rdy信号具有提前反压效果。只能根据app_rdy信号的指示,确定上一拍数据是否成功写入。
发表于 2012-3-28 12:56:08 | 显示全部楼层
多谢楼主分享
发表于 2012-3-28 13:37:39 | 显示全部楼层
从描述看,LZ似乎希望将DDR IP接口简化为类似于FIFO的反压接口,但我觉得DDR 控制器读写接口做成FIFO结构会大大降低IP的调度性能(总线利用率和时延等),因为控制器会对接口中等待的请求根据地址进行调度,写数据的输出也是乱序的,所以接口不能做成FIFO结构
个人愚见,若有理解错误还请指教
 楼主| 发表于 2012-3-28 21:38:37 | 显示全部楼层
回复 3# wangyingwei


    做成类FIFO反压接口的目的恰恰的为了提高读写的效率,这样子就不用读写一次判断很多次。Xilinx源码根据app_wdf_rdy写进数据时,并不一定能写成功,而是要写完以后判断一次,不成功要重新写一次,这样子效率很低下。而我改成这样子以后,如果app_wdf_rdy为1就一定能写成功,不需要写完再判断一次,效率大增。至于你担心命令和数据不对齐,那是多虑了,因为我还是能保证命令输入与数据输入的先后关系,不会写错地址。其实Xilinx只是要求命令输入时,数据也同步输入,但是并不是要求在时钟上完全对齐。至于您说的控制器的对读写顺序的调度,是在控制器的更核心部分,我修改这部分代码是不会影响到那部分功能的。这种做法已经经过我的验证:仿真、上板调试、实际运行(1年)都没有问题。这种改动,是在完全了解Xilinx控制器代码的基础上做出的改动,所以不建议盲目修改,您的担心也是有道理的。
    您思考很心细和深入,值得学习,呵呵!
 楼主| 发表于 2012-3-28 21:41:35 | 显示全部楼层
回复 3# wangyingwei


    有兴趣的话,可以到我的博客,看我的源码修改,看完了Xilinx的app_wdf_rdy信号产生机制,就不对我做的改动产生疑问了。
发表于 2012-3-29 19:10:27 | 显示全部楼层
回复 5# lucien_1986


   

刚看过你的博客,收获很多。不过对你上面的有些观点不能认同。

首先,你说FIFO反压接口可以调高读写的效率,我理解你是说这种接口修改后不需要经过重复判断,可以提高控制器接口接收写数据的效率,请注意,这与我上面提到的控制器执行读写操作的效率概念不同。

我的经验是DDR控制器效率(带宽及延时等)的瓶颈在于控制器没有根据请求的地址及类型对请求进行合理调度,即请求没有快速执行是因为控制器没法执行,因此接口中的数据来早来晚对于控制器效率本身没有影响。

并且按照你的修改,减少了接口的缓存阈值,即控制器可以调度的请求个数会相应减少,这样反而会减低控制器的调度效率。

 楼主| 发表于 2012-3-29 20:34:14 | 显示全部楼层
本帖最后由 lucien_1986 于 2012-3-29 20:36 编辑

回复 6# wangyingwei


    嗯,控制器内部合理调度读写命令访问的顺序,减少同一BANK行切换频率的确是提高DDR3利用效率的好办法。以我个人的理解,我修改的是控制器的UI部分,不涉及到控制器核心部分的读写顺序调度,所以应该是不会影响到控制器执行读写操作的效率的。需要仔细阅读Xilinx源码,才能确定我猜想的对不对。
发表于 2012-3-30 11:55:32 | 显示全部楼层
DDR控制器效率其实可以在仿真中大致估算的。你可以在仿真中计算下在一段时间内DRAM接口侧DQS信号有效的拍数占总拍数的比例,再平均下,来估算控制器的总线利用率。再根据你的DRAM的频率及位宽,就可以获得控制器可以得到的最大带宽。
请求延时仿真中不大好估算,不过可以从设计中分析得出最大延时
 楼主| 发表于 2012-3-30 13:21:52 | 显示全部楼层
回复 8# wangyingwei


    构造专门的仿真case的确可以对DDR3的有效带宽做一个评估,好主意!
发表于 2012-4-3 23:57:02 | 显示全部楼层
ffffffffffffff
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-18 08:27 , Processed in 0.031753 second(s), 8 queries , Gzip On, Redis On.

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