1. LPDDR5布线之前,先把认知框架搭清楚
LPDDR5 这条线,最近两年在手持设备、车载座舱、边缘计算盒子上铺得越来越猛,我做过的板子里,从 LPDDR4X 平移到 LPDDR5 的项目至少有七八个,说实话第一次上手的时候我也栽过跟头——不是不会画线,而是沿用了 LPDDR4X 那套等长和拓扑的直觉,结果第一批板子回来跑 MemTest 就掉速。所以这篇东西我不打算讲什么高深理论,就是把 LPDDR5 布线这件事里最容易翻车的点,按我实际调试的顺序一条一条摊开来说,包括层叠怎么定、阻抗怎么算、单颗粒双通道怎么分组等长、参考平面怎么处理、电源怎么喂干净。如果你正在画第一版 LPDDR5,或者从 4X 升级过来正发懵,这篇应该能帮你省下至少两轮改板。
先说清楚一件事:LPDDR5 不是简单的"更快的 LPDDR4X"。它的数据率从 6400Mbps 起步,主流做到 8533Mbps,部分 LPDDR5X 已经摸到 10Gbps 以上。这意味着什么?意味着单位间隔 UI 从 4X 时代的 300 多皮秒直接压到 117 皮秒左右,时序窗口被砍掉一大半,很多在 4X 上"差不多就行"的做法,到 5 上就是致命伤。更关键的是,LPDDR5 引入了差分 WCK 时钟对、把 CA 总线也做成了差分(部分模式),还有 byte mode 与 linked mode 两种通道组织方式,这些变化直接决定了你在布线阶段该怎么分组、怎么控等长。我会在下面逐条拆开。
1.1 LPDDR5和LPDDR4X到底差在哪
要布线,先得知道自己在伺候一个什么样的信号。LPDDR4X 是 16bit 每通道的架构,时钟用的是 CK_t/CK_c 差分对,数据用 DQS 做源同步选通。到了 LPDDR5,单通道位宽变成 16bit,但引入了独立的写时钟 WCK_t/WCK_c,读写共用,频率是数据率的一半再二分——以 8533Mbps 为例,WCK 工作在 4266MHz 左右(DDR 双沿采样)。这个变化最直接的后果是:WCK 这一对差分线成了整个接口里最金贵的信号,它的抖动和偏斜会直接吃掉数据眼图的水平余量。
第二个大变化是 CA(命令地址)总线的处理方式。LPDDR5 在高速模式下把 CA 也做成了差分对,走的是和 DQ 一样的点对点结构,而且 CA 的等长要求和 DQ 组是分开算的。很多从 4X 过来的工程师习惯把 CA 当成"慢速控制线"随便走,这在 LPDDR5 上是踩大坑的做法——CA 的时序违例会直接表现为训练失败、连初始化都过不去,而不是像数据那样表现为零星误码。我在一个车载项目里就遇到过,CA 组差了三四十个 mil 的等长,结果板子冷启动十次有三四次卡在训练阶段,后来重新分组等长才解决。
第三个差异在电压域。LPDDR5 的供电分三路:VDD1 是 1.8V,给外围和部分模拟电路;VDD2 是 1.05V,给内部核心逻辑;VDDQ 是 0.5V,专门给 IO 缓冲。见过有人把 VDD2 和 VDDQ 混成一个网络铺铜,结果噪声直接串到 IO 上,眼图高度掉了一半。这三路必须分区、用不同的去耦策略,这一点我会在电源那一章细说。
| 特性 | LPDDR4X | LPDDR5 | 布线影响 |
|---|---|---|---|
| 单通道位宽 | 16bit | 16bit | 基本相同 |
| 数据率范围 | 4266Mbps | 6400-8533Mbps | UI 缩小约 50% |
| 写时钟 | 与 CK 相关 | 独立 WCK 差分对 | 需单独控抖动 |
| CA 总线 | 单端为主 | 高速下差分 | 需按高速组处理 |
| 供电域 | VDD1/VDD2/VDDQ | 同样三路但时序更紧 | 分区更严格 |
1.2 动手前必须锁死的资料清单
我吃过最惨的一次亏,是拿到片子就开画,做到一半才发现原厂的参考设计里明确写了某几组信号不能跨 Main2 平面——那时候 PCB 已经投产了。所以现在我做 LPDDR5,开画之前一定会把下面这几份东西凑齐,缺一份都不动手。
第一份是主控和存储颗粒双方的 datasheet 里关于接口的章节,重点看三样东西:训练窗口时序、ODT 配置范围、以及推荐的等长容差。不同主控的 Memory Controller 对 skew 的容忍度差别很大,有的给到 ±10ps 就很稳,有的必须压到 ±3ps 以内,这个数值直接决定你等下怎么分组。
第二份是原厂的 PCB Layout Guide,这份东西的价值在于它通常会给一个已知能工作的层叠和阻抗模板。注意我说的是"模板"不是"圣旨",你可以根据自己板的层数和成本调整,但里面关于参考平面切换、过孔数量限制、走线长度上限的约束最好先照做,等第一版验证过了再谈优化。
第三份是主控厂商提供的 Bring-up 和 Training 手册,这份东西在调试阶段是救命的。它会告诉你训练失败的日志怎么读、哪个寄存器反映的是哪个组的时序违例,没有它你只能瞎猜。
注意:原厂 Layout Guide 里有时候会用"优选"和"必须"两种措辞,很多人一视同仁地照做,导致层数堆得很高、成本下不来。我的经验是"必须"的项一条别省,"优选"的项可以结合自己板的叠构和走线空间做取舍,但要记录下取舍的理由,方便后面复盘。
2. 层叠结构与阻抗控制的取舍逻辑
层叠这件事,我把它放在布线之前讲,是因为它一旦定了,后面所有的阻抗、参考平面、回流路径都被锁死了。LPDDR5 对层叠的要求比 4X 高不少,核心就一句话:每一条高速信号线都要有完整、连续、紧邻的参考平面,而且这个参考平面最好在整条走线上不换层。听起来简单,实际做起来很多板子为了省层,把信号夹在两个电源平面之间,或者参考平面被电源分割切得七零八落,信号质量自然一塌糊涂。
2.1 参考平面怎么排才不打架
先说结论:LPDDR5 的数据组和时钟组,优先以 GND 平面为参考,而不是电源平面。原因很实在——GND 平面的回流路径最干净,噪声最低;电源平面即使铺了铜,上面也有开关噪声和 IR Drop,参考到它上面等于把噪声引到信号里。我一般会保证 DQ/DQS/WCK 这几组信号,从颗粒焊盘出来到主控焊盘结束,全程贴着 GND 平面走,中间不换参考层。
层叠的具体排法,以常见的 8 层板为例,我常用的结构是:Top(信号)→ GND → 信号层 → 电源层 → 电源层 → 信号层 → GND → Bottom(信号)。这样 Top 和 Bottom 都能参考到完整的 GND,中间的两个信号层被电源夹着,可以走一些对参考要求不高的低速线或者作为电源平面拆分。如果是 10 层板,玩法就更多了,可以给 LPDDR5 单独安排一组"信号-GND-信号"的三明治结构,把整个存储接口的阻抗一致性做到最好。
这里有个容易忽略的点:参考平面要连续到信号线的正下方,并且要向外延伸至少 3 到 5 倍线宽的距离。因为高速信号的回流会沿着走线正下方分布,如果平面在走线边缘就断开了,回流被迫绕路,等效电感一涨,回流噪声就上来了。我见过一块板子把 GND 平面在存储区边缘刚好截断,结果那一侧的 DQ 组眼图明显比另一侧差,后来把平面补出去 20mil 才拉平。
2.2 阻抗目标的落地计算
LPDDR5 的阻抗目标,原厂通常给单端 40 欧姆到 50 欧姆、差分 80 欧姆到 100 欧姆。具体取哪个值,跟你主控的驱动能力和 ODT 设置有关。我个人的习惯是单端取 40 欧姆,差分取 80 欧姆,理由是 LPDDR5 的 IO 电压只有 0.5V,摆幅本来就小,取低一点的阻抗能拿到更高的噪声容限和更快的边沿。
具体到线宽和介质厚度怎么算,我一般用场求解器或者叠层厂给的阻抗计算表。举个例子,如果一个 8 层板的 Top 层到 GND 平面之间的介质厚度是 4mil,介电常数取 4.2,那么要得到 40 欧姆单端阻抗,微带线宽大概在 6.5mil 左右;如果是 50 欧姆,线宽会缩到 5.5mil 上下。差分线则要看线宽和间距的组合,80 欧姆差分在这个叠构下,常见的是 5mil 线宽配 6mil 间距。
算完这些不算完,一定要让叠层厂用他们的实际材料参数复核一遍。我就遇到过一次,设计时按 εr=4.2 算的线宽,叠层厂实际用的板材 εr 是 4.5,导致实测阻抗偏低 4 欧姆左右,虽然还在容差内,但在高速眼图上已经能看出反射了。
| 信号类型 | 目标阻抗 | 参考层 | 典型处理 |
|---|---|---|---|
| WCK 差分对 | 80Ω | GND | 全程紧邻,禁止换层 |
| DQS 差分对 | 80Ω | GND | 组内等长优先 |
| DQ 单端 | 40Ω | GND | 按 Byte 分组 |
| CA 差分 | 80Ω | GND | 与 DQ 分开算 |
| 低速控制 | 50Ω | GND/电源 | 可适当放宽 |
实操心得:叠层确认这一步千万别偷懒。我通常会在发板前要求叠层厂提供一份带实际材料参数的阻抗报告,然后拿这份报告里的线宽间距去改 PCB。看似多花半天时间,能省掉后面至少一轮改板的风险。
3. 单颗粒双通道的拓扑选择与等长分配
LPDDR5 单颗粒双通道是现在最主流的用法——一颗 die 里封装了两个独立的 16bit 通道,每个通道自己有 CK/WCK/DQ/DQS/CA,主控分别和这两个通道通信。这样做的好处是并行度上去了,总的带宽翻倍,但代价是布线复杂度直接上了一个台阶,因为两个通道的信号要同时从颗粒扇出到主控对应区域,中间还可能要穿过 BGA 焊盘阵列。这一章就讲怎么在这种结构下选择拓扑、怎么分组等长。
3.1 点对点还是Fly-by
先说一个基本判断:LPDDR5 在单颗粒单通道或者双通道的架构下,几乎都是点对点(Point-to-Point)拓扑,也就是主控的一路信号直接连到颗粒的一路信号,中间不挂分支。这和 DDR3/DDR4 时代流行的 Fly-by 多颗粒拓扑完全不同——多颗粒才需要 Fly-by 加终端匹配,单颗粒压根不需要走那么复杂。
那为什么还要提这个?因为我在一些设计里见过有人把双通道的两个通道信号合在一起走,想"共享"一部分走线来省空间,这就是典型的把点对点做成了 T 型分支。T 型分支会在分支点产生阻抗不连续,反射打到接收端就是眼图闭合。LPDDR5 数据率下,这点反射足以让误码率上升好几个数量级。所以记住:每个通道、每一组信号都是独立点对点,绝不共享。
具体到单颗粒双通道的走线,我一般会先把颗粒和主控的引脚对应关系画在纸上,把两个通道各自的 DQ/DQS/WCK/CA 分成四组——通道 A 的数据组、通道 A 的时钟组、通道 B 的数据组、通道 B 的时钟组,然后在布局阶段就让这四组各自有一条相对独立的"走廊"通到主控。这里的关键是布局阶段就要给通道间留出隔离距离,如果两个通道的 DQ 走线并排贴在一起走很长一段,通道间串扰会让两边的眼图都变差。我一般会给通道间留至少 4 倍线宽的空隙,条件允许的话做到 6 倍更稳。
3.2 等长分组与容差怎么分
等长是 LPDDR5 布线里最费时间也最容易出错的一步。我的分组逻辑是这样的:先把所有信号按"必须严格等长""可以宽松等长""不用等长"分成三档,然后每一档内部再按信号组细分。
必须严格等长的,是同一个 Byte 内的 DQ 和对应的 DQS 之间的组内等长,以及 WCK 和它所服务的那个通道之间的关系。以 8533Mbps、UI 约 117ps 计算,如果保守地按 0.3UI 的窗口来分配,留给等长的余量大概在 35ps 左右。PCB 上信号传播速度,微带线大约是 6.7mil/ps,带状线大约 5.8mil/ps,换算下来 35ps 对应走线长度差大约 200mil。但实际设计绝不会用满这个余量,我会把组内 DQ-DQS 的等长控制在 ±5mil 以内,也就是对应约 0.75ps 的偏差,把绝大部分余量留给芯片内部偏斜和过孔差异。
可以宽松等长的,是同一通道内不同 Byte 之间的 DQ 组间等长,以及 CA 组内部的等长。这部分的容差可以放到 ±20mil 甚至更宽,因为它们中间不直接做源同步选通,主控训练时会分别补偿。
不用等长的,是通道 A 和通道 B 之间、以及各种低速控制线、复位、片选之类。
| 分组 | 等长对象 | 建议容差 | 对应时间偏差 |
|---|---|---|---|
| DQ 组内 | 同一 Byte 的 DQ 对 DQS | ±5mil | 约 ±0.75ps |
| DQS 对间 | DQS_t 对 DQS_c | ±3mil | 约 ±0.45ps |
| WCK 对间 | WCK_t 对 WCK_c | ±3mil | 约 ±0.45ps |
| Byte 组间 | 不同 Byte 的 DQ 组 | ±20mil | 约 ±3ps |
| CA 组内 | CA 各差分对之间 | ±20mil | 约 ±3ps |
| 通道间 | 通道 A 对通道 B | 不要求 | — |
这里要多说一句 DQS 和 WCK 的差分对内等长。很多人只关注 DQ 和 DQS 之间的组间等长,却忽略了差分对内部两根线的长度差。差分对内不等长会直接变成共模噪声,虽然接收端对共模有一定抑制,但在 LPDDR5 这么高的速率下,共模转差模的效应会明显蚕食眼图。我的做法是差分对内偏差严格卡在 ±3mil 以内,宁可多绕几段蛇形也要压下来。
4. 关键信号的分组走线与过孔处理
等长算完了,接下来是真正下笔走线。这一章讲的是走线过程中的手法细节:怎么分组、怎么换层、参考平面怎么跟、过孔怎么处理。这些细节本身不复杂,但组合起来就是信号质量好坏的直接来源。我在实际项目里发现,同一套等长方案,走线手法不同,最终眼图能差出 15% 到 20%。
4.1 时钟、DQS、DQ、CA的分组原则
先说 WCK。这一对是整个接口的节拍器,我的原则是:优先布线、最短路径、不换层、不绕蛇形(除非绝对必要)。WCK 从颗粒到主控,理想情况是一条直线走完,中间不被打断。如果因为 BGA 焊盘排布必须绕,也要尽量让绕的部分集中在靠近主控一侧,因为主控端的输入端对偏斜的容忍度通常比颗粒端好。另外 WCK 两侧要包地,两侧的地线每隔一段打过孔接地,形成类似屏蔽墙的结构,减少来自相邻数据的串扰。
DQS 的处理和 WCK 类似,但因为每组 DQS 只服务一个 Byte,所以它的走线可以更灵活一些。我的做法是让 DQS 和它服务的 8 根 DQ 走在一起,形成一个小 bundle,DQS 走在中间或者靠一侧,DQ 分列两侧。这样做的目的是让组内所有信号经历相似的串扰和参考环境,训练时更容易收敛。DQS 同样要包地,包地线每隔 100mil 左右打一个地过孔。
DQ 的走线重点是组内一致性。8 根 DQ 要保持相同的层、相同的参考平面、尽量相同的长度。如果组内有的走 Top、有的走内层,即使长度一样,传播延迟和阻抗也会因为介电常数不同而出现差异,这是很多新手容易忽略的地方。我一般会强制同一个 Byte 的所有 DQ 走同一层,如果实在走不下,最多允许分两层,但要在等长上补回差异,并且在调试时重点关注这一组。
CA 的处理相对宽松,但有个前提:CA 组必须作为一个整体布线,不能和其他信号混在一起。CA 差分对之间要控组间等长,组内差分对的特性阻抗按 80 欧姆处理。CA 的走线要尽量远离 DQ,因为 CA 翻转到 DQ 上的噪声会被接收端当成数据,这种耦合在 LPDDR5 上是真实的误码来源,我实测过,CA 和 DQ 贴近走超过 500mil 后误码率会明显上跳。
4.2 跨分割与换层过孔
跨分割是高速布线里最经典的问题,到 LPDDR5 这里依然是个大坑。什么叫跨分割?就是信号线的正下方参考平面出现了断裂,比如从一个 GND 区域走到了另一个 GND 区域,中间夹着一段电源铜皮。这时候回流找不到最近的路径,只能绕远路,等效回路面积变大,辐射和串扰都会上来。
我的处理原则很简单:LPDDR5 的所有高速信号线,全程参考同一个 GND 平面,中间不许跨越任何平面缝隙。如果平面布局上实在做不到,那就在缝隙两侧各加一组缝合过孔,把两个 GND 区域用密集过孔连起来,给回流一个就近的通道。缝合过孔的间距我一般控制在 50mil 到 100mil,越密越好。
换层过孔这件事,LPDDR5 上要尽量少。每次换层都会引入一个过孔的寄生电感和电容,还会让参考平面发生一次切换,参考回流必须通过旁边的返回过孔完成换层。如果返回过孔缺失或者离得远,回流路径就断了。我的做法是:如果信号线必须换层,就在信号过孔旁边 30mil 以内放至少一个 GND 返回过孔,条件允许的话放两个,分布在信号过孔两侧。
另外一个细节是过孔残桩(via stub)。在厚板上,一个通孔从 Top 打到内层信号层,没用到的那一段就是残桩,它相当于一个开路传输线,会在高频上产生谐振,吃掉信号能量。LPDDR5 的 WCK 频率已经到 4GHz 以上,残桩的影响不能忽略。如果板厚超过 60mil,我会考虑用盲埋孔或者背钻来缩短残桩,至少对 WCK 和 DQS 这两组做处理。
注意:换层过孔不要在等长已经调整完之后随便加。加一对过孔会引入大约 20 到 40mil 的等效长度变化,如果这时候再回去改蛇形,往往会把刚调好的组内等长又打乱。我的习惯是先把所有过孔位置定下来,把过孔造成的长度差算进去,最后统一调蛇形。
5. 电源完整性与去耦布局
前面说的都是信号,但 LPDDR5 能不能跑稳,一半以上的功夫其实在电源上。0.5V 的 VDDQ、1.05V 的 VDD2,这两个低压域的噪声容限本就很窄,电源上的任何一个纹波都会直接反映到 IO 输出眼图上。这一章讲三路供电怎么分区、去耦电容怎么放、回流路径怎么保证。
5.1 三路供电的分区策略
LPDDR5 的三路供电,VDD1(1.8V)、VDD2(1.05V)、VDDQ(0.5V)必须物理分区,不能共用铜皮。我见过有人为了省层,把 VDD2 和 VDDQ 放在同一个电源层上,只是用一条细缝分开,结果两个域之间的噪声通过缝隙耦合,眼图直接崩了。正确的做法是每一路独占一块区域,区域之间用 GND 隔开,隔离带宽至少做到 40mil 以上。
VDDQ 是最关键的一路,因为它直接给 IO 供电,DQ 的翻转电流都从它来。VDDQ 的铜皮要尽量宽、尽量近,最好能覆盖整个存储接口的走线区域。我一般会把 VDDQ 铺在靠近颗粒和主控的电源层上,并且用较宽的走线连接到电源芯片,减小走线电感。
VDD2 给内部核心,相对来说对噪声不那么敏感,但也不能大意。VDD1 给外围,通常压力最小。三路电源的电流需求,以 8533Mbps 双通道为例,VDDQ 的峰值电流可能到 1.5A 以上,VDD2 在 1A 左右,设计走线宽度时按每安培 20mil 到 30mil 的铜厚经验值来估,再留 50% 余量。
5.2 去耦电容的摆放与回流
去耦电容的摆放位置,比选什么容值更重要。我的原则是:小容值电容(0.1uF、0.22uF)尽量贴近颗粒的电源焊盘,距离控制在 100mil 以内;大容值电容(1uF、4.7uF)可以稍微远一点,放在电源进入存储区的入口处。很多人只堆大电容,以为容值大就能压住噪声,其实大电容的等效串联电感高,对高频纹波基本没作用,真正管用的是小容值电容。
具体到每一路的电容数量,我的经验是 VDDQ 每路供电至少要 4 到 6 个 0.1uF,加上 2 个 1uF;VDD2 和 VDD1 各 2 到 4 个 0.1uF 加 1 个大电容。这些数字不是死的,要根据颗粒的功耗特性和电源芯片的响应速度调。
电容的接地过孔也很关键。每个电容的两个焊盘,各自至少要打一个过孔到 GND 平面和电源平面,过孔要尽量短、尽量粗。如果电容的接地路径要绕一段才到 GND,那这个电容基本白放了。
回流路径这方面,除了前面说的信号回流,还要注意电源回流。VDDQ 的电流从电源芯片出来,经过走线、电容、颗粒,最后通过 GND 回到电源芯片。这条回路面积要尽量小,也就是 VDDQ 走线和它的 GND 回线要贴近。我一般会把 VDDQ 和对应的 GND 做成紧邻的两层,或者在同一层用宽走线并行。回路面积小了,辐射和抗干扰能力都会好很多。
| 供电域 | 电压 | 关键电容配置 | 布局要点 |
|---|---|---|---|
| VDD1 | 1.8V | 0.1uF×2 + 1uF×1 | 可稍远离颗粒 |
| VDD2 | 1.05V | 0.1uF×4 + 1uF×2 | 中距离,独立分区 |
| VDDQ | 0.5V | 0.1uF×6 + 1uF×2 | 紧贴焊盘,铜皮宽 |
实操心得:我习惯在布局阶段就把 VDDQ 的电容位置全部定死,然后让 DQ 走线绕开这些电容。因为电容一旦放好再挪,往往会影响旁边的信号走线,来回折腾特别费时间。先定电源,再走信号,这个顺序能少走很多弯路。
6. 常见问题与排查实录
板子画完、投产、回来上电,真正的考验才开始。LPDDR5 的调试阶段,问题往往不是"跑不起来"而是"跑不稳"——有时候能过训练,有时候过不了;有时候常温能跑满速,升温就掉速。这一章我按自己实际的排查顺序,把最常见的问题和处理方法列出来。
6.1 训练失败与眼图排查的顺序
训练失败的排查,我一般按这个顺序走:先看电源,再看时钟,再看数据,最后看软件配置。为什么把电源放第一位?因为电源问题最隐蔽也最常见,而且它引起的现象和信号问题很像,容易误判。
第一步,用示波器测 VDDQ 的纹波。在满速读写时抓,看峰峰值有没有超过颗粒手册给的容限。如果纹波大,先查电容配置和铜皮宽度,别急着去改走线。
第二步,测 WCK 的抖动和频率。WCK 是关键,如果它的周期抖动超过容限,后面所有的数据训练都是白搭。测的时候要用高带宽探头,并且探头的接地要短,否则测出来的抖动有很大一部分是探头引入的。
第三步,如果电源和时钟都正常,再去看 DQ 组的眼图。眼图要看最差的那一组,通常是走线最长或者串扰最大的那组。如果某一组明显比其他组差,基本可以定位到该组的走线或参考平面问题。
第四步,如果眼图都还行但训练还是失败,那就要查主控的寄存器配置了。ODT 设置不对、驱动强度不够、训练算法参数不匹配,都会导致训练失败。这时候原厂的 Training 手册就派上用场了,按它给的日志解读方法一步步查。
6.2 常见问题速查表
我把这几年遇到过的典型问题整理成一张表,方便快速定位。
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 冷启动偶发训练失败 | CA 组等长超差 | 检查 CA 组走线长度差 |
| 高温下降速 | VDDQ 去耦不足 | 加小容值电容,缩短接地路径 |
| 某几组 DQ 眼图明显差 | 该组参考平面断裂 | 检查 GND 平面连续性 |
| 读写误码率偏高 | DQ 与 CA 间距太近 | 增大隔离,检查串扰 |
| 差分对内共模噪声大 | DQS/WCK 对内不等长 | 复测差分对长度差 |
| 换层后信号质量下降 | 返回过孔缺失 | 补充 GND 返回过孔 |
| 整体眼图都差 | 阻抗偏离目标 | 复核叠层实际阻抗 |
这张表里的每一项,我都至少在实际项目里遇到过一次。最想强调的是"高温下降速"这一条——很多人第一反应是散热问题,其实是 VDDQ 的电容在高温下等效串联电阻上升,滤波效果变差,导致电源纹波变大。这时候加电容比加散热片管用得多。
还有一个反面经验:不要一遇到问题就去动等长。等长调整是最费时间的操作,而且一旦改了可能引入新的问题。我一般是把等长放在最后排查,先把电源、平面、过孔这些更可能的原因排除掉。根据我的统计,LPDDR5 调试问题里,真正因为等长不够导致的不到两成,大部分是电源和参考平面引起的。
7. 几个我反复踩过的坑
最后一个部分,分享几个我在 LPDDR5 项目上切实吃过亏的地方,都是文档里不会写、只有实际做过才知道的细节。
第一个坑是过孔太密导致焊盘脱落。LPDDR5 的 BGA 引脚间距通常只有 0.4mm 到 0.5mm,我在一个项目里为了追求参考过孔的密度,在颗粒焊盘周围打了太多过孔,回流焊之后有两个焊盘出现了微裂,虽然当时测试能过,但可靠性实验挂了。后来我把过孔间距放宽,每个信号过孔配一个返回过孔就够了,不再盲目堆。
第二个坑是蛇形走线的间距。调等长的时候需要绕蛇形,蛇形的凸起之间如果贴得太近,相邻两段会互相耦合,等效延迟发生变化,等长调了个寂寞。我的经验是蛇形的线段间距至少保持 4 倍线宽,凸起长度尽量短,宁可多绕几个小弯也不要一个长凸起。
第三个坑是把 LPDDR5 当成"就是更快的 4X"来设计。这种心态下,层叠沿用旧的、等长沿用旧的、电源沿用旧的,结果就是各种玄学问题。实际上 LPDDR5 的 WCK 架构、差分 CA、三路低压供电,每一条都对应着布线策略的改变。我现在接新项目,第一件事就是重新过一遍这份认知,而不是直接套用上一块 4X 的板子。
第四个坑是忽视测试点的寄生效应。为了调试方便在 WCK 上加测试点,结果测试点本身的电容让 WCK 边沿变缓,眼图明显变差。后来我改用微带短线引出测试点,并且测试完之后把测试点这段走线割掉,问题才解决。调试和量产对信号的要求不一样,测试点不能一直留在成品板上。
这些经验,说到底就是一句话:LPDDR5 的每一分裕量都要靠细节抠出来,没有哪个环节是可以"差不多"过去的。把认知、层叠、等长、参考平面、电源这几块都做到位,剩下的交给训练算法,板子自然就稳了。