好的,各位同学,欢迎来到第三章。今天聊点干货,咱们把LPDDR4训练序列的时序框架理清楚。这章是后续所有参数调优的基础,搞懂了全局时序,你才知道每个步骤到底在等什么,以及为什么有些延迟必须死等,有些则可以灵活调整。

训练序列时序概览

从复位到训练完成的整体流程

JEDEC规范定义了一套严密的开机上电训练流程,它不是一拥而上的乱跑,而是像盖楼一样,一层层地打好基础。我把它分成三个大的阶段:硬件初始化、初始化校准、高级训练。

我个人习惯把这套流程画成一条时间线,这样脑子里更清楚。你看下面这张图,从CKE使能开始,一直到我们最关心的读写训练完成,每一步都有严格的先后顺序。

核心思想: 前面的步骤没做完,后面的步骤绝不能碰。强行跳过或者乱序执行,轻则训练失败,重则系统直接启动不了。

LPDDR4 训练序列时序概览 1. 上电&复位 (Reset/CKE) 2. ZQ 校准 3. DRAM初始化 4. MRR 5. Write Leveling 6. Read DQS Gating 7. Read DQS Tracking 8. CA Training 9. Vref 训练 10. DQ/DQS 训练 11. 读写眼图中心化 & 训练完成 阶段一:基础校准 阶段二:时序对齐 阶段三:收尾优化

各个阶段的时序窗口约束

搞清楚了顺序,咱们再看每个阶段的时序窗口。JEDEC规范给了很多`tXXX`参数,说白了就是告诉你:这个动作做完后,必须等多少时间才能做下一个动作。这些参数不是让你随便设的,设短了系统不稳,设长了启动太慢。

1. 上电与复位阶段 (tInitVref, tXSR, tRFC)

tInitVref:上电后等待内部参考电压稳定的时间。我在第一次调试一个早期LPDDR4样片时,就遇到过因为复位信号释放得太快,导致DRAM内部Vref还没建立好,后续所有初始化命令都得不到正确响应。查了很久才发现是这个参数没给够。保守点,按照数据手册最大值给,这个省不了。

tXSR:从自刷新状态退出到第一条有效命令的延迟。这个很重要,当系统从休眠模式唤醒时,必须等DRAM内部状态完全恢复。

参数 典型值 (LPDDR4-4266) 说明
tInitVref ≥ 1 μs 内部参考电压建立时间,保守取2μs
tXSR ≥ tRFC + 10ns 自刷新退出到有效命令,至少tRFC加10ns
tRFC ≥ 180 ns (DDP) 单次刷新操作周期

2. ZQ 校准阶段 (tZQINIT, tZQCL, tZQCS)

ZQ校准说白了就是让DRAM内部根据温度和电压,自己把输出驱动强度校准到最精确。JEDEC规定了三种校准操作,耗时不同。

我曾经在一个项目中,为了省那么几毫秒的启动时间,把tZQINIT设得刚好临界。结果量产时发现,部分电压偏高的芯片ZQ校准一直完成不了,造成系统卡死。嗯,从那以后我对于这类“校准超时”参数,都习惯留15%-20%的余量。

  • tZQINIT:上电初始化校准,最长允许1 μs。这个时间窗口是DRAM内部进行第一次粗校准。
  • tZQCL:长校准,最长允许360 ns。用于工作模式下的长周期校准。
  • tZQCS:短校准,最长允许90 ns。用于快速温度跟踪校准。

小提示: ZQ校准完成后,主机需要读取MRR来确认校准是否成功。这个MRR读取操作必须在ZQ校准完成之后才能发起,中间要留够时间。否则你读到的永远是上一次的值。

3. 初始化阶段 (MRW/MRR设置)

初始化阶段,我们通过MRW命令配置DRAM的工作模式,比如设置Burst Length、写电平使能、CA训练使能等。这个阶段全是寄存器操作,时序上最重要的是MRW到MRW、MRW到MRR以及MRR到MRW之间的延迟。

警告: MRW命令之间必须满足 tMRW 时序窗口(典型值为10ns)。如果连续配置多个寄存器,别忘了在每条MRW之间插入NOP操作。我记得有款SoC的DDRC默认不检查这个间隙,结果一板子跑下来,模式寄存器配置全乱套了。

4. Write Leveling 阶段的时序约束

Write Leveling的目的是对齐DQS和CK。这个阶段,DRAM会等待DQS的上升沿,然后捕获CK的状态。主机需要发送DQS脉冲,DRAM通过DQ引脚回传采样结果。

关键的时序约束是什么?是主机发送DQS脉冲前,必须确保DRAM已经进入了Write Leveling模式。这中间有tWLDQSEN延迟窗口。我建议这个值至少给到5个tCK以上,不要卡着边界设。

5. Read DQS Gating 和 Tracking 阶段

这两个阶段处理的是读数据时的时钟门控和跟踪问题。说白了,就是要准确地知道读DQS信号什么时候到来,以便可靠地采集读数据。

硬件上,主机内部需要有一个DQS门控电路,通过训练找到最佳的DQS采样窗口起始位置。这个训练过程对PVT很敏感,温度变化快的时候,我之前遇到过DQS Gating窗口漂移导致读数据出错的情况。所以这部分训练不止做一次,系统在运行中也要周期性地触发Read DQS Tracking来跟踪温度变化。

训练阶段 主要时序窗口 实际约束点
Read DQS Gating tDQSGating (几ns到几十ns) 门控窗口必须避开PCB走线延迟差异
Read DQS Tracking 周期性触发间隔 (e.g., 每1ms) 跟踪速率要快于温度漂移速率

6. 最终眼图训练 (Vref & DQ/DQS)

最后一步,也是最精细的一步。我们通过Vref训练找到最佳的参考电压值,再通过DQ/DQS训练找到每个数据bit的最佳采样点。这个阶段的时序窗口不再是固定的`tXXX`,而是眼图中心的余量。你想想看,数据信号在PCB上走线延迟都有差异,每个DQ bit的眼图中心位置都不一样。

所以,这个阶段的训练算法是关键。我一般会采用“粗扫-细扫-微调”的策略,先快速扫一遍找中心区域,再局部精细扫描,最后根据温度变化做微调。整个训练序列跑下来,基本就能保证系统在不同环境下都能稳定工作。