分享

【一】理解DDR基本原理

 李清龙1023 2023-11-17 发布于安徽

1 内存的种类

图片

内存(Memory)又可分为 DRAM(Dynamic Random Access Memory)动态随机存取内存和 SRAM (Static Random Access Memory)静态随机存取内存两种。两种都是挥发性的内存,SRAM 的主要使用 flip-flop 正反器,通常用于快取 (Cache),而 DRAM 则是使用电容器及晶体管组成。

DDR(Double Data Rate)其实指的是 DDR SDRAM(Double Data Rate SDRAM),SDRAM 及 DDR 主要差异有三点整理如下:

图片

2 DDR 历代规格介绍

我们常说的DDR,亦即DDR SDRAM,指的是PC端或者消费电子(手机,平板)中的内存,是“Double Data Rate SynchronousDynamic Random Access Memory”(双数据率同步动态随机存储器)的简称,它允许在时钟脉冲的上升沿和下降沿传输数据,其主要作用是为了和CPU频率同步,进而大大提高数据传输效率。

有了内存的认识之后,这边将历代 DRAM 的规格整理如下:

图片

SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,现在已经发展到DDR5 SDRAM。

第一代SDR SDRAM,单边沿传输数据;

DDR SDRAM是Double Data Rate Synchronous Dynamic Random Access Memory(双数据率同步动态随机存储器)的简称,为第二代SDRAM标准。其常见标准有DDR 266、DDR 333和DDR 400。其对于SDRAM,主要它允许在时钟脉冲的上升沿和下降沿传输数据,这样不需要提高时钟的频率就能实现双倍的SDRAM速度,例如DDR266内存与PC133 SDRAM内存相比,工作频率同样是133MHz,但在内存带宽上前者比后者高一倍。这种做法相当于把单车道更换为双车道,内存的数据传输性能自然可以翻倍。

DDR2(Double Data Rate 2)SDRAM是由JEDEC(电子设备工程联合委员会)开发的第三代SDRAM内存技术标准,1.8v工作电压,240线接口,提供了相较于DDR SDRAM更高的运行效能与更低的电压,同样采用在时钟的上升/下降延同时进行数据传输的基本方式,但拥有两倍于上一代DDR内存预读取能力(即4bit数据读预取能力),其常见的频率规范有DDR2 400\533\667\800\1066\1333等,总线频率553MHz的DDR2内存只需133MHz的工作频率

DDR3 SDRAM相比起DDR2具备更低的工作电压(1.5v),240线接口,支持8bit预读,只需133MHz的工作频率便可实现1066MHz的总线频率。其频率从800MHz起跳,常见频率有DDR3 800\1066\1333\1600\1866\2133等。DDR3是当前流行的内存标准,Intel酷睿i系列(如LGA1156处理器平台)、AMD AM3主板及处理器的平台都是其“支持者”。

DDR4相比DDR3最大的区别有三点:16bit预取机制(DDR3为8bit),同样内核频率下理论速度是DDR3的两倍;更可靠的传输规范,数据可靠性进一步提升;工作电压降为1.2V,更节能。

目前已经发展到DDR5 SDRAM;

DDR到DDR5的主要变化主要表现在DDR的性能,容量和省电三个方面:IO的速率也越来越高,规范的工作电压越来越低,芯片容量越来越大。除了电压,容量和IO的速率变化之外,还包含Bank,Bank Group,PrefetchQ和Burst Length的演进,bank数越来越多,到DDR4出现bank group,prefetch也从2n增加到4n,8n。

图片

虽然我们说现在DDR4的最大速率是3200MT/s, 但是这是指的DDR4的IO频率,即DDR4和memroy controller之间的接口数据传输速率。那么DRAM是怎么实现用比较低的核心传输频率来满足日益高涨的高速IO传输速率的需求呢?这就是靠prefetch来实现的。

图片

从DDR开始到DDR3很好理解,Prefetch相当于DRAM core同时修了多条高速公路连到外面的IO口,来解决IO速率比内部核心速率快的问题,IO数据速率跟核心频率的倍数关系就是prefetch。

