
上周帮一个朋友查一块USB接口的板子现象挺诡异——USB设备接上去有时候识别得到有时候识别不到换一个USB口又稳定了。看到Gerber里他那两对USB差分线的时候我大概就猜到了问题差分对在PADS里定义倒是定义了但走线的时候有一小段两根线中间硬生生塞了个过孔间距忽大忽小。这种问题原理图里看不出来DRC又常常不报最坑的是它不一定每次都出问题。这块板子是用PADS VX2.4画的。说实话被差分对设置坑过的次数我少说也有一只手数不过来。这篇文章不打算从零讲什么是差分信号重点是把VX2.4里从差分对定义、规则设置、实际布线到DRC检查这一路常见的错误和对应解决方案整理出来。适合正在用PADS画高速板、刚接手USB/以太网/LVDS这类接口布线的硬件工程师如果你还没接触过差分信号读下来也能对整套流程有个整体概念。1. 为什么PADS VX2.4的差分对设置值得单独写一篇避坑指南1.1 差分信号在板卡设计中的实际地位其实做板子这几年差分信号早就不是高速设计专属了。USB 2.0跑480Mbps千兆以太网四对差分线LVDS传视频MIPI传摄像头和屏幕CAN总线在汽车电子里也是差分。可以说凡是涉及通信接口的板子几乎绕不开差分对。差分信号本质上是用两根线传一个信号一根走正相、一根走反相接收端读的是两根线的差值。由于两根线受到的共模干扰基本一致相减之后干扰被抵消所以它对地弹噪声、电源噪声、外部EMI都有天然的抗性。但代价也很明显这两根线必须尽量等长、等间距、对称保证求差的时候相位不偏、幅度不偏。这个尽量落到PCB设计上就是一堆让人头疼的约束。在实际项目中差分对设置能不能做好直接关系到板子能否一次通过认证。USB信号质量差导致眼图闭合、以太网丢包、LVDS屏幕闪烁这些我都遇到过根因往往不是芯片选型而是PCB上差分线布线出了问题。1.2 VX2.4差分对功能的优势与能力边界PADS VX2.4是西门子EDA原Mentor在2019年前后推的版本相比更早的PADS 9.xVX系列在差分对支持上已经相当完整。Router里可以实时显示走线长度差动态布线时可以按差分对的方式成对推挤还能设置瓶颈线宽和瓶颈间距让BGA区域出线不至于被DRC卡死。但它的能力也有边界。最典型的限制有两个Layout环境对差分对编辑支持有限。很多操作需要在Router里完成如果你习惯在Layout里一把梭会发现很多差分选项是灰的或者设置了不生效。规则分级容易冲突。PADS的规则体系分Default、Class、Net等层级Class级规则优先级往往高于你单独给某个网络设置的差分对规则。我见过不少工程师在差分对页面里填了一堆参数结果实际走线宽度压根没变原因就是网络被放进了某个Class而Class里的线宽设置更严格。另外老项目升级到VX2.4时也要留意。从PADS 9.x导入的工程文件有时候差分对pair定义会丢失或者映射错乱需要在Router里重新确认一遍。这种问题不是VX2.4本身不行而是版本升级时的规则继承机制和旧版本不完全兼容。1.3 这篇指南适合谁看如果你已经是熟练的Layout工程师对差分对的基本概念和操作都清楚那可以直接跳到第2章往后看重点是我在各章节里标出来的的坑部分。如果你是刚接触PADS、正要给第一块带USB或以太网接口的板子布线建议从头到尾过一遍。这篇文章不会手把手教你怎么打开每个菜单更多是告诉你哪些地方容易错、错了会有什么现象、应该怎么排查。说白了就是拿着我的踩坑记录帮你在前面躺一遍雷。2. 差分对规则设置关键参数没吃透后面全是在返工2.1 网络对的定义方式Net Pair与物理配对的关系差分对设置第一步是把原理图里的两个网络在PCB工具里配对。VX2.4里一般在Router中操作路径是Tools - Options - Design Rules切到Differential Pairs页面然后手动选择两个网络创建pair或者使用自动创建功能。这里有个非常容易踩的坑自动识别依赖网络命名规则。很多团队的命名习惯是USB_D_P和USB_D_N、TX_P和TX_NPADS能根据后缀自动把P和N识别为一对。但如果你用的是USB_D、USB_D-或者更随性的USB_DP、USB_DM自动识别就失灵了。VX2.4又不是算命工具它只会按固定的规则去猜。所以我的建议是从一开始画原理图就约定好命名规范统一用_P/_N或_P/_N甚至在网络名前加接口名比如ETH0_TXP、ETH0_TXN。这样在PCB端无论是自动配对还是人眼检查都省事得多。另外还有一个特别隐蔽的报错当你想手动创建pair时PADS提示网络已经存在于另一个pair里。这种情况通常发生在从旧工程导入、或者前期误操作重复定义的时候。解决方法是先在Differential Pairs页面里找到已有的pair右键拆分Ungroup然后把網絡重新分配到正确的pair中。我见过有人因为找不到这个拆分入口直接把网络名改了来绕过结果后面等长检查全乱套得不偿失。配对完成后最好做一个快速验证回到原理图确认这对网络在连接关系上是收发配对而不是同名错配。特别是在使用多路串行接口比如4路PCIe、4对以太网时pair之间的对应关系特别容易搞混。PADS里pair列表只显示网络名不会显示芯片引脚号所以一定要对着原理图过一遍。2.2 线宽、线距与差分对间距规则冲突的典型表现配对只是第一步真正让人头大的是参数设置。在Differential Pairs规则页面里常见参数包括线宽Width、间距Gap、瓶颈线宽Neck Width、瓶颈间距Neck Gap以及对外间距Separation。先说规则冲突的问题。PADS的规则体系是分级的Class规则的优先级通常高于网络级设置。如果你把差分信号网络划到某个Class里很多人为了方便管理会统一放到高速Class而这个Class里又显式指定了6mil线宽哪怕你在差分对规则里填了5mil最后实际走线还是按照Class的6mil来的。还有一种情况是反过来的Class里没有设置线宽但Default规则里设了一个很大的最小线宽结果差分对规则里的线宽设置被Default约束覆盖导致走线比预期宽很多。这类问题在DRC里不会报错因为它不是违反规则而是命中了更高级的规则。排查方法很简单走完一根线后选中它在属性面板里看实际宽度。如果和差分对设置不符优先检查它所属的Class规则。我处理这个问题时习惯是给高速差分网络单独建一个ClassClass里只设置安全间距不设置线宽把线宽决定权完全留给差分对规则。再看瓶颈参数。BGA区域引脚间距小正常线宽和间距塞不进去这时候就需要Neck Width和Neck Gap。有很多人为了省事不设瓶颈参数结果一进BGA差分规则就疯狂报DRC被迫手动把线改细或者绕到外层。其实在PADS Router里开了瓶颈设置后布线器会在空间受限区域自动收窄走出BGA后再变回正常宽度非常方便。但使用瓶颈参数时要特别小心瓶颈区域同样要保持P和N的对称性。如果用自动收窄功能线宽变化点必须对齐否则两根线在宽度突变处会出现不匹配造成阻抗突变。我一般会在瓶颈区走完后再手动检查一遍确保两根线的收窄位置在同一条垂线上。2.3 相位容差与长度差异这两个参数是最后一道防线Differential Pairs规则里还有两个容易让人困惑的参数相位容差Phase Tolerance和长度容差Length Tolerance。长度容差好理解就是一对线P和N之间的物理长度差单位是mil。VX2.4会实时计算两根线的长度差如果超出设定值就会在Length Monitor里标红。这个参数直接决定等长控制的严格程度USB 2.0一般控制在50mil以内千兆以太网和LVDS更严格DDR数据线组则要看具体频率和芯片手册。相位容差的单位是度它本质上是把长度差换算成了相位差和信号频率相关。如果只设长度容差其实已经够用但当你同时设置两个参数时规则会取更严格的一个生效所以不要顺手填一个不合理的相位容差导致布线段段报错。这里说一个我在项目中实际碰到的案例某块FPGA板子上的LVDS时钟对芯片手册要求对内长度差在±10mil以内但我在VX2.4里把Length Tolerance设成了100mil相位容差也没设。结果布线时Length Monitor一直不报警我就放心继续走线等做仿真时发现时钟信号偏斜严重回头一查才意识到规则被设宽了。后来我把容差改成了10mil重新调整走线才解决。经验是长度容差一定要根据芯片手册来不能随便给个看起来合理的数值。如果你不确定具体该设多少宁可先设严一点后面放宽很容易布完线再想收紧就只能重走。2.4 一份可以直接抄的起始参数表很多人问差分对规则到底填多少合适我给出一个参考表但必须强调这些数值只能作为起点最终要以板厂的阻抗叠层计算为准。接口类型目标差分阻抗参考线宽/对内间距对内长度差参考USB 2.090Ω5mil / 7mil4层板中等叠层参考≤50mil千兆以太网100Ω4mil / 8mil≤20mil高频时越短越好LVDS100Ω4mil / 6mil≤20milHDMI100Ω4mil / 7mil≤10mil且组内尽量等长MIPI D-PHY100Ω4mil / 8mil≤10mil具体按规格书PADS里的线宽和间距其实是由层叠结构、介质材料、铜厚共同决定的同样标称100Ω的差分阻抗在1.6mm四层板和1.0mm六层板上的线宽间距可能差很多。所以最靠谱的做法是在建规则前先让板厂提供叠层结构和阻抗计算单或者自己用Polar SI9000这类工具算一遍再把结果填进动态规则里。3. 布线阶段最容易翻车的操作细节与解决思路3.1 从BGA扇出开始就要保持耦合差分对最讲究耦合也就是两根线要尽可能一路并行走线间距保持恒定。很多人以为耦合是走线阶段的事其实早在BGA扇出的时候就已经决定了最终能走到什么程度。在BGA封装下焊盘间距小一对差分信号可能隔着好几个引脚扇出时没办法直接从相邻焊盘出线。这时候常见做法是先让一对信号分别从不同层扇出再通过过孔汇合到同一层。这样做是可以的但要特别注意汇合点的位置。如果汇合点太靠近BGA本体出现一段较长的单端走线差分信号在这一段就成了伪差分抗干扰能力会明显下降。我自己遇到过一次一对MIPI数据线在BGA区域从两层分别走了一段将近500mil的长度才汇合仿真结果显示这段对整体抖动贡献了将近30%的恶化。解决思路是调整扇出方向让一对信号尽量从相邻引脚或者相邻层对称位置出线。PADS Router的Fanout功能可以按网络对同时扇出选择这项功能后软件会尽量让一对线的过孔位置相邻。扇出完成后用一个临时DRC检查一下每对线的汇合距离尽量控制在100mil以内。BGA区域空间不够时别硬撑直接使用Neck Width和Neck Gap。我见过有人为了保证线宽在地盘那么小的地方强行拉大间距结果导致内层出线困难被迫多打了十几个过孔反而把参考平面切得稀碎。3.2 过孔换层是参考平面断裂的高发区差分线在换层时问题往往不在走线本身而在过孔和参考平面。先说过孔。差分对的两个过孔必须成对、对称放置这是常识。但很多人忽略的是两个过孔之间的距离要和差分线间距保持一致而不是一个过孔在左边一个在右边随便放。PADS Router在动态布线时如果你用差分对模式换层软件会自动添加对称过孔一般来说问题不大。但如果是手动打过孔再布线就很容易忽略对称性。再说参考平面。差分线换层后如果新层相邻的参考平面被分割开返回电流就得绕路差模信号会产生共模分量辐射和抖动都会恶化。PADS里可以通过Planet Layer的颜色和分割线一眼看出参考平面是否完整。但很多人布线时只盯着走线层根本不开参考层检查这也是一个常见盲区。我处理这类问题时的建议是换层后立刻按键盘上的层切换快捷键逐层检查参考平面是否完整。如果发现差分线跨了分割最简单的办法是调整走线路径绕开或者在分割位置加一个小容值的跨接电容这个方法要谨慎因为高频段电容模型复杂并不总是有用。最好的办法还是从一开始就规划好过孔位置避开分割区域。另外过孔的stub多余未用段也是高频差分信号的大敌。在VX2.4里你可以通过设置盲埋孔来减少stub长度。如果条件允许尽量使用一阶或二阶盲埋孔尤其是10Gbps以上信号。如果只能做通孔那就尽量把走线放在靠近信号接收端的层减少stub长度。3.3 差分对交叉与引脚交换PADS里的隐藏陷阱使用PADS的ECO工具做引脚交换Pin Swap后差分对的网络连接关系可能发生变化这时候P和N的对应关系容易在视觉上形成交叉。这个交叉在飞线Ratsnest里看起来就是两根线绕了个圈但在实际物理走线里如果盲目按飞线走很可能把正负端接反。我遇到过一次特别诡异的问题一块板子上的USB差分线D和D-在连接器端被交换了结果设备死活枚举不上。原理图明明是正确的查了半天才发现是我不小心用了Pin Swap功能导致网络分配变了。排查方法在PADS Router里选中这对差分网络查看网络属性里的元件引脚分配和原理图对照。如果发现P和N在某个器件上反了可以在ECO工具里做一次引脚交换把它调回来不要直接在PCB里用交叉走线硬接。顺便说一个容易判错的现象差分对在飞线阶段显示交叉并不一定意味着网络分配错误。因为BGA扇出时过孔位置会导致飞线的视觉交叉实际走线是可以避免物理交叉的。判断标准是看芯片端和接收端的引脚定义不要只看飞线形状。3.4 相邻差分对之间的隔离与串扰控制有时候一对差分线做得没问题了但它在板子上并不是孤立的。相邻差分对之间的串扰是很多人忽略的另一个大坑。差分对与差分对之间的间距通常要求不小于3倍线宽3W原则如果是高速信号或者布线空间允许最好做到5W以上。为什么因为相邻差分对之间的耦合虽然理论上会被共模抑制抵消一部分但在实际PCB上线间耦合产生的共模噪声并不是完全对称的间距太近会导致串扰直接影响信号眼图。PADS VX2.4的Differential Pairs规则里可以设置差分对间距Separation这个值会强制约束不同pair之间的最小距离。我的经验是不要只依赖默认值要根据实际信号速率和板层结构来设。千兆以太网多对线并行时我一般会设置至少8~10mil的间距比单根线间距大不少。还有一个细节一对差分线内部的距离是恒定的Gap但两条不同差分对之间的线它们最靠近的地方也可能因为走线拐弯而无意中靠近。PADS Router的推挤功能在差分对比较多的时候很实用但要定期用DRC的Clearance检查一下防止看着离得挺远实际某处已经违规的情况。4. 等长设计和阻抗匹配高速差分信号的进阶考题4.1 蛇形等长线的参数怎么给才不白绕等长设计的本质是通过绕线把一对信号的传输延迟对齐。在PADS Router里蛇形线工具叫Add Accordion添加手风琴绕线它能自动根据长度差生成绕线。但自动绕线不是万能的参数不对绕了也白绕。先说蛇形线的两个最关键参数振幅Amplitude和间距Pitch/Spacing。振幅就是蛇形线突出的高度。经验值通常取3~5倍线距注意是线距Gap不是线宽。如果振幅太小绕线密度低需要绕很长一段才能补足长度差如果振幅太大蛇形线相邻线段之间的距离太近会产生额外的耦合反而让局部阻抗下降信号质量恶化。间距是指蛇形线相邻两段平行线之间的距离一般要求不小于3倍线宽。如果间距太小两段平行线之间的互感互容会让等效阻抗偏离目标值差模转共模增加EMI。我常用的组合是线宽5mil、线距7mil时蛇形线振幅设20~30mil间距设15mil以上。VX2.4支持弧形蛇形线不是老式的直角锯齿状。实测中弧形绕线在阻抗连续性上确实比直角要好尤其是在信号速率超过1Gbps时。PADS里的Add Accordion可以设置角度模式我建议改用弧形Arc模式虽然操作上不如直线锯齿方便但对信号完整性更友好。4.2 用VX2.4的长度监视器跟踪每对线的偏差绕完线之后光靠肉眼没法判断是否真的等长。VX2.4在Router里提供了一个非常实用的功能——Length Monitor。打开方式是在Router界面的右键菜单或者View - Toolbars里勾选Length Monitor它会像一个小悬浮窗一样实时显示当前选中网络对的长度信息。里面会分别列出P线和N线的长度、长度差以及和目标值的偏差。设定好长度容差后偏差值会以颜色显示绿色表示在范围内红色表示超差。这个功能解决了什么实际问题第一它可以让你在动态布线过程中随时看到长度差不用布完再跑一遍报告第二它能告诉你该绕哪一根线——不是随便选一根而是优先加长短的那一根。很多人习惯性去剪长线但一定注意如果长线已经接近最短间距要求硬剪会把线挤在一个很小的空间反而弄巧成拙。当一对线的长度差超标时我的操作流程是先选中长度较短的那个网络用蛇形线在空旷区域补足差值。补完后看一眼Length Monitor如果差值是负数另一根偏长再反过来微调。最后跑一次规则检查确保绕线区域的间距规则没有被破坏。VX2.4还有一个批量等长的功能当你需要把一组差分对比如DDR的DQ0~DQ7都控制在同一个长度范围内时可以用它设置组内目标长度。我在处理并行差分总线时会先把最长的一对找出来作为基准然后让其他对都向它靠拢这样整组线的最大偏差就不会失控。4.3 阻抗匹配的常见误区与端接选型阻抗匹配这个主题最容易产生两个误区。第一个误区认为只要把线宽和线距设成计算值阻抗就匹配了。其实线宽和线距只是影响阻抗的变量之一层叠结构、介质层厚度、介电常数、铜厚、阻焊层厚度都会影响最终阻抗。同一组线宽线距放在不同层和不同叠层下阻抗可能差10%以上。所以在规则设置前一定要先确定层叠参数最好拿到板厂的阻抗叠层计算单再反推线宽线距。第二个误区认为PCB走线做好后阻抗匹配就结束了。实际上芯片和走线之间、走线和连接器之间如果阻抗不连续反射依然存在。正是因为这样很多高速接口芯片会在芯片内部做好端接但有些芯片需要你在PCB上额外放置匹配电阻。常见的端接方案有几种源端串联端接在驱动器输出端串一个电阻通常是22Ω或33Ω用于吸收反射。电阻要尽量靠近驱动器引脚放置。接收端并联端接在接收端跨接一个等于差分阻抗的电阻比如100Ω差分线就跨100Ω主要用于吸收反射。这个电阻要靠近接收端放置。AC端接在并联电阻的基础上串联一个小电容用于隔直流适合需要降低直流功耗的场合。在做LVDS或HDMI设计时很多芯片手册会明确要求接收端跨接100Ω电阻或者明确指出芯片内已集成。我在布线时会把端接电阻的位置提前规划好绝对不能让端接电阻的走线分支太长否则这个电阻自己就成了一小段阻抗不连续点。PADS的规则里可以给端接电阻区域设置区域规则让线宽在线到电阻引脚时保持和差分线一致避免突然变窄。5. DRC检查与仿真验证把问题拦在出板之前5.1 打开这些专门的差分DRC项目很多人在PADS里布完线直接跑一个常规DRC看到没有报错就以为万事大吉。但差分对相关的错误默认DRC很多是不勾选的。VX2.4的Design Verification设置里和差分对相关的主要有这几项Unrouted Pairs检查是否有未布完的差分对网络。Pair Separation检查不同差分对之间的间距是否满足规则。Same Net Spacing检查同一网络内导体间距这个对差分对内部的P/N间距检查很关键。Length Diff检查每对差分线的长度差是否超出容差。如果发现DRC没有报差分相关的错先别急着高兴去检查一下这几个选项有没有被勾上。我见过有人把差分对长度差设了10mil但DRC里没开Length Diff结果所有对内偏差都冲破100mil了DRC依然安安静静。另外VX2.4里有一个Design Verification和Batch DRC的区别。如果只是在交互式设计模式下点检查有些规则可能用的是实时检查的简化版和手工跑一次完整DRC的结果不一致。所以我的习惯是改完规则或者布完关键区域后手动跑一次完整的Batch DRC并且把报告存档方便后面排查。5.2 用HyperLynx做信号完整性验证如果你做的板子信号速率比较高或者你的客户对信号质量有明确要求仅仅依赖布线约束是不够的还应该做一次信号完整性仿真。PADS生态里配套的工具是HyperLynx它可以直接导入PADS的PCB文件做阻抗、串扰、眼图等分析。我不是仿真专家但我的工作流里一定会做这几步把PCB导出到HyperLynxFile - Export - HyperLynx确认导出时選中所有差分网络。在HyperLynx里设置正确的叠层参数包括介质厚度、介电常数、铜厚。这个参数如果不对仿真结果没有参考意义。给收发器分配IBIS模型。芯片原厂一般会提供如果找不到至少用一个相近型号的IBIS模型做保守估计。跑TDR仿真看差分阻抗曲线是否在目标值附近有没有明显的突变点。跑眼图仿真看每个差分对的眼高、眼宽是否满足接口规范。如果没有条件做完整仿真可以和板厂沟通做阻抗条测试板让板厂出货前测一下实际阻抗。一块有高速信号但没有阻抗报告的板子在我看来等于自求多福。我见过太多仿真没问题、实测翻车的案例最后查下来要么是叠层参数和板厂实际生产不一致要么是过孔stub没处理干净。仿真不是万能的但不仿真一定心里没底。5.3 出板前的Checklist最后分享一份我出板前会过的检查清单不一定适合所有项目但至少能把90%的差分对低级问题挡在工厂门外。检查项检查位置/方法通过标准网络对已全部定义Router - Design Rules - Differential Pairs每个差分信号都在列表里规则优先级正确Class Rules与Differential Pairs规则对比实际走线宽度和差分设置一致瓶颈区域对称BGA出线区域逐对检查两根线收窄位置对齐对内等长Length Monitor / DRC Length Diff偏差在容差内差分对间距DRC Pair Separation无违反规则报错过孔对称手动检查关键pairP/N过孔成对、间距一致参考平面完整逐层显示平面层无跨分割情况端接电阻摆放布局检查靠近驱动器或接收端阻抗报告板厂反馈 / TDR仿真实测阻抗在目标值±10%内全板DRCBatch DRC无差分类DRC错误每个项目结束后我会把这份清单根据实际踩到的坑继续补充。比如最近一次我加上了检查过孔stub优化分析这一项因为那个项目里有一对10G信号仅仅因为过孔stub没优化眼图质量就下降了很大一截。做PCB设计这几年一个很深的体会是差分对设置不仅仅是把两根线摆在一起那么简单它贯穿了从原理图命名、规则定义、扇出布线、等长调整到DRC仿真每一个环节。PADS VX2.4的功能其实足够应付绝大多数中小型板卡的需求真正让你翻车的往往是某个不起眼的规则冲突或者一个被忽略的参考平面断裂。如果你现在正在赶一块带高速接口的板子我建议你抽出半小时按上面这份清单从头到尾过一遍。别学我以前那样等板子焊完上电才发现USB枚举不稳定那会儿再改就不是半小时能解决的事了。