一步一步带你去理解DDR基本原理
- 一、DDR概述
- 二、DIMM概述
- 三、内存颗粒内部层次结构
-
- 1、Bank、Column、Row
- 2、Bank Group
- 3.计算内存颗粒容量
- 四、内存颗粒的封装方法
- 五、RANK
-
- 1、RANK是什么
- 2、多RANK的意义
- 3、DIMM容量计算
- 六、CHANNEL
-
- 1、DDR3/DDR4内存通道
- 2、DDR5内存通道
- 3、一个内存通道可以插多少根内存条
- 七、内存控制器总结内存颗粒的层次
-
- 1、DDR3/DDR4层次
- 2、DDR5层次
- 八、SPD数据
-
- 1、SPD是什么
- 2、SPD数据格式
- 3、SPD数据篡改
一、DDR概述
DDR的全称为Double Data Rate SDRAM(双倍速率SDRAM),就是我们平时说的,也就是芯片。
DDR在原有的SDRAM在改进的基础上,SDRAM在一个CLK周期传输一次数据,DDR在一个CLK周期传输两次数据,分别在上下沿传输一次数据。
随着技术的发展,DDR经过多轮技术迭代,发展DDR2、DDR3、DDR4、DDR5,从DDR到DDR5主要的区别是在于传输速率的不同,随着时钟周期的不断降低,传输速率也不断提高。
二、DIMM概述
DIMM(Dual Inline Memory Module)双列直插内存模块是我们常见的。
但是你知道它的历史吗?
-
最初在80286年代,内存颗粒(Chip)直接插在主板上,叫做(Dual In-line Package)。
-
80386年代,用焊有内存颗粒的电路板代替,称为(Single-Inline Memory Module)。从脚形变为电路板带来了很多好处:模块化、安装方便等DIY市场是可能的。SIMM的位宽是32bit,即一个周期读取四个字节。
-
到了奔腾,位宽变成了64bit,也就是八字节,所以SIMM就顺势变为(Double-Inline Memory Module)。这种形式一直延续到今天,也是内存条的基本形式。
当然现在DIMM由于用途不同,分为多种,如:
- RDIMM: 全称(Registered DIMM),主要是寄存模块,为了增加内存的容量和稳定性ECC和无ECC两者几乎都在市场上,ECC的。
- UDIMM:全称(Unbuffered DIMM),无缓冲模块是我们通常使用的DIMM,分有ECC和无ECC一般没有两种ECC的。
- SO-DIMM:全称(Small Outline DIMM),小外型DIMM,中所使用的DIMM,分ECC和无ECC两种。
- Mini-DIMM:DDR2时代新出现的模块类型是Registered DIMM缩小版,高端领域对体积要求较高。
可见这些DIMM规格尺寸不同:
三、内存颗粒内部层次结构
1、Bank、Column、Row
我们把某型号128MB从内存颗粒的拆卸来看,它是8个Bank组成,我们也称为。每个它是一个存储矩阵,就像一个大方的格子阵。一般来说,每个Bank中格子的数量是一样的。这个格子阵有许多列()和很多行(),这样,如果我们想存取一个网格,我们只需要告诉哪一行和哪一列,这就是为什么内存可以随机存取,而硬盘是按块存取的。 图中,16384*1024*8
字样,表示一个Bank由16384行和1024列组成,每个格子可保存8bit,也就是1字节数据。 然后每行可以存储10244*8bit=1KB。
内存颗粒的内部逻辑层次如下:
2、Bank Group
随着颗粒容量的增加,bank数量越来越多,到DDR4时出现,我们可以理解多个Bank组成一个组,这个组就是Bank Group。如下:
- Device Width:颗粒位宽,常见为4/8/16bit。
- Die Density:颗粒密度,也就是容量,随着DDR代数迭代,容量越来越大。
- Bank:,所以该值就表示整个颗粒中Bank数量。但是在DDR4和DDR5中,就表示每个Bank Group中Bank的数量,整个颗粒Bank数量 = Bank Group * Bank。
- Bank Group:Bank分组数量,。
3、内存颗粒容量计算
前面说了这颗内存芯片容量为128MB,那么这个大小是怎么计算出来的呢?
说到这里,就不得不提 (Device Width),每个内存芯片都有自己的位宽,即每个传输周期能提供的数据量。
理论上,完全可以做出一个位宽为64bit的芯片,但这对技术要求很高,在成本和实用性方面也都处于劣势,所以芯片的位宽一般都较小。。
- 若128MB内存芯片,为,其位宽为8bit,那么
DDR3颗粒容量 = 每个BANK的格子数 × BANK数 × 芯片位宽
即:128*1024*1024 = (16*1024*1024) * 8 * 1
每个格子存储1个字节,每个Bank可存储16MB,8个Bank共存储128MB。
从上面Bank图,也可以看到16384*1024*8
字样,表示一个Bank中由16384行,1024列组成,每个格子可保存8bit,也就是1字节数据。那么一个Bank中格子数就是16384*1024
,和上面公式中16*1024*1024
相等。
- 若内存芯片,为,那么
DDR4/DDR5颗粒容量 = 每个BANK的格子数 × BANK数 × 芯片位宽 x BankGroup数
四、内存颗粒的封装方式
芯片package,就是芯片封装,内部可能有多个die。可以理解为将多个芯片电路封装为一个芯片,外部看起来就是一块芯片。
我们上文讲过一个内存颗粒的大小如何计算,理论上一个内存颗粒的大小可以通过上式算出。但是实际使用时,厂商为了扩容而改变封装方式:
- 一般来说,,此时容量还是为一个内存颗粒的容量大小,也就是上文中所描述的内容。
- 而(Dual-Die Package)的封装方式,此时容量就是2个内存颗粒的容量。
当然,DDP这种封装方式,也可以理解为,比如两个8位的内存颗粒,采用DDP的封装方式,那么整体上就可以看做是一个16位的内存颗粒。
所以,如果需要计算整个Package容量大小,在计算出单个颗粒大小后,还需要知道Die per Package,即每个Package中有多少个Die颗粒,即:
Package容量 = 单个颗粒(Die)容量 * Die per Package
五、RANK
1、RANK是什么
下文中提到的,内存颗粒皆指Package的概念了,也就是电路板上肉眼实实在在看到的芯片。
上面讲到内存颗粒,我们都知道内存条上可不止一个内存颗粒,一般都是由很多内存颗粒共同组成一根内存条。那么你知道这些颗粒是怎么组织起来的吗,还是说多一个颗粒,少一个颗粒都无所谓呢?接下来,继续介绍。
我们知道,
可是,单个内存颗粒的位宽仅有4bit、8bit或16bit,个别也有32bit的。显然发送方和接收方的位宽必须一致,不能说我发了64位数据出来,你才收到前面的16位,后面的就丢掉了。因此,必须把多个颗粒并联起来,组成一个位宽为64bit的数据集合,才可以和CPU互连。
我们可以,把这样一个由多个颗粒组成的64bit位宽集合,称为一个RANK。而实际上,这里64bit位宽指的是内存通道(Memory Channel)的宽度,内存通道的概念后面会讲到。
大家需要认识到的就是,。
不同类型DDR,其通道位宽不一样,如:
- 在DDR3、DDR4上内存通道位宽为64bit。
- DDR5上,单根DIMM双通道,每个通道位宽为32bit。
为了和逻辑BANK相区分,也经常把RANK称为Physical BANK(物理BANK),简写为P-BANK。逻辑Bank,简写为L-BANK。
一个RANK中颗粒数量 = 通道位宽 / 颗粒位宽
比如,128MB内存芯片,其位宽为8bit,那么需要8块芯片才能组成64bit位宽,将这些芯片焊接到一块DIMM上,插到主板上就可以使用了。这时,该DIMM的总容量就是128MB*8=1GB。
假设,该主板只有一个DIMM插槽,并且我们还想将DIMM扩容至2GB,并且还只能使用128MB,位宽为8bit的内存颗粒。那么应该如何实现呢?说的更直白一点,就是如何做到单个DIMM容量翻倍。下面,就开始介绍。
2、多RANK的意义
假设内存通道位宽为64bit,即一个RANK为64bit,每一个64bit位宽背后都是由若干个颗粒组成的。
比如,使用16颗8bit位宽内存芯片,分别组成2个RANK,如下图所示: 这就相当于,物理上虽然只有一根内存条,但是通过划分不同的RANK,在逻辑上可以看成是2根内存条。
同一个RANK内部的所有内存颗粒chips,连接到同一个CS(Chip Select,片选)信号线上,内存控制器能够对同一个RANK的所有chips同时进行读写操作,而在同一个RANK的chip也分享同样的控制信号。在RANK选择好后,RANK内部的所有内存颗粒一起被选中,共提供64bit的数据。
对于上面图中,也就是说,RANK0和RANK1共享同一组addr/command信号线,利用cs片选线选择欲读取或是写入的那一组内存颗粒,之后,就可以对这一组内存颗粒进行读写。
- 为了保证和CPU的沟通,一个DIMM中至少要有一个RANK。但是,为了保证有一定的内存容量,经常是采用一个DIMM两个RANK的结构。
- 纠正一个误区:假如出现了所有内存芯片位宽之和等于128。则分成两个RANK,当读取一个RANK时,另一个RANK就不能读取(片选一次只能选中一个RANK),通常很多厂家就分别将这两部分放在DIMM的两面上。这就造成了许多人的错觉:双面是两个BANK的,单面是一个BANK的,实际根本不能这样认识。
- 多RANK与单RANK相比,只是纯粹增加容量,并不会提高访问带宽。
3、DIMM容量计算
我们知道一根DIMM上可能有多个RANK,所以我们用通道位宽/内存芯片位宽,就可以得到一个RANK需要几颗芯片组成,然后使用芯片容量*芯片数,就可以得到一个RANK的容量大小,再结合RANK数量,可以计算出整根DIMM的容量。
DDR3或DDR4的DIMM计算公式,如下:
DIMM容量(DDR3/DDR4) = (芯片容量 * 64 / 内存芯片位宽) * RANK数
由于DDR3、DDR4,只能一根DIMM对应1个通道,所以上述公式,实际是默认计算的一个通道容量,而DDR5的DIMM对应2个通道。
DDR5的DIMM计算公式,如下:
DIMM容量(DDR5) = (芯片容量 * 32 / 内存芯片位宽) * 每通道RANK数 * 2
具体计算过程,可以参考《DDR5内存条容量计算》。
六、CHANNEL
内存控制器(Memory Controller)是计算机系统内部控制内存并且负责内存与CPU之间数据交换的重要组成部分。
,实际上是一种内存的技术。一个DDR控制器中可能有一个内存通道,也可能有两个内存通道。最常见的是双通道,民用级电脑都支持,服务器还有3通道和4通道等。
1、DDR3/DDR4内存通道
DDR3/DDR4的内存通道,如下图所示:
下面以双通道为例,解释一下多通道技术。
- 双通道,就是在北桥(又称之为MCH)芯片级里设计两个内存控制器,这两个内存控制器可相互独立工作,每个控制器控制一个内存通道。
- 在这两个内存通过CPU可分别寻址、读取数据,从而使内存的带宽增加一倍,数据存取速度也相应增加一倍(理论上)。流行的双通道内存构架是由两个64bitDDR内存控制器构筑而成的,其带宽可达128bit。因为双通道体系的两个内存控制器是独立的、具备互补性的智能内存控制器,因此二者能实现彼此间零等待时间,同时运作。两个内存控制器的这种互补“天性”可让有效等待时间缩减50%,从而使内存的带宽翻倍。双通道是一种主板芯片组(Athlon64集成于CPU中)所采用新技术,与内存本身无关,任何DDR内存都可工作在支持双通道技术的主板上,所以不存在所谓“内存支持双通道”的说法。
2、DDR5内存通道
DDR5不会为每个DIMM提供一个64位数据通道,而是为每个DIMM提供两个独立的32位数据通道(考虑ECC时为40位)。
一个DDR5内存控制器,对应2个通道,每个通道32bit。这2个通道一起向一根DIMM累计提供64bit的数据访问。
与传统的DDR4双通道相比,一个DDR5内存控制器对应2个通道,2个DDR5内存控制器就对应4个通道。说的更直白就是,DDR4需要至少2根DIMM才能组成双通道;DDR5一根DIMM就可以组成双通道,2根DIMM就可以组成4通道。
3、一个内存通道可以插多少根内存条
关于这个问题,我之前也有个误区,想当然的认为每个通道,应该可以插无数根内存条,就看硬件厂商做了多少个插槽,而实际这是错误的。
比如,一个通道最大支持8个RANK,那么可能有以下几种情况:
- 若单条DIMM有1个RANK,那么这样的DIMM,可以插8根;
- 若单条DIMM有2个RANK,那么这样的DIMM,可以插4根;
- 若单条DIMM有4个RANK,那么这样的DIMM,可以插2根;
七、内存控制器到内存颗粒层次总结
从内存控制器到内存颗粒内部逻辑,笼统上讲从大到小为:channel>DIMM>rank>chip>bank>row/column,如下图所示:
1、DDR3/DDR4层次
在计算机系统中,有多个内存通道,每个通道可以插若干个DIMM,而每个DIMM上有至少一个以上的RANK,每个RANK由若干个内存芯片组成,这些芯片可能是4/8/16bit的,他们组合的原则就是将位宽凑齐至通道位宽(64bit)。
2、DDR5层次
DDR5的DIMM对应2个通道,每2个通道上,可以插若干个DIMM。而每个通道上有至少一个以上的RANK,每个通道上RANK最多为2个。每个RANK由若干个内存芯片组成,这些芯片可能是4/8/16bit的,他们组合的原则就是将位宽凑齐至通道位宽(32bit)。
以上都是芯片以上层次的结构,在单个内存芯片内部,还有层次划分,可能芯片package中有多个Die,每个Die上,还可能分为多个BANK Group,每个Bank Group下,还有多个Bank,每个BANK是由按行列方式排列的若干个格子组成。
八、SPD数据
1、SPD是什么
SPD(serial presence detect),即串行存在检测,中文怪怪的。
在每根内存条上,都有一份SPD数据,这份数据保存在一个可擦写的eeprom芯片中。SPD数据记录了该内存的许多重要信息,诸如内存的芯片及模组厂商、工作频率、工作电压、速度、容量、电压与行、列地址带宽等参数。SPD数据一般都是在出厂前,由DIMM制造商根据内存芯片的实际性能写入到eeprom芯片中。
SPD信息最重要的作用是作为一个身份标识,让主板能够识别到它。比如,使用CPU-Z软件读取到的SPD信息,如下图所示。
2、SPD数据格式
不同类型的DDR,他们的SPD数据长度和格式可能会不一样,比如:
- 的DIMM,对应的SPD数据长度为;
- 的DIMM,对应的SPD数据长度为;
- 的DIMM,对应的SPD数据长度为。
但是,在这些不同长度的SPD数据中,有一些字段偏移可能是不兼容的。对于一些很基础的信息,他们的格式是一致的,比如DDR4与DDR3中,第0-5字节,他们表示的含义是相同的,其他则可能就不同。
所以,具体的话,还是需要参考对应的手册。 DDR3 SPD手册:https://pan.baidu.com/s/16-tQMQfnX4mRHJ7ovoNJDQ 提取码: e5qi DDR4 SPD手册:https://pan.baidu.com/s/1Yy9YsU5VlpcP_sAc3yoHRQ 提取码: j5wj DDR5 SPD手册:https://pan.baidu.com/s/1JTVLnR2PpFsr_qApNZZoGw 提取码: k5p7
3、SPD数据篡改
我们前面提到,SPD芯片是一块可擦写的存储器,意味着SPD信息是可以更改的。所以它就成为了一些山寨厂商造假的“乐土”。
山寨厂商采用低劣的内存颗粒和PCB,通过专门的读写设备和软件,复刻正规品牌内存条的SPD信息,达到“挂羊头卖狗肉”的目的。但由于品质不可靠,这类内存条在使用过程中极易出现运行不稳定或者导致电脑死机的情况。
《Memory中的Channel/Rank/Bank解析》 《内存条的逻辑BANK和RANK(物理BANK)概念》 《内存系列一:快速读懂内存条标签》 《内存系列二:深入理解硬件原理》 《内存系列三:内存初始化浅析》 《DIMM简介》 《内存颗粒位宽和容量_关于内存,看这一篇就够了》 《内存rank概念和区分》 《不讲武德 1根DDR5内存就可以双通道》 《内存四通道?主板要分DDR5和DDR4?英特尔12代酷睿消息汇总》 《深入浅出DDR系列(一)–DDR原理篇》 《如何计算DDR4内存颗粒大小》 《DDR地址和容量计算、Bank理解》 《SDRAM原理(强烈推荐).pdf》
若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!
同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“”,即可领取。