burst length的长度跟CPU的cache line大小有关。Burst length的长度有可能大于或者等于prefetch。但是如果prefetch的长度大于burst length的长度,就有可能造成数据浪费,因为CPU一次用不了那么多。所以从DDR3到DDR4,如果在保持DDR4内存data lane还是64的前提下,继续采用增加prefetch的方式来提高IO速率的话,一次prefetch取到的数据就会大于一个cache line的大小 (512bits),对于目前的CPU系统,反而会带来性能问题。

DDR4出现了Bank Group,这就是DDR4在不改变prefetch的情况下,能继续提升IO速率的秘密武器。DDR4利用Bank group的interleave,实现IO速率在DDR3基础上进一步提升。

2.1 Prefetch原理

图片

Prefetch字面意思就是预存取,每一代的DDR预存取大小不同,详见第2章中表格。以DDR3为例,它的Prefetch=8n,相当于DDR的每一个IO都有一个宽度为8的buffer,从IO进来8个数据后,在第8个数据进来后,才把这8个数据一次性的写入DDR内部的存储单元。下图是一个形象的解释,同时我们关注一下几个速率。DDR3的时钟是800MHz,Data Rate是1600Mbps,由于这个Buffer的存在,DDR内部的时钟只需要200MHz就可以了(注意DDR内部不是双比特翻转采样)。

图片

我们来做一个频率对照表,如下:

图片

DDR内部的最小存储单元(1bit)是一个晶体管+一个电容,电容会放电,需要不断的“刷新”(充电)才能保持正常的工作状态,由于电容充放电需要时间,DDR内部的频率受限于此,很难提高,目前技术一般在100~200MHz。因此需要用Prefetch技术来提内部数据高吞吐率(其实就是串并转换原理)。Prefetch位宽的提高,是DDR2,3,4非常显著的变化。

第一段提到,对于DDR3,在第8个数据进来后,FIFO满了,然后才把这8个数据一次性的写入DDR内部的存储单元,那么必须要求DDR的内部时钟和外部时钟有一定的约束关系,FIFO满的时候一定是以DQS下降沿采样结束的,数据手册中对DQS的下降沿与clk有一个建立时间和保持时间的约束要求的目的原来是这样。

2.2 总结

DDR核心技术点就在于:(1)双沿传输。(2)预取prefetch.

DDR的频率:(1)核心频率 (2)时钟频率 (3)数据传输频率;核心频率就是内存的工作频率;DDR1内存的核心频率是和时钟频率相同的,到了DDR2和DDR3时才有了时钟频率的概念,就是将核心频率通过倍频技术得到的一个频率。数据传输频率就是传输数据的频率。DDR1预读取是2位,DDR2预读取是4位,DDR3预读取是8位。

DDR4和LPDDR4是两种不同类型的内存,它们的主要区别在于功耗和性能方面。

DDR4是桌面和笔记本电脑常用的内存类型,相对于前一代DDR3来说功耗更低、速度更快、容量更大。DDR4内存通常可以在较高的时钟速率下运行,因此具有更好的数据传输速度和响应时间。然而,DDR4内存对于移动设备来说可能过于耗电,因此在移动设备上使用可能不太适合。

LPDDR4是专门为移动设备设计的内存类型。它比DDR4内存消耗更少的电力,并且可以在更低的电压下运行,从而延长了移动设备的电池寿命。尽管LPDDR4的时钟速率比DDR4慢一些,但由于其专门为移动设备设计,因此在移动设备上表现更好。

总之,DDR4和LPDDR4都是不同类型的内存,它们的主要区别在于功耗和性能方面。DDR4适用于桌面和笔记本电脑等高性能计算机,而LPDDR4则适用于需要长时间使用移动设备的用户。

与DDR相比,LPDDR内存全称是Low Power Double Data Rate SDRAM,中文意为低功耗双倍数据速率内存,又称为mDDR(Mobile DDR SDRM),主要针对于移动端电子产品。

LPDDR4X何以看作是LPDDR4的省电优化版本,比LPDDR4功耗更低、更省电;目前市面上主流旗舰手机内存使用的都是LPDDR4X和LPDDR4,由于二者经常同时出现,名字也十分相以,所以很容易让人混滑。

图片

DDR: 英文全称Double Data Rate Synchronous Dynamic Random Access Memory。它主要应用在普通内存条;

