一步一步带你理解DDR基本原理

一、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)是直接插在主板上的,叫做DIP(Dual In-line Package)。

  • 到了80386时代,换成1片焊有内存颗粒的电路板,叫做SIMM(Single-Inline Memory Module)。由阵脚形态变化成电路板带来了很多好处:模块化,安装便利等等,由此DIY市场才有可能产生。当时SIMM的位宽是32bit,即一个周期读取4个字节。

  • 到了奔腾时,位宽变为64bit,即8个字节,于是SIMM就顺势变为DIMM(Double-Inline Memory Module)。这种形态一直延续至今,也是内存条的基本形态。

DIMM说白了就是将若干个内存颗粒,单独焊接在一块独立的电路板上,方便模块化和安装。

当然现在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组成,我们也称为Logical Bank(逻辑Bank)。每个Bank就是一个存储矩阵,就像一个大方格子阵。一般来讲,每个Bank中格子数量是相同的。这个格子阵有很多列(Column)和很多行(Row),这样我们想存取某个格子,只需要告知是哪一行哪一列就行了,这也是为什么内存可以随机存取而硬盘等则是按块存取的原因。
在这里插入图片描述
在这里插入图片描述
图中,16384*1024*8字样,表示一个Bank中由16384行,1024列组成,每个格子可保存8bit,也就是1字节数据。
那么每行可以存储1024*8bit=1KB。每行的存储容量,称为Page Size。

内存颗粒内部逻辑层次,如下:

在这里插入图片描述

2、Bank Group

随着颗粒容量提升,bank数越来越多,到DDR4时出现Bank Group,我们可以理解为,将多个Bank编成一个组,这个组就是Bank Group。如下:
在这里插入图片描述

  • Device Width:颗粒位宽,常见为4/8/16bit。
  • Die Density:颗粒密度,也就是容量,随着DDR代数迭代,容量越来越大。
  • Bank:DDR4以前是没有Bank Group的,所以该值就表示整个颗粒中Bank数量。但是在DDR4和DDR5中,就表示每个Bank Group中Bank的数量,整个颗粒Bank数量 = Bank Group * Bank。
  • Bank Group:Bank分组数量,该特性只存在于DDR4和DDR5中

3、内存颗粒容量计算

前面说了这颗内存芯片容量为128MB,那么这个大小是怎么计算出来的呢?

说到这里,就不得不提内存芯片的位宽 (Device Width),每个内存芯片都有自己的位宽,即每个传输周期能提供的数据量。说白了,这个芯片位宽就是,每个格子可以实际存储的数据大小。

理论上,完全可以做出一个位宽为64bit的芯片,但这对技术要求很高,在成本和实用性方面也都处于劣势,所以芯片的位宽一般都较小。一般常见的内存芯片位宽为4/8/16三者之一

  1. 若128MB内存芯片,为DDR3,其位宽为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相等。

  1. 若内存芯片,为DDR4或DDR5,那么
DDR4/DDR5颗粒容量 = 每个BANK的格子数 × BANK数 × 芯片位宽 x BankGroup数

四、内存颗粒的封装方式

芯片package,就是芯片封装,内部可能有多个die。可以理解为将多个芯片电路封装为一个芯片,外部看起来就是一块芯片。

我们上文讲过一个内存颗粒的大小如何计算,理论上一个内存颗粒的大小可以通过上式算出。但是实际使用时,厂商为了扩容而改变封装方式:

  • 一般来说,一个Package包含一个Die(这里指一个内存颗粒),即SDP,此时容量还是为一个内存颗粒的容量大小,也就是上文中所描述的内容。
  • 一个Package包含2个Die,即DDP(Dual-Die Package)的封装方式,此时容量就是2个内存颗粒的容量。
    在这里插入图片描述

当然,DDP这种封装方式,也可以理解为将两个内存颗粒并联,扩展位宽,比如两个8位的内存颗粒,采用DDP的封装方式,那么整体上就可以看做是一个16位的内存颗粒。

所以,如果需要计算整个Package容量大小,在计算出单个颗粒大小后,还需要知道Die per Package,即每个Package中有多少个Die颗粒,即:

Package容量 = 单个颗粒(Die)容量 * Die per Package

五、RANK

1、RANK是什么

下文中提到的,内存颗粒皆指Package的概念了,也就是电路板上肉眼实实在在看到的芯片。

上面讲到内存颗粒,我们都知道内存条上可不止一个内存颗粒,一般都是由很多内存颗粒共同组成一根内存条。那么你知道这些颗粒是怎么组织起来的吗,还是说多一个颗粒,少一个颗粒都无所谓呢?接下来,继续介绍。

我们知道,CPU与内存之间的数据接口位宽是64bit,也就意味着CPU在一个时钟周期内会向内存发送或从内存读取64bit的数据。

可是,单个内存颗粒的位宽仅有4bit、8bit或16bit,个别也有32bit的。显然发送方和接收方的位宽必须一致,不能说我发了64位数据出来,你才收到前面的16位,后面的就丢掉了。因此,必须把多个颗粒并联起来,组成一个位宽为64bit的数据集合,才可以和CPU互连。

在这里插入图片描述

我们可以,把这样一个由多个颗粒组成的64bit位宽集合,称为一个RANK。而实际上,这里64bit位宽指的是内存通道(Memory Channel)的宽度,内存通道的概念后面会讲到。

大家需要认识到的就是,多个颗粒组成当前内存通道的位宽,这个位宽集合,称之为一个RANK

