大话 SDRAM 和 DDR 动态随机存取存储器
联合电子设备工程委员会(JEDEC
[ˈdʒeɪ dɛk],Joint Electron Device Engineering
Council)是一个全球性的微电子行业标准制定组织,由其推出的各类半导体存储标准广为人知,例如:双倍速率
SDRAM(DDR,Double Data
Rate)、低功耗双倍速率 SDRAM(LPDDR, Low
Power DDR)、高带宽内存(HBM,High
Bandwidth
Memory)、嵌入式多媒体卡(e.MMC,Embedded
Multi Media Card)、通用闪存(UFS,
Universal Flash
Storage)、固态硬盘(SSD,Solid State
Drive),本文主要讨论 DDR 与 LPDDR
内存颗粒相关的原理、引脚定义,以及对应的 PCB 布线规范。

最早推出的单数据率(SDR,Single Data Rate)类型
SDRAM 只能够在时钟信号的上升沿传递数据,而后续问世的
DDR1
则可以同时工作在时钟信号的上升沿与下降沿,从而在相同的时钟频率下实现了双倍的传输效率;而在
DDR2 又引入了 4
位预取(Prefetch)机制,后续的 DDR3
进一步将预取宽度提升至 8 位,并且为 命令/地址线
引入了全新的 Fly-by 拓扑(之前版本采用 T 型
拓扑),优化信号走线的同时降低时钟偏移。DDR4 则着重于
Bank Group 提升寻址效率,最新的 DDR5
则增加了 PMIC 电源管理(集成多通道降压 Buck 和
LDO)以及 I³C 串行通信总线(即增强型
I²C 总线),同时预取宽度提升至 16 位,并且内置 ECC 错误校验。
Memory 存储器种类
随机存取存储器(RAM,Random Access
Memory)是一种能够高速随机存取数据的易失性存储器,可以将其具体划分为如下两种类型:
- 静态随机存取存储器(
SRAM,Static RAM)依靠晶体管组成的双稳态触发器来存储比特位,通常集成在芯片内部作为高速缓存使用; - 动态随机存取存储器(
DRAM,Dynamic RAM)需要通过不断刷新充电来维持数据,广泛运用于 SoC 芯片与低速存储器(例如NAND Flash)之间作为数据传输的桥梁;
同步动态随机存取存储器(SDRAM,Synchronous
DRAM)则在上述 DRAM
存储器的基础上引入了时钟同步机制,依次发展出下面两种类型:
- 单倍速率 SDRAM(
SDR,Single Data Rate SDRAM):只能在时钟信号的上升沿传输一次数据; - 双倍速率 SDRAM(
DDR,Double Data Rate SDRAM):可以在时钟信号的上升沿和下降沿各传递一次数据;
接下来,我们将上述繁琐的存储器种类划分,简明直观的总结为下面的示意图:

