第二讲: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读写:内存访问的两步走
内存访问不是一步到位的。它分两步:
- 激活行(ACTIVATE):先打开目标Bank的某一行,把这一行的数据读到Sense Amplifier(感测放大器)里。
- 读写列(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分钟就定位了问题。
五、知识体系总览
说了这么多,我画张图帮你理清思路:
这张图从顶向下展示了内存的层次结构。你从模组开始,一路深入到存储单元,每一步都有对应的物理实现和电气特性。
总结一下:
- 内存颗粒内部 = Bank × Row × Column 的三维寻址结构
- 访问流程 = 激活行 → 读写列 → 预充电
- 模组类型 = DIMM(台式机) vs SODIMM(笔记本)
- 引脚分类 = 数据、地址、控制、时钟、电源
嗯,这一讲的内容就到这儿。记住我说的:理解内存的物理结构,是做好DDR设计的第一步。下次你拿到一块内存条,不妨数数金手指,看看SPD芯片在哪,再想想它内部有多少个Bank——你会发现,原来内存并不神秘。
公众号:蓝海资料掘金营,微信deep3321