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 流程(非对称)

  1. 控制器发送 MRS 命令,进入 Write Leveling 模式。
  2. DRAM 返回固定模式的 DQS 信号。
  3. 控制器调节 DQS 延迟,直到采样到稳定值。
  4. 锁定延迟值,退出模式。

这里有一个坑。我曾经遇到过,有些芯片在 Write Leveling 模式下 DQS 反馈信号有毛刺。我的建议是,不要只看一个采样点,多采几次取平均。

Read Leveling 流程(对称)

  1. 控制器写入已知数据到 DRAM。
  2. 发送读命令,DRAM 返回 DQS 和 DQ。
  3. 控制器调整 DQS 延迟,使 DQ 采样窗口居中。
  4. 遍历所有 Byte,得到各行延迟值。
  5. 写回补偿表,退出。

注意,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 是对齐眼图中心。两者缺一不可,顺序不能乱。

Write Leveling 与 Read Leveling 区别总图 Write Leveling(非对称) CLK ↔ DQS 边沿对齐 单向反馈,DRAM 产生 DQS 精度 ±100ps Read Leveling(对称) DQS ↔ DQ 中心对齐 双向反馈,路径对称 精度 ±50ps 非对称 vs 对称 关键区别总结 • Write Leveling 是单向控制,只调 CLK-DQS 边沿,精度较低 • Read Leveling 是双向对称,调 DQS-DQ 中心对齐,精度更高 • 两者流程分离,顺序固定:先 Write 后 Read,不能颠倒 • 训练失败的影响不同:Write 错位导致写入错误,Read 错误导致读回毛刺