基于MIG控制器的DDR3读写控制详解
目的:详细介绍FPGA中基于MIG IP核控制的DDR3详细控制及内部逻辑
平台:AX7350-Xilinx
软件:Vivado 2017.4
1.MIG IP 核介绍
1.1 IP核架构
由下图我们可以看到MIG这个IP核的架构如下,直观可以看出,MIG主要有面向用户端口和面向DDR端口,用户通过使用MIG能够通过用户端口的信号,来完成对DDR SDRAM的访问,达到简化操作的目的。
1.2 IP核用户端控制命令
首先我们需要了解与用户命令相关的信号,并且了解命令能够被正确接收的时序。在下面的接口列表中信号的I/O方向均是相对MIG IP核而言的。
1.3 仲裁模块
本模块的目的是为了来避免读写冲突的,在ddr进行写操作的同时,也有可能有读操作需要处理,这时候就会发生读写冲突,为了避免读写操作同时发生创建一个仲裁模块,模块的结构和信号列表如下:
这里简单介绍以下本模块的工作方式,本模块的状态跳转入下图所示,在仲裁状态ARBIT下若接收到读请求,则进入读状态,若接收到写请求,则进入写状态。若读写请求同时出现则优先响应写请求进入写状态,当在读写状态中接收到读写结束信号wr_done或者rd_done时,状态将回到仲裁状态。
1.4 时钟带宽
在使用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左右,要耐心等待啊,初始化完成是第一步,初始化完成了,才能有后续,不然的话,老老实实先让初始化拉高再说吧。
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-b6c3c6d139.css" rel="stylesheet">
<div class="more-toolbox">
<div class="left-toolbox">
<ul class="toolbox-list">
<li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-thumbsup"></use>
</svg><span class="name">点赞</span>
<span class="count"></span>
</a></li>
<li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-Collection-G"></use>
</svg><span class="name">收藏</span></a></li>
<li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{"mod":"1582594662_002"}"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-fenxiang"></use>
</svg>分享</a></li>
<!--打赏开始-->
<!--打赏结束-->
<li class="tool-item tool-more">
<a>
<svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
</a>
<ul class="more-box">
<li class="item"><a class="article-report">文章举报</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="person-messagebox">
<div class="left-message"><a href="https://blog.csdn.net/u011816009">
<img src="https://profile.csdnimg.cn/B/6/9/3_u011816009" class="avatar_pic" username="u011816009">
<img src="https://g.csdnimg.cn/static/user-reg-year/1x/7.png" class="user-years">
</a></div>
<div class="middle-message">
<div class="title"><span class="tit"><a href="https://blog.csdn.net/u011816009" data-report-click="{"mod":"popu_379"}" target="_blank">541板哥</a></span>
</div>
<div class="text"><span>发布了39 篇原创文章</span> · <span>获赞 7</span> · <span>访问量 6388</span></div>
</div>
<div class="right-message">
<a href="https://im.csdn.net/im/main.html?userName=u011816009" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
</a>
<a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a>
</div>
</div>
</div>
基于MIG控制器的DDR3读写控制详解
目的:详细介绍FPGA中基于MIG IP核控制的DDR3详细控制及内部逻辑
平台:AX7350-Xilinx
软件:Vivado 2017.4
1.MIG IP 核介绍
1.1 IP核架构
由下图我们可以看到MIG这个IP核的架构如下,直观可以看出,MIG主要有面向用户端口和面向DDR端口,用户通过使用MIG能够通过用户端口的信号,来完成对DDR SDRAM的访问,达到简化操作的目的。
1.2 IP核用户端控制命令
首先我们需要了解与用户命令相关的信号,并且了解命令能够被正确接收的时序。在下面的接口列表中信号的I/O方向均是相对MIG IP核而言的。
1.3 仲裁模块
本模块的目的是为了来避免读写冲突的,在ddr进行写操作的同时,也有可能有读操作需要处理,这时候就会发生读写冲突,为了避免读写操作同时发生创建一个仲裁模块,模块的结构和信号列表如下:
这里简单介绍以下本模块的工作方式,本模块的状态跳转入下图所示,在仲裁状态ARBIT下若接收到读请求,则进入读状态,若接收到写请求,则进入写状态。若读写请求同时出现则优先响应写请求进入写状态,当在读写状态中接收到读写结束信号wr_done或者rd_done时,状态将回到仲裁状态。
1.4 时钟带宽
在使用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左右,要耐心等待啊,初始化完成是第一步,初始化完成了,才能有后续,不然的话,老老实实先让初始化拉高再说吧。
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-b6c3c6d139.css" rel="stylesheet">
<div class="more-toolbox">
<div class="left-toolbox">
<ul class="toolbox-list">
<li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-thumbsup"></use>
</svg><span class="name">点赞</span>
<span class="count"></span>
</a></li>
<li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-Collection-G"></use>
</svg><span class="name">收藏</span></a></li>
<li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{"mod":"1582594662_002"}"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-fenxiang"></use>
</svg>分享</a></li>
<!--打赏开始-->
<!--打赏结束-->
<li class="tool-item tool-more">
<a>
<svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
</a>
<ul class="more-box">
<li class="item"><a class="article-report">文章举报</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="person-messagebox">
<div class="left-message"><a href="https://blog.csdn.net/u011816009">
<img src="https://profile.csdnimg.cn/B/6/9/3_u011816009" class="avatar_pic" username="u011816009">
<img src="https://g.csdnimg.cn/static/user-reg-year/1x/7.png" class="user-years">
</a></div>
<div class="middle-message">
<div class="title"><span class="tit"><a href="https://blog.csdn.net/u011816009" data-report-click="{"mod":"popu_379"}" target="_blank">541板哥</a></span>
</div>
<div class="text"><span>发布了39 篇原创文章</span> · <span>获赞 7</span> · <span>访问量 6388</span></div>
</div>
<div class="right-message">
<a href="https://im.csdn.net/im/main.html?userName=u011816009" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
</a>
<a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a>
</div>
</div>
</div>