2. 训练时序基础概念:训练的目的、初始化流程归纳总结

好,我们正式开始聊训练时序。很多刚接触 LPDDR4 的同学,一上来就被「训练」(Training)这个词搞懵了。说白了,训练就是让 DRAM 和控制器之间「对好表」—— 对齐时钟相位、校准电压参考、补偿 PCB 走线延迟。没有这步,你板子上的颗粒根本没法正常工作。

我记得刚入行那会儿,有个项目就是跳过了一部分训练流程,结果板子在实验室里跑得好好的,一到客户那边高温老化就频繁报错。查了整整两周,最后发现是 ZQ 校准没做完。从那以后,我对训练流程再也不敢马虎。

2.1 为什么要做训练?

LPDDR4 的速率动辄 3200 Mbps 甚至更高。信号在 PCB 上走 1 厘米,延迟就有 50 ps 左右。同一组 DQ 线如果长度差 5 mm,时序偏差就有 25 ps。你想想看,一个 UI(单位间隔)在 3200 Mbps 下只有 312.5 ps。25 ps 的偏差已经占到 8% 的时序预算。

所以训练的核心目的就三个:

  • 消除静态偏差:PCB 走线不等长、芯片封装内的延迟差异、电压温度漂移。
  • 建立正确的采样窗口:让 DQS 的边沿正好落在 DQ 数据的中间位置。
  • 补偿 PVT 变化:不同批次、不同温度、不同电压下,内部延迟都会变。训练是动态调整的过程。

一句话总结:训练是用硬件在初始化阶段自动完成的「自适应时序对准」。不做训练,高频下 DQ 和 DQS 的关系就是乱的,读出来的数据大概率是错的。

2.2 LPDDR4 初始化流程全景

先看整体流程。我习惯把 LPDDR4 的初始化分成三个阶段:上电与复位 → 寄存器和模式配置 → 训练序列。下面这张图你存着,后续每个章节都会对应到这里面的一块。

LPDDR4 初始化流程(训练时序上下文) 阶段1:上电与复位 • VDD1/VDD2 上电时序 • RESET_n 拉低 → 拉高 • CKE 保持低电平 阶段2:寄存器与模式配置 • MRW:写模式寄存器 • 设置突发长度、CL、CWL • 配置 CA 训练使能 阶段3:训练序列 • ZQ 校准 • CA 训练 • Write/Read Leveling 训练子步骤 ① ZQ 校准(阻抗匹配) ② CA 训练(命令地址调谐) ③ Write Leveling(写平衡) ④ Read DQS 门控训练 ⑤ Read/Write 眼图训练(可选) 💡 提示: 完整的训练时序配置不仅包括子步骤的顺序,还涉及每个步骤内的 FSP、PVT 补偿、重试机制等。后续章节会逐个展开。

个人习惯:我每次布局 phase 2 和 phase 3 之间的时序关系时,都会在仿真里多留出 200 ns 的裕量。因为某些颗粒在 MRW 之后需要额外 tMRD 才能进入训练状态,这个值不同厂家的 datasheet 给得不一样。

2.3 初始化流程的关键时序参数

上表中的参数你必须要熟记,特别是 tINIT3 和 tINIT5。我曾经在一个项目中因为 tINIT5 少给了 100 ns,导致颗粒在低温启动时 CKE 始终无法拉高,以为是焊接问题,最后用示波器一抓才发现是时序不够。

阶段 参数 典型值(3200 Mbps) 说明
上电复位 tINIT1 ≥ 200 μs RESET_n 拉低后保持低电平的最小时间
tINIT2 ≥ 2 ms CKE 拉高前,等待时钟稳定和内部初始化完成
寄存器配置 tMRD ≥ 8 nCK MRW 命令到下一个命令的间隔
tMRW ≥ 8 nCK 多寄存器写入时,每笔之间的间隔
训练序列 tZQINIT ≥ 1024 nCK ZQ 校准初始化的最长持续时间
tZQCS ≥ 128 nCK ZQ 校准短命令的持续时间
tDQSAL ≥ 32 tCK Write Leveling 进入后 DQS 自动对齐的延迟

