打印

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

[复制链接]
6775|59
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gnr_zhao|  楼主 | 2013-4-26 23:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用ISE14.2 SPARTAN6芯片 16位数据线密度1G的ddr2存储芯片
MCB系统时钟工作在最低的125M,数据线设置为32位
MCB和存储芯片的brust_length设置为4
出现的现象如下:
1.写入MCB的数据没有问题,但是MCB写入DDR2的数据在最开始处多写了一个FFFF最后的真实数据少写了一个,读回来的时候最开始多写的这个变成了0000!
2.写DDR2时,DQS的双沿采在DQ的中间,但是,读DDR2时DQS的双沿和DQ是平齐的,这和仿真参考程序是不同
现在是不是第二个问题导致了第一个问题的出现?有人遇到过类似问题吗???

另外,UG388和UG416我都看过很多遍了,但是对Data_Make和地址的递增还是不太明白
我现在没有处理DM但是看仿真和chipscope的波形发现数据都能对上,只是错了一个数
我现在不明白:
1.32位的用户接口和ddr2 16位的芯片数据线这个关系为什么需要使用4位的DM来标记数据个数?
2.16位数据线的DDR2芯片的一个地址空间存储16位数据还是8位数据,pdf上的意思好像是存8位数据所以要4个地址存一个32位的用户数据,但是我总感觉是存16位数据的
3.用户接口这个面32位的数据和ddr2的16位的数据线,在系统时钟是125M的时候,给MCB送数的时钟到底应该是多少??

几个疑惑和问题请教大家,先多谢!!

相关帖子

沙发
gnr_zhao|  楼主 | 2013-4-27 19:08 | 只看该作者
今天发现不是错一个数,而且错很多数,采到了很多亚稳态
猴哥有什么建议,是不是DQS校准没有校好,还是硬件上有什么地方没有弄对??

使用特权

评论回复
板凳
CHENBINGSTER| | 2013-4-29 20:42 | 只看该作者
DDR2一直在搞,看了好多资料,如今也整理不出一个头绪来

使用特权

评论回复
地板
gnr_zhao|  楼主 | 2013-4-29 21:52 | 只看该作者
今天调试发现我写了128*128个数进去,第一个数不是我想要的,第一个数写的是FFFF
今天没看出来为啥会写这个数进去

使用特权

评论回复
5
gnr_zhao|  楼主 | 2013-4-29 21:55 | 只看该作者
CHENBINGSTER 发表于 2013-4-29 20:42
DDR2一直在搞,看了好多资料,如今也整理不出一个头绪来

ddr2看你用哪个xilinx芯片
如果用spartan6就看ug416和ug388,如果是virtex5就看ug086
我也是看了很久看了好多遍有些地方还是不太明白
另外可以去xilinx官网下参考程序看一下,有很大帮助
我现在是上板子debug的时候遇到数据不对的问题
我感觉应该很快可以搞定了

使用特权

评论回复
6
CHENBINGSTER| | 2013-4-30 19:11 | 只看该作者
我是用XILINX SPARTAN6   _XC6SLX25       UG416,UG388是看了,板子上也验证了,出不来数据的

使用特权

评论回复
7
GoldSunMonkey| | 2013-5-1 15:43 | 只看该作者
问题是您检查了相关的配置么??
这个DDR的控制器对阻抗的要求很高的

使用特权

评论回复
8
yghanwuji| | 2013-5-4 11:33 | 只看该作者
1.32位的用户接口和ddr2 16位的芯片数据线这个关系为什么需要使用4位的DM来标记数据个数?
因为ddr2是上升沿下降沿都写数,所以用户接口是32位,两倍于DDR2数据总线宽度,每一个字节一位DM,所以要四位。
2.16位数据线的DDR2芯片的一个地址空间存储16位数据还是8位数据,pdf上的意思好像是存8位数据所以要4个地址存一个32位的用户数据,但是我总感觉是存16位数据的
一个地址空间是一个字节
3.用户接口这个面32位的数据和ddr2的16位的数据线,在系统时钟是125M的时候,给MCB送数的时钟到底应该是多少??
应该是你PLL给的ddr2的时钟把

使用特权

评论回复
9
GoldSunMonkey| | 2013-5-4 23:20 | 只看该作者
如何了?

使用特权

评论回复
10
wmsk| | 2013-5-4 23:28 | 只看该作者
学习啦

使用特权

评论回复
11
gnr_zhao|  楼主 | 2013-5-5 21:18 | 只看该作者
yghanwuji 发表于 2013-5-4 11:33
1.32位的用户接口和ddr2 16位的芯片数据线这个关系为什么需要使用4位的DM来标记数据个数?
因为ddr2是上升 ...

1.每个地址空间存一个字节,这个在哪里能找到出处??(现在看地址变化的确是这样的)
如果是4位的数据线,那么一个地址空间只是用一半,空出四位吗??
2.DM是一定要使用的吗?mig生成的example_design是把DM全都置零的,我的设计里面也是全置零,似乎没有影响,所以什么时候用DM??


非常感谢您的回复!

使用特权