LPDDR: 英文全称Low Power Double Data Rate Synchronous Dynamic Random Access Memory。它主要应用在智能手机,智能手表等对功耗,体积敏感得产品;

GDDR: 英文全称Graphics Double Data Rate Synchronous Dynamic Random Access Memory。主要用于高速图像处理的场合,比如计算机的显卡中,可以简单理解为专门为显卡而做的DDR内存,这种内存与普通DDR相比,拥有更高的时钟频率和更小的发热量。

图片

3 内存原理

基本DDR subsystem架构图:DDRC +DDRphy +SDRAM颗粒,DDR IP一般包括DDR Controller和DDR PHY,内部涉及的内容包括但不限于以下几个方面:数据保序、仲裁、最优调度、协议状态机设计、防饿死机制、bypass通路、快速切频、DDR training

图片

从外观上就可以看出来小张的内存条由很多内存颗粒组成。

图片

从内存控制器到内存颗粒内部逻辑,笼统上讲从大到小为:channel>DIMM>rank>chip>bank>row/column,如下图:

一个现实的例子是:

图片

在这个例子中,一个i7 CPU支持两个Channel(双通道),每个Channel上可以插俩个DIMM,而每个DIMM由两个rank构成,8个chip组成一个rank。由于现在多数内存颗粒的位宽是8bit,而CPU带宽是64bit,所以经常是8个颗粒可以组成一个rank。所以小张的内存条2R X 8的意思是由2个rank组成,每个rank八个内存颗粒。由于整个内存是4GB,我们可以算出单个内存颗粒是256MB。

3.1 Channel

内存控制器(Memory Controller)是计算机系统内部控制内存并且负责内存与CPU之间数据交换的重要组成部分。CHANNEL即内存通道,实际上是一种内存的带宽加速技术。一个DDR控制器中可能有一个内存通道,也可能有两个内存通道。最常见的是双通道,民用级电脑都支持,服务器还有3通道和4通道等。

3.1.1 DDR3/DDR4内存通道

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

DDR3/DDR4的内存通道,如下图所示:

图片

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

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

双通道,就是在北桥(又称之为MCH)芯片级里设计两个内存控制器,这两个内存控制器可相互独立工作,每个控制器控制一个内存通道。

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

3.1.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通道。

Channel: 通道,芯片支持多少个DDRC(DDR控制器)就支持多少个通道。一个主板上可能有多个插槽,用来插多根内存。这些槽位分成两组或多组,组内共享物理信号线。这样的一组数据信号线、对应几个槽位(内存条)称为一个channel(通道)。简单理解就是DDRC(DDR控制器),一个通道对应一个DDRC.CPU外核或北桥有两个内存控制器,每个控制器控制一个内存通道。内存带宽增加一倍。(理论上)

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

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

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

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

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

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

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

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

3.2 DIMM(dual inline memory module) 

DIMM(Dual Inline Memory Module)双列直插内存模块,也就是我们常见的内存条。

图片

DIMM(dual inline memory module)是主板上的(一条可传输64bit数据的内存PCB,也就是内存颗粒的载体)。

但是它的历史,你知道吗?

最初在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规格尺寸,都会有所差异:

图片

DIMM(dual inline memory module)是主板上的(一条可传输64bit数据的内存PCB,也就是内存颗粒的载体)。

图片

3.2.1 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

3.3 Rank

3.3.1 RANK是什么

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

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

我们知道,CPU与内存之间的数据接口位宽是64bit,也就意味着CPU在一个时钟周期内会向内存发送或从内存读取64bit的数据。可是,单个内存颗粒的位宽仅有4bit、8bit或16bit,个别也有32bit的。显然发送方和接收方的位宽必须一致,不能说我发了64位数据出来,你才收到前面的16位,后面的就丢掉了。因此,必须把多个颗粒并联起来,组成一个位宽为64bit的数据集合,才可以和CPU互连。生产商把64bit集合称为一个物理BANK(Physical BANK),简写为P-BANK。为了和逻辑BANK相区分,也经常把P-BANK称为RANK或Physical RANK,把L-BANK则简称为BANK。如果每个内存颗粒的位宽是8bit,应该由8个颗粒并联起来,组成一个RANK(64bit);同理,如果颗粒的位宽是16bit,应该由4个颗粒组成一个RANK。由此可知:Rank其实就是一组内存颗粒位宽的集合。具体说,当颗粒位宽×颗粒数=64bits时,这个模组就是有一个RANK。

