3. Write Leveling 与 Read Leveling 的区别
做 DDR5 训练的人都知道,这两个 Leveling 不能搞混。我刚开始接触时也犯过糊涂——明明都是校准时序,为什么一个叫 Write,一个叫 Read?后来在一次量产测试中我才彻底想明白:它们的本质差异在于“对称性”。
说白了,Write Leveling 是非对称的,Read Leveling 是对称的。你想想看,时序路径完全不同,训练流程自然也不一样。我习惯把 Write Leveling 看作“单人舞”,Read Leveling 是“双人舞”,后面你会理解这个比喻。
3.1 根本差异:对称性 vs 非对称性
咱们先看一个核心事实。
- Write Leveling:只修正 CLK 与 DQS 的延时关系。路径是控制器→DRAM,单向的。控制器发 CLK,DRAM 回 DQS,但 DQS 是由 DRAM 产生并反馈的。这个循环里的时序偏差只有一端可控,所以非对称。
- Read Leveling:修正 DQS 与 DQ 的对齐关系。路径是控制器→DRAM→控制器,双向的。控制器发读命令,DRAM 返回 DQS 和 DQ,两者都经过相同路径,所以是对称的。
一个关键指标:Write Leveling 的精度 ±100ps 就够用,Read Leveling 通常需要 ±50ps 甚至更高。为什么?因为写路径只有 DQS 一个参考,读路径要同时对齐多个 bit。
举个例子。我在调试一个 6400 MT/s 的 DDR5 板子时,Write Leveling 做完后发现眼图依然很差。排查了半天,原来是 Read Leveling 根本没跑。你想想看,如果接收端对齐不对,发端调再好也没用。
3.2 训练流程对比:步步拆解
下面这张表总结了两个流程的差异,我建议你打印出来贴在工位上。
| 环节 | Write Leveling | Read Leveling |
|---|---|---|
| 时序对象 | CLK 与 DQS 边沿对齐 | DQS 与 DQ 中心对齐 |
| 训练方式 | DRAM 反馈 DQS,控制器调延迟 | 控制器发读数据,DRAM 回送 DQS/DQ |
| 对称性 | 非对称(单向控制) | 对称(双向反馈) |
| 典型精度 | ±100ps | ±50ps |
| 失败影响 | 写数据错位,无法写入 | 读返回错误,数据毛刺 |
| 结束条件 | DQS 有效窗口找到 | 所有 DQ 眼图通过 |
3.3 流程细节:我踩过的坑
Write Leveling 流程(非对称)
- 控制器发送 MRS 命令,进入 Write Leveling 模式。
- DRAM 返回固定模式的 DQS 信号。
- 控制器调节 DQS 延迟,直到采样到稳定值。
- 锁定延迟值,退出模式。
这里有一个坑。我曾经遇到过,有些芯片在 Write Leveling 模式下 DQS 反馈信号有毛刺。我的建议是,不要只看一个采样点,多采几次取平均。
Read Leveling 流程(对称)
- 控制器写入已知数据到 DRAM。
- 发送读命令,DRAM 返回 DQS 和 DQ。
- 控制器调整 DQS 延迟,使 DQ 采样窗口居中。
- 遍历所有 Byte,得到各行延迟值。
- 写回补偿表,退出。
注意,Read Leveling 的对称性体现在:控制器发出去的读命令经过的路径,和 DRAM 返回的数据路径是镜像关系。我习惯在仿真时用这个特性来验证 PLL 的抖动。
我的经验:Write Leveling 如果失败,先查目标阻抗(RTT)是否配置正确。千万别上来就调延迟,那是浪费时间的。我曾经浪费了两天在一个错误 RTT 上,教训深刻。
3.4 典型波形对比
在实际仿真中,你会看到完全不同的波形特征。
- Write Leveling:DQS 是一个“人”字形扫过,边沿不清晰,因为它经过 DRAM 反馈路径,有潜伏期。
- Read Leveling:DQS 与 DQ 同时出现,边沿清晰,因为两者路径长度一致。
记住,Write Leveling 波形通常比 Read Leveling 更“脏”。我刚开始看示波器时总以为设备坏了,后来才知道这是正常的。
3.5 为什么 Write Leveling 不能替代 Read Leveling?
有些人问:既然都对齐时序,为什么不能合二为一?你想想看,Write Leveling 只对齐了 DQS 的边沿,但读数据时还有 DQ 的位对齐问题。我举个例子:如果 DQ 内部走线有偏移,Write Leveling 根本看不到这点,必须靠 Read Leveling 逐位修正。
换句话说,这两个 Leveling 是互补的。Write Leveling 定“框架”,Read Leveling 定“细节”。JEDEC 标准明确要求两个分离阶段。
注意:切勿试图用 Write Leveling 的延迟值直接套用到 Read Leveling。我做仿真时做过比较:两个延迟值可能差 200ps 以上,直接套用会导致 BER 上升一个数量级。
3.6 避坑指南:三个常见错误
- 错误 1:Write Leveling 做完后不切模式。我见过有人做完 Write Leveling 直接发写命令,忘了退出 Leveling 模式,结果数据全写偏。
- 错误 2:Read Leveling 时忽略 PVT。温度和电压一变,之前的 Read 延迟可能失效。我的建议是,每次温度变化 10°C 重新跑 Read Leveling。
- 错误 3:两个 Leveling 顺序颠倒。如果先做 Read Leveling 再做 Write Leveling,你会发现自己陷入死循环。正确顺序是:先 Write 后 Read。
一句话总结:Write Leveling 是对齐眼图的左边界,Read Leveling 是对齐眼图中心。两者缺一不可,顺序不能乱。