DDR 版本发展脉络
这里的表格统计了内存颗粒从 SDRAM 发展到
DDR1、DDR2、DDR3、DDR4、DDR5
的时间脉络:
| 版本 | 时间 | 总线频率 | 传输速率 | 工作电压 | 拓扑 | 预取位数 | Bank 数量 | Bank Group |
|---|---|---|---|---|---|---|---|---|
| SDRAM | 1993 年 | 100~166 MHz | 100~166 MT/s | 3.3V |
T 型 | 1n |
4 | 无 |
| DDR1 | 2000 年 | 133~200 MHz | 266~400 MT/s | 2.5V |
T 型 | 2n |
4 | 无 |
| DDR2 | 2003 年 | 266~400 MHz | 533~800 MT/s | 1.8V |
T 型 | 4n |
4~8 | 无 |
| DDR3 | 2007 年 | 533~800 MHz | 1066~1600 MT/s | 1.5V |
Fly-by 型 | 8n |
8~16 | 无 |
| DDR4 | 2014 年 | 1066~1600 MHz | 2133~3200 MT/s | 1.2V |
Fly-by 型 | 8n |
16 | 4 组 |
| DDR5 | 2019 年 | 1600~3200 MHz | 3200~6400 MT/s | 1.1V |
Fly-by 型 | 16n |
32 | 8 组 |
注意:预取位数(Prefetch):是指一次读操作,能够从存储阵列当中读取到多少个数据位。
数据位宽 Data Width
位宽(Data Width):单个存储颗粒每 1
次能够并行传输的二进制位数(通常与 DQ
引脚的总数相匹配),常见存储颗粒的位宽主要有
x8、x16、x32。存储颗粒的位宽与颗粒数量的乘积,必须等于
SoC 内存控制器的位宽:
\[ 单颗粒位宽 \times 颗粒数量 = SoC 内存控制器的物理位宽 \]
例如对于拥有 64 bit 位宽的 SoC
控制器,其对应的存储颗粒可以按照如下方式进行搭配:
\[ \begin{align} &8 颗 \times 单颗8位 = 64 位 \\ &4 颗 \times 单颗16位 = 64 位 \end{align} \]
注意:常用的 DDR3/4 颗粒位宽是
x8,而 LPDDR3/4 颗粒的常用位宽为x16;常用的 DDR5 颗粒位宽为x8和x16,而 LPDDR5 颗粒常用的位宽有x16、x32。
DRAM 基本电路结构
动态随机存取存储器(DRAM,Dynamic Random Access
Memory)的最小存储单元由 1 个晶体管
Transistor(通常采用 NMOS)与 1 个电容
Capacitor(存储电荷时为 1,没有电荷时为
0)构成,因而被称为 1T1S 结构。

当电容器存储电荷的时候,表达的就是高电平
1;而当电容器没有存储电荷的时候,表达的则是低电平
0:

将海量的 1T1C 单元电路排列成由 行
Row 和 列 Column
组成的二维矩阵(如下图所示),其中横向控制线称为
字线(Word
Line),连接到一整行晶体管的栅极,用于控制电荷的充放。而列数据线称为
位线(Bit
Line),连接到每一个列的电容器,负责提供充放电荷的流入流出路径:

Bank 与 Bank Group
把由 1T1C
单元组成的二维矩阵,拆解为多个独立的小型阵列就称为存储体(Bank),每一个
Bank
都可以被独立的激活、读写、预充、刷新,并且能够进行并行操作,从而降低读写延迟,提升通信带宽。
总结一下,DRAM 存储器(SDRAM 和
DDR1/2/3)由多个 Bank 组成,每个 Bank
进一步由 1T1C
存储单元所构成的行列矩阵结构组成,其寻址层级依次为:
1 | 逻辑体(Bank)→ 行(Row)→ 列(Column) |
SDRAM 和 DDR1/2/3
的传输频率和速率相对比较低,Bank
层的并行操作已经能够满足要求。然而传输频率和速率更高的
DDR4/5,面对更大的数据吞吐量,就需要进一步将多个 Bank
划分为存储体组(Bank
Group),从而规避存储单元的读写等待延迟,并且让内存控制器获得更多的并行操作通道,同时能够配合更高的预取宽度:
- DDR4:拥有 4 个存储体组
Bank Group(每组由 4 个存储体Bank组成,总共 16 个Bank); - DDR5:拥有 8 个存储体组
Bank Group(每组由 4 个存储体Bank组成,总共 32 个Bank);
相应的,DDR4/5 的寻址层级依次调整为如下的形式:
1 | 逻辑体组(Bank Group)→ 逻辑体(Bank)→ 行(Row)→ 列(Column) |
注意:存储体组(Bank Group)能够避免单个 Bank 序列操作带来的延迟瓶颈,通过创建能够并行工作的独立子单元,使得内存控制器能够更加灵活高效的执行读写任务,减少因时序等待而产生的空闲时间,最大化内存总线的利用率和整体有效带宽。
SDRAM 与 DDR 的区别
经过数年的发展,内存经历了从同步动态随机存储器(SDRAM,Synchronous Dynamic Random Access Memory)到双倍数据率同步动态随机存储器(DDR,Double Data Rate Synchronous Dynamic Random Access Memory)的发展历程:
- 同步动态随机存储 SDRAM 名称当中的同步
Synchronous是指其需要跟随来源于 SoC 内存控制器的外部时钟进行工作,而动态Dynamic表示的是由于 1T1C 结构当中电容需要不断刷新保持电荷,而随机寻址Random Access则表示可以随时进行任意地址访问。传统的 SDRAM 只能够在时钟信号的上升沿传递数据(1 个时钟周期只能传递 1 次数据),如下图所示:

