二、LPDDR4物理层接口与信号定义全解析
做LPDDR4训练参数分析,第一步得把物理层的那些信号搞清楚。我见过不少新人,训练调了半天,结果发现是物理层接口就没搞对。这就跟盖房子先看地基一样,信号定义就是那个地基。
别急,咱们一条一条捋清楚。
2.1 信号分类概览
LPDDR4的物理层信号,说白了可以分成三大类:时钟类、命令地址类、数据相关类。下面这个表格是我整理的常用信号速查表,你可以在做时序分析时拿来对照。
| 信号分组 | 信号名称 | 方向 | 功能简述 |
|---|---|---|---|
| 时钟 | CK_t / CK_c | 控制器→DRAM | 差分时钟对,所有操作以此为基础 |
| 时钟 | WCK_t / WCK_c | 控制器→DRAM | 写数据选通时钟,读写频率不同 |
| 命令 | CS / CKE / ODT | 控制器→DRAM | 片选 / 时钟使能 / 片上终端 |
| 地址 | CA[5:0] | 控制器→DRAM | 命令地址总线,6位分时复用 |
| 数据 | DQ[15:0] | 双向 | 数据总线,分高8位和低8位 |
| 数据选通 | DQS_t / DQS_c | 双向 | 数据选通差分对,读/写时切换方向 |
2.2 时钟信号——整个系统的脉搏
LPDDR4用了两个独立的时钟域。CK_t/CK_c是命令时钟,频率通常在800MHz-2.133GHz之间。WCK_t/WCK_c是数据时钟,频率是CK的两倍甚至四倍。为什么要搞这么复杂?
你想想看,命令不需要那么快,但数据不一样。读写DDR4,数据传输速率动辄4800MT/s以上,不用高频WCK根本跟不上。而且,这两对时钟之间的相位关系,决定了后面训练能不能通过。
我遇到过最头疼的问题就是CK和WCK的相位偏移。如果你在布局时没注意等长,skew一大,训练时怎么都过不了。所以布线时我会建议把CK和WCK走线拉到等长,误差控制在±1ps以内。
2.3 命令地址信号——分时复用的艺术
CA[5:0]总共6根线。LPDDR4的地址量不小——行地址、列地址、bank地址、命令码……这么多东西怎么塞进6根线?
答案是分时复用。每个时钟周期,主控会发送两个CA信号包:第一个在CK上升沿,第二个在CK下降沿。这样6根线乘2个沿,一个周期就能传12位信息。具体怎么编码,可以参考JEDEC标准的时序表格,这里我直接给你一个常用的CA映射表。
| 时钟沿 | CA[0] | CA[1] | CA[2] | CA[3] | CA[4] | CA[5] |
|---|---|---|---|---|---|---|
| 上升沿 (R) | C0 | C1 | C2 | BA0 | BA1 | BG |
| 下降沿 (F) | ACT_n | RAS_n | CAS_n | WE_n | C3 | C4 |
嗯,这里要注意。ACT_n、RAS_n、CAS_n、WE_n这些命令是和控制逻辑绑定的。如果你在做训练参数分析时发现CA信号眼图不好,先检查PCB上有无stub、过孔切换次数是不是太多。我一般建议CA总线走fly-by拓扑,比T型更稳定。
2.4 数据相关信号——DQ、DQS和DM
这一块是物理层信号里最敏感的。一个16位的LPDDR4颗粒,DQ分两个字节通道:DQ[7:0]配DQS0,DQ[15:8]配DQS1。每组还有一根数据掩码DM,用于写操作时的mask控制。
DQS和DQ的关系非常紧密。读数据时,DQS由DRAM驱动,DQ跟着DQS的边沿走;写数据时,DQS由控制器驱动,DRAM用内部锁相环去抓DQ。这就引出两个训练:读眼图训练和写眼图训练。
- 读数据:DQS和DQ是边缘对齐。DRAM发送时,DQ变化发生在DQS边沿附近。
- 写数据:DQS和DQ是中心对齐。控制器发送时,DQ稳定窗口在DQS边沿的正中间。
2.5 信号完整性视角下的接口
抛开信号完整性讲物理层接口,是在耍流氓。LPDDR4的数据速率那么高,接口上的任何一点阻抗不连续都会导致眼图闭合。我整理了几个最容易出问题的地方:
- ODT设置不当:片上终端电阻匹配不好,信号反射会增加。训练参数中的ODT配置要跟PCB特征阻抗对应。
- VOH电平漂移:LPDDR4写电平用的是伪开漏。如果VOH没设准,DRAM侧的采样窗口会缩小。
- 串扰:DQ走线离得过近,或者和时钟平行距离太长,都会引入串扰噪声。
我有个习惯,在做训练参数调试前,会先拿示波器看一下DQS和CK的交叉点位置。交叉点跑偏了,后面怎么调都白搭。不过这是后话,我们后面章节会专讲眼图测试方法。
2.6 信号定义小结——一张图看明白物理层架构
我把LPDDR4物理层接口的整体架构画成了下面这张SVG图。你可以把它当作本章的知识结构挂图。
图上标得很清楚:左边控制器,右边DRAM,中间是数据通道。时钟命令是单向的,数据是双向的。做训练参数调试时,每次改参数都要问自己:这个参数影响的到底是哪个信号组?是CK的setup/hold,还是数据通道的DQS相位?