DDR3/DDR4 接口与控制器:初始化序列、ZQ 校准与刷新/时序参数
更新时间:2026-09-19。前置:SRAM 单元与灵敏放大器、存储器分块与交叉。DDR(Double Data Rate)SDRAM 在时钟双沿传数据,容量大、便宜,但协议远比 SRAM 复杂,通常要专门的 DDR 控制器 + PHY。
本文要回答的问题
- DDR 为什么要 ACT/READ/PRE 多步、行列地址为何复用?
- 上电后那条长初始化序列(MRS/ZQ/刷新)在做什么?
- 为什么必须周期性刷新,漏刷会怎样?
- 控制器怎么靠 bank 并行和调度填满双沿数据?
一、接口与命令
DDR 用地址线在不同节拍承载**行地址(RAS)和列地址(CAS)**以省引脚,命令由 CS#/RAS#/CAS#/WE# 编码:
| 命令 | 作用 |
|---|---|
| ACTIVATE | 打开某 bank 的一行(把整行搬进 sense amp 页) |
| READ/WRITE | 在已打开行内按列读/写(可突发 BL8/BL16) |
| PRECHARGE | 关闭行、对位线预充回 VDD/2 |
| REFRESH | 自动刷新(行计数器内部递增) |
| MRS/MRR | 写/读模式寄存器(突发长度、CAS 延迟等) |
| ZQ CL/CAL | 输出驱动/ODT 电阻校准 |
数据走双向 DQ + 数据选通 DQS(源同步双沿),DM/DBI 做掩码/位反转。读有 CL(CAS Latency)、写有 CWL,DDR4 还有 tCCD、group/ bank group 等参数。
二、初始化序列(简化)
上电稳定 → CKE 拉高 → 时钟稳定 → NOP 等待
PRECHARGE ALL
两次 AUTO REFRESH(或多次 EMRS 流程)
MRS: 编程 MR0..MR6(DDR3)/MR0..MR5(DDR4,突发、CL、ODT、刷新率等)
ZQCL(长校准,上电后做一次,校准输出阻抗/ODT)
进入正常读写;运行中周期性:
- ZQCS 短校准(补偿温漂)
- AUTO REFRESH,平均刷新周期 tREFI(如 7.8μs/常温,高温减半)
DDR4 额外: 上电需 RESET_n 时序、CA parity、Vref 内部建立等模式寄存器必须按数据手册顺序写;DDR3 的 DLL 复位(MR0 bit 后再清)、DDR4 的 Gear-down/parity 都在初始化阶段固定。
三、刷新与保持
DDR 单元是「电容 + 晶体管」,电荷会泄漏,必须在 tREFW(如 64ms)内把所有行刷一遍:平均每 tREFI 发一次 REF,每次刷新内部一批行。控制器用刷新计数器调度,错过窗口数据逐位丢失。高温时 retention 变短,需进入高温刷新(2× 刷新率)。刷新期间该 bank/rank 不能访问,控制器要把刷新请求排进调度,既不能漏也尽量不阻塞突发效率。
四、ODT、写平整与校准
- ODT(On-Die Termination):DDR 内置可控终端电阻,由控制器在读写时按命令/寄存器开关,抑制高速反射,源同步接口的信号完整性关键。
- ZQ 校准:片外精密电阻接 ZQ 脚,控制器据此校准驱动阻抗与 ODT;上电 ZQCL、运行 ZQCS。
- Write Leveling(DDR3/4): fly-by 拓扑下 DQS 到各颗粒时钟偏斜不同,控制器在训练时让 DRAM 反馈 CK-DQS 关系,逐颗粒补偿 DQS 延时。
- 读/写训练(DDR4):DDR4 还要做读训练、写训练、Vref 训练、门控(read DQS gating)对齐眼图中心——这就是 DDR PHY 的 training 流程,启动时可见一串 training 步骤。
五、控制器微架构与调度
AXI 请求 ─► 命令调度器(reorder)
├─ bank 状态机:行命中→直接读/写;行空→ACT;行冲突→PRE→ACT
├─ 刷新/校准请求插入
└─ 时序检查:tRCD(ACT→读) tRP(PRE→ACT) tRFC(刷新) tFAW 等
▼
PHY:地址/命令时序、DQS/DQ 延迟对齐、写平整 ─► DDR- 行缓冲局部性:访问落在已打开行(row hit)最快;跨行要 precharge+activate(row miss/conflict)。调度器重排请求,把同 row 的聚到一起、不同 bank 并行,掩盖延迟。
- 多 bank/bank group/rank 交错提高带宽(见 存储分块交叉)。
- 控制器与 PHY 通常是软硬配合:PHY training 由固件/初始化代码触发,控制器负责运行时时序。
六、常见的坑
- 漏掉/延迟刷新:超过 tREFW 尤其高温下数据位翻转。
- MRS 顺序错:CL/突发/DLL 复位未按手册序列,训练不过、全 1/0。
- 把 DDR 当 SRAM 随机访问:不做行调度,每行都 PRE/ACT,带宽崩塌。
- 时序参数配错:tRCD/tRP/tCL 小于颗粒规格,采样错误。
- 未做 ZQ/training:阻抗不匹配、DQS 眼图偏移,高速读写出错(降速反而正常)。
- DQS/源同步方向切换:读写方向反转的 turnaround 周期不足,总线冲突。
- 刷新阻塞实时:把高优先级请求排在 tRFC 长刷新内,确定性任务抖动。
- DDR3/DDR4 模式寄存器混用:MR 定义不兼容,照搬初始化不工作。
- 双沿但控制器按单沿供数:数据宽度/突发长度与 PHY 不一致,帧错位。
- 电源/Vref 不稳:DDR4 内部 VrefDQ、VTT 终端电源噪声直接造成眼图闭合。
- 多 rank ODT 使能错:对非活动 rank 误开终端,信号被衰减。
相关与延伸
总结
DDR 是用行/列地址复用、ACT 打开一行进 sense amp、READ/WRITE 在 CL/CWL 后由 DQS 源同步双沿突发、PRE 关闭行、REF 周期刷新、MRS 配置、ZQ 校准 ODT/驱动阻抗的复杂动态存储;上电要按固定序列做 PRE/刷新/MRS/ZQCL 并在运行中保证 tREFW(高温加倍)内刷完所有行,DDR4 还要写平整和读写/Vref 训练;控制器靠行命中调度、bank/rank 交错掩盖延迟——漏刷新、MRS 顺序错、不做 ZQ/training 和把 DDR 当 SRAM 是四大坑。