评论回复
12
gnr_zhao|  楼主 | 2013-5-5 21:23 | 只看该作者
GoldSunMonkey 发表于 2013-5-4 23:20
如何了?

现在有一些帧第一行有半行错数,感觉好像是上电一段时间后哪里累积的结果
我生成mig的时候选的是bank_row_col这样的地址结构
现在怀疑是不是地址映射的时候出了错
今天才知道,ddr2的row和col是地址复用的
地址使用上有什么注意呢???
是不是有哪个位或者哪些位是不能用的??(比如A10必须是0吗??)

非常感谢猴哥回复!

使用特权

评论回复
13
qin552011373| | 2013-5-6 00:28 | 只看该作者
学习了

使用特权

评论回复
14
yghanwuji| | 2013-5-6 17:56 | 只看该作者
gnr_zhao 发表于 2013-5-5 21:23
现在有一些帧第一行有半行错数,感觉好像是上电一段时间后哪里累积的结果
我生成mig的时候选的是bank_row_ ...

1.芯片资料上会写明,4位的数据线我就不太清楚了,没看过4位的芯片资料
2.DM是0的时候代表这一位对应的字节是有效数据,比如说16位数:AABBCCDD,DM为:0011,则有效数据为:AABB(至于那两个被屏蔽的数据,可能是写FF代替,这个我没验证过)。
3.地址映射应该是ddr2的local_address=local_bank & local_row & local_col,我用的是altera的,没发现row和col是复用的,但是做col用的时候,要注意本地数据总线是2倍ddr2的数据总线,需要local_address(8 downto 0)<=local_col(9 downto 1),你可以看下是不是这个原因,当地址位的时候每一位都是有用的。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
gnr_zhao + 2 赞一个!
15
gnr_zhao|  楼主 | 2013-5-6 19:46 | 只看该作者
yghanwuji 发表于 2013-5-6 17:56
1.芯片资料上会写明,4位的数据线我就不太清楚了,没看过4位的芯片资料
2.DM是0的时候代表这一位对应的字 ...

我现在理解的是,如果DM全置0,就是所有数据都有效,那么单沿采高16位还是低16位都可以采到
example_design里面就是直接全置0,我的程序现在全置0没有发现高低16位数据有问题,还没有试过置1的情况

我没用过altera,但是ddr2芯片应该是相同的,我用的这个16数据线1g密度的ddr2芯片地址a就只有13位,bank有3位,所以10位的col和13位的row肯定要复用这13位的a!
ug416给出了用户地址和ddr2地址的映射关系,就我用的这个ddr2芯片,和你说的是一样的,但是没有提复用的事,我是看网上别人的提问看到的,后来经仿真发现,当地址超过10位的col所能表达的范围以后,再写地址的时候,会先出现应该x00000001或者x0000002这样一个多余的数,我理解,这是把第一行或者第几行给有效了,好像是用的active这个词!

我的问题现在就是要么写的时候把第一行多谢了一次,要么就是读的时候多读了一次,
或者第一行是费数
大部分震都没有问题,某些各别帧出现上面的问题
感觉应该有人遇到过类似的问题吧
请大家赐教!!!

使用特权

评论回复
16
gnr_zhao|  楼主 | 2013-5-6 19:51 | 只看该作者
现在去加班,再好好用example_design自带的ila来chipscope看一下
不知道为什么我自己做的cdc文件,加进去后就始终报错,说是ila的clk时序约束不对
一直看不成,我用的采样时钟是500M的
spartan6的chipscope采样时钟要限速吗??

使用特权

评论回复
17
gnr_zhao|  楼主 | 2013-5-6 19:53 | 只看该作者
qin552011373 发表于 2013-5-6 00:28
学习了

版主帮帮忙啊
这段郁闷死了
调不出来太苦了

使用特权

评论回复
18
GoldSunMonkey| | 2013-5-6 20:58 | 只看该作者
gnr_zhao 发表于 2013-5-6 19:51
现在去加班,再好好用example_design自带的ila来chipscope看一下
不知道为什么我自己做的cdc文件,加进去后 ...

S6用500Mhz的采样时钟有点高。

使用特权

评论回复
19
GoldSunMonkey| | 2013-5-6 20:58 | 只看该作者
gnr_zhao 发表于 2013-5-6 19:53
版主帮帮忙啊
这段郁闷死了
调不出来太苦了

你参照什么画的板卡呢?

使用特权

评论回复
20
yghanwuji| | 2013-5-7 10:36 | 只看该作者
gnr_zhao 发表于 2013-5-6 19:46
我现在理解的是,如果DM全置0,就是所有数据都有效,那么单沿采高16位还是低16位都可以采到
example_desi ...

如果你不需要屏蔽某个字节的话,你全写0就可以了。
你不是用IP核生成的控制器?是自己写的DDR2控制程序吗?
col和row确实是复用的,我在altera里面是只要操作本地地址就行了,它生成的ddr2控制器可以自己选择当前操作col还是row,DDR2引脚通过RAS#和CAS#来选择当前操作的是ROW ADDRESS 还是column address 你可以看下芯片手册里的ddr2 command的真值表。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

93

帖子

0

粉丝