基于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的访问,达到简化操作的目的。
在这里插入图片描述
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="{&quot;mod&quot;:&quot;popu_824&quot;}"><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="{&quot;mod&quot;:&quot;1582594662_002&quot;}"><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="{&quot;mod&quot;:&quot;popu_379&quot;}" 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="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                </div>
                        </div>
                </div>
发布了0 篇原创文章 · 获赞 3 · 访问量 3134

基于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="{&quot;mod&quot;:&quot;popu_824&quot;}"><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="{&quot;mod&quot;:&quot;1582594662_002&quot;}"><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="{&quot;mod&quot;:&quot;popu_379&quot;}" 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="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                </div>
                        </div>
                </div>

猜你喜欢

转载自blog.csdn.net/Lynrxl/article/details/105004185