V6 MIG的使用问题
1、前期根据UG生成MIG,突发模式为BL=8,长度为64,DDR3 SDRAM,时钟为差分,使用掩码,存储器频率为400M,读顺序为strict
2、根据开发板案例设计中提供的UCF对生成的MIG进行验证,更改过了。
3、根据开发板提供的参考设计将MIG下的2个.v文件进行更改,主要是由于板上没有400M差分时钟,为使用200M差分时钟进行的改动。
!想法是学习实验通过MIG对板上的DDR3进行读写。
写操作:(先给命令,再给数据,命令数据间隔不超过2个时钟)
1、BL=8,通过计数器产生两个256bit的数据作为写入数据,起始地址为0,相邻的写入地址间隔为8;
2、在init_done高有效时,发起写操作,通过状态机产生app_cmd,app_en,app_addr,然后进入下个状态判断app_rdy是否为高,为高则输出app_wen和第一个写数据(256bit),然后进入下个状态判断app_wrdy是否为高,是则给剩余的256bit数以及wr_end、wr_en,并继续对app_wrdy进行检测。若rdy信号不为高,则把相应的命令或数据保持。
3、通过以上方式想写入20个512bit的数据到DDR。
读操作:
1、发起读操作命令
2、产生app-en,app_addr,app-cmd,然后进入下个状态判断app_rdy是否为高,(地址从0,8,16...)
3、以此类推想把写入的数据从DDR中读取出来。
问题:
读出的结果不对,试着将读命令的时间间隔调整也不对(间隔2,4,8,10个时钟都试过),有的时候前面几个读出的顺序对,后面的都不对,有的时候只有512bit数据中的前256bit,总之结果就是不对。感觉读写时序都是照着UG弄的,实在想不明白为啥,希望用过的高手们能给点建议,谢谢了!
在写数据之前,要先把写的数据准备好,然后发送写命令将数据写入相应的地址;读数据时,可直接读取相应地址的数据
您好,谢谢你的回答。你的意思是说先发写发数据再发写命令/地址么?我在UG406里面看到有命令和地址同时,超期,滞后发三种情况。
谢谢你的回答,我明天试下先发数据再发命令看看,我是从UG406上看到命令和数据之间可以同时也可以超前或者滞后的。
如果板子上用的是64为的DIMM条的话,那么按照BL=8来计算,你接口数据应该是直接给512位吧。我最近也遇到这个问题,通过仿真看起来,256bit的数据只够BL4,后面4个burst读或者写的数据都是0。所以才会出现前256b是对的,其他都是错的。
是的,我的板子上是64位的,MIG 数据端口是256bit,所以我提供的是两个256bit的数据以达到8*64bit=512bit的数据要求。早上在chipscope上又看了下,我的写命令和写数据的间隔是1个时钟,读出的数据:valid信号持续两个时钟,rd_end持续两个时钟,出来的数据都是发送 两个256bit中的后面那个,比如发的是W0,W1,读出的都是W1持续两个时钟。不知道咋办了。
额 终于知道自己的问题在哪了,由于app_rd_valid /data/end不能直接用chipscope观测,因此对这些信号寄存处理了下,而寄存处理的时钟是100m,这些信号的时钟是200M的,所以结果总是只有一个数持续两个时钟,并且end也持续两个时钟。
太粗心了,检查一个多星期才突然反应过来。
问题解决了吗?我也遇到了类似问题,只不过时一根数据线不对?
路过 同样不明白
求小编给发一份开发板的案例设计以及相关资料,跪谢啊!546295301@qq.com
小编给你发了资料了没,小弟最近也在看这方面的东西。同求资料啊!