基于Xilinx MIS IP的DDR3读写User Interface解析

发布时间:2016-10-13 14:53    发布者:rousong1989
基于Xilinx MIS IPDDR3读写User Interface解析
特权同学,版权所有,转载请注明出处
参考文档:ug586_7Series_MIS.pdf
1. Command时序
首先,关于User InterfaceCommand时序,ug中只给出以下波形。简单的来讲,app_cmdapp_addr有效,且app_en拉高,app_rdy拉高,则该命令成功发送给DDR3 Controller IP;若是在app_cmdapp_addrapp_en都有效时,app_rdy为低,那么必须保持app_cmdapp_addrapp_en的有效状态直到app_rdy拉高,那么该命令才算是成功发送给DDR3 Controller IP
1.jpg
        找一个实例来看,如图所示,在app_en连续拉高发起多次写入命令时,第58个时钟周期,遇到了app_rdy拉低的情况,此时需要保持当前的app_cmdapp_addr不变,app_en也继续为高,直到第59个时钟周期,app_rdy拉高了,那么说明该写命令成功。
2.jpg
2. 数据写入时序
对于单次的数据写入DDR3 Controller IPug中也只给出如图所示的时序波形。这里对应写入command发起的前后有123不同时间的Data Write时序,也就是说,对应这个写入command,数据比command早一点或晚一点写入都是可以的。
3.jpg 4.jpg
        怎么理解“数据比command早一点或晚一点写入都是可以的”这句话?ug有提到,command以及data都有各自的FIFO,因此他们是需要同步的,换句话说,如果让我设计这个controllerUser Interface,并且和目前的机制一样,commanddata都有FIFO,那么很简单,我会根据command FIFO中的新命令,对应取一个data FIFO中的写入数据,也不用管它们谁先被送到各自的FIFO中。当然了,command FIFO有命令是data FIFO取数据的先决条件。至于两个FIFO万一不同步,那么怎么办?没办法,用户必须保证它们同步。事实就是这么残酷,特权同学在这里吃尽苦头,总算是搞明白了,必须mark一下。
        前面说command时关注接口app_cmdapp_addrapp_enapp_rdy,这里写数据则需要关注接口app_wdf_dataapp_wdf_wrenapp_wdf_endapp_wdf_rdy
        先说app_wdf_endDDR3实际读写的Burst =8,举例来说,DDR3的数据位宽为16bitBurst8,就是说每次对DDR3执行读写,必须是连续的8*16bit数据。那么在User Interface这端,如果逻辑时钟为DDR3时钟的4分频,且数据位宽为128bit,那么单个时钟周期就对应Burst=8的一次读写操作;而如果数据位宽为64bit,那么必须执行2次数据操作才能够完成一次Burst=8的读写。对于前者,app_wdf_end始终为1就可以了;而对于后者,app_wdf_end2个写数据时钟周期内,前一次拉低,后一次拉高。
        余下3个信号app_wdf_dataapp_wdf_wrenapp_wdf_rdy,他们的工作原理和command时序类似。app_wdf_data有效,且app_wdf_wren拉高,必须app_wdf_rdy也为高,才表示当前数据写入DDR3 Controller IP
        来看个实例,如图所示,app_wdf_en一直拉高进行数据写入。第158个时钟周期,app_wdf_rdy拉低连续5个时钟周期,此时即便app_wdf_en一直拉高也无法完成数据写入,app_wdf_data必须一直hold直到第163个时钟周期app_wdf_rdy拉高。
5.jpg
        必须提醒的是,执行写数据command和执行写数据操作,它们是一一对应的,虽然控制时序可以分开实现。
3. 读数据时序
理解了写时序,读时序也就很容易领会了,它们本质上是一样的。每个数据的读操作,也需要先有读command的发起,当有效读command发起后,若干个时钟周期后,app_rd_data_valid拉高,此时app_rd_data有效,用户逻辑据此读出数据即可,非常简单。对于连续读取也是一样的。User Interface可以哗哗送一大堆读command,注意这些读command必须都是有效command,随后就等着app_rd_data_valid拉高接收app_rd_data即可。
6.jpg 7.jpg
        也看看实际操作,如图所示,发起数据读操作后,大约经过30个时钟周期后,数据才连续出现。数据是pipeline方式出现的,所以尽可能连续的读取数据可以大大提高数据吞吐量。
8.jpg

本文地址:https://www.eechina.com/thread-175880-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表