DDR控制模块IP——MIG
转自Vivado中MIG核中DDR的读写控制。
Memory Interface Generator,简称MIG,是Vivado中的DDR控制IP。该IP的总体架构如下图所示。
其中各信号时序如下所示。
控制信号
需要注意的是,只有当app_rdy有效时,读写命令才会被控制器接收。
写操作时序
由图可知,在向DDR写数据时,需要提供写命令app_cmd、地址app_addr、数据app_wdf_data等信号,且写入的数据最多可以比app_cmd提前一个时钟周期有效,最迟可以比app_cmd晚两个时钟周期有效。
【特别注意】在写数据的时候必须检测app_rdy和app_wdf_rdy信号是否同时有效,否则写入命令无法成功写入到DDR控制器的命令FIFO中,从而导致写操作失败。
读操作时序
时钟
在使用MIG IP控制DDR3读写数据的时候总会遇到关于MIG控制器的时钟问题,几个时钟总是搞得人晕头转向,为了进一步说明清楚其之间的相互关系,绘制了上图所示的时钟模块图(其中各时钟具体参数是根据黑金AX7350(XILINX 7035)系列FPGA开发板配置,不同的硬件平台其具体参数不同,但是时钟结构类似)。
如上图所示,MIG控制器一共可以分为三个部分:第一个是USER模块,在这里可以理解为top模块;第二个是MIG控制器,由于DDR3控制过程过去繁琐,xilinx提供了一个可以读写DDR3的核,这个核也就是MIG控制器;第三个模块也就是DDR3物理存储芯片。
首先DDR3作为物理存储介质,一定是需要时钟的,所以MIG给了DDR3一个时钟,也就是图中的clk_ddr3。那么MIG也不可能平白无故的能产生时钟,所以它也需要一个外部输入时钟,也就是图中的clk_input,是由用户端输送给MIG控制器内部的时钟分频模块。MIG内部的时钟模块将输入的时钟分成两路输出,一路clk_ddr3接到物理DDR3芯片中,另一路clk_user输送到user模块中的DDR_CTRL中。一般情况下,clk_ddr3:clk_user=4:1,如图中所示,clk_ddr3取值为800M,那么clk_user的值为200M。