打印
[FPGA]

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

[复制链接]
1285|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
基于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
        找一个实例来看,如图所示,在app_en连续拉高发起多次写入命令时,第58个时钟周期,遇到了app_rdy拉低的情况,此时需要保持当前的app_cmdapp_addr不变,app_en也继续为高,直到第59个时钟周期,app_rdy拉高了,那么说明该写命令成功。
2. 数据写入时序
对于单次的数据写入DDR3 Controller IPug中也只给出如图所示的时序波形。这里对应写入command发起的前后有123不同时间的Data Write时序,也就是说,对应这个写入command,数据比command早一点或晚一点写入都是可以的。
        怎么理解“数据比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拉高。
        必须提醒的是,执行写数据command和执行写数据操作,它们是一一对应的,虽然控制时序可以分开实现。
3. 读数据时序
理解了写时序,读时序也就很容易领会了,它们本质上是一样的。每个数据的读操作,也需要先有读command的发起,当有效读command发起后,若干个时钟周期后,app_rd_data_valid拉高,此时app_rd_data有效,用户逻辑据此读出数据即可,非常简单。对于连续读取也是一样的。User Interface可以哗哗送一大堆读command,注意这些读command必须都是有效command,随后就等着app_rd_data_valid拉高接收app_rd_data即可。
        也看看实际操作,如图所示,发起数据读操作后,大约经过30个时钟周期后,数据才连续出现。数据是pipeline方式出现的,所以尽可能连续的读取数据可以大大提高数据吞吐量。

3.jpg (112.71 KB )

3.jpg

相关帖子

沙发
伍戈123| | 2016-11-26 17:26 | 只看该作者
你好,我现在也在看这个DDR3的仿真,我想问一下,用这个IP核仿真的话,自己写UI接口,单纯仿真时能读数据吗?就是本身用带的MIG的核加modelsim仿真时能读能写,然后自己更改UI接口时序部分,发送读指令,应该就能收到发送的数据吧?不知道我理解的对不对?现在我在仿真时,这个时序老是搞不清楚,抓狂了。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

338

主题

338

帖子

28

粉丝