3. LPDDR4 物理层结构解析
做链路训练,你得先搞清楚物理层长什么样。
物理层,说白了就是 DRAM 颗粒和控制器之间的那条“路”。路修得不好,信号就跑不顺。链路训练做的就是“把路修平”这件事。
我个人习惯,看任何协议文档,先看物理层。因为后面所有时序参数、训练流程,都跟它挂钩。
3.1 物理层的核心组成
LPDDR4 的物理层,不像 DDR3 那么“粗放”。它把读写数据通道、命令地址通道做成了高度优化、相互解耦的独立模块。我用一个表格来给你拆解:
| 模块名称 | 主要功能 | 训练关注点 |
|---|---|---|
| CK 时钟对 | 提供差分时钟参考 | 频率精度、抖动、占空比 |
| DQS 选通对 | 发送和接收数据时的边沿对齐信号 | 相位偏移、占空比失真(DCD) |
| DQ 数据总线 | 传递读写数据(x16 模式每个通道 8 个) | 建立/保持时间、读写 DQ-DQS 关系 |
| CA 命令地址总线 | 传输命令和行列地址、配置信息 | 命令总线训练(CA Training) |
| ZQ 校准电路 | 上电后自动进行阻抗校准 | ZQ 校准状态检查 |
3.2 时钟与数据线结构
LPDDR4 引入了“双通道”(两个独立的 16 位通道),每个通道都有自己的 CK 和 DQS。
CK_t / CK_c 是差分时钟。差分的好处是共模噪声抑制能力强,我觉得这是 DDR 能跑高的一个底气。
DQS 是读/写数据选通信号。读的时候,DRAM 把 DQS 和数据 DQ 边缘对齐发给控制器;写的时候,控制器把 DQS 发送到数据的中央对齐再发出去。
这中间有个问题:互连延迟。
我遇到过几次莫名其妙的训练失败,最后发现是时钟走线加了太长的蛇形线,导致 CK 和 DQS 的相位差超出了训练范围。嗯,那时候还挺头疼的。
每个 DQS 对应 8 个 DQ。这 8 个 DQ 在 PCB 上必须走线等长,不能差太多。如果你发现某两个字节的训练结果波动特别大,十有八九是布线出了幺蛾子。
3.3 命令与地址总线
命令地址总线(CA)跟数据总线不太一样。它不依赖 DQS,而是以 CK 时钟沿为参考进行采样。你想想,这要求 CK 到达 DRAM 引脚的时间,跟 CA 数据到达的时间必须高度一致。
CA 总线是 单向的 —— 只从控制器发给 DRAM。但它承载着所有关键操作指令:Activate、Read、Write、Refresh…… 一旦 CA 采样出错,轻则训练顺序错乱,重则系统直接挂掉。
LPDDR4 的 CA 采用了 OPC (One-shot Programmable Calibration) 机制:通过两轮训练,把 CA 信号相对 CK 的延迟校准在一个非常精确的范围内。我个人遇到过的 CA 训练失败,大概有一半是因为 DRAM 的 VREFCA(参考电压)没有设对,导致采样边沿落在了数据抖动的尾巴上。
| 信号类型 | 参考时钟 | 采样方式 | 训练内容 |
|---|---|---|---|
| DQ | DQS | 源同步(边沿对齐读,中央对齐写) | 读取/写入 DQ-DQS 调谐 |
| CA | CK | 系统同步(时钟与数据同源) | CA VREF 调整 + CA 时序训练 |
这个差异很关键。你在排查失败时,一定要分清是 DQ 通道报错,还是 CA 通道报错。排查思路完全不一样。
3.4 物理层电气特性与通道建模
除了走线,还得关注电气特性。LPDDR4 引入了 ODT(片上端接),用于减少信号反射。
- 写操作 ODT: DQ/DQS 在写入期间启用,DRAM 内部匹配电阻。
- 读操作 ODT: 数据输出时控制器的端接电阻。
- CA ODT: 命令总线端的端接,通常配置为 40Ω 或 60Ω。
为什么这个重要?因为阻抗不匹配,信号反射就会产生振铃,振铃大了,链路训练时眼图就闭合。我曾经在一次项目里,发现某条 DQ 线的信号质量极差,换了个 ODT 阻值,立马就好了。说白了,电气问题是物理层训练失败的最常见原因。
3.5 物理层结构总览
简单总结:LPDDR4 物理层像一条双向多车道高速公路,每条车道都有独立的时钟和校准机制。要想不“撞车”,你得保证每条车道的信号速度、宽度、边沿都调对。
3.6 实操检查清单
在进入具体训练流程之前,我已经习惯先对照这个清单快速过一遍物理层:
- 时钟质量: 频率抖动 < 50ps,占空比 45% ~ 55%。
- 走线等长: 同一字节组内 DQ 到 DQS 相差不超过 ±10ps。
- ODT 配置: 确保上电后 ODT 阻值匹配 PCB 特征阻抗(通常 40Ω 或 60Ω)。
- VREF 电压: VREFDQ 和 VREFCA 的实测值与设定值偏差小于 15mV。
- ZQ 校准结果: 检查 ZQ 寄存器读数,确认校准完成且无溢出位。