参考文档ug586_7series_MIS,主要看610-614的comman path,write path,read path的时序图和对应解释,还有看一下573页的user interface介绍,然后在ddr3_drive.v的基础上开始写代码;
在ddr3_drive.v的基础上,先产生一个wr_trig,使得app_en为1,app_en为1就会导致app_rdy为1,等到app_rdy为1就拉低app_en;app_en,app_rdy同时为1就可以使得地址和命令(写或者读)生效;
app_wdf_wren和app_wdf_rdy也是这么产生,wr_trig使得app_wdf_wren为1,app_wdf_wren为1就会导致app_wdf_rdy为1,等到app_wdf_rdy为1就拉低app_wdf_wren;app_wdf_wren,app_wdf_rdy同时为1就可以使得app_wdf_data有效;
突发为8,所以一次地址加8(该地址是芯片实际地址,不是字节地址)(修正:因为一个DDR16bit,两个DDR就是32bit,用户接口数据位宽是256bit,256/32=8,即一个用户接口数据占了8个地址,所以每发一次命令,地址加8。补充:说突发为8地址加8也没错,因为例化ip的时候,数据位宽为32,因为突发固定为8,所以用户接口数据位宽为32*8=256)。
看仿真,除了看使能,命令,地址等信号,也可以看看transcript输出的内容,里面会指示写或读到哪一个阶段,写或读了什么内容。本例子是先写触发两次写递增数据1,2,…,再读触发一次读一个写入的数据1。