DDR 和 SDR 有什么区别?为什么要训练?
更新时间:2026-09-21。问题驱动短答页。DDR 控制器见 DDR3/DDR4 控制器初始化、LPDDR PHY 训练,双边沿 IO 见 SDR/DDR IO 寄存器。
一句话回答
SDR 每个时钟周期只在一个沿(通常上升沿)传一个数据;DDR 在上升沿和下降沿各传一个,同样时钟频率下数据带宽翻倍。难点是双边沿都要满足建立/保持,随频率升高芯片内部时钟到各个 DQ 的延迟在 PVT 下不一致,普通 IO 无法保证采准,所以 DDR 采用“源同步”:数据 DQ 配一个随路的数据选通 DQS,接收端用 DQS 的双边沿去采 DQ;上电后控制器/PHY 还要做一系列训练(write leveling、read/write DQS-DQ training、gate training 等),测量并补偿各字节通道的偏斜,把 DQS 边沿对到 DQ 数据眼中央。
SDR vs DDR
| 维度 | SDR | DDR |
|---|---|---|
| 每周期数据 | 1 个 | 2 个(双沿) |
| 采样沿 | 单边沿 | 上升+下降 |
| 选通 | 单一系统时钟 | 差分/随路 DQS |
| 时序余量 | 较宽松 | 紧张,需要训练补偿 |
| 典型 | 老 SDR SDRAM/普通并行总线 | DDR2/3/4、LPDDR |
为什么必须训练
- DDR 是源同步接口:发送方同时送出 DQ 和 DQS,二者走线/缓冲延迟在不同字节通道、不同芯片、不同电压温度下都不同。
- 写操作中 DRAM 期望 DQS 与 DRAM 自己时钟有特定相位(fly-by 拓扑让时钟和 DQS 到达时间错开),write leveling 让控制器反推调整 DQS 延迟。
- 读操作中控制器要找到 DQS 跳变相对 DQ 的中心(read training),还要正确“开门”避开 DQS 空闲(gate training)。
- 训练结果是每个 byte lane 独立的延迟值(per-bit deskew),存于 PHY。
实现要点
- 用 DDR IO 寄存器(IDDR/ODDR) 在内部分别处理上下半拍,而不是手写双边沿触发器。
- **ODT(片上终端电阻)**抑制高速反射,见 信号完整性。
- 控制器负责协议/初始化,DDR PHY 负责时序校准和延迟线;初始化和训练顺序要严格符合 JEDEC,见 DDR3/4 初始化。
- 多角(见 PVT/MMMC)下重新训练或保留足够余量。
常见坑
- 以为双边沿只是“多写个 negedge”,忽略随路选通和偏斜。
- 没做训练或训练参数没固化,高温/低压后误码。
- DQ/DQS 走线不等长、字节通道偏斜超出去偏能力。
- 上电初始化顺序、ODT、模式寄存器配置错误导致训练失败。
总结
SDR 单沿每拍传一个数,DDR 双沿把带宽翻倍,但双沿时序极紧,于是采用源同步的随路选通 DQS 去采 DQ,并在上电由 DDR PHY/控制器做 write leveling、read/write DQ-DQS 和 gate 等训练,逐字节通道测出并补偿 PVT 下的延迟偏斜,把采样边沿对到数据眼中央;实现上要用 IDDR/ODDR、配 ODT 并严格遵循 JEDEC 初始化,多角下保留训练余量。