- DDR 在本质上也属于 SDRAM
的一种,但是两者区别主要在于其命名中的双倍数据速率(Double
Data Rate)表示其可以同时在时钟信号的
上升沿和下降沿进行数据传递(1 个时钟周期可以传递 2 次数据),从而有效提升了数据传输的效率,如下图所示:

如何进行读/写/刷新操作
读出操作
读取数据是一个多步骤过程。内存控制器会发送
Bank 地址、行地址、列地址
相关的信息,具体流程可以参考下面的示意图以及后续的文字描述:

- 首先,SoC 发送读命令给 DRAM 存储器,其中前 5
个比特位用于从
Bank Group当中选取指定的Bank; - 然后,该
Bank内部所有字线全部被关闭(即关闭 NMOS 晶体管),断开电容的充放电路径;同时 Bank 内部所有位线预充电至满电容电压的约一半(假设电容充电至1V代表逻辑1,放电至0V代表逻辑0,那么这里就预充电至0.5V); - 接着,发送 16 位
行地址激活指定行,当该行的存储单元被激活之后,便会向位线输出微弱电流,例如该行的某颗电容处于1V满电荷状态,电荷就会顺着位线进入感应放大器(Sense Amplifier)进行电平检测,进而判断出逻辑值0或者1; - 最后,感应放大器的判断结果会传递给读驱动器(Read Driver),此时会将 8 条位线连接到读驱动器的 8 条线路,进而传递给 SoC(由于读操作会损耗电容当中存储的电荷,如果需要保持数据,就需要通过刷新操作补充电容当中的电荷);
写入操作
执行写入操作的时候,SoC 会通过内存控制器将待写入的数据提前放置到数据总线,然后开启下面示意图所展示的一系列操作:

- 执行写入操作时,内存控制器(Memory
Controller)通过地址总线给出地址信息(包含待写入的
行地址与列地址); - 接下来,关闭指定 Bank 对应行的 NMOS
晶体管,隔离电容的充放电路径,同时将全部位线预充电至
0.5V(感应放大器会根据电容的电荷存储状态,将位线设置到合适的电压);此时如果需要让新数据覆盖旧数据,内存控制器就会发出写使能(Write Enable)信号,通过行地址选通信号RAS激活目标行,并在位线完成预充电之后,将列地址送入到 SoC 内存控制器; - 内存控制器会将指定的 8
条位线,连接到写驱动器(Write
Driver),此时写入驱动器里已经事先准备好了 8
位待写数据。写驱动器的驱动能力远远强于感应放大器,所以能够轻松覆盖指定行列所对应的
1T1S 存储单元数据。此时
WE写使能信号会被拉低置为0,表示正式开始写入操作,接着数据总线上待命的数据就会被锁存,并且写入到指定地址的 DRAM 存储单元当中;
前述的读出和写入操作,都需要一个固定的时钟信号来协调同步,所以
行地址选通(RAS Row Address
Strobe)、列地址选通(CAS,Column Address
Strobe)、写入使能(WE,Write
Enable)等控制信号的时序必须严格对齐(除此之外,其它的控制信号还有片选
CS、时钟 CK、数据掩码
DM、输出使能 OE、刷新 REF、预充电
PRE 等等)。
注意:对存储单元某一行执行完读写操作之后,必须要进行行预充电(Row Precharge),从而关闭当前行,防止残留电荷与新的电荷发生叠加损坏数据,并且重置感应放大器内部的比较电压。本质就是把当前已经激活的行撤销掉激活,从而让出通道资源给后续新行的访问。
刷新操作
刷新操作是读写周期当中,需要重复执行的关键操作,该操作主要围绕感应放大器来进行(JEDEC
规范明确每一个逻辑行,必须在 64ms 时间窗口内至少完成 1
次刷新,避免电容漏电导致数据丢失):

