打印
[FPGA]

Xilinx DDR3控制器接口带宽利用率测试--转自FPGA版

[复制链接]
7632|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前言:
对于DDR3的使用,相信大家都不会陌生。由于高带宽、大容量、廉价的特点,DDR3(颗粒或DIMM)常应用于存储数据、建立表项等场合。但是,在我们的应用中DDR3的接口带宽(即接口速率)利用率有多高呢?这是个棘手的问题,至少在此次测试之前博主本人是没有一个明确的答案的。如果不考虑开销,单纯从时钟和数据位宽的角度看,一个工作时钟为533M,数据总线位宽为64bits的DIMM,由于接口是DDR(Double Data Rate,双倍数据速率),那么这样一个DIMM的理论最大带宽为8.528GB/s。但是,DDR3的读写共用同一组数据总线,同时DDR3内部是以BANK/行/列的形式组织起来的,一个DDR3包含若干个BANK(4/8个),一个BANK包含若干行,一行包括若干列。读写切换、同BANK不同行间切换都需要比较长的切换时间,同时不同指令之间也有各种时间间隙要求。根据应用模式的不同,DDR3的接口带宽利用率差异非常大。

本次测试的目的是为了获得Xilinx的DDR3控制器与DDR3芯片配合时的带宽利用率等数据,用于发现现有设计的缺陷,并寻求解决和规避的办法。本次测试按照使用情形的不同,构造不同的测试条件对被测对象进行测试。本次测试计算带宽效率的方式是,往Xilinx的DDR3控制器中输入指定的激励,观察DDR3芯片接口上的有效数据所占的比例,由此计算出有效带宽。在本测试报告中主要图表为Modelsim上的截图,反应的是DDR3芯片接口上的时序图。
本次测试的全部内容会以五篇博文的形式分享给大家。

图表说明:

表1 Modelsim截图中信号描述

信号名
描述
ddr3_sram_a_dq
DDR3的64位输入输出数据总线

ddr3_sram_a_addr
DDR3的行/列地址输入总线

ddr3_sram_a_ba
DDR3的Bank地址输入总线

ddr3_sram_a_ras_n
DDR3命令输入线(行地址片选,低有效)

ddr3_sram_a_cas_n
DDR3命令输入线(列地址片选,低有效)

ddr3_sram_a_we_n
DDR3命令输入线(读写选择,低有效)

ddr3_sram_a_reset_n
DDR3复位输入(低有效)

ddr3_sram_a_cs_n
DDR3芯片片选输入

ddr3_sram_a_odt
DDR3 ODT控制输入

ddr3_sram_a_cke
DDR3时钟使能

ddr3_sram_a_dm
DDR3数据掩码输入线

ddr3_sram_a_dqs_p
DDR3数据锁存信号输入输出线(组随路时钟P端)

ddr3_sram_a_dqs_n
DDR3数据锁存信号输入输出线(组随路时钟N端)

ddr3_sram_a_ck_p
DDR3差分时钟输入(P端)

ddr3_sram_a_ck_n
DDR3差分时钟输入(N端)
表2 DDR3接口输入指令格式

指令类型
CS#
RAS#
CAS#
WE#
BA
A12
A10
单Bank precharge
L
L
H
L
BA
V
L
8Banks precharge
L
L
H
L
V
V
H
Bank active
L
L
H
H
BA
Row address
Write BL8 MRS
L
H
L
L
BA
V
L
Write BL8 MRS
(auto precharge)
L
H
L
L
BA
V
H
Read BL8 MRS
L
H
L
H
BA
V
L
Read BL8 MRS
(auto precharge)
L
H
L
H
BA
V
H



图1 仿真波形对应信号名
一.单Bank多行切换测试:
描述:单Bank内行切换时,每次打开一个Row,进行一次写操作以后,必须重新打开另外一个Row,才能进行该Row的写操作。两个Row打开操作有时间间隙要求,打开Row到写操作也有时间间隙要求。因此导致单Bank内行切换时,带宽利用率极低。图中每个写操作中8个数据有效,后8个数据无效。因此,在一个写操作所占用的时间内,有效时间仅有8ns,无效时间为60ns,导致总的带宽利用率仅为8/68=11.8%。


图2 单Bank多行切换时序图
二.两Bank不换行平滑过渡测试

描述:先在Bank0的同一个Row内连续写8次然后过渡到Bank1的同一个Row内连续写8次。可以在Bank0的写操作过程中打开Bank1的一个Row,而不影响Bank0的写操作。由于提前了足够的时间打开Bank1,那么等Bank0的写操作结束后,可以直接平滑的过渡到Bank1的写操作阶段,中间没有等待。在不考虑DDR3的定时充电对带宽的消耗,以及读写切换对带宽的消耗,这种工作模式的带宽利用率接近100%。这种应用模式很适合于数据的连续缓存,可以使带宽利用率最大化。


