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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: 曾经擦肩

[求助] 求教:XILINX:DDR3 IPCORE--MIG

[复制链接]
发表于 2012-3-22 21:03:44 | 显示全部楼层
回复 20# 曾经擦肩


    真不好意思,我帮不上你。这个波形图比较小,很难看清楚细节。自带的仿真实例应该是不会有问题的,你可以仔细阅读一下UG406关于DDR3用户接口侧信号的描述,不知道对你有没有帮助。
发表于 2012-3-22 21:12:18 | 显示全部楼层
回复 19# wangyingwei


    一般ODT的设置只要用XILINX IP给出默认值就行了,或者查询DDR3芯片关于ODT值的要求。正确的设置ODT对于信号完整性还是非常重要的,阻抗匹配没有做好很容易出现误码的情形。

    PS,我对硬件知识的了解很有限,对于ODT的具体工作原理不熟,热切希望各位懂硬件的大侠给个点评!
 楼主| 发表于 2012-3-22 22:57:30 | 显示全部楼层
回复 21# lucien_1986


    行,我再看看,多谢您的帮助。
 楼主| 发表于 2012-3-22 23:32:25 | 显示全部楼层
回复 10# catcat_2


    catcat_2大侠,我还得再问您几个问题:

      1.app_wdf_end的作用:“This signal indicates the last cycle of data on app_wdf_data for the current write”。字面意思好像是说:“这个信号表明app_wdf_data的最后一个周期的数据,为当前的写数据”,不能正确理解这句话,不可能只把一个数据写进去吧?

      2.由问题1 引发了,到底64个地址空间内(app_addr),写入了几个256位数据app_wdf_data?

      3.今天看datasheet讲write commands这块,
          出现“A non back-to-back write command...”,针对这种non back-to-back,几个信号变量出现了三种情况:i.  app_wren,app_wdf_end,对应app_en,app_rdy同时拉高。   ii.app_wren,app_wdf_end,提前app_en,app_rdy拉高(提前几个时钟还是一个小问题)。  iii.app_wren,app_wdf_end,落后app_en,app_rdy最多两个时钟拉高。
       "back-to-back write command..."针对这种情况,我看到app_wren,app_wdf_end,app_en,app_rdy等信号都是比较整齐对应的。
     所以现在就不理解,这“non back-to-back ”与“back-to-back ”的区别,也不知道,自己应对应哪种情况。

     问题有些杂,也有些零碎,多见谅,谢谢了。
发表于 2012-3-23 09:40:58 | 显示全部楼层
回复 22# lucien_1986


    恩,谢谢!因为我这边的控制器是自己写的,只是用了IP的DDR PHY,控制器暂时没有ODT输出的逻辑(简单看了下协议感觉ODT的处理比较麻烦,并且仿真也没法仿)。我现在的设计是把ODT拉零,经过了随机业务的仿真,也在ML605上做过简单的读写校验测试,就是怕将来做板子后速率上来信号质量不行。
发表于 2012-3-23 10:01:37 | 显示全部楼层
回复 24# 曾经擦肩

你好,我没用过这个IP的接口,不过DDR控制器接口设计应该都是差不多的
问题1,2: 这个信号的作用是告诉接口该拍是这次写操作的最后一次写数据,接口一次写操作地址可以有多拍写数据(具体的容量需要看接口的地址映射和缓存容量等),等到进入控制器后再将该请求分成DRAM多次写命令
问题3:没看过接口波形不大好说,不过感觉BACK-TO-BACK应该指的是写数据的连续,当写接口满时READY会拉低,造成无法连续写数据即NON BACK-TO-BACK WRITE 。其实这两种情况都是正常的,你在适配时根据READY信号状态来发你的写操作就行了。
希望对你有帮助
发表于 2012-3-23 14:51:38 | 显示全部楼层
回复 19# wangyingwei


       ODT 我用的是IP的默认设置,基本没有太调整这个东西的设置。我记得jedec的standard里面有具体讲这个信号该怎么用的, align到协议上比较有说服力。用ODT的话,板子上貌似可以少几个电阻。不过如果是设计IP的话,我觉得如果开发时间紧迫的话,你就可以,直接关掉,跟你说的一样,让硬件的自己去做这个消反射电阻,跟他们说,不好意思时间太紧,偶没做这个。如果不紧迫,那你可以做一个带使能的odt,需要的时候打开,不需要的时候关掉就可以了。
      ODT 是消信号反射的,好像是从ddr2开始有的。因为sdram的连线比较多,每条线上貌似都要有。你知道DQS, DQ 线在布PCB的时候有什么走线等长的要求,保证信号延时一致,所以就需要蛇形走线。这对于布PCB的人来说就是折磨,如果再让放电阻,他们要疯的。尤其是如果放到电脑主板上,就占了很多空间,主板本来就是要求很高的。所有后面就把这个电阻放到了DDR2里面,通过DDR2 的MR寄存器去配置ODT的阻值。
      对于信号完整性的影响,我个人觉得满重要的,但是说实话我没跟硬件的人一起调过这个。如果sdram要跑到400MHz,ddr3要到800,1600,我觉得这个就很重要了,毕竟这么高的频率下,反射是一定要处理好的。你可以找你们那边硬件做过这个人的人讨论下,看看他们什么想法。