为了保证和CPU的沟通,一个模组至少要有一个RANK。但是,为了保证有一定的内存容量,目前,DDR2内存,经常是采用一个模组两个RANK的架构。(过去也有用几个模组组成一个RANK的情况)。

图片

我们可以,把这样一个由多个颗粒组成的64bit位宽集合,称为一个RANK。

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

不同类型DDR,其通道位宽不一样,如:

1在DDR3、DDR4上内存通道位宽为64bit。

1DDR5上,单根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容量翻倍。下面,就开始介绍。

3.3.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片选线选择欲读取或是写入的那一组内存颗粒,之后,就可以对这一组内存颗粒进行读写。

1为了保证和CPU的沟通,一个DIMM中至少要有一个RANK。但是,为了保证有一定的内存容量,经常是采用一个DIMM两个RANK的结构。

1一条DIMM(DDR3/DDR4)上RANK数的计算:所有内存芯片位宽之和为64就是1个RANK,如果是128就是2个RANK。

1纠正一个误区:假如出现了所有内存芯片位宽之和等于128。则分成两个RANK,当读取一个RANK时,另一个RANK就不能读取(片选一次只能选中一个RANK),通常很多厂家就分别将这两部分放在DIMM的两面上。这就造成了许多人的错觉:双面是两个BANK的,单面是一个BANK的,实际根本不能这样认识。

1多RANK与单RANK相比,只是纯粹增加容量,并不会提高访问带宽。

1Rank是一组内存芯片的集合,当芯片位宽x芯片数=64bits(内存总位宽)时,这些芯片就组成一个Rank。一般是一个芯片位宽8bit,然后内存每面8个芯片,那么这一面就构成一个Rank(为了提高容量,有些双面内存条就有两个rank。在DDR总线上可以用一根地址线来区分当前要访问的是哪一组)。同一个Rank中的所有芯片协作来共同读取同一个Address(一个Rank8个芯片*8bit=64bit),这个Address的数据分散在这个Rank的不同芯片上。设计Rank的原因是这样可以使每个芯片的位宽小一些,降低复杂度。                  多个颗粒并联,位宽与数据位宽一样;由于CPU与内存之间的接口位宽是64bit,也就意味着CPU在一个时钟周期内会向内存发送或从内存读取64bit的数据。但是,单个内存颗粒的位宽仅有4bit、8bit或16bit,个别也有32bit的。因此,必须要把多个颗粒并联起来。组成一个位宽为64bit的数据集合,才可以与CPU互连。

3.4 Chip

1Chip是内存条上的一个芯片,俗称内存颗粒。由图中是由8个bank组成了一个memory device。

图片

3.5 Bank

我们把某型号128MB内存颗粒拆开来看,它是由8个Bank组成,我们也称为Logical Bank(逻辑Bank)。每个Bank就是一个存储矩阵,就像一个大方格子阵。一般来讲,每个Bank中格子数量是相同的。这个格子阵有很多列(Column)和很多行(Row),这样我们想存取某个格子,只需要告知是哪一行哪一列就行了,这也是为什么内存可以随机存取而硬盘等则是按块存取的原因。

图片

图片

图中,1638410248字样,表示一个Bank中由16384行,1024列组成,每个格子可保存8bit,也就是1字节数据。那么每行可以存储1024*8bit=1KB。每行的存储容量,称为Page Size。

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

图片

1Bank:Bank是一个逻辑上的概念。一个Bank可以分散到多个Chip上,一个Chip也可以包含多个Bank.Bank和Chip的关系可以参考下面的图,每次读数据时,选定一个Rank,然后同时读取每个chip上的同一bank.

图片

3.6  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中。

在DDR4中才有的概念,每个Bank Group可以独立读写数据,这样一来内部的数据吞吐量大幅度提升,可以同时读取大量的数据,内存的等效频率在这种设置下也得到巨大的提升。DDR4架构上采用了8n预取的Bank Group分组,包括使用两个或者四个可选择的Bank Group分组,这将使得DDR4内存的每个Bank Group分组都有独立的激活、读取、写入和刷新操作,从而改进内存的整体效率和带宽。如此一来如果内存内部设计了两个独立的Bank Group,相当于每次操作16bit的数据,变相地将内存预取值提高到了16n,如果是四个独立的Bank Group,则变相的预取值提高到了32n。

