打印

请教,SPARTAN-6使用DDR2时错一个数的问题!!

[复制链接]
楼主: gnr_zhao
手机看帖
扫描二维码
随时随地手机跟帖
21
yghanwuji 发表于 2013-5-7 10:36
如果你不需要屏蔽某个字节的话,你全写0就可以了。
你不是用IP核生成的控制器?是自己写的DDR2控制程序吗 ...

本来就是复用的,等待他明天的结果

使用特权

评论回复
22
GoldSunMonkey| | 2013-5-7 23:19 | 只看该作者

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
gnr_zhao + 2 赞一个!
23
gnr_zhao|  楼主 | 2013-5-8 00:17 | 只看该作者
yghanwuji 发表于 2013-5-7 10:36
如果你不需要屏蔽某个字节的话,你全写0就可以了。
你不是用IP核生成的控制器?是自己写的DDR2控制程序吗 ...

我也是用ip生成的控制器
我现在感觉这个DM是没有任何作用的
控制器可以把你的数据分成多少份分别送出去,这样还要DM干什么,如果想屏蔽某些字节
那我写数的时候干脆就不写这个字节不就行了,我不知道这么理解对不对
多谢,我回去看看数据手册再!

使用特权

评论回复
24
gnr_zhao|  楼主 | 2013-5-8 00:30 | 只看该作者
GoldSunMonkey 发表于 2013-5-7 23:12
本来就是复用的,等待他明天的结果

昨晚chipscope抓到了,在一些帧过后会有一帧前两行的读地址没有给出来,应该分别是400和800的地址一直是0
上午没有找到为什么会出现这样,领导催的急,我下午重做了读数的程序,更严谨了一些
晚上的结果就是,现在图像没有一段时间的累加了,程序已经可以用了,但是最后一行始终是错的,刚才太晚了,没有继续,相信明天可以搞定
然后再看看之前的设计为什么会出现读地址出错,找到原因了一定上来汇报!!!!

今天遇到一个有趣的现象,同一个判断条件下的两个赋值语句,一个成功一个不成功
比如:
if (a=b) then
   c<=d;
   e<=f;
end if;

就是类似这样的一段程序,居然才 c<=d 成功了,但是 e<=f 就没赋值上,我看了其他地方没有会对e在同一时刻赋值的地方,如果有也应该报错吧

使用特权

评论回复
25
yghanwuji| | 2013-5-8 08:51 | 只看该作者
我觉得DM应该是有用的,不然DDR2芯片设计这个管脚就没意义了,只是现在咱们没用到。
写地址增加时应该是判断到write_req和ready同时有效才能加。
读地址增加时是判断到read_req和ready同时有效才能加。
写数据时是wdata_req有效时下一个时钟数据有效
读数据时是rdata_valid有效时当前时钟数据有效
这是我用altera的ddr2的IP核的时序,xilinx的IP核我没看过时序,其他的就不清楚了,学长只能帮你到这了....

使用特权

评论回复
26
GoldSunMonkey| | 2013-5-8 21:45 | 只看该作者
gnr_zhao 发表于 2013-5-8 00:30
昨晚chipscope抓到了,在一些帧过后会有一帧前两行的读地址没有给出来,应该分别是400和800的地址一直是0 ...

恭喜,加油

使用特权

评论回复
27
GoldSunMonkey| | 2013-5-8 21:45 | 只看该作者
yghanwuji 发表于 2013-5-8 08:51
我觉得DM应该是有用的,不然DDR2芯片设计这个管脚就没意义了,只是现在咱们没用到。
写地址增加时应该是判 ...

XILINX在S6里面是硬核

使用特权

评论回复
28
snk12| | 2013-5-9 11:07 | 只看该作者
gnr_zhao 发表于 2013-5-8 00:30
昨晚chipscope抓到了,在一些帧过后会有一帧前两行的读地址没有给出来,应该分别是400和800的地址一直是0 ...

因为 你的逻辑跑不到这个频率, 所以会出现这种情况

使用特权

评论回复
29
snk12| | 2013-5-9 11:13 | 只看该作者
本帖最后由 snk12 于 2013-5-9 11:34 编辑