图3 两Bank不换行平滑过渡时序图
三.8Bank依次访问测试
描述:在此项测试中,每个Bank只访问一次,接着依次访问其它Bank。DDR3有限制在一定时间内可以输入的Bank打开指令个数,即在一定时间内只允许输入最多4个Bank打开命令。同时,连续两个不同Bank的行打开命令之间也有间隙要求。从整体效果上看,只要满足两个Bank之间行打开命令的间隙,就能满足在一定时间内只打开4个Bank的限制。这些限制本身只要调度合理的话,并不会到来带宽损耗。但由于Xilinx的DDR3控制器实现方面的原因,这种限制几乎被放大了一倍,DDR3控制器每次最多只能打开4个Bank ,然后必然先关闭已打开Bank,然后再打开新的Bank。由此带来的带宽开销也是惊人的。这种模式下,在一组写操作占用的时间内,有效时间长度为32ns,无效时间长度是48ns,带宽利用率为32/80=40%。


  图4 8Bank依次访问时序图



四.4Bank依次访问测试:
描述:在此项测试中,依次访问其他Bank,共使用4个Bank。4个Bank访问完以后,再依次访问一遍这四个Bank,且同一个Bank的被访问地址在同一行同一列。用于观察Xilinx对Bank管理。测试情形基本和测试项三类似。结果显示,下发了四个Bank打开指令后,即使下一次访问的是已经打开Bank的已打开行,也要先把当前已打开的四个Bank关闭,重新打开新的Bank。这种Bank管理办法显然简单,但是会极大的浪费DDR3的带宽。这个测试项中,一组写操作所占用的时间内,有效时间长度为32ns,无效时间长度为48ns,带宽利用率为32/80=40%。



图5 4Bank依次访问时序图



五.相同Bank同一行读写切换测试
描述:在此项测试中,发起四次读写访问,其中读写操作分别间隔开,四次读写操作访问的地址都是同一个,由此观察读写切换引入的带宽开销。由图可见,在执行完一次读/写操作后,即使下一次写/读操作的地址不变,也不能立即执行下一个命令,必须等待一段时间。经测量,发现在连续的读写切换过程中,一组读写操作所需总时间为8000ps+23508ps+8000ps+40492ps=80ns,其中有效时间为16ns,带宽利用率为20%。


   图6 相同Bank同一行读写切换时序图


六.相同Bank不同行读写切换测试

描述:在此项测试中,发起四次读写访问,其中读写操作分别间隔开,四次读写操作访问的地址在相同Bank的不同行,由此观察读写切换引入的带宽开销。由图可见,由于读写切换以及行切换,在连续的读写切换过程中,一组读写操作所需总时间为8000ps+35508ps+8000ps+76492ps=128ns,其中有效时间为16ns,带宽利用率为12.5%。



                                                                      图7 相同Bank不同行读写切换时序图


七.结论
经过上面若干测试项的验证,可以发现:Xilinx的DDR3控制器结合DDR3芯片对于按地址连续存储,效率还是比较高的,基本上可以达到95%以上(一些零散的开销未详细计算,故取5%作为这些开销的总和)。但Xilinx的DDR3控制器对DDR3的随机地址存取效率比较低。对于一些查表应用,由于查表地址是随机的,DDR3的存取效率是很低的。

造成随机存取效率较低的原因主要有:1.同Bank行切换;2.同时打开的Bank数只能是4个;3.读写切换。

随机存取DDR3带宽利用率基本维持在11.8%-40%之间。
八.解决办法

1.将Xilinx的DDR3控制器的同时能打开的bank数改为8;

2.调整DDR3访问(读或写)的顺序,避免同Bank行切换以及读写切换。

相关帖子

沙发
forgot| | 2012-11-8 16:35 | 只看该作者
您查看的图片来自网易相册:lol

使用特权

评论回复
板凳
GoldSunMonkey|  楼主 | 2012-11-8 22:09 | 只看该作者
;P我从FPGA版转过来的。

使用特权

评论回复
地板
xlhtracy| | 2012-11-9 15:21 | 只看该作者
本帖最后由 xlhtracy 于 2012-11-9 15:53 编辑

:L 偶来补充图吧  


   图1 仿真波形对应信号名


图2 单Bank多行切换时序图


图3 两Bank不换行平滑过渡时序图

      图4 8Bank依次访问时序图


   图5 4Bank依次访问时序图



      图6 相同Bank同一行读写切换时序图



  图7 相同Bank不同行读写切换时序图

使用特权

评论回复
5
xlhtracy| | 2012-11-9 15:23 | 只看该作者
原谅我这么久以来一直以为猴哥的头像里面 是一只猴子被打吐血了    今天看大头像才知道是一只超人猴;P

使用特权

评论回复
6
GoldSunMonkey|  楼主 | 2012-11-9 23:19 | 只看该作者
原谅我这么久以来一直以为猴哥的头像里面 是一只猴子被打吐血了    今天看大头像才知道是一只超人猴;P
xlhtracy 发表于 2012-11-9 15:23
我弄死你。

使用特权

评论回复
7
sramsun2013| | 2013-4-9 23:38 | 只看该作者
好多看不懂的东西,依然支持哈!

使用特权

评论回复
8
GoldSunMonkey|  楼主 | 2013-4-10 21:57 | 只看该作者
sramsun2013 发表于 2013-4-9 23:38
好多看不懂的东西,依然支持哈!

希望常来

使用特权

评论回复
9
du520xi| | 2013-5-6 22:27 | 只看该作者

使用特权

评论回复
10
梅花望青竹| | 2013-5-24 00:55 | 只看该作者
v587

使用特权

评论回复
11
gs862906973| | 2014-11-20 09:09 | 只看该作者
写的不错:)

使用特权

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

本版积分规则

个人签名:                     2014, 追逐梦想

264

主题

17215

帖子

523

粉丝