避坑提醒:别以为 datasheet 里给的 tINIT2 = 2 ms 就完事了。如果你的电源上电斜率很慢,或者 VDD1/VDD2 之间有大的去耦电容,实际稳定时间可能远超 2 ms。我建议在硬件设计中留出 5 ms 以上的 CKE 等待时间,并配合电源监控信号做握手。不然就是卡死在等待状态。

2.4 训练子步骤之间的依赖关系

训练子步骤不是随便排的。你看图里的箭头也能猜到,ZQ 校准必须在前面,因为后面的 CA 训练和 Leveling 都需要知道准确的输出阻抗。写 Leveling 又依赖 CA 训练完成后的命令通路是否正确。

我把常见的依赖关系整理成列表,这样你查起来方便:

  1. ZQ 校准 → 为所有输出驱动器和 ODT 提供参考阻抗。必须先做。
  2. CA 训练 → 调整命令/地址总线的建立保持时间。需要在 ZQ 校准之后,且 MR 寄存器中使能 CA 训练。
  3. Write Leveling → 调整 DQS 相对于 CK 的相位,确保写操作时 DQS 边沿对齐 CK。依赖 CA 训练完成。
  4. Read DQS 门控训练 → 精确控制 DQS 接收窗口的开始/结束位置,防止读取时采样到空闲状态。依赖 Write Leveling。
  5. 眼图训练(可选) → 针对读写数据眼图中心的精细微调,常见于高速率下。排在最后。

这里有个容易忽略的点:有些控制器把「Read DQS 门控训练」和「Read 眼图训练」合并成一步,但两者的物理实现不同。门控训练是找 DQS 的前沿和后沿,眼图训练是找 DQ 采样的最佳相位。如果合并做,你可能无法单独 debug 门控失败的问题。

我的做法:在开发阶段把每个子步骤拆成独立的函数,每个步骤都返回成功/失败标志,并打印出最终调整的延迟步进值。这样如果后续量产时某个工位出现训练失败,可以直接定位到是哪个 step 出了问题。

2.5 训练失败后的重试机制

理论上,训练一次就能成功。但实际中,由于噪声、电源毛刺、温度瞬变,偶尔会卡在某个步骤。LPDDR4 标准允许控制器重试训练,但重试前必须满足一些条件:

  • 重试前要先将相关 MR 寄存器恢复为初始值(比如 ZQ 校准配置)
  • 连续重试次数建议不超过 3 次,否则可能在 RTL 里出现死循环
  • 重试间隔至少留出 50 个 tCK,让 DRAM 内部状态复位

我见过最离谱的 case 是:某平台在 -40°C 下 ZQ 校准一直超时,连续重试了 16 次,最后把 PMIC 的电流都拉爆了。后来发现是 ZQ 电阻的 PCB 布局离颗粒太远,寄生电容太大导致校准时间变慢。解决方案是把 tZQINIT 的值从 1024 nCK 改成 2048 nCK,一次就过了。

经验值:如果你在量产时发现某个温度点训练失败率高,先把相关的训练延时参数放大 1.5 倍试试。这是最便宜的容差手段。但注意,别放得太大,否则会影响初始化时间。

2.6 小结一下

这一章我们梳理了 LPDDR4 训练的基础:为什么要做、整个初始化流程长什么样、各阶段的关键参数,以及子步骤之间的依赖。训练时序本质上是在跟硬件特性博弈 —— 你的 PCB 走线、电源完整性、温度范围,都会影响哪个步骤需要多长的时间。

后面我们会一个步骤一个步骤地深入。你先把这张流程图画在脑子里,遇到 training 问题的时候,先问自己:我目前走到哪一步了?这一步的参数给够了没有?