使用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送数的时钟到底应该是多少??
几个疑惑和问题请教大家,先多谢!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
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),你可以看下是不是这个原因,当地址位的时候每一位都是有用的。
我现在理解的是,如果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这个词!
我的问题现在就是要么写的时候把第一行多谢了一次,要么就是读的时候多读了一次,
或者第一行是费数
大部分震都没有问题,某些各别帧出现上面的问题
感觉应该有人遇到过类似的问题吧
请大家赐教!!!
版主帮帮忙啊
这段郁闷死了
调不出来太苦了
S6用500Mhz的采样时钟有点高。
你参照什么画的板卡呢?
一周热门 更多>