Xilinx DDR3 IP核使用问题汇总(持续更新)和感悟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xilinx DDR3 IP核使用问题汇总(持续更新)和感悟相关的知识,希望对你有一定的参考价值。

一度因为DDR3的IP核使用而发狂。

后来因为解决问题,得一感悟。后面此贴会完整讲述ddr3 ip的使用。(XILINX K7)

感悟:对于有供应商支持的产品,遇到问题找官方的流程。按照官方的指导进行操作。由于使用软件版本不同可能语法之间有出入或着不兼容,此时常识寻找下载版本最接近的官方Guide来操作,你就会发现解决那些莫名其妙问题的突破点。

问题:

1.综合

a.问题:Unable to set attribute "DQS_AUTO_RECAL" with value "0" on instance <phaser_in_gen.phaser_in> of block <PHASER_IN_PHY>. This property is already defined with value "1" on the block definition by a VHDL generic or a Verilog parameter. Apply the desired value by overriding the default VHDL generic or Verilog parameter. Using an attribute is not allowed.

定位到代码:

generate

 if ( PO_DATA_CTL == "TRUE" || ((RCLK_SELECT_LANE==ABCD) && (CKE_ODT_AUX =="TRUE")))  begin : phaser_in_gen

//(* DQS_AUTO_RECAL = DQS_AUTO_RECAL, DQS_FIND_PATTERN = DQS_FIND_PATTERN *)   

PHASER_IN_PHY #(...)

phaser_in(...)

else

...

根据code中,if语句里面的几个表达式真值最终括号中真值是0,因此不执行if转而执行else。因此这个部分就用不上了,所以code如何就不管。虽不知(*...*)是何语法,但问题可能出在这里。因此注释掉,重新综合。就可以了。

2.USE_DM_PORT=1 or =0.1代表使能DM(数据掩码)功能。(可以用,原因有待探究)

即写入的数据是否有一部分需要被屏蔽掉。如果在IP核生成时选择checked dm,一般生成的代码中USE_DM_PORT会为1,这样就会正确生成bit文件。如果手动改为0(同在ip核生成页面选择not checked dm一样),就会导致实现过程失败。那么纠结的问题在于:仿真时USE_DM_PORT设为0,可以得到预期的结果(写了数,然后读,读到的数就是写进去的数)。而设为1时,结果就是错误的。读出来的数并非写进去的数,而且看到仿真图中,写数据时,dm线是X(不定值)。dm为1则屏蔽数据。但是后来将USE_DM_PORT设为1,并下板运行。发现读到的数据通过串口发回来,恰好是写进去的数据。

3.另一个在map过程中出现的问题。

是关于双向数据引脚的约束问题。通过官方的solution解决,“CONFIG DCI_CASCADE = "33 32 34";”具体后面再加上来。

现在达到的效果:连续写入8次数据,然后连续读出来,数据正确。继续做一下只取其中几次的数据...看是否正确2015.11.15?

4.要读的数据相应的地址(已查明)—查看内存颗粒相应手册。关于Burst Type的解说。

引用其中一句话:The ordering of accesses within a burst is determined by the burst length, the burst type, and the starting column address。

在一个突发传输中访问数据的顺序取决于突发长度、类型及开始的列地址。

真相如下图。

技术分享图片

突发长度BL=8.本实例中采用的ddr3,是一个rank,数据位宽64bit,那么进行一次数据突发传输,将传送8*64bit的数据。如果进行8次这样的突发传输——

写:他们的列地址依次是10‘h0、10‘h8、10‘h10、10‘h18、10‘h20、10‘h28、10‘h30、10‘h38.等

读:他们的列地址依次是10‘h0、10‘h8、10‘h10、10‘h18、10‘h20、10‘h28、10‘h30、10‘h38.等

问题现象:

读地址是上面写的地址时,数据读取正确。假如赋予的读地址是10‘h3、10‘h5等,那么读出来的数据就不是我们以为的10‘h3-10‘ha地址对应的数据。

转载:http://blog.csdn.net/dawnhan/article/details/49783535


以上是关于Xilinx DDR3 IP核使用问题汇总(持续更新)和感悟的主要内容,如果未能解决你的问题,请参考以下文章

Xilinx平台SRIO介绍SRIO IP核基础知识

Xilinx FPGA平台GTX简易使用教程GTX IP核配置教程

DDR3时钟xilinx MIG

Xilinx Vivado的使用详细介绍:使用IP核

Xilinx Vivado的使用详细介绍:使用IP核

Xilinx IP核使用--FIFO