DDR 行命中性能简析,以DDR4连续读命令为例

很多人觉得DDR行命中的访问最快,所以DDR若想达到最大带宽,那就需要所有的命令尽量的访问到同一个row上面去,这个row读完了之后,再跳到下一个row。

首先,“读命令行命中” 仅仅是 “连续读达到最大带宽” 的一个必要条件,而非充分条件;下面从几个维度来进行解释:

  1. 反证法:如果所有命令访问一个row的场景,带宽最好;那么我们很自然的会问一个问题: 为什么随着工艺和协议的演进,DDR器件的page_size几乎没有变化?为什么不做一个超级大的row,来让几乎全部命令都是row_hit的状态? — 很明显,vendor全都没有选择这么做,说明仅靠row_hit还不能达成DRAM的最大带宽,我们还忽略了其它因素。
  2. 掰开协议,两个读操作之间的间隔是tCCD,对于DDR4,tCCD分为tCCD_S和tCCD_L,下面分别介绍一下两个参数:
参数描述
tCCD_S不同BG列命令间隔4nCK
tCCD_L相同BG列命令间隔max(5nCK, 5ns)

注意到了吗,不同bank group的列命令间隔tCCD_S >=4nCK的周期数,但是相同bank group内的列命令时间间隔tCCD_L,则多一个绝对时间的限制(>=5ns 且 >= 5nCK);

在DDR协议中,绝对时间一般都意味着突破了物理电路的极限,比如tREFI(受限于电容器的漏电),比如tRFC(受限于电容器的充电); 所以tCCD_L想必也是因为相同BG内的bank共享部分电路资源,连续列操作时,这些资源由于物理条件限制,无法及时切换;但是不同BG有着各自的外围电路和缓存资源,因此没有这个限制,tCCD_S纯纯的只因DDR4是burst8(4nCK)而已,两个读如果小于4拍, 数据就多驱了。

以DDR4 3200为例,tCCD_S是4nCK, tCCD_L是5/0.625 = 8nCK,倘若所有的读都处于同一行,则命令间隔是8nCK,对于DQ线来说,有4拍在传输burst8的数据,有4拍是空闲的。那么DDR4的带宽利用率仅有可怜的50%(还没考虑刷新,act, pre的影响呢!)。

总结:连续读场景,如果要达到接近100%的带宽利用率, row_hit读仅仅是必要条件; BG轮转(也叫BG交织访问) + 每个BG操作均是row_hit, 才是达到最大带宽的充分条件。

因此,对于系统地址连续递增的读访问,DDRC的设计最简单的方式就是RRCBBC(rank - row - col - bank - bank_group - col)映射,把bank插在col中间,每burst8的数据量,即切换BG,这样才能达到最大的带宽。当然,为了均衡各个场景的带宽,实际的DDRC地址映会做的更加复杂。

OK文字描述完了,看一些时序图理解一下:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值