内存原理,一个大多数觉得懂了,实际一知半解的问题?

发布时间:
2024-07-02 18:53
阅读量:
18

内存大家都很熟悉了,但是你们有没有想过,电脑是如何去读取每一个bit的数据?DDR5的内存条容量,有8GB,16GB,32GB,甚至32GB,借助3DS堆叠技术,或者CAMM(Dell最近发明的),容量甚至高达128GB,256GB。

这么大的容量,该怎么管理呢?

假如一个存储单元是一名士兵,给你一个274,877,906,944名士兵,你该如何管理他们,才能做到人尽其用并且快速响应呢?

那就不得不介绍一下内存的组织架构了。

Cell

最基本的存储单元,也就是一个bit存储的单元,叫做1C1T,一个三极管+一个电容,电容负责指示1或0,三极管负责与外界导通。电容的电量(电压)代表了1bit数据,电压高于参考电压代表1,电压低于参考电压代表0。

Columns

把多个1C1T的单元连成一排,就是所谓的row,也叫word line,从DRAM中读取数据的时候,每次只能从一条word line上读数据。

Rows

把row排起来,用bit line连接,便形成一个存储阵列。

这是cell更多的阵列:

再多一点,让密集恐惧症发作:

好了,行和列的数量也是有限制的。每次读数据的时候,只能打开一行(row)来读取,而cell上数据可以保持的时间是有限的,如果不就是刷新,数据就会丢失,这也意味着row不可以太宽。太宽的话,在一个刷新周期内不能读完,就会极大地影响读写速度。典型的row的宽度是8192个字节。

到这里,就可以祭出DDR5 SDRAM diagram的神图了:

这张图在各家DRAM厂商的文档中都能找到,搜索function block diagram即可,下面这个链接是Micron 16GB的:

mouser.com/datasheet/2/

Bank

在这个图里,最小的访问单元是我们刚刚提到的bank,它的容量是65536 x 8192,也就是说,row的宽度是8192bit,一共有65536个row。

你肯定要问了,为什么图中将8192写成64 x 128?

因为DDR5的burst length默认支持16,对于一个x8的SDRAM,每次读写时,会将16x8 (128)bit的数据放进buffer里,每行的8192个bit,实际上是64次读/写进buffer。

Bank Group

由于SDRAM中的I/O routing,sense amplifers是相对造假高昂的部分,所以多个bank会共用一套I/O routing和sense amplifier。共用一套I/O routing的banks称作bank group,同一个bank group中的banks不可以同时访问,也就是说每个bank group同一时间只能有一个bank被访问。

由于访问内存单元最耗时间的部分是row active和precharge (后续的文章会详细介绍timing),真正read/write的速度是很快的,所以为了提高内存的访问速度,每个SDRAM上都会有多个Bank Group,在一个bank做activate或者precharge的时候,其他bank group的bank可以同时被访问,这样一来,内存的访问效率就大大提高了。

DDR5的Bank Group相比DDR4加倍了,一共有32个banks,8个bank group。

SDRAM

bank group凑成了我们通常所说的一个SDRAM芯片,有时也直接叫DRAM芯片,也就是内存条上的每一块黑色的小芯片

Rank

每个SDRAM chip的位宽,通常是4位,8位,或者16位,而x86的内存控制器(memory controller)访问内存时,通常是64bit的位宽,这就需要把不同位宽的SDRAM芯片平行地拼起来,凑出64bit给内存控制器来访问。

如果是x4的SDRAM,一排16个SDRAM芯片可以凑出64bit;同理,x8的SDRAM需要8颗,x16的SDRAM需要4颗。

这就是为什么你们看到的内存条上的SDRAM芯片数目各不相同的原因。

这一组64bit的数据,恰好是内存控制器可以同时访问的一组SDRAM,从内存组织的角度,这叫做一个Rank。细心的话,你们会在内存的标号上发现类似1Rx8, 1Rx16的字样。这里的R指的就是Rank。

DIMM

通常,一根DIMM上有1个Rank;为了提高内存条的容量,一个简单的方法就是在一份内存条上放两组SDRAM,这就是所谓的Dual-Rank的内存,比如下图中的DIMM,其容量比同位宽的single rank的DIMM多了一倍。

很多人看到这里要问了,之前我在文章里讲过,DDR5的DIMM有两个sub-channel,每个sub-channel是40bit,一共是80bit,这里为什么变成64bit了?

其实额外的16bit,也就是每个sub-channel有8bit,是留给ECC的。系统用到的数据只有64位,同时DIMM的每个rank会有一颗或两颗SDRAM chip是专门留给ECC的,比如下面这个ECC DIMM,每个Rank包好了10颗x8的SDRAM颗粒,组成了80bit的位宽,其中64bit是数据,16bit是ECC

本文讲到这里就可以结束了,DIMM的种类,可以参考这篇文章:

Shannon:DDR5内存全家照

更多关于内存的知识,关注我的专栏 (持续更新中)

DDR5的世界

END