【转】关于内存,看这一篇就够了!

通常大家提起的内存严格上来说应该称为内存条(Memory Module)。内存条可以在普通的电脑市场或者网上平台上购买到。内存条通常采用DRAM(动态随机存取存储器)作为内存颗粒,若干内存颗粒配合一块长方形的印刷电路板组成一根内存条。除了内存颗粒外,内存条上还可能有其它芯片,例如SPD存储芯片,时钟缓存寄存器芯片(Registering Clock Driver),或数据缓存芯片(Data Buffer)等。

内存条正面(RDIMM):


内存条背面:

图中黑色长方形是芯片的外部封装,里面封装了一片或者若干片芯片(通常是一片芯片)。

在整个计算机系统中,内存条无法单独工作,需要有对应的内存控制单元(Memory Controller)以及相应的内存条供电模块。最早的内存控制器在北桥芯片中(North Bridge),但随着北桥芯片逐渐退出市场,内存控制器已经移到了处理器内部。

需要注意的是,并非所有的计算机系统都使用内存条,例如Ultrabook,内存颗粒被直接安装在主板上,这样一来,主板在设计的时候就要兼顾部分内存条本身的设计内容,同时需要提供类似的SPD芯片,或将其内容内嵌在BIOS中。某些计算机系统采用的处理器本身就内置了高速内存芯片,在内置内存容量满足需求的情况下,可以省略外部内存槽的设计。

接下来的内容可能比较基础,如果已经很熟悉的读者不妨帮忙找找是否有错误的地方,并欢迎以各种形式反馈给我们。

  • 什么是RAM?
  • 什么是SRAM?
  • 什么是DRAM?

这三个问题请参考[DDR]SRAM和DRAM

纠结是否skip?可以尝试以下问题:

  • 两根单Rank的内存是否和一根双Rank的内存一样?
  • 采用x16内存颗粒的内存条是否有ECC功能?
  • RDIMM的RCD奇偶校验主要包含哪些种类的信号?

什么是SDRAM?

SDRAM是Synchronous Dynamic Random Access Memory的缩写。

Synchronous(同步):是指内存颗粒的读写访问是基于某个同步时钟。

Dynamic(动态):动态的含义是指两点,一是存储单元存储内容需要定期刷新(refresh),二是存储单元的内容在掉电和不刷新的状态下会丢失。

Random Access(随机存取):读写操作延迟不随访问存储介质的物理位置的不同而不同。

需要注意的是通常人们喜欢使用DRAM代替SDRAM。原因是目前很少有Asynchronous的 DRAM。

什么是DDR?

DDR是Double Data Rate的缩写,全称应该是DDR SDRAM,DDR内存是SDRAM的一种,在DDR出现之前,我们还有Single Data Rate的SDRAM。Double Data Rate的含义是,在时钟信号的上下边沿均可以传输数据。Single Data Rate的含义是,只能在时钟信号的上升沿传输数据。

什么是DIMM?

DIMM是Dual In-Line Memory Module的缩写。意思是内存条印刷电路板正反面均有金手指与主板上的内存条槽接触,这种结构被称为DIMM。于是内存条也有人叫DIMM条,主板上的内存槽也有人称为DIMM槽。

既然有DIMM,那估计有SIMM(Single In-Line Memory Module),有兴趣的读者可以到网上搜索一下。

什么是SODIMM?

在笔记本中使用普通内存条会使得笔记本尺寸过大,而直接使用内存颗粒则不便于扩展与维修,两者之间的空隙被SODIMM填补,SODIMM是Small Outline DIMM的缩写,意思是小尺寸的DIMM,一般用在笔记本或一体机中,如下图所示:

什么是DDR,DDR2,DDR3,DDR4?

DDR实际上是第一代的DDR,也可以称为DDR1。

DDR2,DDR3和DDR4则指DDR的第二三四代。它们在电压,速率,时钟拓扑结构,控制线和地址线拓扑结构,以及支持的命令上均有差异,这里将不会展开来说明,除非读者有需求。也可以参考JEDEC历代官方规范。

什么是Memory Channel?

若干个DIMM可以连接到一组总线上,这组总线被称为内存通道(Memory Channel)。如图所示:

数据和校验ECC是双向信号,并且连接内存通道内所有的DIMMs。例如,数据信号DQ0,将连接DIMM0的DQ0,DIMM1的DQ0…

时钟,控制信号和地址信号是单方向的,由内存控制器发出,内存颗粒接收。其中地址信号将连接所有的DIMMs。

时钟和控制信号将不会连接所有的DIMMs,可能只连接某根DIMM或某几根DIMMs。例如时钟信号,CKE信号,ODT信号,CS_N片选信号等。具体的连接方式请查阅系统设计的参考线路。