第一步:通过字线激活指定行,导通该行所有存储单元的
NMOS 晶体管,随后将位线电压设定为满电容电压的一半(例如
0.5V),此时存储单元内的 NMOS
晶体管会根据两端电压差,允许电容中存储的电荷双向流动;

第二步:检测已经预置为 0.5V
的位线电压变化,若某一列位线上 1T1S 存储单元的电容存在
1V
满电荷,该电容就会向外泄放少量电流,使得位线的电压小幅抬升。此时感应放大器就会根据这个电压变化,判定存储单元保存的逻辑值是
0 还是 1;

第三步:将位线调整为标准电平(0V 或者
1V),将 1T1S
存储单元的充电至对应的标准电平,完成之后就关闭该行的选通,单次刷新流程结束;
注意:对存储单元执行读取操作之后,必须进行刷新操作。因为感应放大器判断逻辑值的时候,会损耗一部分电容当中保存的电荷,因而读取操作之后必须通过刷新操作,从而使其继续保持原有的逻辑电平状态。
总线拓扑 T 型 与 Fly-by
数据总线与地址/命令/控制总线的物理连接拓扑结构,可以具体划分为如下三种类型:
- 点对点拓扑:每颗存储颗粒都拥有独立的传输通道,控制器与颗粒之间一对一连接,不会共享总线资源(例如下面示意图中的黄色传输线,通常针对每一颗
DDR 存储颗粒的
DQ / DQS / DM这类数据线):

- Fly-by
菊花链串联拓扑:多颗存储颗粒使用一条直线串联到底,Fly-by
属于一种比较特殊的菊花链(Daisy
Chain)拓扑结构,其必须通过
40Ω ~ 60Ω终端电阻(VTT,Voltage Termination)来吸收末端反射 \(VTT = 终端匹配电压 = \frac{VDDQ}{2}\);(例如上面示意图中的黄色传输线,通常只针对 DDR 颗粒之间的共享信号,例如A0 ~ A17地址线,CK_t/CK_c差分时钟线,RAS/CAS/WE/CS等命令控制线):

- 双 T 型拓扑:过去的低速率 DDR3
采用的是这种拓扑结构,内存控制器的地址/命令控制信号会先进入到第
1 个 T 型节点,划分为两路走线之后,再在第 2 个 T
型节点继续被划分为两路(上面示意图里的绿色传输线就采用这种方式),这种方式最大可以支持到
\(2^N\) 个存储颗粒的连接(其中
N为分支次数)。
注意:数据线
DQ、DQS、DM作为高速双向信号,必须严格遵循点对点连接。而对于地址、时钟、命令控制相关的信号,DDR1/2和DDR3 1066/1333采用的是 T 型多分支拓扑,而DDR3 1600和DDR4/5则必须使用 Fly-by 菊花链串联拓扑。
DDR3 引脚定义与布线约束
LPDDR3 引脚定义与布线约束
DDR4 引脚定义与布线约束
LPDDR4 引脚定义与布线约束
DDR5 引脚定义与布线约束
LPDDR5 引脚定义与布线约束
DIMM 双列直插式储模块

大话 SDRAM 和 DDR 动态随机存取存储器



