将模板中 Memory interface ports 和 System Clock Ports 的端口作为 ddr3_motive 的模块端口,其中 init_calib_complete 信号被我删除了,主要是考虑到本次只是将init_calib_complete 信号拉起,没有考虑用户逻辑,所以在内部引出来就可以了。还有一个地方需要注意的就是 IP 生成的时候,系统时钟采用的是 No Buffer ...
.ddr3_dqs_p (ddr3_dqs_p), // inout [3:0] ddr3_dqs_p .init_calib_complete (init_calib_complete), // init_calib_complete .ddr3_cs_n (ddr3_cs_n), // output [0:0] ddr3_cs_n .ddr3_dm (ddr3_dm), // output [3:0] ddr3_dm .ddr3_odt (ddr3_odt), // output [0...
2. app_wdf_rdy (想要往DDR写数据?不好意思,等我准备好了再说) app_wdy_rdy信号表示写数据FIFO已经准备好接收数据了,数据在app_wdf_rdy = 1’b1且 app_wdf_wren = 1’b1时被写入。 同理,这个rdy不也受你控制。等着吧 3. init_calib_complete(DDR读写不对?先检查初始化成功了没好吧) init_calib_c...
找init_calib_complete拉高后(DDR3初始化完成)的一些局部时序图,如下图: 蓝线、和黄线处,app_cmd为0,app_en、app_rdy均为高,代表在执行写命令操作;同时app_wdf_data同地址一致,app_wdf_en、app_wdf_rdy均为高,代表在进行写数据操作 如下图: 很多个周期的app_rdy拉低,代表MIG没有准备好进行写数据命令,...
然后我们将这几个文件添加进工程里面。4.然后将sim\_tb\_top.v中的example改为我们的顶层,这样就可以使用了,我们只需要自己再生成一个100M的输入时钟给锁相环输入就可以了。在MIG初始化信号init\_calib\_complete拉高之后开始我们的读写测试。 这样,我们的仿真激励就修改成功了,可以通过仿真波形图对结果进行验证...
3. init_calib_complete(DDR读写不对?先检查初始化成功了没好吧) init_calib_complete拉高表明DDR已经校准成功初始化完成了! 拿去搬砖吧! 4. ui_clk(看好了,逻辑使用的时钟搁这输出呢) 在第二篇《DDR的时钟分析》里我们也讲过,ui_clk就是逻辑使用的时钟;由配置界面“Clock Period”与“4:1 / 2:1模式”...
init_calib_complete, // inputs sys_clk_i, sys_rst ); inout[15:0] ddr3_dq; inout[1:0] ddr3_dqs_n; inout[1:0] ddr3_dqs_p; output[13:0] ddr3_addr; output[2:0] ddr3_ba; outputddr3_ras_n; outputddr3_cas_n; outputddr3_we_n; ...
init_calib_complete表明初始化完成。可以把他们引出到led管脚上,或者普通管脚,用ILA核,或者示波器都可以测试。如果为高电平,那么表示初始化完成。 ,tg_compare_error : 标明读写错误信号。如果位高,则标明发生错误。如果是低电平,那么表示正常。 只要观察这个俩信号就可以判断ddr3工作是否正常. ...
inputinit_calib_complete ); assignapp_wdf_mask = {MEM_DATA_BITS/8{1'b0}}; localparamIDLE = 3'd0; localparamMEM_READ = 3'd1; localparamMEM_READ_WAIT = 3'd2; localparamMEM_WRITE = 3'd3; localparamMEM_WRITE_WAIT = 3'd4;
在对DDR3控制器的用户接口仿真时,通过给的例子可以看出在init_calib_complete被拉高之前,app_en、app_...