什么是内存颗粒?

内存颗粒(DRAM Device)常与内存混淆,而内存经常与内存条混淆。严格意义上来说,内存颗粒是指DRAM Device,DRAM Chips,是指符合JEDEC标准的一种芯片。广义上,被封装好了的内存芯片也可以称为内存颗粒。由于3DS的出现,一个封装体内可能含有多个DRAM芯片(Die)。不过通常情况下,一个封装体内只有一个Die。

需要特别注意的是,JEDEC DDR4的主规范针对的是DRAM Device,而不是内存条。其中介绍的信号时序图也不是指内存槽上的时序,而是内存芯片的输入输出口时序。

什么是Rank?

前面介绍过一条内存通道可以有多个DIMM,如果因为某种原因,我们最多在主板上只能允许三根DIMM存在,例如从第四根DIMM开始,我们的空间就不够了,又或者信号因为长度超长而质量下降等等。但从性能出发,我们需要六根DIMM在一条内存通道中,怎么办?这时,就可以引入Rank的概念。Rank就好像逻辑DIMM。我们可以把原本两根物理DIMM的内存颗粒全部安装在一块内存印刷电路板上,使得一根内存条具备两倍的内存容量。我们把这种逻辑DIMM称为Rank。为了支持多RANK的内存条,我们需要在物理DIMM接口上定义多个CS_N片选信号以便可以选择相应的Rank。

x8 Dual Rank RDIMM:

总结一下,一个Rank就是指一组内存颗粒的CS信号被连在一起,并由内存控制器单独的一根CS_N信号控制,共同组成位宽为64bit(不带ECC)或72bit(带ECC)的存储阵列,共同完成一条内存通道下发的指令。

什么是内存条的数据位宽?

x86架构中内存条的数据位宽是64bit,也就是说一个时钟周期,如果只考虑上升沿传输数据的话,一个时钟周期可以传送64bit的数据。如果Double Data Rate,一个时钟周期可以传送两笔64bit的数据。

如果内存条支持ECC校验功能,则需要额外8bit的宽度。所以,支持ECC功能的内存条除了64bit的数据外,还有8bit的校验数据。

目前主流的内存颗粒(DRAM Devices)的数据位宽有4bit,8bit和16bit,分别对应x4,x8和x16类型内存颗粒。如果我们采用x4的内存颗粒构造带ECC功能的内存条,则我们需要(64+8)/4 = 18颗x4的内存颗粒。而如果我们采用x8的内存颗粒,则只需要9颗。

这样的设计只是单Rank的设计,如果是多Rank的设计,则需要更多的内存颗粒。例如,2 Rank的带ECC的内存条,如果采用x4的内存颗粒,那么总共需要36颗x4的DRAM Devices。

需要注意的是如果采用x16的内存颗粒,则无法实现ECC功能,因为4颗x16的内存颗粒正好组成一个Rank并且不带ECC功能,而多增加一颗,则会多出8bit的位宽无法匹配。因此,大部分的x16的内存被用在了SODIMM中,配与笔记本使用。当然,如果一定要增加ECC功能,可以考虑增加一颗x8芯片。

什么是RDIMM?

RDIMM的第一个字母R实际就是前面提到过的一颗额外的芯片,称为时钟缓存寄存器芯片(Registering Clock Driver)。没有该芯片的内存条一般被称为UDIMM(Unbuffered-DIMM)。这颗寄存器芯片主要用来缓存(buffer)时钟/控制/命令/地址等信号。缓存的主要目的是解决信号质量以及负载过重的问题。

RCD(时钟缓存寄存器芯片):

除此之外,通常的RDIMM会支持ECC功能和命令/地址奇偶校验功能(CA Parity)。

什么是LRDIMM?

为了是一根物理DIMM支持更多的Rank,我们将数据信号也通过数据缓存(Data Buffer)芯片,而不直接连接DRAM Devices,从而改善数据信号的质量。如图所示:

参考资料

DDR4 内存颗粒主规范:JESD79-4 DDR4 SDRAM Specification

DDR4 RCD规范:DDR4RCD02 Specification

DDR4 DB规范:DDR4DB02 Specification

DDR4 SPD内容存储规范:DDR4/DDR4E SPD Contents Master Specification

SPD 操作规范:EE1004 and TSE2004 Device Specification

JEDEC 网站:https://www.jedec.org/

内存厂商:https://www.micron.com/

原文地址:SSDFans

————————————————————

原创文章,转载请注明: 转载自孙希栋的博客

本文链接地址: 《【转】关于内存,看这一篇就够了!》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up