第二讲:DDR内存物理结构——从颗粒到模组,把内存拆开看

各位同学,今天我们聊聊DDR内存的物理结构。说白了,就是内存条里面到底长什么样。

我刚开始做硬件那会儿,总觉得内存就是个黑盒子——插上去能用就行。直到有一次调试一个DDR3的板子,死活跑不到标称频率,最后发现是颗粒内部的Bank冲突导致的。嗯,从那以后,我再也不敢小看内存的内部结构了。

一、内存颗粒的内部架构:Bank、Row、Column

先看最底层。一个DDR内存颗粒,内部其实是一个巨大的存储阵列。你可以把它想象成一个Excel表格:

  • Row(行):就是表格的行号
  • Column(列):就是表格的列号
  • Bank(存储库):相当于多个独立的表格

为什么要搞这么多层?我举个例子你就明白了。

假设一个颗粒有8个Bank,每个Bank有65536行(2^16),每行有1024列(2^10)。那么一次寻址,你需要告诉内存三样东西:去哪个Bank、哪一行、哪一列。这就是所谓的Bank地址 + Row地址 + Column地址

核心概念:内存颗粒的容量 = Bank数量 × Row数量 × Column数量 × 每个存储单元的数据位宽

比如一颗512Mb的DDR3颗粒:8 Banks × 65536 Rows × 1024 Columns × 8 bits = 512Mb

这里有个坑,我踩过。不同DDR代际的Bank数量不一样:

DDR代际 典型Bank数量 备注
DDR2 4或8 早期多为4 Bank
DDR3 8 标准配置
DDR4 16(分4个Bank Group) 每个Bank Group含4个Bank
DDR5 32(分8个Bank Group) 每个Bank Group含4个Bank

为什么DDR4、DDR5要搞Bank Group?说白了就是为了并行。你想想看,如果只有一个Bank,读写操作就得排队。有了多个Bank Group,可以同时激活不同Group里的Bank,带宽自然就上去了。

个人经验:我在做DDR4布线时,发现Bank Group的划分直接影响时序。如果两个频繁交替访问的Bank分在同一个Group里,性能会下降10%-15%。所以布局时,我会把高带宽需求的通道分配到不同的Bank Group。

二、Row激活与Column读写:内存访问的两步走

内存访问不是一步到位的。它分两步:

  1. 激活行(ACTIVATE):先打开目标Bank的某一行,把这一行的数据读到Sense Amplifier(感测放大器)里。
  2. 读写列(READ/WRITE):从已经激活的行中,读取或写入指定列的数据。

为什么要这么设计?因为DRAM的存储单元是电容,读一次就会破坏电荷。所以读完之后必须把数据写回去——这就是所谓的预充电(Precharge)

避坑指南:我曾经在一个项目中,连续访问同一Bank的不同行,导致每次都要先预充电再激活新行,延迟暴增。后来改成交替访问不同Bank,性能直接翻倍。记住:Bank级并行是DDR性能的关键

三、内存模组的组成:DIMM与SODIMM

颗粒讲完了,咱们看看它们怎么组成内存条。

市面上最常见的就是DIMM(双列直插内存模组)SODIMM(小型双列直插内存模组)。区别很简单:

  • DIMM:台式机用,尺寸大,引脚多(DDR4是288 pin,DDR5是288 pin但定义不同)
  • SODIMM:笔记本用,尺寸小,引脚少(DDR4是260 pin,DDR5是262 pin)

一个典型的DDR4 DIMM模组,包含以下部件:

  • DRAM颗粒:通常8颗或16颗,每颗8位或16位宽
  • SPD(串行存在检测):一颗小EEPROM,存储内存的时序参数、容量、厂商信息
  • PMIC(电源管理芯片):DDR5开始集成在模组上,DDR4以前由主板提供
  • 寄存器/缓冲器:RDIMM(注册型)才有,用于缓冲地址和控制信号

重要概念:内存模组的位宽 = 颗粒位宽 × 颗粒数量

比如8颗×8位 = 64位,这就是标准DIMM的位宽。加上ECC的话,会多一颗8位的颗粒,变成72位。

四、引脚定义与功能:看懂内存条的金手指

内存条的金手指不是随便排列的。我当年第一次看DDR3的引脚定义,密密麻麻200多个引脚,头都大了。后来发现,其实可以分成几类:

引脚类型 功能 典型引脚数(DDR4)
数据信号(DQ) 传输读写数据 64(数据线)+ 8(ECC)
地址信号(A) 传输Row/Column地址 17(A0-A16)
控制信号 RAS、CAS、WE、CS、CKE等 约10-15
时钟信号 CK、CK#(差分时钟) 2对
电源与地 VDD、VDDQ、VSS等 约80-100

这里有个细节:地址线是复用的。什么意思?就是Row地址和Column地址走同一组引脚,分时传输。先传Row地址,再传Column地址。这样能减少引脚数量,但代价是访问延迟增加了。

我的习惯:画原理图时,我会把DDR的引脚按功能分组标注颜色。数据线用蓝色,地址线用绿色,控制线用红色。这样调试时一眼就能看出问题在哪。有一次板子不启动,我扫了一眼发现CKE引脚虚焊,10分钟就定位了问题。

五、知识体系总览

说了这么多,我画张图帮你理清思路:

DDR内存物理结构知识体系 内存模组(DIMM/SODIMM) DRAM颗粒 Bank(存储库) Row(行) Column(列) 存储单元(电容 + 晶体管) 关键参数 • 容量 • 位宽 • 频率 • 时序(CL) • Bank数量 • Row/Column • 引脚定义 • 封装类型 注意: 不同代际参数 差异较大

这张图从顶向下展示了内存的层次结构。你从模组开始,一路深入到存储单元,每一步都有对应的物理实现和电气特性。

总结一下:

  • 内存颗粒内部 = Bank × Row × Column 的三维寻址结构
  • 访问流程 = 激活行 → 读写列 → 预充电
  • 模组类型 = DIMM(台式机) vs SODIMM(笔记本)
  • 引脚分类 = 数据、地址、控制、时钟、电源

嗯,这一讲的内容就到这儿。记住我说的:理解内存的物理结构,是做好DDR设计的第一步。下次你拿到一块内存条,不妨数数金手指,看看SPD芯片在哪,再想想它内部有多少个Bank——你会发现,原来内存并不神秘。


公众号:蓝海资料掘金营,微信deep3321