ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PCB差分走线设计:从阻抗计算到等长调节的完整流程

PCB差分走线设计:从阻抗计算到等长调节的完整流程 一位做硬件的朋友前几天问我说他在画一对USB 3.0的差分线明明照着网上教程设置了线宽和间距板子打样回来测眼图结果就是过不了。我问他有没有算过叠层对应的阻抗他说“厂家给的叠层不就是1.6mm四层板嘛线宽5mil间距5mil不就行了”问题就出在这——不同叠层介质厚度、铜厚、甚至绿油厚度都会把目标阻抗带偏5mil/5mil在某些叠层下可能只有70多欧姆跟USB要求的90欧姆差了十万八千里。这其实是很多从原理图跑到PCB阶段的人最容易踩的坑差分走线不是“两根线并排走”就完事了从阻抗计算到等长调节中间每一步都有讲究。这篇文章我就结合Altium Designer的操作把整个流程完整走一遍先用阻抗计算器把线宽线距定下来再在AD里设置差分对规则然后实际布线最后做等长调节。目标就是让你拿到一块板子时差分对是真能跑出设计要求的信号质量而不是“看起来差不多”。1. 先搞清楚差分走线到底在解什么题1.1 为什么信号不要“单打独斗”差分信号说白了就是一对信号线一条走正相、一条走反相接收端看的是两条线的电压差值。好处很多人背过抗共模干扰、抗EMI、对地弹不敏感。但落到PCB布线层面你要明白一个更实际的问题——差分线本质上是在用“一对线之间的耦合”来换取信号完整性这对线的距离和宽度决定了耦合强度也决定了差分阻抗。我在实际项目里常用USB 2.0举例它要求90欧姆差分阻抗千兆以太网一般是100欧姆HDMI则要100欧姆差分对。每种协议对差分阻抗有明确要求如果阻抗偏了信号反射会变严重眼图质量直接崩掉高速信号尤其敏感。很多人以为阻抗只跟“线宽”有关这是误解。差分阻抗由线宽、线距、参考平面距离介质厚度、介电常数、铜厚共同决定任何一个变了阻抗都会漂。所以当你看到网上的“USB用5mil/5mil”这种经验值时要清醒一点那是在特定叠层下算出来的换个板厂、换个板厚数值就不适用了。这也是我坚持在每次布线前先算一次阻抗的原因——算完再画画完再调规则整个过程可控。1.2 阻抗匹配是怎么把反射压下去的信号在传输线上走遇到的瞬时阻抗如果突然变化就会发生反射。反射波叠加在原信号上轻则振铃重则逻辑误判。差分走线要做阻抗匹配就是让这对线的特性阻抗尽量接近源端和接收端的设计值比如90欧姆或者100欧姆这样信号能量才能尽可能完整地从一端传到另一端。这句话说起来简单但落地时有个容易忽略的点差分线在某些区域比如过孔附近、BGA扇出区域、焊盘处阻抗会突变。走线本身的阻抗你通过线宽线距能控制但过孔的寄生电容、焊盘的stub都会带来阻抗不连续。这也是为什么高速差分线设计要尽量减少换层、控制过孔数量、对过孔做背钻等。回到AD里的操作层面你要做的就是差分对规则设置好布线的过程中尽量保持线宽和线距恒定遇到没办法恒定的地方后面再优化处理。我在后面第4部分会讲怎么处理最常见的不规则绕线场景。2. 阻抗计算参数都是怎么定出来的2.1 叠层结构是分母先把它摸清楚做阻抗计算的第一个输入项不是你想要的阻抗值而是板厂的叠层结构。很多设计师喜欢直接下载一个“通用叠层表”然后开算但问题是不同板厂的电介质材料、半固化片PP厚度、铜箔厚度都有差异你算出来再准板厂实际压制出来的叠层跟你的假设不一致阻抗也会偏。所以我拿到一个新项目第一件事是问板厂要叠层结构表或者至少在PCB设计前把期望叠层发给板厂确认。叠层表上关键信息包括每一层铜厚通常用oz表示1oz约35um、介质层厚度包括芯板core和半固化片PP、介电常数Er常见的FR4在4.2~4.6之间具体看材料、阻焊厚度。阻焊层很多人不重视但差分阻抗对阻焊厚度是敏感的尤其是表层微带线的差分阻抗阻焊覆盖会影响表层有效介电常数差分阻抗可能变化1~3欧姆。拿到叠层表后在嘉立创阻抗计算工具里选对应的模型表层差分走线用“表面微带线”Surface Microstrip内层用“带状线”Stripline。选对模型很关键因为两种模型的参考平面情况和介质场分布完全不同算出来的线宽线距会有明显差异。2.2 用嘉立创阻抗计算工具反推线宽线距嘉立创阻抗计算工具是免费的网页版计算器界面很直观也有对应的微信小程序。打开之后第一步选择阻抗模型比如“差分微带线”或者“差分带状线”。第二步填入叠层参数介质厚度、介电常数、铜厚。第三步输入目标差分阻抗。第四步工具会给出若干组线宽和线距的组合你从中选一个适合工艺和布线空间的方案。我实际用过几次它的计算结果跟SI9000这类专业场求解器对比在常规FR4叠层下偏差在1~2欧姆以内对于前期设计已经够用。举个例子我之前设计过一块四层板表层到第二层介质厚度是0.1mm约4milEr取4.3铜厚1oz目标阻抗100欧姆差分。工具给了两个方案线宽6mil、线距6mil或者线宽5mil、线距8mil。前者差分阻抗约100.3欧姆后者约99.8欧姆。我对比了一下布线空间BGA扇出区域比较拥挤就选了线宽5mil、线距8mil的方案。注意两个方案的“线距”指的是差分对内部的间距跟一对线与另一对线之间的间距安全间距是两回事规则里要分开设。算完之后把选定的线宽和线距记录下来。如果你用Altium Designer建议直接把这个值填到差分对布线规则里后面布线就是按这个规则走不容易跑偏。2.3 线宽线距改了规则怎么同步计算器算出来的线宽线距只是一个“推荐值”真正落到PCB编辑器里你得把它变成设计规则否则AD不会自动约束你。很多时候新人直接画线画出来的宽度和间距跟计算值差了很远后面测出来阻抗不对都不知道问题出在哪。在AD里差分规则有两个入口一个是PCB规则编辑器里的“Differential Pair Routing”另一个是“High Speed”下的“Differential Pair”长度规则。前者管线宽和线距后者管等长容差。建议在开始布线前把这两个都配置好。我在第3部分会具体说操作路径这里先提醒一个细节差分对规则里的“Gap”是线距“Width”是线宽还有“Coupling”选项可以选择“Edge”或“Broadside”常规表层布线用Edge带状线根据叠层和工艺也可能用Broadside但Edge最常见。还有一个容易忽略的问题差分对规则设置好之后线宽线距的约束默认会跟随走线但如果你用“Interactive Differential Pair Routing”时快捷键按错了可能会退出差分模式变成单端走线这时候线距就不受控了。我一般走完差分线后会做一个DRC检查过滤出差分规则的违规项看有没有“Un-Routed”、有没有“Width Constraint Violation”——这样才算闭环。3. 差分对设置与布线实操3.1 从原理图到PCB差分对怎么定义在Altium Designer里要让软件知道这两根线属于一对差分线第一种方式是在原理图阶段就给网络命名加上标识。AD的差分对标识规则是两个网络名主体相同后缀分别为“_P”和“_N”。比如“USB_DP”和“USB_DN”或者“ETH_TX_P”和“ETH_TX_N”你甚至可以用“_P”和“_N”以外的自定义后缀但默认最好用这两个免得后面导入PCB时识别不了。原理图里放置了差分对后可以用菜单“Place - Differential Pair”在原理图上显式放置差分对会生成一个差分对指示符也可以不放置指示符靠命名规则自动识别。我个人的习惯是高速接口的网络名从原理图开始就用规范命名然后在PCB导入后用“Differential Pair Editor”统一检查一遍看是否所有的差分对都被正确识别。打开差分对编辑器的方式是菜单“Design - Differential Pairs”或者在PCB面板里把面板类型切到“Differential Pairs Editor”。如果你在原理图里用了“_P/_N”后缀导入PCB时AD通常会自动创建差分对。但有时候因为网络名大小写、前导空格等问题识别失败这时候手动在Differential Pair Editor里添加即可。检查完之后最好再核对一下差分对的两个网络是否真的分别连到了驱动器的正端和负端别搞反了否则后面实测信号极性会反接收端收不到正确数据。搞反的情况我见过不少都是因为原理图里把P和N接反了PCB阶段光看网络名察觉不到等板子回来拿示波器一量才暴露。3.2 差分走线的布线规则配置打开PCB规则编辑器菜单“Design - Rules”快捷键DR找到“Routing - Differential Pair Routing”。这里面的核心参数是“Min Width”、“Preferred Width”、“Max Width”“Min Gap”、“Preferred Gap”、“Max Gap”。我建议把Preferred Width和Preferred Gap直接设成阻抗计算值Min/Max给个余量比如±1mil。但要注意Min/Max放宽太多会导致走线时宽度随意变化所以具体怎么设要看板厂工艺能力一般6mil以上线宽做起来很稳3.5mil以下难度陡增。配置规则时还有个很多人会搞混的地方差分对规则的作用对象是“差分对”Differential Pair不是单个网络。所以规则范围Where The Object Matches要选“All Differential Pairs”或者选“Query Builder”指定特定差分对类。如果你在规则里填的是网络名那么差分走线时不一定会正确匹配容易导致整组线走完DRC报一堆Width Violation。我习惯先给所有差分对建一个“Differential Pair Class”比如“DP_DDR”、“DP_USB”、“DP_ETH”然后在规则范围里选对应类这样不同速率、不同阻抗要求的差分对可以分别控制互不干扰。设置好宽度和间距之后再配置等长规则。在“High Speed - Differential Pair”里可以设置“Matched Length”的容差比如±5mil。这个容差决定了差分对内部正负线之间的长度差上限也决定了后续等长调节的目标。不同芯片手册会给出不同要求有的要求±2mil比如某些DDR接口有的±10mil甚至更宽松比如一些CAN、RS485差分低速场合。看手册最靠谱不要凭感觉定得太严太严会导致蛇形绕线区域过多、反而恶化信号质量。3.3 交互式差分走线的几个关键操作规则配置好之后就可以实际走线了。在AD里切换到“Interactive Differential Pair Routing”的方式有几种快捷键P I或者菜单Place - Differential Pair Routing也可以快捷键“3”在交互走线时切换成差分模式。选定两对差分引脚后软件会拉出两根并行的线你只需要控制起点、拐角和终点两线间距会自动按规则保持。实际走线时我积累了几个经验第一尽量从源端驱动器往接收端走方向越顺越好避免来回绕。走线过程中不要随意切换层换层会打断参考平面的连续性而且过孔会带来额外的阻抗不连续。如果必须换层比如从表层走到内层过孔旁边最好加两个地孔stitching via提供回流路径这个细节很多人会漏掉漏掉的后果是回流信号绕一大圈辐射和串扰显著增大。第二走线时如果遇到障碍物比如过孔、焊盘不要急着按Shift空格换走线方向先考虑能不能从旁边绕过去。AD的差分走线支持45度角、圆弧角等样式对于高速差分信号我建议用45度角或者圆弧角不要用90度直角。直角会让走线的等效宽度瞬间变大造成阻抗突变。用Shift空格可以切换拐角模式配合快捷键“2”走线宽度甚至可以在布线过程中临时调整线宽但建议只在没包围调整的情况下才这么做否则规则一致性就崩了。第三一对差分线之间的间距在计算器里叫“Gap”一对与另一对之间的间距叫“Clearance”这两种间距的规则要分开设置。差分对内间距gap一般小于对间间距如果对间间距太小会造成两对线之间的串扰。以USB 2.0为例差分对间建议至少保持3倍线宽或者20mil以上具体看布线空间。我常用“Space”快捷键快速查看当前间距再用DRC做最终检查确保满足要求。4. 等长调节精度和信号质量的平衡4.1 等长目标怎么定等长调节的目的是让差分对内部的两根线长度尽量一致减少信号到达接收端的时序偏差skew。对于USB、PCIe这类协议差分对内skew要求通常在几个mil以内。但是具体目标值不是随口定的需要看信号速率。怎么算粗略估算方法1mil的走线长度差对应的时间偏差大约是0.16~0.18ps在FR4材料中信号传播速度约为光速的55%~60%即每英寸约1.5ns。所以如果协议要求差分对内skew不超过5ps对应的长度差就该控制在30mil以内。但很多芯片手册直接给长度差要求比如Intel某些平台要求USB 2.0差分对内长度差不超过20milDDR4的DQS与DQ之间做T型拓扑时要求更复杂。稳妥起见优先看芯片手册和协议规范手册没写再按速率推算。在AD里设置等长目标时可以用“High Speed - Matched Length”规则或者在PCB面板里直接查看差分对的长度。我倾向于在布线前先量一下差分对两端器件的引脚到引脚最短路径估算一个基线长度然后请最小误差要求导出目标长度。实际操作中我通常允许目标长度比最短路径长一小截因为等长调节需要“绕线”如果目标长度设得太死蛇形绕线空间不够反而很难实现。4.2 蛇形绕线的参数选择差分对等长调节的经典操作是绕蛇形线。AD里选中差分对后用快捷键“T I”或者菜单“Tools - Length Tuning - Interactive Differential Pair Length Tuning”会进入绕线模式。此时鼠标拖动软件自动在走线上添加绕线段。绕线有几个参数需要设置振幅Amplitude、间距Spacing/Period、绕线条数。在AD的绕线模式里按Tab键打开属性面板可以调整最大振幅、绕线间隙即蛇形相邻段之间的间距。这里有个关键原则蛇形相邻段之间的距离至少要3倍于差分线线距gap否则相邻走线段之间的耦合会让差分阻抗偏移还会引入额外的串扰。有些新手为了好看把蛇形绕线压得很紧凑间距只有1倍线距结果绕完线后信号完整性反而差了这就是典型的“为了等长而牺牲阻抗”。我实际调等长时一般先把最大振幅设成10~15mil根据绕线空间调整绕线间距设成至少15mil以上。然后一边拖动一边看AD状态栏的长度读数直到长度达到目标。绕完后在DRC里跑一次“Length”相关规则确认没有违规。如果有多组差分对都要等长比如一个接口有4对差分线除了对内等长可能还要组间等长对与对之间等长这时就要用“Matched Length”规则把目标长度设成统一值再对每对差分对做调整。4.3 用绕线改善时序还是引入噪声我这几年调等长最大的感触是绕线不是万能的绕太多反而惹麻烦。蛇形线本身就是一种非理想结构相邻线段之间会产生额外的耦合表现为电容和电感的变化导致局部阻抗变小、信号过冲和振铃更明显。如果为了等长硬在一大段走线上绕出连绵不绝的S型传输线的整体均匀性就被破坏了眼图可能在中间区域凹陷。有一个保守的经验单对差分线的蛇形绕线总段数别超过5~6段每段振幅控制在30mil以内绕线区域尽量远离连接器、BGA扇出区、过孔密集区。实在绕不下的可以调整器件布局把两个器件挪近一点从根本上缩短长度差而不是无止境绕线。这个思路很多工程师没转过弯来总想在布线阶段补布局的债结果走线又长又乱信号质量反而不行。另外等长调节之后一定要重新做一次Simulation或者至少做一次信号完整性扫描AD自带SI功能可以在Tools - Signal Integrity里设置激励和观察点。如果只是肉眼看了下长度没超就认为没问题的往往会在量产批次的个别板子上翻车。等长只是必要不充分条件最终要看的是眼图和阻抗连续性。5. 常见问题与排查技巧实录5.1 换层过孔与参考平面问题差分线换层是一个常见风险点。当差分对从表层换到内层时如果内层的参考平面和第二层不一致回流路径就会断裂阻抗突变区域可能非常明显。我实际中遇到过一块板子差分线从第三层换到第一层但第三层的参考平面是电源平面第一层的参考平面是地平面两个平面是分开的没有加跨接电容结果信号垮了。后来在换层过孔旁加了100nF的跨接电容并在过孔附近打了地孔问题才解决。检查参考平面是否连续的方法很简单打开PCB的图层显示把电源层和地层都显示出来看看差分线的投影路径下方有没有完整的铜皮。如果过孔区域存在平面被掏空的情况优先调整走线路径避开不要铤而走险。Altium里可以切到“Multi-layer”视图配合透明度调整能比较直观地看到走线经过区域的平面覆盖情况。5.2 等长做了眼图反而变差等长调节结束之后如果你有板子可以做测试但测出来眼图反而变差常见原因有三个第一蛇形绕线区域间距太小导致局部耦合增强差分阻抗下降第二绕线区域离过孔太近阻抗突变叠加了绕线引入的不连续第三你给差分对内等长设了太严的容差导致一对线绕了非常多段此时应该适当放宽容差把重点放在减少阻抗不连续上。排查时可以用TDR时域反射计测一下阻抗Profile如果发现阻抗在某些位置明显下降先用放大镜查看对应位置是不是正好是蛇形绕线段。如果是把那段绕线重新调一下间距或振幅通常都能改善。我印象最深的一次是给一个客户排查HDMI差分对问题现象是等长做得很完美但眼图在3Gbps下完全闭合。最后定位到绕线段的间距只有5mil而线距本身是6mil绕线区段的差分阻抗被拉到了85欧姆和要求的100欧姆差了15欧姆。把绕线间距改成18mil之后眼图直接打开了。5.3 设计后期才发现阻抗偏了怎么办如果你在PCB都画完了甚至板子打样回来发现阻抗不对这时候再改线宽线距的成本很高但也不是没有补救措施。最简单有效的办法是跟板厂沟通看能否在阻焊层上做调整。阻焊厚度的调整能小幅改变表层微带线的阻抗一般能拉回2~3欧姆适合阻抗偏差不大的情况。如果偏差较大就只能改板不过好在原理图不用动只需要在PCB里调整差分线规则并重新走线。为了避免这种返工我在项目比较紧张时有个习惯投板前把核心差分对尤其是USB、以太网这类标准接口的差分阻抗先发给板厂做一次“阻抗确认单”让板厂基于实际叠层确认或者告知偏差。很多板厂提供这种服务花不了太多时间能避免后面打样回来测阻抗时才发现问题。这里也顺便说一下嘉立创阻抗计算工具算出来的值可以作为参考但最终以板厂根据实际工艺反馈为准——这不算推诿这是工程上很正常的协作方式。说到最后我个人的体会是差分走线这个东西不是会点AD操作就能做好的关键在于你对传输线原理的理解以及能不能把理解转成一系列可控的工程决策。阻抗计算、规则配置、等长调节看起来是三个独立环节实际上是一条完整链条每一步都影响最终信号质量。这套流程跑顺之后再画高速接口的板子心态会稳很多。
返回列表