LPDDR4 内存接口信号简介
做 Write Leveling 调试,你首先得把接口信号搞明白。说白了,Write Leveling 就是在驯服 DQS 和 CK 之间的相位关系。但光盯着这两个信号还不够,DQ 和 CMD/ADDR 也得心里有数。我见过不少新手工程师上来就调 DQS delay,结果根本不对——因为连 CK 的边沿都没找准。
信号家族一览
先快速过一遍 LPDDR4 的主要信号。嗯,这里我按功能分成四组:
- CK / CK# — 差分时钟,所有操作的基准。频率通常到 1600 MHz(DDR4-3200),甚至更高。
- DQS / DQS# — 差分数据选通,用来锁存 DQ。写操作时由控制器发出,读操作时由 DRAM 发出。Write Leveling 的核心就是调 DQS 相对 CK 的延迟。
- DQ[0:15] — 数据总线,单向(写方向),双向(读方向)。每个 byte lane 有自己的 DQS。
- CMD/ADDR — 命令地址总线,包括 CS、WE、CAS、RAS、A[0:17] 等。这部分是单端信号,时序比较简单,但不能忽略。
一个关键点:LPDDR4 没有单独的 CLK enable 信号,CMD/ADDR 是在 CK 的上升沿采样的。而 DQS 在 Write Leveling 中会被控制器延迟,使得它的上升沿与 CK 的上升沿对齐。
时序关系的核心:CK vs DQS
为什么 Write Leveling 只关注 DQS 和 CK?因为 DRAM 内部用 CK 做参考,用 DQS 锁存 DQ。如果 DQS 到了 DRAM 端跟 CK 的相位不对,数据就采歪了。我在项目里遇到过一个板子,布线长了 300 mil,导致 DQS 比 CK 快了将近 200 ps。还好通过 Write Leveling 给 DQS 加了延迟,不然整个通道都废了。
正常写操作时,控制器必须保证 DQS 的边沿落在 DQ 的眼图中央。而 Write Leveling 阶段做的事情很简单:
- 控制器发连续写命令,DQS 以 CK 为基准被延迟。
- DRAM 内部的延迟锁定环(DLL)把 DQS 的边沿与内部 CK 对齐。
- DRAM 通过 DQ 输出一个特定 pattern(比如 0x55),告诉控制器“对齐了”。
- 控制器遍历延迟步进,找到能使 DQ pattern 翻转的边界点,取中间值作为最终延迟。
CMD/ADDR 的时序约束
CMD/ADDR 虽然在 Write Leveling 过程中不参与相位调整,但它们的建立/保持时间会影响整个初始化流程。我建议你在做 Write Leveling 之前,先用示波器看一眼 CMD/ADDR 相对于 CK 的 setup/hold。我记得有一次,因为 VREF 分压电阻偏差,CMD 信号的眼图只有 50 ps 的建立时间,结果 Write Leveling 死活训练不进去——不是因为 DQS,而是因为命令没被 DRAM 正确识别。
实战避坑:我曾经遇到过一块 PCB,板厂把 CK 和 DQS 的等长约束做反了,差分对内部长度差了 80 mil。那个板子 Write Leveling 全程失败,最后用示波器量才发现 CK 和 DQS 的布线长度完全不在一个量级。所以拿到新板,第一件事就是拿 TDR 量一下关键信号的走线长度差。
信号组对比表
| 信号组 | 类型 | 电平标准 | Write Leveling 中的作用 |
|---|---|---|---|
| CK / CK# | 差分时钟 | 1.1V 差分摆幅 | 参考时钟,延迟调整的基准 |
| DQS / DQS# | 差分选通 | 1.1V 差分摆幅 | 被延迟后对齐 CK 上升沿 |
| DQ[0:15] | 单端数据 | 1.1V CMOS | 回读对齐状态 pattern |
| CMD/ADDR | 单端控制 | 1.1V CMOS | 发送写训练命令,必须满足 setup/hold |
知识框架图:信号时序关系
这张图把四类信号的关系串起来了。你看到 CK 和 DQS 之间那条相位调整箭头了吧?那就是 Write Leveling 要干的事。CMD/ADDR 虽然不直接参与相位搜索,但它的建立保持时间决定了训练命令能否正常到达 DRAM。
个人习惯:在做 Write Leveling 调试前,我会先在示波器上同时抓 CK 和 DQS,测量它们的初始相位差。如果相差超过 2 个 UI(比如 625 ps 在 1600 MHz 下),我会怀疑 PCB 走线等长有问题。另外,记得把探头的地线尽量缩短,不然测出来的相位会受地弹噪声影响。我曾经因为这个多花了两个晚上排查。
小结一下
OK,这一章我们把 LPDDR4 的接口信号过了一遍。重点记住几个东西:
- CK 是参考时钟,DQS 是被调整的对象。
- DQ 在 Write Leveling 时用来回读对齐状态。
- CMD/ADDR 必须满足建立保持时间,否则训练命令会被 DRAM 忽略。
- 实际调试时,先测量走线长度差,再动延迟参数。
你想想看,这些信号就像交响乐的各个声部。CK 是指挥,DQS 是第一小提琴,DQ 是其他弦乐,CMD/ADDR 是定音鼓。Write Leveling 就是让小提琴的起拍子跟指挥的手势完全对齐。对齐了,整个通道才能演奏出干净的数据眼图。