不同类型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,如下图所示:
在这里插入图片描述
我们可以把原本两根物理DIMM的内存颗粒全部安装在一块内存印刷电路板上,使得一根内存条具备两倍的内存容量。 这就相当于,物理上虽然只有一根内存条,但是通过划分不同的RANK,在逻辑上可以看成是2根内存条。

同一个RANK内部的所有内存颗粒chips,连接到同一个CS(Chip Select,片选)信号线上,内存控制器能够对同一个RANK的所有chips同时进行读写操作,而在同一个RANK的chip也分享同样的控制信号。在RANK选择好后,RANK内部的所有内存颗粒一起被选中,共提供64bit的数据。

在这里插入图片描述

对于上面图中,也就是说,RANK0和RANK1共享同一组addr/command信号线,利用cs片选线选择欲读取或是写入的那一组内存颗粒,之后,就可以对这一组内存颗粒进行读写。

小结:

  • 为了保证和CPU的沟通,一个DIMM中至少要有一个RANK。但是,为了保证有一定的内存容量,经常是采用一个DIMM两个RANK的结构。
  • 一条DIMM(DDR3/DDR4)上RANK数的计算:所有内存芯片位宽之和为64就是1个RANK,如果是128就是2个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之间数据交换的重要组成部分。

CHANNEL即内存通道,实际上是一种内存的带宽加速技术。一个DDR控制器中可能有一个内存通道,也可能有两个内存通道。最常见的是双通道,民用级电脑都支持,服务器还有3通道和4通道等。

1、DDR3/DDR4内存通道

内存通道实际是对应一组时钟、命令、地址、数据线,这组总线也就是所谓的内存通道。一般一个内存通道,可以连接若干个DIMM。

DDR3/DDR4的内存通道,如下图所示:
在这里插入图片描述

DDR3/DDR4内存通道关键点,一个通道上可以插多根DIMM,每个DIMM只会占用一个通道。

下面以双通道为例,解释一下多通道技术。

  • 双通道,就是在北桥(又称之为MCH)芯片级里设计两个内存控制器,这两个内存控制器可相互独立工作,每个控制器控制一个内存通道。
  • 在这两个内存通过CPU可分别寻址、读取数据,从而使内存的带宽增加一倍,数据存取速度也相应增加一倍(理论上)。流行的双通道内存构架是由两个64bitDDR内存控制器构筑而成的,其带宽可达128bit。因为双通道体系的两个内存控制器是独立的、具备互补性的智能内存控制器,因此二者能实现彼此间零等待时间,同时运作。两个内存控制器的这种互补“天性”可让有效等待时间缩减50%,从而使内存的带宽翻倍。双通道是一种主板芯片组(Athlon64集成于CPU中)所采用新技术,与内存本身无关,任何DDR内存都可工作在支持双通道技术的主板上,所以不存在所谓“内存支持双通道”的说法。

2、DDR5内存通道

DDR5不会为每个DIMM提供一个64位数据通道,而是为每个DIMM提供两个独立的32位数据通道(考虑ECC时为40位)。

也就是说一个DIMM会占用2个通道。
在这里插入图片描述

一个DDR5内存控制器,对应2个通道,每个通道32bit。这2个通道一起向一根DIMM累计提供64bit的数据访问。
在这里插入图片描述

与传统的DDR4双通道相比,一个DDR5内存控制器对应2个通道,2个DDR5内存控制器就对应4个通道。说的更直白就是,DDR4需要至少2根DIMM才能组成双通道;DDR5一根DIMM就可以组成双通道,2根DIMM就可以组成4通道。

3、一个内存通道可以插多少根内存条

关于这个问题,我之前也有个误区,想当然的认为每个通道,应该可以插无数根内存条,就看硬件厂商做了多少个插槽,而实际这是错误的。

一个内存控制器无论是,有一个或两个内存通道,但是一般单个通道支持的RANK数量是有限的。

比如,一个通道最大支持8个RANK,那么可能有以下几种情况:

  • 若单条DIMM有1个RANK,那么这样的DIMM,可以插8根;
  • 若单条DIMM有2个RANK,那么这样的DIMM,可以插4根;
  • 若单条DIMM有4个RANK,那么这样的DIMM,可以插2根;

所以理论上,一个通道到底可以插多少根内存条,与通道支持的最大RANK数,以及DIMM的RANK数有关。

七、内存控制器到内存颗粒层次总结

从内存控制器到内存颗粒内部逻辑,笼统上讲从大到小为: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是DIMM的相关描述信息。

在每根内存条上,都有一份SPD数据,这份数据保存在一个可擦写的eeprom芯片中。SPD数据记录了该内存的许多重要信息,诸如内存的芯片及模组厂商、工作频率、工作电压、速度、容量、电压与行、列地址带宽等参数。SPD数据一般都是在出厂前,由DIMM制造商根据内存芯片的实际性能写入到eeprom芯片中。
在这里插入图片描述

SPD信息最重要的作用是作为一个身份标识,让主板能够识别到它。比如,使用CPU-Z软件读取到的SPD信息,如下图所示。
在这里插入图片描述

2、SPD数据格式

不同类型的DDR,他们的SPD数据长度和格式可能会不一样,比如:

  • DDR2、DDR3的DIMM,对应的SPD数据长度为256B
  • DDR4的DIMM,对应的SPD数据长度为512B
  • DDR5的DIMM,对应的SPD数据长度为1024B

但是,在这些不同长度的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》



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

  • 31
    点赞
  • 256
    收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论 6

打赏作者

百里杨

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值