DDR3 Sdram IP 写时序:

1、写命令和写数据总线介绍

DDR3 SDRAM控制器IP核主要预留了两组总线:

  • 一组是直接绑定到DDR3 SDRAM芯片端口(绿框),信号以ddr_ 开头。
  • 一组是留给用户端自定义使用(红框),信号以app_开头,其中user fpga logic → ip核的信号 需要我们产生。
    中间部分就是我们调用的ip核。

    先了解app侧写数据总线命令总线功能:
    app端命令总线:(input 和output是相对于ip核)

    可以看到:只有app_en 和app_rdy同时拉高(③)cmd才能被ip接收。

app端写数据总线:(input 和output是相对于ip核)

freeswitch SIP中SDP所携带的IP是内网IP_fpga开发


即在下图写数据总线波形中只有(③)位置的数据被ip接收。

freeswitch SIP中SDP所携带的IP是内网IP_写数据_02

这里对app_wdf_end信号深入分析:

其有效信号表示当前为app_wdf_data的最后一个数据。

这里要知道,用户端写数据位宽(根据芯片不同而不同 这里是128bit)和实际DDR3的数据位宽(16bit)不一样。

freeswitch SIP中SDP所携带的IP是内网IP_ip_03

在 A7 DDR3 控制器 IP 核中,burst length=8(固定),即每次突发均为:16bit(该ddr3芯片数据位宽) x 8 =128bit;

freeswitch SIP中SDP所携带的IP是内网IP_写数据_04


在前文调用ip核时,可以进行2:1和4:1的选择配置。

  • 4:1时app_wdf_data 为 128bit,此时每一个发送的有效 app_wdf_data 数据均为当前 8 突发的第一个数据,同时也是最后一个数据。即: app_wdf_end 信号与 app_wdf_wren 信号同步;
  • 2:1时app_wdf_data 为 64bit,此时每一个发送的有效 app_wdf_data 数据均为当前突发的 4 个数据,即:每两拍app_wdf_data ,app_wdf_end 信号与 app_wdf_wren 信号同步一次。
  • 这里ddr3的一个内存地址app_addr存储16bit数据,则不同比例模式下,app_addr的偏移情况:

2、写命令和写数据间关系介绍

之前介绍了写数据有三种写入方式,为了保证写入数据的稳定性,一般使用1,2方式,本次写数据实现采用第2种方式,即:写数据提前于写命令

freeswitch SIP中SDP所携带的IP是内网IP_IP_05

3、写控制模块框图设计

其中a7_wr_ctrl是需要我们设计的模块。

freeswitch SIP中SDP所携带的IP是内网IP_fpga开发_06


接口描述:

freeswitch SIP中SDP所携带的IP是内网IP_ip_07

4、进行波形设计(绿色的是输入信号,黄色为输出信号,白色为内部信号。)

freeswitch SIP中SDP所携带的IP是内网IP_fpga开发_08

5、代码实现和仿真验证(modelsim)。

仿真展示:

freeswitch SIP中SDP所携带的IP是内网IP_ip_09


freeswitch SIP中SDP所携带的IP是内网IP_fpga开发_10

5、总结:

1.一种新的tb文件传参方式:

freeswitch SIP中SDP所携带的IP是内网IP_ip_11

2.使用tb文件进行modelsim仿真技巧:

1.先找到compile文件,将最后一行注释掉,解决modelsim编译后自动关闭的问题

freeswitch SIP中SDP所携带的IP是内网IP_ip_12


freeswitch SIP中SDP所携带的IP是内网IP_数据_13


2.在modelsim 命令行中,先执行 do compile文件命令,然后执行do simulate文件命令

freeswitch SIP中SDP所携带的IP是内网IP_数据_14


freeswitch SIP中SDP所携带的IP是内网IP_IP_15