基于MIG控制器的DDR3读写控制详解

基于MIG控制器的DDR3读写控制详解

目的:详细介绍FPGA中基于MIG IP核控制的DDR3详细控制及内部逻辑
平台:AX7350-Xilinx
软件:Vivado 2017.4

1.MIG IP 核介绍
1.1 IP核架构
由下图我们可以看到MIG这个IP核的架构如下,直观可以看出,MIG主要有面向用户端口和面向DDR端口,用户通过使用MIG能够通过用户端口的信号,来完成对DDR SDRAM的访问,达到简化操作的目的。
基于MIG控制器的DDR3读写控制详解_第1张图片
1.2 IP核用户端控制命令
首先我们需要了解与用户命令相关的信号,并且了解命令能够被正确接收的时序。在下面的接口列表中信号的I/O方向均是相对MIG IP核而言的。
基于MIG控制器的DDR3读写控制详解_第2张图片
1.3 仲裁模块
本模块的目的是为了来避免读写冲突的,在ddr进行写操作的同时,也有可能有读操作需要处理,这时候就会发生读写冲突,为了避免读写操作同时发生创建一个仲裁模块,模块的结构和信号列表如下:
基于MIG控制器的DDR3读写控制详解_第3张图片
这里简单介绍以下本模块的工作方式,本模块的状态跳转入下图所示,在仲裁状态ARBIT下若接收到读请求,则进入读状态,若接收到写请求,则进入写状态。若读写请求同时出现则优先响应写请求进入写状态,当在读写状态中接收到读写结束信号wr_done或者rd_done时,状态将回到仲裁状态。
基于MIG控制器的DDR3读写控制详解_第4张图片
1.4 时钟带宽
基于MIG控制器的DDR3读写控制详解_第5张图片
在使用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。

关于DDR3的带宽计算
如上图时钟模块可知,clk_ddr3=800M,DDR3的物理接口为32bit,按照4:1的比例计算的话,用户端的接口宽度2432=256bit,其中2指的是时钟上下沿双沿读取数据,4指的是4:1的比例。
所以:
DDR3带宽=1600M*32bit

仿真
每次涉及到仿真官方提供的IP时,都要诟病一下Altera做的多难用,Xilinx做的多人性化。Xilinx针对IP的仿真,只需要在生成IP后,点击个Open Example Design即可,而脑残的Altera非要给你整得特别复杂,非得你运行个tcl脚本(这还算简单的呢),才能启动仿真,不能和Xilinx学学吗?
对于ZYNQ 7035的MIG IP核,启动仿真后,初始化完成大约在55us左右,要耐心等待啊,初始化完成是第一步,初始化完成了,才能有后续,不然的话,老老实实先让初始化拉高再说吧。

你可能感兴趣的:(Xilinx,zynq-7000)