图片

1Row/Column组成的Memeory Array:Bank可以理解为一个二维数组bool Array[Row][Column]。而Row/Column就是指示这个二维数组内的坐标。注意读取时每个Bank都读取相同的坐标。

这次我们来看看rank和Chip里面有什么,如下图:

图片

这是个DDR3一个Rank的示意图。我们把左边128MB Chip拆开来看,它是由8个Bank组成,每个Bank核心是个一个存储矩阵,就像一个大方格子阵。这个格子阵有很多列(Column)和很多行(Row),这样我们想存取某个格子,只需要告知是哪一行哪一列就行了,这也是为什么内存可以随机存取而硬盘等则是按块存取的原因。

实际上每个格子的存储宽度是内存颗粒(Chip)的位宽,在这里由8个Chip组成一个Rank,而CPU寻址宽度是64bit,所以64/8=8bit,即每个格子是1个字节。选择每个格子也不是简单的两组信号,是由一系列信号组成,以这个2GB DDR3为例:

图片

3.6.1 内存颗粒容量计算

前面说了这颗内存芯片容量为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数

4 内存颗粒的封装方式

芯片package,就是芯片封装,内部可能有多个die。可以理解为将多个芯片电路封装为一个芯片,外部看起来就是一块芯片。以前的内存颗粒,假设128MB,就是一个芯片,所以一个package,就是一个内存颗粒的大小128MB。

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

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

图片

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

所以,我们可以整理出DIMM的层次结构,如下:

DIMM->CHANNEL->RANK->芯片Package->颗粒

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

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

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

从内存控制器到内存颗粒内部逻辑,笼统上讲从大到小为:channel>DIMM>rank>chip>bank>row/column,如下图所示:

图片

5.1 DDR3/DDR4层次

图片

在计算机系统中,有多个内存通道,每个通道可以插若干个DIMM,而每个DIMM上有至少一个以上的RANK,每个RANK由若干个内存芯片组成,这些芯片可能是4/8/16bit的,他们组合的原则就是将位宽凑齐至通道位宽(64bit)。

5.2 DDR5层次

图片

DDR5的DIMM对应2个通道,每2个通道上,可以插若干个DIMM。而每个通道上有至少一个以上的RANK,每个通道上RANK最多为2个。每个RANK由若干个内存芯片组成,这些芯片可能是4/8/16bit的,他们组合的原则就是将位宽凑齐至通道位宽(32bit)。

以上都是芯片以上层次的结构,在单个内存芯片内部,还有层次划分,可能芯片package中有多个Die,每个Die上,还可能分为多个BANK Group,每个Bank Group下,还有多个Bank,每个BANK是由按行列方式排列的若干个格子组成。

6 SPD数据

6.1 SPD是什么

SPD(serial presence detect),即串行存在检测,中文怪怪的。SPD是DIMM的相关描述信息。

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

图片

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

图片

6.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

DDR4 SPD手册:https://pan.baidu.com/s/1Yy9YsU5VlpcP_sAc3yoHRQ

DDR5 SPD手册:https://pan.baidu.com/s/1JTVLnR2PpFsr_qApNZZoGw

6.3 SPD数据篡改

我们前面提到,SPD芯片是一块可擦写的存储器,意味着SPD信息是可以更改的。所以它就成为了一些山寨厂商造假的“乐土”。

山寨厂商采用低劣的内存颗粒和PCB,通过专门的读写设备和软件,复刻正规品牌内存条的SPD信息,达到“挂羊头卖狗肉”的目的。但由于品质不可靠,这类内存条在使用过程中极易出现运行不稳定或者导致电脑死机的情况。

7 DDR中bank,die,rank,channel的关系

图片

图1   die:2 rank:没有位宽信息,无法确认;channel:1          

图片

图2 die:4  rank:2;   channel:1          

图片

图3  die:2 rank:1; channel:2          

图片

图4 die:4 rank:没有位宽信息,无法确认;channel:2                

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多