之前对DDR的一些基础知识进行了总结。最近需要了解DDR5的知识,在之前文章基础上又有一些认识,所以重新开一篇,继续记录。如果对基础概念不清楚,可以查看《一步一步带你理解DDR基本原理》。
DDR5的SPD规范中(https://pan.baidu.com/s/1JTVLnR2PpFsr_qApNZZoGw 提取码: k5p7),有关于DDR5内存条容量的计算方法,如下:
容量计算有2种方式:
- 一种是针对symmetric module,即对称模块内存条;
- 另一种是针对asymmetric module,即非对称模块内存条。
何为对称,何为非对称?我也没搞明白,谁知道,给我讲讲。DDR5资料较少,以下均为我自己的理解,若有误,望指正。
我大概想明白了,symmetric module方式的计算方法。在讲解计算公式原理前,有一些概念需要理解。
一、理解DDR5通道的变化
到了DDR5时代,预取从8n增加到了16n,并且一个通道的数据位宽从原来的64bit降为32bit。DDR5不会为每个DIMM提供一个64位数据通道,而是为每个DIMM提供两个独立的32位数据通道(考虑ECC时为40位)。同时,每个通道的burst length从8字节(BL8)翻倍到16字节(BL16),这意味着每个通道每次操作将交付64字节。与DDR4 DIMM相比,以两倍于额定内存速度(相同核心速度)运行的DDR5 DIMM将在DDR4 DIMM传输一个DDR4 DIMM的时间内提供两个64字节操作,从而使有效带宽增加了一倍。
意思就是原来一根DIMM只会使用一个通道,一个通道上一般会插多根DIMM。但是现在一根DDR5的DIMM,会使用2个通道,每个通道位宽为32bit。
我理解的DDR5,是下面这样子:
二、理解芯片package
芯片package,就是芯片封装,内部可能有多个die。可以理解为将多个芯片电路封装为一个芯片,外部看起来就是一块芯片。
以前的内存颗粒,假设128MB,就是一个芯片,所以一个package,就是一个内存颗粒的大小128MB。
DDR5,一个芯片上可以做多个内存颗粒,比如做2个,那么一个这样的package,就是256MB。
将两个 DDR 颗粒封装在一起,此时你看见的就只有单个芯片了,但其实这两个颗粒还是共享总线。意思就是内部有2个颗粒,若每个颗粒宽度为4bit的话,那么整个package所占用位宽就应该为8bit。
所以,我们可以整理出DIMM的层次结构,如下:
DIMM->CHANNEL->RANK->芯片Package->颗粒
一根DDR5内存条,有2个通道,每个通道下有多个RANK,每个RANK(32bit)由多个芯片package组成,每个package又封装了多个颗粒。 理解了这个层次,就可以继续看下面的计算公式了。
三、DDR5 symmetric module容量计算
DIMM容量计算公式:
Capacity in bytes =
Number of channels per DIMM *
Primary bus width per channel / SDRAM I/O Width *
Die per package *
SDRAM density per die / 8 *
Package ranks per channel
首先,我们来解释下公式中参数的含义:
- Number of channels per DIMM:DIMM中有多少个通道;
- Primary bus width per channel:每个通道的位宽;
- SDRAM I/O Width:内存芯片package的位宽(这里指的是package,不是指package内部的内存颗粒);
- Die per package:每个package内部有多少个颗粒;
- SDRAM density per die:每个颗粒的大小,单位为Gb;
- Package ranks per channel:每个通道下有多少个RANK。
然后,不着急,我们先进行一个拆解。
我们来计算一个RANK的大小:
RankSize=
Primary bus width per channel / SDRAM I/O Width *
Die per package *
SDRAM density per die / 8
Primary bus width per channel / SDRAM I/O Width
,得到一个RANK需要由多少个package组成;- 乘
Die per package
得到一个RANK中有多少个内存颗粒; - 再乘
SDRAM density per die
得到一个RANK容量大小,单位Gb; - 最后除8得到一个RANK容量大小,单位GB。
最后,我们来计算整个DIMM的容量:
Capacity in bytes =
Number of channels per DIMM *
RankSize *
Package ranks per channel
这就很好理解了,DIMM容量 = 通道数 * 每个通道的RANK数 * 每个RANK大小,单位GB。
附录,以上公式中相关参数,在SPD数据中的偏移,如下:
参数名 | SPD偏移 | SPD偏移名称 |
---|---|---|
Number of Package Ranks per Channel | 234 | (Common): Module Organization |
SDRAM Density per Die、Die per Package | 4 | First SDRAM Density and Package |
SDRAM I/O Width | 6 | First SDRAM I/O Width |
Primary Bus Width per Channel、Number of Channels per DIMM | 235 | (Common): Memory Channel Bus Width |
参考链接:
《内存DIMM的Volume-Rank-Chip-Die的相互关系》
《译文: DDR4 SDRAM - Understanding the Basics(上)》
《DDR5最终规范正式发布!附:详细说明》
《内存spd规范_再见,DDR4!Hello,DDR5内存!》
《小科普|DDR5内存有什么变化?》
若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!
同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。