spartan6对于ddr好像很苛刻, 也碰到过,等长线都按手册上的来,居然跑出来的数据有有问题,查了很久还是一样, 后来无意中在老外的论坛中看到,不要用自动计算的阻抗,IN_TERM设成75就好用了,数据错误还是有,但很少出现, 再后来改了个地址数据 全部等长的就更好了。 然后发现跑800M偶尔还是有错误数据,700Mhz一点问题没有。    真是折腾的很,

再细测,因为我用的是2片ddr3, 发现其中一片800Mhz没问题,一片800Mhz跑出来偶尔有错误, 然后看布线图, 发现有问题的这片 等长做的 比 没问题的这片要更好,无语啊。  然后只好再细测,发现错误的位就出现在DQ11, DQ15上, 然后软件上把这2位的数据交换到 错误不敏感的部分, 然后算是可用了。   

所有线长都在1250mil
说实话,很想把有问题的2位也改好,但是没主意,不知猴哥有什么想法

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
gnr_zhao + 2 赞一个!
30
yghanwuji| | 2013-5-9 12:03 | 只看该作者
snk12 发表于 2013-5-9 11:13
spartan6对于ddr好像很苛刻, 也碰到过,等长线都按手册上的来,居然跑出来的数据有有问题,查了很久还是一 ...

恭喜,问题解决了把

使用特权

评论回复
31
gnr_zhao|  楼主 | 2013-5-9 15:16 | 只看该作者
snk12 发表于 2013-5-9 11:13
spartan6对于ddr好像很苛刻, 也碰到过,等长线都按手册上的来,居然跑出来的数据有有问题,查了很久还是一 ...

您说的这个in_term应该就是rzq这个PIN吧,我MIG生成的时候设置的是50,现在这个PIN接的是100欧的电阻!
我的设计现在跑在最慢的125M啊!
在我重做读数时序后,地址没有错误现象,但是数据还是有最开始的64或者128个数多读了一遍的情况!我发现一个很有趣的情况:
当我设计中只加MIG工程生成时自带的ICON ILA VIO这三个用于CHIPSCOPE的核时,会错最开始的64个数。
当我将这三个核都注释掉后,会错最开始的128个数。
当我再自己加一个CDC文件进来,再生成一个CHIPSCOPE的核时,前面自带的三个核也保留时,一点都不错,完美!

不错时静态时序里面的DATA PATH DELAY 为2.53NS
出错64个数时是2.77NS
不加任何CHIPSCOPE的核时是6.73NS
都没有红叉,我理解是不是这个时序延迟都是可以接受的,这个差异会导致这个出错的情况吗?我对时序分析一点都不会!

另外您是怎么发现DQ的11和15位出错的,我知道PIN是肯定无法加到CHIPSCOPE里来看的,我把DQ过IOBUF后的信号加进来想看,P&R还是报错说系统时钟约束不对,我觉得就是不想让我看。我记得XILINX官网上好像有人问过,解答是加个IDDR什么的,您是怎么看的??

调试遇到问题时才发现有些早该学的东西没学多耽误事!以前一直用不到,其实很快都用到!

使用特权

评论回复
32
gnr_zhao|  楼主 | 2013-5-9 23:28 | 只看该作者
之前只看了spartan6的ug388,里面说ddr2最低速在125M系统时钟
于是我的设计一直工作在这个时钟下
今天又特意看了一下ddr2芯片的资料,之前看过没有很注意,以为跑慢了肯定没问题
今天看了发现ddr2芯片列出来的几个时钟,我觉得是建议时钟最低是400,也就是系统200M
晚上改了一个250M系统时钟出来,没有自己测,下到板子里还是最开始半行重复了一次,而且图像在跳
明天好好测一下,看看时钟和信号
250M的数据chipscope可以采吗??

使用特权

评论回复
33
GoldSunMonkey| | 2013-5-9 23:39 | 只看该作者
snk12 发表于 2013-5-9 11:13
spartan6对于ddr好像很苛刻, 也碰到过,等长线都按手册上的来,居然跑出来的数据有有问题,查了很久还是一 ...

没出板之前是可以用IBIS检查的

使用特权

评论回复
34
GoldSunMonkey| | 2013-5-9 23:40 | 只看该作者
snk12 发表于 2013-5-9 11:13
spartan6对于ddr好像很苛刻, 也碰到过,等长线都按手册上的来,居然跑出来的数据有有问题,查了很久还是一 ...

