DDR3芯片读写控制及调试总结 — Xilinx FPGA(MIS)

 

目录

                                                                      DDR3芯片读写控制及调试总结

1.  器件选型及原理图设计

       (1) 由于是直接购买现成的开发板作为项目前期开发调试使用,故DDR3芯片已板载,其型号为MT41J256M16HA-125,美光公司生产的4Gb容量DDR3芯片。采用2片DDR3芯片并联模式,即共用地址信号线、控制信号线,数据信号线进行扩展为单片位宽的2倍。那么,如果采用4片进行并联连接,则位宽扩展为4倍。(FPGA关于DDR3控制器的上限物理数据管脚位宽为72位,故原理图设计时,不要超过该上限即可。)   

标题   7系列FPGA支持的DDR3芯片型号表

 

       (2)虽说开发板厂家已确保硬件设计完美可靠,但是作为用户开发者,至少还是需要弄明确厂家的设计人员设计思路及参考依据。本质上就是想象自己重新设计硬件原理图。开发板DDR3芯片及控制部分原理图如下所示。(采用的是黑金开发板)

图1   DDR3芯片物理管脚连接图

 

(3)原理图分析。

供电电源:DDR3芯片采用1.5V电源供电,还有低电压DDR3芯片是1.35V供电。故VDD、VDDQ均为1.5V,VSS均接地。

参考电压:数据信号线参考电压 VREFDQ,地址信号及控制信号参考电压VREFCA,均为0.5* VDD。

输入时钟:DDR3芯片采用差分输入时钟,可以由外部有源晶振直接提供,还可以由源端FPGA提供,采用后者更灵活。

例如: -125速率等级的DDR3芯片上限工作频率为1600M T/s,用户可以使其工作在1200M,1000M, 800M等等。故采用FPGA提供DDR3的工作时钟。 

注意:工作频率1600M T/s  ≠ ≠ 1600Mb/s,因为在FPGA的MIG控制器中,会写成Mb/s,造成初学者的误解。因为如果当前DDR3芯片的DQ数据管脚位宽为x16,工作频率为1600M T/s,那么该DDR3芯片极限带宽为:1600x16Mb/s,所以二者是不相等的单位。

 

2.  DDR3芯片物理参数简介

几个重要的物理参数见上图所示,具体含义可以参考博文:http://blog.chinaaet.com/justlxy/p/5100051913

 

