3. LPDDR4 训练(Training)简介与目的

好,从这章开始,我们正式进入 LPDDR4 的“训练”环节。你可能会问:为什么要训练?DDR 不都是焊上去就能跑吗?

其实不是。LPDDR4 的频率动辄 3200MT/s 以上,信号在 PCB 走线上传输,到达颗粒和控制器的时间不可能完全一致。再加上电压、温度的变化,每个颗粒的电气特性都有差异。如果不做训练,读写窗口会严重缩小,甚至根本采不到正确数据。

我调过一块非常挤的 8 层板,走线绕了又绕,结果 DQS 和 CK 的延时差了接近 100ps。嗯,那次要不是训练把 DQ 的延迟逐个校准回来,板子就直接变砖了。

什么是 LPDDR4 训练?

训练,说白了就是上电初始化阶段,控制器跟颗粒之间互相“试探”的过程。

控制器发特定的命令或数据模式,颗粒给出响应。控制器根据采样的结果,调整 DQ/DQS 的相位、驱动强度、ODT 阻值等参数,直到建立起一个可靠的读写时序窗口。

我习惯把训练类比成两个人握手:一方用力太小,另一方感觉不到;用力太大,又会被捏疼。训练就是在找那个“刚刚好”的力度。

为什么要做训练?

这里我列几个核心原因,都是实际项目中容易被忽略的点:

  • 补偿工艺偏差:不同批次的颗粒,甚至同一颗粒不同 Bank,内部延迟都有差异。训练能把这种“个体差异”抹平。
  • 抵消温度电压漂移:手机从冷启动到高负载运行,温度可能飙升 40°C。DRAM 的 tCK、tDS 都会变。训练在初始化阶段就设好初始值,并在运行中通过 MRR 监控是否需要重新训练。
  • 对齐 DQS 与 CK 的相位:DQS 必须严格对齐 CK 的上升沿和下降沿才能正确采样。我踩过一个坑:板厂没按等长要求走线,DQS 比 CK 长了一截,结果读数据全是乱码。后来靠训练里的 DQS 门控校准(DQS gating)才救回来。
  • 优化信号完整性:ZQ 校准能调整驱动强度,改善反射和振铃。对于拓扑复杂的多颗粒设计,这个步骤决定了信号质量的天花板。

训练的主要类型

LPDDR4 的训练不是单一动作,而是一套组合拳。我把它分成以下几类,你可以对照 JEDEC 规范 JESD209-4 来理解:

训练类型 目的 我常遇到的问题
ZQ 校准 校准输出驱动阻抗(34Ω/40Ω)和 ODT 阻值 ZQ 电阻精度不够,导致阻抗偏差超过 ±15%
DQS 门控训练 让 DQS 门控窗口精确包围数据有效窗口 多颗粒设计中,每个 die 的 DQS 延迟不一样,需要逐个校准
读/写均衡训练 调整 DQ 与 DQS 的相位关系,使建立/保持时间最大化 走线长度差小于 10mil 时,训练结果反而不稳定,需要留余量
CA 训练 对齐命令/地址信号与 CK 的时序 CA 总线负载重时,信号斜率变差,培训结果会跳变
Vref 训练 调整 DQ 和 CA 的参考电压,使采样点在信号眼图正中心 温度骤变时 Vref 需要动态调整,我建议预留 MRW 接口
写电平训练 校准写 DQS 与 CK 的相位对齐 这个一般在 CA 训练之后做,顺序不能乱

训练对时序的影响(初步)

为什么我们做时序分析时必须考虑训练参数?因为训练直接改变了每个信号的“位置”。

举个例子:读均衡训练会调整 DQS 相对于 CK 的延迟。如果训练结果把 DQS 前移了 50ps,那么采样数据时的 tDQSCK 最小值就小了 50ps,但同时 tDQSCK 最大值也大了 50ps。这直接压缩了读时序的余量。

我见过有工程师做静态时序分析时,直接用 JEDEC 的典型值,完全忽略训练带来的 shift。结果仿真 pass,实测 fail。后来花了三天排查,才发现是训练参数把 DQ 的公共延迟调过了头。

核心点:训练参数不是“固定”的。每次上电、每次温度变化后,它们都可能变。所以做时序闭合时,至少要考虑训练参数变化范围的边界情况。

训练流程一览

下面是 LPDDR4 初始化训练的典型顺序。我用 SVG 画了一张图,帮你建立全局印象:

LPDDR4 训练流程 LPDDR4 初始化训练流程 上电初始化 ZQ 校准 CA 训练 写电平训练 DQS 门控 + 读写均衡 ⚠ 注意 1. 顺序不可颠倒 2. 每个步骤都可能失败 3. 失败后需要重试或降频 ZQ 校准 通过外部电阻 RZQ 校准驱动强度 读/写均衡 调整 DQ 相对 DQS 的 建立/保持时间

一个小技巧:我一般在调试阶段,会通过读取 MR6(ZQ 状态)和 MR2(读均衡结果)来验证训练是否完成。如果这两个值在反复读取时稳定不变,基本说明训练成功。

训练失败怎么办?

LPDDR4 规范规定,训练失败后控制器可以重新训练,如果多次失败需要进入“降频模式”。

我遇到过最头疼的一种情况:室温下训练一切正常,但到低温箱里 -10°C 时,DQS 门控训练反复报错。后来发现是颗粒的 DQS 输出延迟随温度变化太大,而控制器的校准步长不够精细。解决方案是把温度补偿系数写到固件里,低温时自动加一个固定的延迟偏移。

谨慎处理:千万不要在高温下做训练!晶圆上的 retention time 在高温下会显著缩短,训练时很容易误判。我一般建议在 25°C-85°C 范围内做初始训练,后续通过 MRR 的温度值判断是否需要重训。

总结一下

我把 LPDDR4 训练的目的浓缩成三句话:

  1. 找对齐——让 DQS 与 CK、DQ 与 DQS、CA 与 CK 的相位都处在最佳采样点。
  2. 找匹配——让驱动强度和 ODT 阻值与 PCB 走线、颗粒工艺相匹配。
  3. 找余量——通过逐个校准,把由于工艺、温度、电压引起的随机偏差补偿掉,留出足够的时序余量。

后面我们会深入每个训练类型的参数细节,以及它们如何影响具体的时序约束。你现在先记住一个概念:训练不是可有可无的“选项”,而是 LPDDR4 能稳定跑在目标频率的基石。