4. Skew的来源:PCB走线长度差异与阻抗不连续
上一章我们看了Skew怎么毁掉眼图,这一章来聊聊这些Skew到底从哪冒出来的。
我个人觉得,搞懂源头比会算容差更重要。你想想看,你辛辛苦苦把时序预算算得再漂亮,源头没掐住,板子回来一样流泪。咱们这行有个真理:源头堵住了,后面省一半功夫。
Skew的物理来源,本质上就两大类——走线长度差异和阻抗不连续。我分开讲,但你要记住:它们经常同时出现,互相放大。
4.1 走线长度差——最直接的Skew制造者
这个太好理解了。D-PHY是高速差分信号,一对线里P和N如果长度不一样,传输时间就不同。在2.5Gbps的数据率下,每1ps的时差对应大约0.17mm的走线长度差。
0.17mm是什么概念?一个0402电阻的长边都不到。所以你会看到D-PHY走线都画得像蛇一样,那不是为了好看,是在做等长补偿。
我在一个4K摄像头项目中遇到过这个问题。MIPI走线从SoC到FPC连接器,其中一对差分线的P和N差了大约2mm。我当时的想法还乐观——才2mm,算下来也就12ps,离spec的0.15UI(60ps@2.5Gbps)远着呢。结果一上示波器,这路数据通道的眼图开口只有不到40%UI,而且出现了明显的毛刺。
怎么会这样?我做了一些检查,发现两个坑:
- 微带线效应:表层走线,P和N的参考平面不完全对称,造成单位延迟差异
- 过孔带来的额外延迟:长的那根走了两个过孔,短的那根才一个
这两点加在一起,实际等效长度差放大了接近3倍。最后只好重新改板子,把那根短的走线硬生生绕成蛇形等长,再匹配过孔数量。教训深刻啊。
4.1.1 差分对内偏差
这是最基本的要求。D-PHY spec规定:
| 参数 | LP模式 | HS模式 |
|---|---|---|
| 对内Skew最大值 | 无严格要求 | ≤ 0.15 UI |
| 典型目标值 | 尽量等长 | ≤ 25 ps |
| 等长控制 | 建议≤ 5 mm | 建议≤ 2 mm |
我建议你在做Layout时,对内等长目标定在1mm以内。别指望卡着spec过,留余量是硬件工程师的尊严。
关键判断:差分对内偏差的出现,通常伴随共模噪声的剧增。如果你在测试中发现共模电压波动超过50mV,回来查对内的等长,大概率就是这里出了问题。
4.1.2 通道间偏差
这个是不同Data Lane之间的Skew,还包括Clock Lane对Data Lane的偏差。D-PHY的规范里,这个不是硬性约束——因为DDR采样模式会重新同步数据。但你听我一句劝:不要因为spec不约束就乱来。
原因有以下几点:
- 虽然接收端有DDR采样,但过大的通道间Skew会压缩建立/保持时间窗口
- 高速模式下,PLL的抖动会叠加在大Skew上,容易误码
- 你无法保证所有芯片的DDR采样窗口都一样宽
我个人的经验值是:不同Data Lane之间的走线长度差控制在5mm以内。Clock Lane走线要比最长的Data Lane短,最多等长,不要比它长。
实用技巧:在Layout阶段,我会把所有的MIPI走线分组做好等长约束。Clock Lane作为参考长度,所有Data Lane按照Clock ± 2mm来控制。这样后续做时序仿真时基本不用调。
4.2 阻抗不连续——隐性Skew放大器
讲完长度差,再聊聊阻抗不连续。这个更隐蔽,但破坏力不小。
阻抗不连续的本质是什么?是信号在传输路径上遇到了特性阻抗变化点,产生反射。反射回来的信号和主信号叠加,造成边沿畸变。这种畸变在时域上表现出来,就是额外的Skew。
我举个例子你就明白了。一根50Ω的微带线,中间接了一个过孔,过孔的阻抗可能在70-80Ω。信号经过这个过孔时,一部分能量被反射回去,一部分继续往前。反射回来的信号在源端再次反射,又往前传。这么来回几次,接收端看到的信号边沿就变慢了。边沿变慢,意味着过阈值的时刻在变化——这就是最典型的Skew来源。
// 反射系数计算公式
// Γ = (Z_load - Z_0) / (Z_load + Z_0)
// 过孔阻抗70Ω, 原来50Ω
// Γ = (70 - 50) / (70 + 50) = 20/120 ≈ 0.167
// 大约16.7%的电压被反射回来
你看,16.7%的反射。在1.2V的差分摆幅下,这个反射电压大约200mV。它会在接收端引入额外的抖动,换算成时间Skew大约在5-10ps的量级。几个反射点加起来,就是二三十个ps。
4.2.1 常见的阻抗不连续点
- 过孔:最大头的问题。换个层就带来阻抗跳变,Stub还会引入谐振
- 连接器:FPC连接器、板对板连接器,阻抗控制差,容易出现几十欧姆的突变
- 焊盘:BGA焊盘、电阻电容焊盘,比走线宽,容性负载增加
- 线宽变化:走线从细变粗(比如从焊球扇出区到正常走线区)
特别提醒:不要跳过过孔建模。我见过太多工程师只在2D环境下做仿真,完全忽略了过孔的寄生参数。一个通孔过孔在2.5Gbps下可以等效为0.3-0.5pF的电容,这足够改变信号上升时间了。
4.2.2 阻抗不连续的累积效应
这一点很关键。单个不连续点可能影响不大,但一串累积起来,Skew会叠加。
我记得有一次帮别人排查MIPI问题。设计用了4个过孔换层,中间还过了一个板对板连接器。单看每个点:过孔反射系数0.15,连接器反射系数0.2,焊盘0.1。看起来都不算大,但信号每次反射都叠加一次,在TDR曲线上一看,阻抗曲线从50Ω跳到了75Ω然后又掉回45Ω,整段路径的等效特性阻抗已经面目全非。
最终结果:接收端的眼图完全闭合。最后解决办法是把走线全部改到同一层,去掉3个过孔,只保留最必要的一个过孔和连接器。阻抗连续性好了,问题解决。
4.3 两类来源的协同作用
现在把两张放在一起看。走线长度差和阻抗不连续很少单独出现。一个典型的场景是:
你走了一条长的等长蛇形线来补偿长度差,但蛇形线本身引入了额外的感性耦合和阻抗变化;同时过孔又带来容性突变。两个因素加在一起,实际Skew比单纯长度差计算出来的大得多。
这也是为什么我总说:仿真要过,测试要测,两者要对照。没有仿真,你找不到隐患;没有测试,你不知道仿真准不准。
下面这张图总结了本章的知识脉络:
4.4 实战建议汇总
基于上面的分析,我在项目中的做法总结为以下几点:
- Layout阶段:
- 差分对内等长控制在1mm以内
- 不同Data Lane之间控制在5mm以内
- Clock Lane做参考,比最长Data Lane短
- 仿真阶段:
- 不要只做2D,3D过孔建模跑一下TDR,S参数
- 重点关注S11和S21, S11建议 < -15dB @ Nyquist频率
- 看差分TDR曲线,阻抗波动控制在±10%以内
- 测试阶段:
- 上示波器测差分眼图,看眼宽和眼高
- 用TDR测实际走线阻抗,找突变点
- 测共模噪声,超过50mV回来查等长和阻抗
避坑指南:我曾经在一个项目中把全部精力放在length matching上,忽略了via stubs。结果所有Lane都等长,频率却上不了2Gbps。后来在TDR上看到via stub谐振,切掉背钻后问题解决。从那以后,我每次评审都得盯着过孔看半天。