发表于 2012-3-23 15:44:36 | 显示全部楼层
回复 24# 曾经擦肩


     1.app_wdf_end的作用:“This signal indicates the last cycle of data on app_wdf_data for the current write”。字面意思好像是说:“这个信号表明app_wdf_data的最后一个周期的数据,为当前的写数据”,不能正确理解这句话,不可能只把一个数据写进去吧?
------------------------------------------------------------
       这个信号是对齐到最后一个有效数据的那个周期的。不是说只写一个周期的数据。一般写数据至少是两个clock cycle吧(没有反压的情况下),app_wdf_wren指示有效数据,跟有效数据对齐。app_wdf_end 这个信号在后面第2个cycle有效,没有反压就只持续一个cycle。xilinx的UG 上应该有它的时序,你查下。

    2.由问题1 引发了,到底64个地址空间内(app_addr),写入了几个256位数据app_wdf_data?
        如果是BC4,burst chop 4,UI DATA WIDTH = 256,那只写一个256。如果是BL8,burst length=8,那写两个。

    3.今天看datasheet讲write commands这块,
       出现“A non back-to-back write command...”,针对这种non back-to-back,几个信号变量出现了三种情况:i.  app_wren,app_wdf_end,对应app_en,app_rdy同时拉高。   ii.app_wren,app_wdf_end,提前app_en,app_rdy拉高(提前几个时钟还是一个小问题)。  iii.app_wren,app_wdf_end,落后app_en,app_rdy最多两个时钟拉高。
       "back-to-back write command..."针对这种情况,我看到app_wren,app_wdf_end,app_en,app_rdy等信号都是比较整齐对应的。
     所以现在就不理解,这“non back-to-back ”与“back-to-back ”的区别,也不知道,自己应对应哪种情况。
-------------------------------------------
      app_en, app_cmd, app_rdy, app_addr 这4个,你可以理解为地址总线,app_wdf_wren, app_wdf_data, app_wdf_end, app_wdf_rdy你可以理解为写数据总线。两条总线是相对独立的,两个反压信号app_rdy和app_wdf_rdy也是独立的。你就想像ip里面有两个fifo,一个放地址,一个放数据,fifo 快满了,ip 就会反压你,让你不要写了。当然实际肯定不一样,还有自刷新周期什么的。
        先说back-to-back,这种写法就是地址写地址的,数据写数据的。但是每一个地址对应了两个数据,对应关系不能乱,先写进去的addr a,对应数据a0, a1。总数也不能乱,写了N个地址,就要写2N个数据进去。然后,处理两个反压信号也是独立处理的。这个应该很好理解。就是说你在数据量比较大的时候,你可以这么写,但是对应关系要明确。figure 1-63,1-64画的比较理想,没有反压。有反压的时候,地址和数据的反压是独立处理的。
        scattered,这个是分散的。一个burst写完,再写下一个burst。figure 1-65的意思是,在你写入了一个地址的时候,对应于这个地址的数据,你可以采用的3中写法。一种是,数据提前地址一个clock cycle写;第二种是,数据对齐地址同一个cycle写;第三种是,数据滞后地址一个cycle写。也就是图上的意思,要保证数据与地址的对应关系,对于时刻clock cycle n 的一个地址,和其对应的数据写入的时刻允许范围是(clock cycle n-1, clock cycle n, clock cycle n+1),你可以在这3个时钟周期中的任意一个把数据0写进去。图上只画了bc4的情况,BL8的情况就是数据1紧跟在数据0后面一个cycle。当然,反压有效的时候,数据或者地址必须hold住直至反压无效,写入被ip接受。有反压的时候,写入地址的时刻n,以反压变为无效后的第一个cycle为准。一个burst写完才可以写下一个burst。
发表于 2012-3-23 16:24:08 | 显示全部楼层
回复 27# catcat_2

是啊,我也主要是对DDR3板子布线不了解才很头疼。
不过,我用的设计不是用在主板上那种高速带DIMM的,是直接用的DDR颗粒,用FPGA验证时DDR3跑到300--400MHZ就可以满足项目要的带宽了。以前做DDR2时,就把ODT拉死的,测试时也没出什么问题
发表于 2012-3-23 18:33:04 | 显示全部楼层
回复 29# wangyingwei

        你可以先拉死试一下嘛,和设计验证并行走,不耽误活儿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-20 04:12 , Processed in 0.028416 second(s), 6 queries , Gzip On, Redis On.

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