其实,我对PCB不是很懂啊

使用特权

评论回复
35
GoldSunMonkey| | 2013-5-9 23:41 | 只看该作者
gnr_zhao 发表于 2013-5-9 23:28
之前只看了spartan6的ug388,里面说ddr2最低速在125M系统时钟
于是我的设计一直工作在这个时钟下
今天又特 ...

有点高

使用特权

评论回复
36
snk12| | 2013-5-10 08:07 | 只看该作者
本帖最后由 snk12 于 2013-5-10 08:11 编辑

不知道你的pll到底怎么改的 chipscope用逻辑时钟抓信号。 ddr跑400m  逻辑时钟怎么要用250m ,pll_adv把逻辑时钟分成50m的就行了
关于dq的跟踪,跟信号后看哪些位错误的 然后%16就能得到dq位

使用特权

评论回复
37
gnr_zhao|  楼主 | 2013-5-10 11:29 | 只看该作者
本帖最后由 gnr_zhao 于 2013-5-10 11:40 编辑
snk12 发表于 2013-5-10 08:07
不知道你的pll到底怎么改的 chipscope用逻辑时钟抓信号。 ddr跑400m  逻辑时钟怎么要用250m ,pll_adv把逻辑 ...


我说的不太清楚,我用的250M系统时钟,DDR2跑在500。DDR2芯片推荐的速度有一个是DDR2跑在400。这只是这个芯片推荐的中间速度,所以应该不高吧!
我现在改的这个250M的系统时钟,MODELSIM仿真的时候报错PLL的 VCO FREQUENCY的250M没在工作范围内,之前的125M都没这个错误,为什么??我的晶振是125的,我用DCM_CLKGEN生了250的单端送给PLL!

您说的我理解是用一个比数据速度低的时钟来做CHIPSCOPE的采样时钟,这样看到的数据不准确啊???

使用特权

评论回复
38
gnr_zhao|  楼主 | 2013-5-10 11:33 | 只看该作者
snk12 发表于 2013-5-10 08:07
不知道你的pll到底怎么改的 chipscope用逻辑时钟抓信号。 ddr跑400m  逻辑时钟怎么要用250m ,pll_adv把逻辑 ...

DQ是PIN我要怎样可以用CHIPSCOPE来抓这个PIN呢?加IOBUF肯定不行,我试过。IDDR2我看有人建议过,不会用,您是不是加了这个再看DQ?

使用特权

评论回复
39
gnr_zhao|  楼主 | 2013-5-10 11:44 | 只看该作者
另外,SPARTAN-6原语里是没有PLLADV的,只有PLLBASE但是MIG生成的工程调用的都是PLLADV,这两个是通用的?

使用特权

评论回复
40
snk12| | 2013-5-10 12:43 | 只看该作者
本帖最后由 snk12 于 2013-5-10 12:52 编辑

改infrastructure_inst中的pll_adv, 不要用mig生成的, 使逻辑时钟跑在62.5M左右, 即CLKOUT2,  , 怎么说呢
pll_adv共生成了4个时钟,前2个用于ddr,一个给系统逻辑。 你的系统要用到的就是这个时钟,其实就是个操作fifo的读写时钟。
比如你的输入时钟是125M, 你想DDR2跑在500M,  假设你就用了一个fifo的模式,128位,每时钟操作就是16字节,那逻辑时钟跑在62.5M就够了,62.5*16=1000M是你的最大带宽,如果要800M的话,那逻辑时钟要设成100Mhz才不会浪费ddr2的带宽
PLL_ADV设成这样DIVCLK_DIVIDE=1, C_CLKFBOUT_MULT=4,CLKOUT0_DIVIDE=1,CLKOUT1_DIVIDE=1,CLKOUT2_DIVIDE=8

不用抓DQ位的,抓Fifo出来的数据,然后错误位号%16取余就能得到DQ位

你的问题是你不去看文档资料就在这提问, 这种涉及很多细节需要 看文档, 别人很难回答的全面
你还是先看下xilinx的mig文档吧,那上面说的很清楚的。
或网上有一篇介绍使用ddr2的**,应该能让你知道mig时钟是怎么回事。
http://www.**.com/mayMAN/blog/10-03/186414_eb41d.html

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
GoldSunMonkey + 4 很给力!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则