3、训练时序参数分类:时序参数、电压参数、频率参数归纳总结
做LPDDR4训练,说白了就是调三个维度的参数:时间、电压、频率。这三个东西互相牵制,哪个调不好,系统都可能翻车。我刚开始搞DDR训练那会儿,总以为把时序配好就完事了,结果跑起来读写不稳——后来才发现是电压参数根本没动。嗯,今天把这三大类拆开讲清楚。
3.1 时序参数:毛刺里找窗口
时序参数管的是信号什么时候到、要稳定多久。你想想看,DDR4走的是双沿采样,一根DQ线上每秒几亿次跳变,差几十皮秒就可能读错数据。我调过的板子里,最头疼的就是tDQSCK和tDQS2DQ这对兄弟。
| 参数名 | 全称 | 训练中作用 | 典型范围 |
|---|---|---|---|
| tDQSCK | DQS-to-CLK skew | 校准DQS与时钟的相对相位 | -180°~+180°(步长1/256 UI) |
| tDQS2DQ | DQS-to-DQ skew | 对齐每个DQ与DQS的边沿 | ±8个DQS周期 |
| tWLDQSEN | Write Leveling DQS enable | 定义写均衡窗口 | 0~63个tCK |
| tAC | Access time from CK | 读数据输出延迟 | -300~+300 ps |
核心思维:时序参数的本质是找到信号跳变沿之间的安全距离。我通常会先调tDQSCK,把DQS放到眼图正中间,再逐根DQ线调tDQS2DQ。
调时序时有条铁律:先粗调后细调。比如Write Leveling先找出DQS的粗略相位,再用Per-Bit DQ Deskew做精细对准。我曾经在某个项目里跳过粗调直接上细调,结果后仿全挂——因为粗调窗口没找到,细调直接跑偏了一个周期。你明白我意思吧?
3.2 电压参数:参考电平的生死线
电压参数最容易被人忽视。其实信号能不能被正确识别,全看参考电压设得够不够准。LPDDR4里主要有三个电压相关训练项:
- VrefDQ训练 – DQ信号的参考电压。每个字节通道独立可调,步长通常0.65% VDDQ。我建议先跑个眼睛扫描,找到最优Vref点。
- VrefCA训练 – 命令/地址的参考电压。CA总线比DQ更敏感;我记得有块板子CA信号毛刺大,最后把VrefCA拉高了3%才稳定。
- ODT阻抗校准 – 片上端接电阻。阻抗不匹配会导致信号反射,读数据时出现振铃。
个人习惯:先把ODT设成RZQ/4(约40Ω),再调VrefDQ。因为ODT会影响信号幅度,直接影响最佳参考电平的位置。
你可能会问:Vref调太高会不会出问题?会的。Vref超过VDDQ的55%以后,低电平的噪声裕量会急剧缩小,读0时容易误判为1。这个平衡点,我在一个双通道项目里反复试了六轮才定下来。
3.3 频率参数:跑得快不如跑得稳
频率参数管的是时钟周期的长度和稳定度。LPDDR4支持动态频率切换(DFS),但训练是在固定目标频率下完成的。关键参数就两个:
| 参数 | 说明 | 常用值 |
|---|---|---|
| tCK | 时钟周期(1/fCK) | 625 ps @ 3200 Mbps |
| tAC | 数据输出访问时间 | 与频率相关,低频时更宽松 |
| tCH/tCL | 时钟高/低脉冲宽度 | ≥0.45 × tCK |
频率越低,时序裕量越大,但这不意味着低频训练可以偷懒。我在做降频兼容测试时遇到过怪事:高频跑得好好的,降到800 MHz反而报错。查了半天发现是训练时锁相环的锁定时间没配够,低频下相位噪声放大导致时序漂移。所以说,频率参数要和PLL配置一起看。
// 训练配置示例(伪代码)
Write MR13(MR13_VREF_DQ, vref_value); // 电压参数
Write MR11(MR11_DQS_DRIVE_SLEW_RATE, 0x2); // 时序相关
Check DQS Gate Calibration(); // 频率相关
3.4 三大参数的关系
这三类参数不是独立的。电压偏移会导致时序窗口变化,频率变化又会改变IO驱动强度。我用一张图来总结它们在训练流程中的位置:
重要提醒:不要试图同时调三个参数。我在一个量产项目中吃过亏——把时序步进和电压步进叠在一起迭代,收敛了二十轮都没稳定。后来改成“锁定两个,调一个”的策略,三轮就过了。
最后给你一个实战清单:每次开始训练前,先确认目标频率的tCK,然后锁频;接着跑Read/Write Leveling(时序参数),得到粗调值;再跑Vref扫描和ODT校准(电压参数);最后回过来做Per-Bit DQ Deskew(时序细调)。这个顺序我验证过至少四个平台,没出过问题。
总结一句话:时序参数定窗口,电压参数定电平,频率参数定节拍。三个配合好了,LPDDR4才能在你设计的板子上稳稳地跑。