3.1 双倍速率SDRAM DDR Double Data Rate SDRAM
目前我们在生活中能够接触到各种内存概念产品均为DRAM,领导标准机构JEDEC(固态技术协会)将DRAM定义为标准DDR、移动DDR、图形DDR三个类别,分别指代的就是电脑内存、手机运存、显卡显存。
1 DDR是什么?(标准)
通常接触的都是SDRAM,synchronous dynamic random-access memory,同步动态随机存储器。同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。同步SDRAM根据时钟边沿读取数据的情况分为SDR和DDR技术,SDRAM从发展到现在已经经历了五代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,第五代DDR4 SDRAM,现在已经发展到DDR5 SDRAM。为了实现容量增加和传输效能增加,规范的工作电压越来越低,DDR容量越来越大,IO的速度越来越高。
2 LPDDR是什么?(移动)
LPDDR 内存全称是Low Power Double Data Rate SDRAM,中文意为低功耗双倍数据速率内存,又称为mDDR(Mobile DDR SDRM),是美国JEDEC固态协会面向低功耗内存制定的通信标准,主要针对于移动端电子产品。相比于DDR来说,LPDDR最大的特点就是功耗更低。
目前市面上主流旗舰手机内存使用的都是LPDDR4X和LPDDR4,由于二者经常同时出现,名字也十分相似,所以很容易让人混淆。其实LPDDR4X并非是LPDDR4的下一代版本内存,可以看作是LPDDR4的省电优化版本。相比于LPDDR4,LPDDR4X优化了内存的功耗,提高了内存速度。
JEDEC固态存储协会正式发布了JESD209-5标准Low Power Double Data Rate 5即LPDDR5的标准,LPDDR5将以6400MT/s的速率运行,比第一版LPDDR4翻了一倍,这将明显提升各种应用场景的内存效率,包括智能手机、平板电脑和超轻薄型电脑等,此外LPDDR5还专门为汽车等业务而设计了新的功能。
现在的LPDDR4数据速率为3200MT/s,LPDDR5的6400MT/s直接翻了一倍,与LPDDR4X的4266MT/s相比也快了50%,LPDDR5的到来有望大幅提高下一代便携式电子设备的性能,因为现在手机的CPU和GPU是共享内存带宽的,而且随着AI芯片的加入,内存带宽正在逐渐吃紧,LPDDR5为了提升性能重新设计了架构,转向16Banks可编程和多时钟架构。
简单点来说,就是LPDDR5有三大优势,分别是多车道Bank Group架构,速率跨越式升级最多可达50%性能优势提升和超低功耗。
相比之下,LPDDR4X只支持Single Bank Group,而LPDDR5支持多Bank Group模式,这里可以理解为数据可以多通道传输,从而进一步提升了传输数据带宽。
LPDDR5引入了Data-Copy和Write-X两个新的指令,Data-Copy指令可指示LPDDR5将单个I/O引脚上传输的数据复制到其他I/O引脚,提升数据传输的效率,Write-X指令可将全1或全0写入到特定地址,无需将数据从SoC发送到LPDDR5,这个新指令将有效降低整体系统功耗,另外考虑到汽车与相关市场的需求,LPDDR5还引入了链路ECC纠错功能。
LPDDR5的电压和LPDDR4X一样是1.1V,信号电压250mV,不过闲置状态下电流将降低40%,可大幅降低功耗。实际上三星早在去年7月分就对外发布LPDDR5内存了,采用先进的10nm工艺生产,但正是实用可能要到2020年。
JEDEC正式公布LPDDR5标准,速度较LPDDR4翻倍,还支持ECC
LPDDR5比LPDDR4X内存好在哪儿?最重要的并不是快
LPDDR和DDR有什么区别?
3 GDDR是什么?(图形)
提供极高的吞吐量,面向图形应用程序、数据中心加速以及AI的数据密集型应用程序,目前JEDEC已公布的最高标准是GDDR6。另外,将很多DDR芯片堆叠后与GPU封装在一起,就构成了另一种形式的显存,即HBM,目前JEDEC已公布的最高标准是HBM3。
国产存储等待一场革命
4 DDR性能对比及概念解析
Voltage(VDDQ):存储芯片(颗粒)的输出缓冲供电电压。
Device Width:颗粒位宽,常见为4/8/16bit。一个Memory Array中由行地址和列地址的交叉选中一个位,若2个Array叠加在一起,就同时选中了2个Bit,位宽是X2。若4个Array叠加到一起,就能够同时选中4个Bit,位宽则是X4。也就是说,对一个X4位宽的DDR 颗粒,如果给出行地址和列地址,就会同时输出4个Bit到DQ(数据输入、输出:双向数据总线)数据线上。(可以等效理解为4阵列Bank,8阵列Bank,16阵列Bank)
Die Density:颗粒密度,也就是容量,随着DDR迭代,容量越来越大。
Data rates:MT/s指每秒传输多少个数据(Mega-transfer per second),和时钟频率是两个不同的概念。DDR(dual data rate)是双边沿传输数据。因此MT/s是IO时钟频率的两倍。
Prefetch:在一个时钟周期中,同时将相邻列地址的数据一起取出来,并行取出DRAM数据,再由列地址0/1/2(DDR1使用列0,DDR2使用列0和列1,DDR3/DDR4使用列0,1和2)选择输出。2n/4n/8n。这里的数字指的就是并行取出的位数。这里的n,就是DQ位宽,即上面的device width(x4/x8/x16)。所以DDR3 16bit SDRAM内存颗粒,16bit指的是位宽,其一次读写访问的数据量是8*16=128bit。
Bank:DDR4以前是没有Bank Group的,所以该值就表示整个颗粒中Bank数量。但是在DDR4和DDR5中,就表示每个Bank Group中Bank的数量,整个颗粒Bank数量 = Bank Group * Bank。
Bank Group:Bank分组数量,该特性只存在于DDR4和DDR5中。
Burst Length:指突发长度,突发是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度,在DDR SDRAM中指连续传输的周期数。一般对应预取bit数目。
Core frequency:颗粒核心频率,即内存cell阵列的工作频率,它读取数据到IO Buffer的频率。它是内存频率的基础,其他频率都是在该频率的基础上得出来的。
IO clk Frequency:内存的数据传输速率。它和内存的prefetch有关。对于DDR,一个时钟周期的上升沿和下降沿都在传输数据,即一个时钟周期传输2bit的数据,所以DDR的prefetch为2bit。对于DDR2,IO时钟频率是其核心频率的两倍,同时也是双沿传输数据,因此DDR2的prefetch为2×2bit=4bit。对于DDR3,IO时钟频率是其核心频率的四倍,同时也是双沿传输数据,因此DDR3的prefetch为4×2bit=8bit。
4.1 Bank
如下是一个8阵列bank。其中每个rank中的行列定位到的小方块,是一个cell,对应一个bit。行、列组成了一个memory array。8个memory array组成了一个bank的阵列,通过行、列地址可以得到8 bit的输出。(所以应该把Bank理解为一个立体的结构)
一个8阵列bank一次读写8个比特,一颗存储芯片上一般含有多个bank。下图是一颗含有8个bank的存储芯片的示意图。芯片每次读写都只针对一个bank,因此读写地址必须包含一个bank号,bank号用于开启目标bank,目标bank之外的bank是不工作的。
若每个芯片都包含8个bank,每个rank都包含8个芯片,那么这条内存条就可以一次读写8×8=64比特,其中第一个8是指每个芯片输出8位(1个bank输出8位,另外7个bank不工作),第二个8是指这个rank总共有8颗芯片,因为这8颗芯片被同一个内存通道访问,所以其被访问的bank和bank内的行地址、列地址都是完全一致的。下图是一个描述这个过程的简图:显然,我们在读写8颗芯片同一个bank同一个位置的cell。注意,**图中没有显示不在工作状态的bank。**对一个rank读写,即同时读写rank内8个存储芯片内的同一位置的bank。
4.2 关于核心频率,工作频率,等效频率
DDR里面主要使用了Double Data Rate 和 Prefetch两项技术。
DDR即 Double Data Rate 技术使数据传输速度较 SDR 提升了一倍。如下图所示,SDR 仅在时钟的上升沿传输数据,而 DDR 在时钟信号上、下沿同时传输数据。例如同为133MHz 时钟,DDR 却可以达到 266Mb/s 的数传速度。
实际上,无论是 SDR 还是 DDR 或 DDR2、3,内存芯片内部的核心时钟基本上是保持一致的,都是 100MHz 到 200MHz/266MHz(某些厂商生产的超频内存除外)。第一代SDRAM采用单端(Single-Ended)时钟信号,第二代、第三代与第四代由于工作频率比较快,所以采用可降低干扰的差分时钟信号作为同步时钟。SDR SDRAM的时钟频率就是数据存储的频率,第一代内存用时钟频率命名,如PC100,PC133则表明时钟信号为100MHz或133MHz,数据读写速率也为100MHz或133MHz。之后的第二,三,四代DDR(Double Data Rate)内存则采用数据读写速率作为命名标准,并且在PC(Personal Computer)后面加上一个数字表示其DDR代数的符号,PC= DDR,PC2=DDR2,PC3=DDR3。如PC-2700是DDR-333,其核心频率是333/2=166MHz,2700表示带宽为2.7GB/s。DDR的读写频率从DDR-200到DDR-400,DDR2从DDR2-400到DDR2-800,DDR3从DDR3-800到DDR3-1600。
传输速率的单位是MT/s(Mega Transfer Per Second),即每秒传输的百万次数,由于DDR一次传输64-bit,相当于8个字节(Byte),所以数据传输带宽为传输速率乘以8。
核心频率:指的是DDR芯片内部进行逻辑处理的时钟频率;即内部存储颗粒工作的频率,现在很难提升,提升的花费也很大。
工作频率:DDR芯片时钟引脚的频率,也称为时钟频率或者IO频率,即I/O缓存区的时钟频率,根据n-bites的prefetch,工作频率是核心频率的n/2倍。
等效频率:传输速率的频率叫做数据频率,传输频率或者等效频率(操作系统里称Speed频率),为了方便起见,后文同一称为等效频率,等效频率在数值上与传输速率相等。
等效频率=工作频率 * 2。因为DDR是利用时钟的上升沿与下降沿均传输数据,所以DDR芯片的工作频率(时钟引脚的频率)为等效频率(传输频率)的一半。
所以这三个频率的关系如下:核心频率<工作频率<等效频率
举例:如DDR400,核心频率=200MHz;工作频率=200MHz;等效频率=400MHz;数据传输带宽=400MT/s8B=3200MB/s。
DDR各种规格与传输标准如下表所示:(其中DDR433,DDR533为非标准规格(某些厂家生产的超频内存))
DDR2时代:同样是在上下沿各传一次数据,但将Prefech提升为4,每个电路周期一次读取4bit。所以DDR2的Speed(等效频率)就达到了核心频率的4倍(2^2)。
举例:如DDR2-800,核心频率=200MHz;工作频率=200(预取数4/2=2)=400MHz;等效频率=800MHz;数据传输带宽=800MT/s8B=6400MB/s。
DDR3时代:同样也是上下沿各传一次数据,进一步将Prefetch提升为8。所以DDR3的等效频率可以达到核心频率的8倍(2^3)。
举例:如DDR3-1600,核心频率=200MHz;工作频率=200(预取数8/2=4)=800MHz;等效频率=1600MHz;数据传输带宽=1600MT/s8B=12800MB/s。
DDR4时代:这时预取的提升已经非常困难,所以和DDR3一样,Prefetch仍然为8。内存制造商们又另辟蹊径,提出了Bank Group设计。允许各个Bank Group具备独立启动操作读、写等动作特性。所以等效频率可以提升到核心频率的16倍(2^4)。
举例:如DDR4-3200,核心频率=200MHz;工作频率=2008=1600MHz;等效频率=3200MHz;数据传输带宽=3200MT/s8B=25600MB/s=25.6GB/s。
DDR5时代:预读取又提升上去了,为16。同时沿用了DDR4 Bank Group设计。所以等效频率可以提升到核心频率的32倍(2^5)。
举例:如DDR4-6400,核心频率=200MHz;工作频率=20016=3200MHz;等效频率=6400MHz;即数据传输速率进一步提升到了6400MT/s,相应的数据传输带宽=6400MT/s*8B=51.2GB/s。
DDR5的起始速率为4800MT/s,但其设计的未来最高数据传输速率将达8400MT/s,则数据带宽为67.2GB/s。
第3代DDR5 RCD发布,助力服务器内存传输速率提升至6400MTs
4.3 关于预提取 Prefetch
芯片内部数据数据传输速度的提升则是通过 Prefetch 技术实现的。
所谓 Prefetch 简单的说就是在一个内核时钟周期同时寻址多个存储单元并将这些数据以并行的方式统一传输到 IO Buffer 中,之后以更高的外传速度将 IO Buffer 中的数据传输出去。这个更高的速度在 DDR上就是通过 Double Data Rate 实现的,也正因为如此,DDR外部 Clock 管脚的频率与芯片内部的核心频率是保持一致的。如下图所示为 DDR的Prefetch 过程中,在 16 位的内存芯片中一次将 2 个 16bit 数据从内核传输到外部MUX 单元,之后分别在 Clock 信号的上、下沿分两次将这 2 x 16bit 数据传输给北桥或其他内存控制器,整个过程经历的时间恰好为一个内核时钟周期。
理解预读取并不难,同样打个比方,看一个人跑得快或不快,要看两个方面,一个是步伐的频率,比如每秒钟跑两步;另一个是步伐的距离,比如每一步跑1米。第一个人(DDR)它每秒钟跑两步,每步是1米,所以它的速度是2米/秒;而第二个人(DDR2)它每秒钟跑两步(因为DDR2和DDR内存颗粒的工作频率一致),每步是两米,所以它的速度是4米/秒。第二个人的速度是第一个人的两倍。
内存也是如此,DDR、DDR2、DDR3内存颗粒工作频率一致,所以速度的快慢就取决于DDR的步伐(预读取),DDR的预读取为2bit,这就是数据传输的带宽(每步距离)。而DDR2的预读取是4bit(DDR3为8bit),说明DDR2的“每步距离”是DDR的两倍,所以只要内存颗粒工作频率一致,DDR2等效频率是DDR等效频率的2倍,DDR3就是DDR的4倍。
DDR4的Prefetch为8n,所谓的n指的是chip对外的I/O width。它的IO gating buffer与FIFO的接口宽度(128)是FIFO与外部IO的接口宽度(16)的8倍。以1GB的DDR4:MT40A512M16LY-062E AATE为例,对于16bits位宽的 DDR4 MEMORY chip,为了满足8n prefetch,IO gating buffer的宽度要达到168=128bits的位宽。
Prefetch:在一个时钟周期中,同时将相邻列地址的数据一起取出来,并行取出DRAM数据,再由列地址0/1/2(DDR1使用列0,DDR2使用列0和列1,DDR3/DDR4使用列0,1和2)选择输出。2n/4n/8n。这里的数字指的就是并行取出的列数(2^3=8)。这里的n,就是DQ位宽,即上面的device width(x4/x8/x16)。所以DDR4 16bit SDRAM内存颗粒,16bit指的是位宽,其一次读写访问的数据量是816=128bit。
所以该DDR4容量大小正确的计算方式如下:
64K8(1K/8)168(Row Addressing * Bank Addressing * (Column Addressing / 8) * x16 Configuration * 8-bit Prefetch)= 8Gb(512 Megx16)。
为什么要把列地址寻址(Column Addressing)除以8呢?如下图10bit的Column Address的寻址能力只有128!因为列地址0/1/2已经被单独拿出来用于选择输出了;分离出的Column Address的位数实际上是和prefetch对应的。比如DDR3/DDR4 8-bit Prefetch对应3bits的Column Address,DDR2 4-bit Prefetch对应的是2bits的Column Address。
下图中的128 * 128,第一个128=2^7为列寻址能力;第二个128=16 * 8表示一次读写访问的数据量。最后再乘以8个Bank就是总容量大小。
Column Address的A2,A1,A0三位被用于Burst Order功能,并且A3也被用于Burst Type功能。由于一般情况,我们采用的都是顺序读写模式(即{A2,A1,A0}={0,0,0}),所以此时的A3的取值并无直接影响。
Burst Lengths,简称BL,指突发长度,突发是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(这里为8),在DDR SDRAM中指连续传输的周期数。
关于DDR的prefetch
DDR3 vs DDR4? 为什么说内存是个很傻的设备?DDR5在哪里?
5 内存大小计算
5.1 DDR4大小计算
DDR4的内部是一个存储阵列,将数据“填”进去,你可以把它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)就是逻辑 Bank(Logical Bank,下面简称Bank)。
下图是DDR4内部Bank示意图,这是一个N*N的阵列,B1代表Bank地址编号,C代表列地址编号,R代表行地址编号。如果寻址命令是B1、R2、C6,就能确定地址是图中红格的位置。目前DDR3内存芯片基本上都是8个Bank设计,也就是说一共有8个这样的“表格”。寻址的流程也就是先指定Bank地址,再指定行地址,然后指定列地址,最终确定寻址单元。
对DDR4系统而言,还存在物理Bank的概念,这是对内存子系统的一个相关术语,并不针对内存芯片。内存为了保证CPU正常工作,必须一次传输完CPU 在一个传输周期内所需要的数据。而CPU在一个传输周期能接受的数据容量就是CPU数据总线的位宽,单位是bit(位)。控制内存与CPU之间数据交换的北桥芯片也因此将内存总线的数据位宽等同于CPU数据总线的位宽,这个位宽就称为物理Bank(Physical Bank,有的资料称之为Rank)的位宽。目前这个位宽基本为64bit。
举例:
1GB的DDR4:MT40A512M16LY-062E AATE
这里的512M=B * R * C=2x4 * 2^16 * 2^10=536,870,912=512M个地址.
所以总大小=512M * 数据线位宽DQ=512M * 16=8192Mb=8Gb=1GB。
下面的Page size=2^10x16/8=2KB,这个概念比较少用到。
5.2 LPDDR4大小计算
4GB的LPDDR4:MT53D1024M32D4DT-046AATD
这里相对于上面DDR4多了几个概念,Die,channel,rank;
上面的DDR4就相当于只有一个die,一般来说一个Package包含一个Die(这里指一个内存颗粒),即SDP,此时容量还是为一个内存颗粒的容量大小,而一个Package如果包含2个Die,即DDP(Dual-Die Package)的封装方式,DDR4也是可以支持的,不过很少有这么用的,至于QDP(Qual-Die Package)这种4个Die的方式DDR4就是不支持的。
但如果我这里是直接用2个DDR4或者4个DDR4呢,那都是可以的,这时候就会用到下面这三个脚了。
而LPDDR4就是支持DDP跟QDP两种方式的,所以有2个Die跟4个Die。
这里的64Mb=R * C=2^26; Bank地址有3位,所以是8banks(只有BA,没有BG,那就是默认只有一组bank)
数据位单个die是16DQ;那么一个die的大小就是=64Mb * 8 * 16=8Gb;
最后4个die构成2 channel x 2rank的矩阵,总大小就是=8Gb*4=32Gb=4GB。
所谓channel可以理解为一个独立的DDR控制器通道可以独立的控制接在上面的ddr颗粒工作。1个Die占用一个channel,2个die就需要两个channel,4个die则是分成上下两个rank,然后通过cs片选分时复用组成一个双rank的组合;所以Rank可以理解为让多组(如下红框两组)DDR颗粒通过CS片选来分时复用相同的两个channel。
注意Single-Rank跟Dual-Rank的区别,Dual-Rank会在原channel基础上加多一个片选跟使能。
CS1_A;CKE1_A;CS1_B;CKE1_B;这4个脚对于Single-Rank为NC脚。
LPDDR4硬件详解_lpddr4
DDR 学习时间 (Part B - 5):DRAM 颗粒容量规格
5.3 内存条DIMM种类
在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分为很多种:
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的缩小版本,用于刀片式服务器等对体积要求苛刻的高端领域。
一般内存长度 133.35mm,SO-DIMM为了适应笔记本内狭小的空间,缩短为67.6mm而且一般为侧式插入。高度也有些变种,一般的内存条高度为30mm,VLP(Very Low Profile)降低为18.3mm,而ULP(Ultra Low Profile)更是矮化到17.8mm,主要是为了放入1U的刀片服务器中。
5.4 内存条DIMM大小计算
在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)。这种形态一直延续至今,也是内存条的基本形态。
从内存控制器到内存颗粒内部逻辑,笼统上讲从大到小为:channel>DIMM>rank>chip>bank>row/column,如下图:
PS:这里的channel跟rank跟上面芯片级其实是同个概念,而内存颗粒如果是单个die,那就是chip=die;而如果是多个die,那就是chip>die。(多个die组成一个rank,多个chip组成一个rank)
目前好像还没有LPDDR4的内存条,所以这里忽略die的概念。
一个现实的例子是:
在这个例子中,一个i7 CPU支持两个Channel(双通道),每个Channel上可以插俩个DIMM,而每个DIMM由两个rank构成,8个chip组成一个rank。由于现在多数内存颗粒的位宽是8bit,而CPU带宽是64bit,所以经常是8个颗粒可以组成一个rank。
Channel:简单理解一个通道对应一个DDR控制器,每个通道拥有一组地址线、控制线和数据线。
DIMM:是主板上的一个内存插槽,一个channel可以包含多个DIMM。
Rank:一组可以被一个内存通道同时访问的芯片组合称作一个rank,一个rank中的每个芯片都共用内存通道提供的地址线、控制线和数据线,同时每个芯片都提供一组输出线,这些输出线组合起来就是内存条的输出线。简单来说rank是一组内存芯片集合,当芯片位宽芯片数=64bit(内存总位宽)时,这些芯片组成一个Rank,存储64bit的数据。一般每个芯片位宽是8bit,然后内存条每面8个芯片,那么每面就构成了一个Rank,这两面的Rank通过一根地址线来区分当前要访问的是哪一面。同一个Rank中所有的芯片协作来读取一个地址(1个Rank,8个芯片8bit=64bit),这个地址的不同bit,每8个一组分散在这个Rank上的不同芯片上。设计Rank的原因是为了减少每个芯片的位宽(在CPU总位宽确定的前提下,比如64bit),降低复杂度。(1/2rank跟内存是单面颗粒还是双面颗粒并无任何联系)
Chip:是内存条上的一个芯片,由多个bank组成,大多数是4bit/8bit/16bit,多个chip做成一个rank,配合完成一次访问的位宽。
Bank:是一个逻辑上的概念。一个bank可以分散到多个chip上,一个chip也可以包含多个bank。
Row、Column组成的memory array:可以简单的理解bank为一个二维bit类型的数组。每个bank对应一个bit,8个bank组成8bit的数据。
一文搞懂DDR SDRAM工作原理
实际上每个格子的存储宽度是内存颗粒(Chip)的位宽,在这里由8个Chip组成一个Rank,而CPU寻址宽度是64bit,所以64/8=8bit,即每个格子是1个字节。选择每个格子也不是简单的两组信号,是由一系列信号组成,以这个2GB DDR3为例:
1.片选(Rank Select)信号,S0#和S1#,每个用于选择是哪个Rank。
2. Bank地址线,BA0-BA2, 2^3=8,可以选择8个Bank
3. 列选 (Column Address Select), CAS#,用于指示现在要选通列地址。
4. 行选(Row Address Select),RAS#用于指示现在要选通行地址。
5. 地址线,A0-A13,用于行和列的地址选择(可并不都用于地址,本处忽略)。
6. 数据线,DQ0-DQ63,用于提供全64bit的数据。
7. 命令,COMMAND,用于传输命令,如读或者写等等。
注意这里没有内存颗粒的选择信号线,只有Rank的选择信号。在Rank选择好后,8个内存颗粒一起被选中,共提供64bit的数据。
1.行有效。RAS#低电平,CAS#高电平。意味着现在行地址有效,同时在A0-A13传送地址信号,即2^14个Row可以选择。
2. 列有效。RAS#高电平,CAS#低电平。意味着列地址有效,这时在A0-A13上传送的是列地址。没错,A0-A13是行列共用的,所以每个格子选择需要有1和2两步才能唯一确定。
3. 数据读出或写入。根据COMMAND进行读取或者写入。在选定好小方格后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据I/O通道(DQ)输出到内存总线上了。
这里再说下2GB的内存条怎么计算,Bank上16384 x 1024 x 8的含义:
地址信号14根线,选行的时候全用2 ^ 14是16384,选列的时候用10个, 2 ^ 10是1024,选址空间为14+10+3(8个bank)+3(8个chip)+1(2个rank)是31,单个chip大小就是2^ 27 *8=128MB,内存大小则为2^31是2G.因为位宽是8bit,所以是2GB.(10次幂1k,20次幂1M,30次幂1G)
5.5 内存条DIMM标签含义
关于内存条的极限容量
2R X 8
上图2R X 8的意思是由2个rank组成,每个chip位宽是8bit,所以每个rank上是8个内存颗粒(为啥我们以后讲)。由于整个内存是4GB,我们可以算出单个内存颗粒是256MB(H5TQ2G83BFR(256M*8))。
PC3-10600S
参考如下图标注,PC3表示第3代,即DDR3;10600即最大带宽=对应时钟666MHz * 2 * 8(CPU 64bit=8B)=10666MB/s.
5-5-5-15
这是内存颗粒的时延(Latency)数据,如4-4-4-8, 5-5-5-15, 7-7-7-21, 或9-9-9-24,分别代表 CL-tRCD-tRP-tRAS的数据,越小越好。
这些数据印在纸上消费者是看懂了(实际上似乎没多少人了解),可电脑又没长眼睛,它是怎么知道的呢?其实,每个DIMM在板子上都有块小的存储芯片(EEPROM=SPD),上面详细记录了包括这些的很多参数,还有生产厂家的代码等等,这也是BIOS为什么能知道我们插了哪种内存的原因。
PS:SPD(Serial Presence Detect,串行存在检测)是内存模组上面的一个可擦写的eeprom,里面记录了该内存的许多重要信息,诸如内存的芯片及模组厂商、工作频率、工作电压、速度、容量、电压与行、列地址带宽等参数。
看图识内存
内存系列二:深入理解硬件原理
5.6 内存条DIMM最大容量
我们可以回过头再来看看: nR X m是啥意思了。
1.R是Rank的缩写,n是多少有个Rank。每个Rank有自己的片选信号:CS。各个rank单独工作,JEDEC标准DDR4可以取1,2,4个rank。
2.X m中的m就是前面讲的每个chip的位宽,X4就是每列输出4个bit,X8就是每列输出8个bit。JEDEC标准只有4,8,16,三个选项。
明显的rank越多,用同种内存颗粒,可以做出的内存条容量就大。那么是不是内存颗粒X m,m越大,内存就大呢?恰恰相反,同样容量的内存颗粒,m越小,就可以用更多的内存颗粒拼起来,组成大内存。也就是4R X 4的这种组合是最大的内存容量。
我们看个例子:
同样4Gb(注意这里是小b)的内存颗粒,为了组成64 Bit的位宽,我们可以用16个X 4颗粒,那么总容量是:
4 Gb X (64/4)= 64 Gb = 8GB
而用X 16的颗粒呢?只能用4个:
4 Gb X (64/16)= 16Gb = 2GB
那么单内存颗粒是不是容量就可以无穷大呢?并不是。
内存颗粒并不能无限变大,因为没有那么多地址线。尽管从DDR开始,JEDEC标准就不停的增加地址线,但到了DDR4,地址还是有限的,这也是DDR5必须尽早出来的原因之一。地址线的多少决定了可以寻址多大空间,也决定了单颗内存容量的上限。
我们来看看DDR4对地址线的定义:
1.行地址:A0~A17共18根
2.列地址:A0~A9
3. Bank Addr:BA0,BA1两个
4. Bank Group: BG0,BG1两个
好了,我们可以来算算颗粒的容量了,如果我们用X4的颗粒
(2^ 18) X (2 ^ 10) X(2^ 2) X (2^2) X 4 = 16Gb(单个chip大小)
我们来算一下DIMM的容量:
16 Gb X 16个chip X 4个rank/8 = 128GB
这就是单根内存条的理论最大容量。(单根UDIMM/RDIMM的容量最大128GB,这是JEDEC的标准所允许的最大容量。)
单根内存条的极限容量是多少?内存条上的2R X 8代表了什么意思?
6 标准规范
DDR内存的标准:JEDEC标准。
7 参考链接
1.10 存储器 MEM Memory
MICRON:TN-53-06: LPDDR4/LPDDR4X Point-to-Point Design Guidelines Introduction.pdf
NXP:AN5097-Hardware and Layout Design Considerations for DDR4 SDRAM Memory Interfaces.pdf