手把手教你计算DDR的理论带宽

目录

简介

计算前需要补充的知识

理论带宽计算


简介

理解阅读需要具有DDR相关的背景知识,可以对照协议进行理解推导。这里以最新的GDDR6 JESD250C为例子,进行带宽的计算。由于各类DDR都是类似的,因此各类型的DDR都可以基于该方法进行拓展。

计算前需要补充的知识

在发送DDR的读写命令前,需要发送ACT命令打开DDR bank中的row,并且同一时间段内同一bank中仅有一个row能被打开。如果需要访问同bank内的其他row,需要先发送PRE命令关闭当前 row,然后再发送ACT命令,激活想要访问的row。这里以JEDEC250C的ACT命令为例子:

从图片中可以看到有几个主要时序参数需要满足:

参数名称

解释
tRCDACT打开row后,间隔tRCD才能发送WR/RD命令,读写命令满足的tRCD不一致,需要区分
tRASminACT打开row后需要保持一直打开的最小时间,满足后才可以发送PRE命令
tRC同bank发送ACT和ACT需要满足的最小时间间隔
tRPPRE命令后,需要tRP时间才能发送同bank ACT命令

 接下来看读写命令,正常访问DRAM流程是ACT->WR/RD->PRE。RD命令->PRE命令需要满足tRTP,WR命令->PRE命令需要满足WLmrs+BL/8+tWR/tCK. 同时GDDR6中提供了RD/WR with  auto-precharge命令,即在读写命令中存在一个auto-precharge命令关闭当前bank。WRA和RDA命令同样需要满足tRP。

DDR6中总共有16个bank,不同bank之间有ACT命令的限制。不同bank之间的ACT命令间隔需要满足tRRD。其次在tFAW的窗口内,最多只能发送4个Bank的ACT命令。

GDDR6的Burst Length为BL16,DQ位宽为16bit,因此每发送一笔命令访问的数据量为:

data_bytes = 16 / 8 * 16 = 32 Bytes

理论带宽计算

根据DRAM的时序参数,可以获取到上面时序的具体值。部分参数是cycle为单位,部分参数是 以纳秒为单位,通常统一以cycle为单位。因此需要根据DRAM工作频率来换算时序参数。

假设以16Gbps为最高速率,那么tCK=0.5ns. 假设tRASmin=32ns,那么换算成cycle即为64 cycle。依次类推,把所有时序参数都换算成以cycle为单位。这里假设一部分参数,用于计算示例,实际参数需要根据vendor提供的datasheet来计算:

参数名字描述Unit(cycle)
tRCDRACT打开row后,间隔tRCDR才能发送RD命令,读写命令满足的tRCD不一致,需要区分36
tRCDWACT打开row后,间隔tRCDW才能发送WR命令,读写命令满足的tRCD不一致,需要区分36
tRASminACT打开row后需要保持一直打开的最小时间,满足后才可以发送PRE命令64
tRC同bank发送ACT和ACT需要满足的最小时间间隔100
tRPPRE命令后,需要tRP时间才能发送同bank ACT命令36
tRTPRD命令到PREpb需要满足的时间间隔4
tRTP+RU(tRP/tCK)RD w/ AP到ACT需要满足的时间间隔4+36=40
WLmrs+BL/8+RU(tWR/tCK)WR命令到PREpb需要满足的时间间隔10+16/8+36=48
WLmrs+BL/8+WR+RU(tWR/tCK)WR w/ AP到ACT需要满足的时间间隔10+16/8+12+36=60
tRRD不同bank的ACT命令之间需要满足的时间间隔5
tFAW在tFAW的窗口内,最多只能发送4个Bank的ACT命令。20

 

那么根据我们之前整理的时序约束,开始计算。

32B随机地址读请求场景,每一笔命令的bank和row都不相同。这意味着同一个bank每次发送读命令前,都需要先发送ACT命令,然后发送RD命令,再发送PRE命令。当有新请求时,都需要重复执行 ACT->RD->PRE。或者使用RDA代替RD->PRE。

为了方便理解,这里以一个bank的ACT-RD-PRE-ACT场景作为例子(最顶上数字代表cycle数,数字不连续是因为隐藏了中间的部分):

  • 黄色部分:0-36 cycle,tRCDR时序

  • 绿色部分:36-39cycle,tRTP时序,由于没有满足tRASmin的时序,因此这里不能发送PRE命令

  • 橙色部分:64-99cycle,tRP时序,发送PRE命令后满足tRP时序才能再次发送ACT

  • 蓝色部分:0-64cycle,tRASmin时序,只有满足tRASmin之后,才能发送PRE命令

  • 红色部分:0-99cycle,tRC时序,同bank发送ACT和ACT命令的最小间隔

这是一个bank的行为,dram有16个bank,可以基于这个bank的行为进行一个拓展:

上图蓝色的部分代表tFAW时序,可以看到不同 bank的ACT命令之间间隔tRRD,正好5个cycle。这里因为tFAW正好为20个cycle,因此可以忽略tFAW的影响。

忽略了tFAW的影响后,进入我们的正题,进一步推导16个bank的ACT-RD-PRE-ACT场景(中间隐藏了没有命令的cycle):

这样一来,我们可以从图中看到在100个cycle内,可以发送完15笔ACT命令,但是RD命令只能发送出12笔。这样一来,我们就可以计算出读32B命令随机地址有效的带宽为12%:

读32B随机地址理论带宽 = 12 * 32Byte / 100 * 32Byte * 100 = 12%  

如果AXI发送过来的是256B的随机地址读请求,可知一笔读命令数据量为32B,那么命令转换后的场景为:ACT->RD->RD->RD->RD->PRE。那么新的时序图如下:

我们可以从图中看到在100个cycle内,RD命令只能发送出46笔。这样一来,我们就可以计算出读256B命令随机地址有效的带宽为46%:

读256B随机地址理论带宽 = 46 * 32Byte / 100 * 32Byte * 100 = 46% 

写方向的理论带宽也可以根据这个方法进行计算。需要注意的是,这里没有考虑刷新命令的影响,更详细的计算需要考虑刷新。同时我们可以发现,如果在ACT-PRE之间的命令数量n增加,那么带宽是可以提高至接近100%的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第二层皮-合肥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值