在对DDR3,DDR4等存储器进行仿真的时候,会发现仿真不出效果!!!
DDR3出错的原因如下:
在DDR3中仿真会出现init_calib_complete初始化信号无法拉高,是因为要在对DDR3仿真时加入仿真模型文件,可以打开例程工程看,里面是加了仿真文件才可以进行正常仿真。
我们在使用MIG核进行仿真时,如果没有DDR的仿真模型就无法在仿真阶段实现对DDR的操作。Xilinx在MIG核的示例工程中为我们提供了对应的仿真模型。打开MIG核的示例工程【open IP example project】,找到对应的本地存储位置,在imports文件夹中找到对应的文件,这就是DDR的仿真模型。
特别提醒,在配置好IP之后再打开示例工程。更改芯片之后,重新配置IP获取模型。主要是由于模型在引用时会有参数配置,这个过程应该是在IP配置过程中进行,我之前拿着A7的仿真模型到K7的工程中使用,出现无法初始化成功的情况(init_calib_complete无法拉高)。MIG的初始化需要较长时间(约108us)
之后将这两个文件加入工程中,在TB中调用即可。如果采用多片DDR构成宽数据位宽,记得在例化时分配好数据位:
ddr3_model inst_ddr3_model_h (
.rst_n (DDR3_reset_n),
.ck (DDR3_ck_p),
.ck_n (DDR3_ck_n),
.cke (DDR3_cke),
.cs_n (DDR3_cs_n),
.ras_n (DDR3_ras_n),
.cas_n (DDR3_cas_n),
.we_n (DDR3_we_n),
.dm_tdqs (DDR3_dm[3:2]),
.ba (DDR3_ba),
.addr (DDR3_addr),
.dq (DDR3_dq[31:16]),
.dqs (DDR3_dqs_p[3:2]),
.dqs_n (DDR3_dqs_n[3:2]),
.tdqs_n (),
.odt (DDR3_odt)
);
ddr3_model inst_ddr3_model_l (
.rst_n (DDR3_reset_n),
.ck (DDR3_ck_p),
.ck_n (DDR3_ck_n),
.cke (DDR3_cke),
.cs_n (DDR3_cs_n),
.ras_n (DDR3_ras_n),
.cas_n (DDR3_cas_n),
.we_n (DDR3_we_n),
.dm_tdqs (DDR3_dm[1:0]),
.ba (DDR3_ba),
.addr (DDR3_addr),
.dq (DDR3_dq[15:0]),
.dqs (DDR3_dqs_p[1:0]),
.dqs_n (DDR3_dqs_n[1:0]),
.tdqs_n (),
.odt (DDR3_odt)
);
DDR4出错的原因如下:
也是同上面的问题,没有模型,导致无法进行仿真,但唯一不同的是这个的例程的模型,是在tb文件中写出来的,不是像DDR3一样有一个专门的文件。所以想做DDR4的仿真,只能看例程,然后直接上板在线调试(ILA或者DEBUG)。
但DDR4是可以跑出来的,只是当你读数据的时候是没有任何数据出来的,简单的来说就是DDR4的仿真:只能写数据不能读数据!