S02 —— 为什么 DRAM 需要”刷新”?SRAM 和 DRAM 的本质区别
金句:SRAM 靠晶体管锁死数据,DRAM 靠电容保存数据——一个只要不断电就永远记得,一个必须周期性”回血”才能记得。
1. DRAM 刷新问题的本质
1.1 电容漏电的物理机制
上篇(S01)讲到 DRAM Cell 是一个电容 + NMOS 晶体管。电容的电荷会慢慢泄漏:
电容漏电的物理原因:
- 电容两个极板之间隔着绝缘层(SiO₂ 或 high-k 材料)
- 绝缘层不是完美的隔离层,总有微量隧穿电流(quantum tunneling)
- 温度越高,载流子动能越大,隧穿概率越高
- 25°C:数据保持时间约 64ms
- 60°C:漏电速度加快约 4 倍,保持时间降到 ~16ms
电容电压的衰减过程:
- 充满电(存"1")→ VDD ≈ 1.2V
- 漏电 → 电压缓慢下降
- 降到 Sense Amplifier 的判定阈值(~0.6V = VDD/2)以下
→ "1" 被误判为"0" → 数据损坏
结论:必须在电容电压降到阈值之前,把数据读出来再写回去
→ 这就是"刷新"(Refresh)1.2 刷新操作的具体过程
刷新不是简单的"读一遍"——而是按行(Row)进行的精确操作:
Step 1:内存控制器发送 REF 命令
→ 指定目标 Bank(REF# Bank)
Step 2:Bank 内部行解码器选通某一行(Row)
→ 该行所有 Cell(1024~8192 个)同时接入 Bit Line
Step 3:Sense Amplifier 读取整行数据
→ 放大每个 Cell 的微弱电压变化到完整电平
→ 判断每个 Cell 是"1"还是"0"
Step 4:立即写回(Restore)
→ 放大后的数据直接对电容充电
→ 电容恢复到 VDD("1")或 GND("0")
Step 5:Precharge(预充电)
→ 关闭该行,准备下一个刷新周期
注意:刷新期间,该 Bank 无法响应正常的读写请求。2. 刷新时序和频率
2.1 JEDEC 刷新规范(DDR4)
DDR4 刷新参数(JEDEC JESD79-4B):
刷新周期(tREFI,Refresh Interval):
→ 标准值:7.8125µs(典型刷新间隔)
→ 64ms / 7.8125µs = 8192 次刷新/64ms
→ 每 7.8µs 必须发起一次刷新命令
刷新时间(tRFC,Refresh Cycle Time):
→ 刷新一行需要约 350ns(DDR4-8Gb)
→ 刷新 8192 行的总时间 ≈ 8192 × 350ns ≈ 2.87ms
→ 占空比 = 2.87ms / 64ms ≈ 4.5%
这 4.5% 的时间 DRAM 不可访问,是 DRAM 的固有开销。刷新频率的三个档位(JEDEC DDR4):
1x 刷新(标准):
- 每 64ms 刷新所有行一次
- tREFI = 7.8125µs
- 用于:室温(< 85°C)环境
2x 刷新(高温补偿):
- 每 64ms 刷新所有行两次(间隔减半)
- tREFI = 3.9µs
- 用于:高温环境(85°C ~ 105°C)
- DDR4 颗粒内部自动切换,不需要软件干预
4x 刷新(极端高温):
- 每 64ms 刷新所有行四次
- tREFI = 1.95µs
- 用于:持续高温(> 105°C)或数据可靠性要求极高场景
手机/汽车级 DRAM 还会用更密集的刷新(8x)。2.2 刷新对内存带宽的影响
刷新期间 Bank 被阻塞,导致有效带宽下降:
场景:GPU 持续访问显存(高带宽需求)
DDR4-3200,4.5% 刷新开销:
- 标称带宽 = 25.6 GB/s(64-bit 通道)
- 实际可用带宽 ≈ 25.6 × (1 - 4.5%) ≈ 24.4 GB/s
- 损失约 1.2 GB/s
刷新还会导致延迟抖动(Latency Spike):
- 刷新期间访问请求被挂起(排队)
- 刷新完成后,一次性处理积压的请求
- 造成周期性延迟峰值
对延迟敏感的应用(如数据库索引):
- 刷新导致的周期性暂停会影响 QPS
- 解决方案:使用 ECC 内存 + 纠错,或提高刷新频率降低单次影响3. DDR5 的 Same Bank Refresh(SBR)改进
3.1 传统 DDR4 刷新的问题
All Bank Refresh(所有 Bank 同时刷新):
Bank 0 ──── REF ──── 刷新中(不可访问)
Bank 1 ──── REF ──── 刷新中(不可访问)
Bank 2 ──── REF ──── 刷新中(不可访问)
Bank 3 ──── REF ──── 刷新中(不可访问)
...(所有 Bank 同时阻塞)
问题:刷新期间整个 DRAM 完全不可访问
→ 带宽损失集中爆发
→ 延迟抖动更明显3.2 SBR 的工作原理
Same Bank Refresh(DDR5 新特性):
Bank 0 ──── REF ──── 刷新中(不可访问)
Bank 1 ──── READ ──→ 正常访问 ✓
Bank 2 ──── WRITE ─→ 正常访问 ✓
Bank 3 ──── IDLE ──→ 等待
...(其他 Bank 继续工作)
工作方式:
- 每次只刷新一个 Bank(而非所有 Bank)
- 被刷新的 Bank 暂停,其他 Bank 继续服务读写请求
- 刷新完成后,该 Bank 立即恢复工作
SBR 的效果:
- 刷新期间可用带宽比例:~99.5%(vs DDR4 的 ~95.5%)
- 延迟抖动大幅降低
- 游戏帧时间稳定性提升约 15~20%
DDR5 还支持 Same Bank Group Refresh(SBGR):
- 以 Bank Group 为单位刷新
- 同一 Bank Group 内的多个 Bank 不能同时访问
- 但不同 Bank Group 之间可以完全并行4. Self-Refresh(自刷新模式)
4.1 什么是 Self-Refresh
Self-Refresh:DRAM 自己管理刷新,不需要外部控制器。
工作原理:
- DRAM 芯片内部有刷新计时器(Refresh Timer)
- 超时后自动执行刷新操作
- 内存控制器全程不参与
使用场景:
- 笔记本进入睡眠(S3/Suspend to RAM)
- 手机屏幕关闭进入低功耗模式
- 系统完全空闲,内存控制器可以断电
功耗对比(DDR4-8Gb,典型值):
- Active(持续读写):~500mW
- Active Idle(Bank 开放,无访问):~100mW
- Precharge Power-Down:~20mW
- Self-Refresh(自刷新模式):~1~2mW
Self-Refresh 的功耗差距:
- 从 Active 到 Self-Refresh:功耗降低约 250~500 倍
- 这就是笔记本待机可以坚持很多小时的原因4.2 Self-Refresh 的进入和退出
进入 Self-Refresh 的条件:
1. 内存控制器发送 MRW 命令设置 MR16[0] = 1
→ 启用 Self-Refresh 模式
2. 内存控制器发送 SRE(Self-Refresh Enter)命令
→ DRAM 内部接管刷新计时器
→ 外部时钟可以停止(降低 PLL 功耗)
3. DRAM 进入低功耗状态
→ 只有自刷新电路和计时器工作
→ 数据保持在 Cell 中(理论上可以保持数年)
退出 Self-Refresh:
1. 时钟恢复(CKE 信号拉高)
2. DRAM 检测到时钟,重新同步
3. 内存控制器发送 SRX(Self-Refresh Exit)命令
4. DRAM 恢复正常工作模式
5. 延迟:tXS(Self-Refresh Exit Latency)≈ 200ns
移动设备优化:
- 屏幕熄灭 → 进入 Self-Refresh(功耗从 500mW 降到 1~2mW)
- 屏幕点亮 → 退出 Self-Refresh(延迟 < 1µs)
- 用户完全感知不到待机唤醒的延迟5. SRAM 和 DRAM 的本质对比
5.1 SRAM 的结构和工作原理
SRAM Cell(6T Cell)—— 6 个晶体管组成的双稳态锁存器:
VDD
│
┌──┴──┐
│ T1 │ T2 ← 交叉耦合的反相器
└──┬──┘
↕(正反馈)
┌──┬──┐
│ T3 │ T4 ← 访问晶体管
└──┬──┘
│
GND
两个稳定状态:
状态 A:T1 导通,T2 截止 → Q=1, Q̅=0
状态 B:T1 截止,T2 导通 → Q=0, Q̅=1
"双稳态"的物理意义:
→ 正反馈:只要电源不断,一进入某个状态就会永远保持
→ 打破状态需要外部信号强制覆盖(写入)
→ 不需要刷新
读操作:
1. Word Line(WL)拉高 → T3/T4 导通
2. Q 和 Q̅ 通过 BL/BLB 连接到 Sense Amplifier
3. 放大器检测电压差,判断存储的值
→ 读操作不破坏数据(非破坏性读)
写操作:
1. WL 拉高
2. 外部强制驱动 BL/BLB 到目标值
3. 交叉耦合反相器被覆盖,稳定到新状态
→ 写入能力由驱动强度决定5.2 6T SRAM Cell 的面积
SRAM Cell 面积(6 个晶体管):
每个晶体管(NMOS/PMOS)占用约 6F²(F = 最小特征尺寸)
6T Cell ≈ 120F²(实际包含连线,标准单元库数据)
DRAM Cell 面积(1 个晶体管 + 1 个电容):
NMOS:~6F²
电容:需要足够面积来维持容值(~20F² 最小)
总计:~6F²(不含电容面积开销)
密度对比:
DRAM 密度是 SRAM 的约 6~8 倍
→ 这就是为什么主存(GB~TB)用 DRAM
→ 而 CPU Cache(KB~MB)用 SRAM5.3 全面对比表
对比维度 SRAM DRAM
────────────────────────────────────────────────────────────────
结构 6 个晶体管 1 个 NMOS + 1 个电容
密度 1x(低密度) 6~8x(高密度)
成本/GB 高(~50x DRAM) 低
速度 快(0.5~2ns) 慢(40~100ns)
功耗 高(静态电流) 低(刷新时才高)
数据保持 只要供电就保持 必须周期性刷新
刷新需求 不需要 每 64ms 刷新所有行
读操作 非破坏性(直接读) 破坏性(读后需 Restore)
应用 CPU Cache(L1/L2/L3) 主内存(DDR SDRAM)
单元面积 ~120F² ~6~15F²
漏电特性 低(关断电流 nA 级) 电容漏电(µA 级)
制造工艺 标准 CMOS Logic 专用 DRAM 工艺(embedded DRAM 除外)
温度敏感性 低 高(高温加速漏电)
软错误率 低(SRAM cell 稳定) 较高(电容电荷少,易受辐射影响)6. CPU Cache 为什么用 SRAM
L1 Cache 的要求:
- 延迟必须极低(~1ns,对应 3~4 个 CPU 时钟周期)
- 每次 CPU 访问必须命中(或快速降级到 L2)
- 数据必须始终正确(不能因刷新而不可访问)
SRAM 满足这些要求:
✓ 0.5~2ns 访问延迟(比 DRAM 快 20~50 倍)
✓ 非破坏性读(不需要读后写回)
✓ 不需要刷新(数据始终有效,CPU 随时可以访问)
✓ 与 CPU 逻辑工艺兼容(同厂,same die)
代价:
✗ 密度低(6T/cell),面积大
✗ 成本高(相同容量,SRAM 成本是 DRAM 的 50 倍以上)
✗ 静态功耗高(反相器有漏电流)
所以 CPU Cache 是性能和成本的权衡:
- L1/L2/L3 用 SRAM(速度优先)
- 主存用 DRAM(容量优先)7. 刷新相关的其他 DRAM 特性
7.1 可变刷新频率(Variable Refresh Rate)
移动 DRAM(LPDDR)支持可变刷新频率:
正常模式(Full Speed):
- 刷新频率:标准 tREFI
- 用于:系统正常运行
省电模式(Reduced Refresh):
- 刷新频率降低一半(tREFI 翻倍)
- 用于:轻度负载,降低功耗
- 代价:数据保持时间缩短,只适合短期空闲
激进模式(Aggressive Sleep):
- 刷新频率降到 1/4(tREFI × 4)
- 只用于:屏幕熄灭后的极低功耗状态
- 唤醒后立即恢复正常刷新
DDR5 的精细刷新控制:
- 可以只刷新"热行"(频繁访问的行)
- "冷行"(长期不访问的行)刷新频率降低
- 节省约 20~30% 的刷新功耗
- 需要内存控制器配合分析访问模式7.2 刷新期间的访问请求处理
刷新期间,内存控制器如何处理新的读写请求?
方案 1:排队(Queuing)
- 刷新期间到来的请求进入队列
- 刷新完成后,按序处理队列中的请求
- 简单,但会导致请求延迟累积
方案 2:Bank 交错(Bank Interleaving)
- 内存控制器在不同 Bank 之间交错发起请求
- 刷新 Bank 0 时,服务 Bank 1/2/3 的请求
- 利用多 Bank 并行隐藏刷新延迟
- 现代 DRAM 控制器普遍采用
方案 3:刷新与访问并行(SBR,DDR5)
- 刷新 Bank N 时,其他 Bank 正常提供访问
- 刷新开销分散到时间轴上,而非集中
- 延迟抖动大幅降低
刷新对延迟敏感型应用的影响:
- 数据库索引访问:刷新时延迟跳升 3~5 倍
- 音视频播放:刷新导致帧间隔抖动
- 实时控制系统:刷新时响应延迟不确定8. 总结
- 刷新原因:DRAM Cell 电容漏电,室温下 64ms 内电荷衰减到阈值以下,数据损坏
- 刷新过程:按行(Row)激活 → Sense Amplifier 读取 → 立即写回(Restore)→ Precharge 关闭
- 刷新代价:每 64ms 刷新所有行,约 4.5% 的带宽损失;DDR5 SBR 降至 <0.5%
- Self-Refresh:空闲时 DRAM 自己刷新,功耗从 500mW 降到 1~2mW,用于笔记本/手机待机
- SRAM vs DRAM:SRAM(6T 双稳态锁存器,无需刷新,速度快面积大)vs DRAM(1T+1C,需刷新,密度高成本低)
- 应用分工:SRAM 用于 CPU Cache(速度优先,容量小),DRAM 用于主存(容量优先,速度慢)
下篇预告(S03):为什么有了 DRAM 主存,CPU 还需要 Cache?Cache 的工作原理是什么?L1/L2/L3 多级 Cache 是怎么配合的?
关注公众号「AI不着急」,回复”资料”获取内存学习路线图。
评论