关于DDR3芯片还有两个重要的概念:预加载Prefetch, 突发长度Burst Length

        所谓prefetch,就是预加载,这是DDR时代提出的技术。在SDR中,并没有这一技术,所以其每一个cell的存储容量等于DQ的宽度(芯片数据IO位宽)。【关于什么是cell(存储单元参考博文:http://blog.chinaaet.com/justlxy/p/5100051913 )】

        进入DDR时代之后,就有了prefetch技术,DDR是两位预取(2-bit Prefetch),有的公司则贴切的称之为2-n Prefetch(n代表芯片位宽)。DDR2是四位预取(4-bit Prefetch),DDR3和DDR4都是八位预取(8-bit Prefetch)。而8-bit Prefetch可以使得内核时钟是DDR时钟的四分之一,这也是Prefetch的根本意义所在。

        Burst Lengths,简称BL,指突发长度,突发是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(SDRAM),在DDR SDRAM中指连续传输的周期数。上一部分讲到的Burst Type和Burst Order实际上就是关于Burst Length的读写顺序的配置。在DDR3 SDRAM时代,内部配置采用了8n prefetch(预取)来实现高速读写.这也导致了DDR3的Burst Length一般都是8。当然也有Bursth ength为4的设置(BC4),是指另外4笔数据是不被传输的或者被认为无效而已。在DDR2时代,内部配置采用的是4n prefetch,Burst length有4和8两种,对于BL=8的读写操作,会出现两次4n Prefetch的动作。

参考博文:http://blog.chinaaet.com/justlxy/p/5100052027

 

3.  新旧两代DDR3 控制器对比 — MIS vs MIG

上一代MIG控制器 — Spartan6系列

标题   写指令时序控制图

 

标题     写数据操作时序控制图

 

        由上一代MIG控制器可知:  写指令操作 和 写数据或读数据操作是完全独立的,二者之间没有相互联系,时序控制容易实现。

cmd_bl连续指令写入的长度限制为2^6=64,故MIG单次连续写操作和连续读操作的数据长度上限为64,这个限制其实是由指令缓存FIFO的存储深度决定的。

 

新一代MIS控制器 — 7系列FPGA等

图4   非连续写操作时序图

        由上图可知,新一代MIS控制器写指令操作 和 写数据操作不再是完全独立,二者有着时序上的关联,这就为初次使用者带来麻烦。因为习惯上一代控制器MIG,就很容易忽视 地址控制信号和数据控制信号的时序匹配问题。

        非连续写操作时,设计者需要关注地址控制信号和数据控制信号的时序匹配问题。当写指令操作使能后,提前1个clock或者至多延迟2个clock必须给数据。

 

图5  连续写操作时序控制图

 

        连续写操作时,由Figure1-49黄色高亮文字说明可知,设计者此时无需关注地址控制信号和数据控制信号的时序匹配问题。只需要保证写指令的有效个数(app_en控制)和写数据(app_wdf_wren)的有效个数均相同即可。此处文档说明我经过实际板级验证是可行的。

 

4.  MIS控制器使用体会

        (1) 单个数据写操作  — 因为读操作很简单,故此处只讨论写操作

        地址控制信号与写数据信号严格按照时序图图4要求即可,最好是都对齐。  判定写允许信号可以设定为app_rdy & app_wdf_rdy。 为简单起见,可令app_wdf_end = app_wdf_wren。且注意app_en信号有效时间为1clock,不要随意延长为2clock。如果是单个数据写操作一直写入100个数据,那么app_en信号和app_addr信号有效时间均为100clock,且需要完全对齐,且不要随意延长。我就是吃过这个亏,导致写入数据看起来是符合的。但是读数据时发现读出的数据前几个会不断变化出错。(时序还是需要严谨的)

       (2) 连续写操作  — 由于写数据不用受到写指令时序的影响,可以让地址控制信号与写数据控制信号完全独立。分别用独立的计数器是控制各自的有效时间。通过实际调试发现:app_wdf_rdy有效时间 比 app_rdy有效时间更连续。举例说明如下:

假设单次写入数据长度为128个,当写数据计数器累加到128时,可能写指令有效计数器此时为100。那么状态机可以切换到下一个状态,改状态只进行写指令操作而不进行写数据操作(因为写数据操作已完成,快于写指令操作),直到写指令计数器也累加到128,从而单次写入数据操作才算是最终完成。

        说明:实际测试可知,如果一直单个数据写操作,本质上等效于连续的写操作,但是因为单个数据写操作判定写允许信号设定为app_rdy & app_wdf_rdy,要写指令ready信号和写数据ready信号同时有效才可以,故实际可能比真正的连续写操作耗时要略微多一丢丢。两种方法测试写入504个数据长度,其实差别很小。  但是前者方法更容易理解,编程更容易一些。

 

5.  调试结果

图6  连续写入单个数据结果图   —   1~504

 

图6  连续写入单个数据结果图    —   1~504

 

图7   读出写入的数据   —   1~504

 

图7   读出写入的数据   —   1~504

 

 


 

 

 

 

  •                     <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">2</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/CAOXUN_FPGA">
                    <img src="https://profile.csdnimg.cn/C/E/4/3_caoxun_fpga" class="avatar_pic" username="CAOXUN_FPGA">
                                            <img src="https://g.csdnimg.cn/static/user-reg-year/2x/3.png" class="user-years">
                                    </a></div>
                <div class="middle-message">
                                        <div class="title"><span class="tit"><a href="https://blog.csdn.net/CAOXUN_FPGA" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">CAOXUN_FPGA</a></span>
                                            </div>
                    <div class="text"><span>发布了29 篇原创文章</span> · <span>获赞 37</span> · <span>访问量 5万+</span></div>
                </div>
                                <div class="right-message">
                                            <a href="https://im.csdn.net/im/main.html?userName=CAOXUN_FPGA" 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>
    
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Xilinx FPGADDR3读写是指使用FPGA芯片控制DDR3存储器进行读写操作。DDR3是一种高速存储器,具有较高的带宽和容量,适用于需要大量数据处理的应用场景。在使用Xilinx FPGA控制DDR3存储器时,需要进行时序设计和控制信号的生成,以确保数据的正确读写和传输。同时,还需要考虑存储器的时序参数和信号电平等因素,以保证系统的稳定性和可靠性。 ### 回答2: DDR3双倍数据速率(Double Data Rate 3)是一种常用的动态随机存取存储器,用于存储大量数据。在Xilinx FPGA中,使用DDR3存储器可以提高数据存储和读写速度,从而提高FPGA的性能表现。 首先,使用DDR3存储器需要进行初始化设置,包括设置读取延迟、写入延迟、数据宽度、读取优先级、写入优先级等参数。在初始化设置完成后,就可以开始进行DDR3读写操作。 对于DDR3的写操作,需要将要写入的数据存储到FPGA的内部缓存器中,然后通过写入请求延迟周期,将缓存器中的数据写入到DDR3存储器中。另外,写入数据时需要注意写入地址的对齐和写入数据的宽度限制。 对于DDR3的读操作,需要先发送读取请求延迟周期,然后等待存储器返回数据,将返回的数据存储到FPGA的内部缓存器中,最后进行下一步操作。在进行读操作时,需要注意读取地址的对齐和读取数据的宽度限制。 需要注意的是,DDR3存储器操作的速度与时序非常重要,对于每个DDR3存储器,都有自己的特定时序,需要按照特定时序进行读写操作。此外,为了保证DDR3存储器的正常工作,需要进行信号干扰和噪声等方面的优化,并进行时序的校准。 总之,Xilinx FPGADDR3读写操作是一项复杂的任务,需要仔细的设置时序和参数,并进行干扰和噪声的优化,才能保证存储器的稳定性和可靠性。 ### 回答3: Xilinx FPGADDR3读写是指通过FPGA控制器实现FPGADDR3内存交互的过程。DDR3内存是一种高速存储器,比之前的DDR2和DDR1速度更快,容量更大,增强了系统的稳定性和响应速度。在FPGA应用中,使用DDR3内存可以提高系统的数据处理速度,同时,实现高性能和低延迟操作。 在Xilinx FPGADDR3读写过程中,需要几个关键的元素来实现这个过程。其中,主要包括控制器,时钟和DDR PHY。控制器负责与DDR3内存通信,时钟用于同步在通信过程中产生的信号,DDR PHY负责处理数据在FPGADDR3之间的传输。此外,还需要使用IP核来设置DDR3控制器中的时序参数和其他必要的参数。 在实现DDR3读写时,需要注意几个关键的过程。首先,需要在设计时对时序进行精确的计算。其次,需要合理使用DDR3的时序,来优化数据传输。然后,需要使用FPGA内部的PHY来配置芯片DDR3设备之间的数据传输通道。最后,需要使用IP核来调整DDR3控制器的电路参数,以确保数据在FPGADDR3内存之间的传输被优化。 综上所述,Xilinx FPGADDR3读写是一项基于FPGA的高速数据传输技术,通过控制器、时钟和DDR PHY与DDR3内存进行交互。控制DDR3读写的关键是准确计算时序、优化传输通道,以及调整相关参数。它可以大大提高系统的数据处理能力,由于速度快、容量大等优点而被广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值