
做高速板这几年差分线这个坑我踩得比谁都多。尤其是第一次在AD19里同时处理90欧和100欧两种差分规则时那叫一个头疼——USB要90欧LVDS又必须100欧规则表里密密麻麻布到一半改规则最后导Gerber时厂家还反问一句“你这阻抗控制在哪层”。写这篇文章不是教你背菜单而是把从原理图到PCB布线、再到导Gerber发板整个链路上跟差分线有关的细节全部捋一遍。无论你是刚开始做高速PCB的硬件工程师还是在FPGA、网口、视频接口项目里被等长问题折磨过的人照着这套流程走能少走不少弯路。1. 差分线的原理与选型为什么是90欧/100欧1.1 差分信号到底是什么先搞清楚再动手差分线负责传输的不是两路无关的信号而是一对电压幅度相等、相位相反的差分信号。比如一对信号中P端输出1.25VN端输出-1.25V那么差分电压就是2.5V接收端真正关心的是这两个引脚之间的电位差而不是任何一个引脚对地的绝对电压。这个设计带来的最大好处就是抗干扰和抑噪外部噪声同时作用在一对线上时表现为共模噪声在接收端做减法之后自然被抵消掉。我见过不少新手做差分线直接按两根普通单端线平行拉过去结果板子生产回来上电就出问题。原因在于差分信号看的是两条线之间的耦合和对称性如果两条线在走线过程中一个跑到顶层一个打了过孔换到底层或者P线和N线长度相差太多、间距忽大忽小那么差分阻抗就会被破坏信号反射和EMI问题接踵而至。所以在AD19里做差分线之前必须先建立概念差分对不是两根独立走线而是一个整体。后续的规则设置、布线控制、等长调节全部围绕“一对线”来操作这样才能把软件里差分对功能真正用起来。1.2 90欧用在USB100欧用在LVDS/HDMI别搞反了很多人在选阻抗的时候问我“是不是差分线都是100欧”这个说法不完全对。实际上不同高速接口协议对差分阻抗的定义完全不同常见的有几类接口类型差分阻抗标准典型用途USB 2.0 / USB 3.090欧鼠标、键盘、U盘、摄像头LVDS100欧屏幕接口、视频信号、ADC数据HDMI / DVI100欧显示器、电视、多媒体千兆以太网MDI100欧网口变压器到连接器走线PCIe85欧高速扩展总线这个数值不是随便定的它跟接口芯片的驱动电路设计、连接器特性、线缆要求都有关系。控制器内部通常已经集成了匹配电阻PCB走线如果偏离标准阻抗太多就会导致信号反射。比如USB跑在480Mbps时90欧要求还比较严格你按100欧去布线眼图测试时会发现眼高明显下降这在实际调板中我碰到过不止一次。所以拿到项目之后第一件事就是翻芯片手册找到关于接口阻抗的要求。千万不要“感觉某个接口很慢就随便拉线”有些接口看起来数据速率不高但边沿速率极快一样对阻抗敏感。1.3 参考平面、耦合间距和返回电流理论重点差分线的理论基础说透了也不复杂。一对差分线在传输信号时返回电流并不完全依赖地平面因为P和N的电流方向正好相反有很大一部分返回电流是在两条线之间通过耦合流动的。这就是为什么差分线对地平面的完整性要求比单端线稍微宽容一点死抠这个特性的话高速差分线甚至可以跨越小的分割区域。但这不代表参考平面不重要。在多层板里差分线的阻抗主要由三部分决定线宽W、线间距S、到参考平面的介质厚度H。S越小P线和N线之间耦合越强差分阻抗越高但要注意间距过小会导致加工难度增大同时对外部噪声的抑制能力也会变化。H越大差分阻抗越高这也是内层走线和表层走线阻抗差异巨大的原因。一个容易忽略的重点是表层微带线的差分阻抗不仅依赖铜箔厚度和介质常数还跟表层是否覆盖阻焊油有关。同样一组线宽线距有绿油和没有绿油算出来的阻抗能差好几欧。所以如果你把表层无阻焊时的参数直接发给板厂很可能做出个不达标的东西。2. 动手前的阻抗设计与规则设置2.1 阻抗计算层叠结构、线宽线距怎么定在AD19里设置差分规则之前我总是先算一遍阻抗而不是拍脑袋填数值。常用的工具有两款一款是Saturn PCB Design Toolkit免费且上手快适合自己估算另一款是Polar Si9000工业界普遍认可板厂阻抗计算基本以它为准。你有条件的话最好直接找板厂要一份叠层阻抗参数模板那是最接近实际生产的参考。计算时需要的关键参数包括介质层厚度H、铜箔厚度T、介电常数Er、线宽W、线间距S。以一块典型的1.6mm四层板为例表层L1到内层参考平面L2的距离大约0.1mm到0.2mm介电常数在4.2到4.5之间。我习惯先定一个初始线宽比如5mil然后在计算器里输入H、T、Er再不断调整S直到差分阻抗落在目标值附近。实际操作中要注意外层和内层的计算结果完全不同。内层带状线有上下两个参考平面阻抗值受两个H的影响计算更复杂也更容易被板厂控制在目标范围。很多板厂会主动建议高速信号走内层除了屏蔽好生产一致性也是原因之一。我的建议是虽然这里给出经验参数但任何固定参数都不能直接套用于所有叠层。我在不同厂家加工同一种板子时厂家给的推荐线宽线距经常相差1到2mil。所以规则表里的数值一定要在你的叠层结构下重新验证。有的时候板厂会给出一个计算表格让你填目标阻抗。你填了90欧和100欧厂家的工程人员会给你提供对应的线宽线距。这时候把厂家给的W/S直接填进AD19规则里是最稳妥的因为那是基于他们自己生产良率和材料算出来的。2.2 AD19中建立差分对Class与阻抗规则在AD19里做差分规则我推荐先建Differential Pair Class再建Routing规则顺序搞反了容易漏。打开PCB面板在Differential Pair Editor中可以看到所有已经存在的差分对。这里的Differential Pair不是自动生成的而是需要你把原理图中的P/N网络手动分配成对。在原理图里如果两个网络名分别以_P和_N结尾例如LVDS_TX0_P和LVDS_TX0_NAD在导入PCB时能识别候选差分对但还是需要你在原理图里手动放置差分对符号执行一次。规则设置的位置在Design - Rules - Routing - Differential Pair Routing。这里要关注的参数有Min Width、Typical Width、Max Width以及Min Gap、Typical Gap、Max Gap。软件布线时如果你锁定Typical值那么所有差分线会严格按这个线宽线距走。如果不锁定允许在一定范围内变化布线灵活性高一些但也会带来阻抗连续性问题。强烈建议在实际布线时把Typical Width和Typical Gap固定不要给最大值最小值留太多空间。差分线最怕的除了长度不等就是宽度和间距突变。每突一次阻抗就跳一次反射就会出现。当你同时存在90欧和100欧的差分对时需要为它们分别建规则。可以在规则里设优先级也可以给差分对Class设置不同的Query比如IsDifferentialPairClass(USB_Class)和IsDifferentialPairClass(LVDS_Class)。AD19的规则优先级机制是数字越小的规则优先级越高。设置时一定要把90欧跟100欧分到不同的Class里再分别指定线宽线距。2.3 90欧/100欧双规则并存时的设计技巧同一个板子上同时存在90欧和100欧的差分对是很常见的事。比如一块视频处理板USB口要走90欧屏接口要走100欧。这时如果不做Class隔离AD会自动用优先级最高的规则套用到所有差分线上结果必然是其中一组不达标。我的做法是在原理图阶段就把差分对网络命名规范统一USB_DP/USB_DN对应90欧LVDS_A0P/LVDS_A0N对应100欧。在PCB中打开Design - Classes把同名差分对加入同一个Class例如“DIFF_90”和“DIFF_100”。在规则管理器里针对这两个Class各建一条Differential Pair Routing规则优先级分别设为1和2。用DRC做一次规则检查分别检查两个Class的线宽是否与规则表一致。这里有个容易踩坑的细节Class名称本身在AD里不区分大小写但如果你用Query去匹配Class名名称里尽量别用特殊字符和空格。我习惯用短横线或下划线比如DIFF_90R这样写Query时不容易出错。还有一点值得注意不要让90欧和100欧的差分对间距靠得太近。如果两条差分线平行靠在一起彼此的电磁场会产生串扰等于实际阻抗被改变。经验是保持相邻差分对之间的中心距离至少为3倍线间间距也就是3S规则。这个在布局阶段就要提前考虑不能等布线时再去挪。3. 从原理图到PCB差分对创建与布线实操3.1 原理图放置差分对与网络分配很多人以为差分线只要在PCB里设置规则就行其实差分配对的工作在原理图阶段就应该开始。在AD19原理图编辑器里执行Place - Differential Pair或者使用快捷键然后分别点击两个网络。软件会自动识别后缀为_P和_N的两个网络构成一组差分对。如果你没用后缀命名也可以通过Differential Pair对话框手动指定两个引脚网络。这个操作不能省。如果不在这里指定差分对PCB导入之后即使两个网络画成了差分结构AD也不会自动把它们绑定成一对。后续你想使用交互式差分布线工具会发现根本选不中成对的网络。此外放置差分对的同时可以设置差分对的两端极性。P和N不能接反否则信号相位关系错乱。有些芯片对P/N的定义还做了倒置这时候你就要在原理图里确认芯片手册中的引脚定义必要时做交叉连接。在PCB里补救会非常麻烦因为需要交换两条线的位置还可能影响等长。原理图阶段还有一个值得做的工作给差分对网络分配叠层和走线约束说明。虽然AD中网络标注不会直接生成制造信息但作为团队协作时后续接手的人看原理图能一眼看懂哪些网络是差分对、目标阻抗是多少。我习惯在差分对旁边加一个文字注释写上“100R diff, 5/9mil”这样布局布线时不用反复去翻规则表。3.2 PCB中的差分对导入与类管理原理图里的差分对定义好后导入PCB时Design - Import Changes会同步网络和差分对信息。此时你在PCB界面里打开Differential Pair Editor就能看到所有已导入的差分对。强烈建议这时候做一次“整理命名”每个差分对的名字最好表达清楚用途比如USB2_DIFF、LVDS_TX0。命名混乱的后果是后面建规则、查DRC时很难定位。我见过一个项目里差分对名称全是DifferentialPair_1这种默认名到最后调整等长时找一条线都要翻半天。Class管理上我会把同一阻抗要求的差分对放进同一个差分对类。步骤是在PCB面板或Design - Classes里新建Differential Pair Class然后从左侧待选列表把对应差分对拖入右侧。建好Class之后规则设置里的Query可以直接用IsDifferentialPairClass(DIFF_100)来匹配简单又不易出错。如果原理图里漏建了某个差分对也可以直接在PCB里手动创建。在Differential Pair Editor中点击Add选择两个网络组成一对。不过这种方法生成的差分对不会回传到原理图如果后续需要改板下一次从原理图导入时可能会覆盖掉这些手动设置。所以能在原理图阶段做的工作尽量都在原理图解决。3.3 交互式差分对布线参数选择与操作细节PCB布线阶段差分线最推荐用AD19的交互式差分对布线工具Route - Interactive Differential Pair Routing快捷键放置差分线。选中这个命令后点击一个差分对中的一根线软件会自动收起两根线一起拉。布线时最常改的参数是差分线间距。快捷键ShiftW可以快速切换线宽规则ShiftG可以切换布线间距ShiftR可以切换走线模式。我一般先用Ignore Obstacle模式把大方向拉通然后再用Push模式调整细节这样效率最高也不会在初期就被规则困住。还有一个很实用的操作在布线过程中按数字键设置差分对边缘间距和长度目标的临时值。实际拉线的时候如果发现某个位置绕不过去需要临时改大间距一定要记着改回来否则整组差分线间距不一致DRC不会报错但阻抗已经偏了。全局布线的概念也有必要提一下。有些EDA工具支持GRT全自动全局布线AD19的自动布线器也能处理简单的差分线但高速差分线我还是不推荐全自动布。自动布线器生成的路径经常出现不必要的过孔、大角度拐角、间距突变后续返工比手动布线还麻烦。差分线走线的拐角尽量用45度角或圆弧不要用90度直角。直角处线宽瞬间变大阻抗不连续反射会明显增加。AD19支持按下ShiftSpace切换走线拐角模式圆角模式在高速差分线里挺好用尤其是为了达到等长要求做S形绕线时圆角能减少信号反射。差分线换层是另一个重点。如果万不得已必须打孔换层至少保证P和N两个过孔尽量靠近位置对称。同时要在换层处附近加接地过孔给返回电流提供最低阻抗路径。很多人在画差分线时忽略这一点结果过孔旁边的地阻抗突变眼图测试时出现明显的回损。3.4 等长处理蛇形线与长度匹配实操差分对的要求不仅仅是线宽线距还有一个关键项是P和N之间的长度差通常控制在5mil以内。USB 2.0这类接口对差分对内等长要求相对宽松但对LVDS这种高频并行总线差分对内长度差常常要求做到1mil以内。AD19中做差分对等长我常用两种方法第一种是直接用交互式长度调谐工具Route - Interactive Differential Pair Length Tuning。这个工具能够自动拉出波浪形或锯齿形走线来补足长度差。使用时首先要设定目标长度范围和步长比如目标长度80mil±5mil步长设10mil或者15mil。第二种是做“条件差分线长度”约束在规则里设置Length值然后通过DRC去检查。要想快速找出哪条差分线长度不够可以在PCB面板里按网络分类直接查看长度数据。AD19的PCB面板中Differential Pair类会显示每一对差分线的总长度和P/N各自的长度。蛇形绕线的参数并不是随便设的。波峰宽度不能太小波峰之间距离至少要大于3倍线宽否则相邻段之间也会产生耦合干扰。幅度也不能太大一般波峰高度为线间间距的3到5倍比较合适。我曾经为了缩短空间把蛇形线挤得很密结果信号白天测着没事温度一高眼图就塌下去后来排查发现是蛇形线自身串扰太大。等长调整的小技巧优先在差分线接收端附近补长度不要在信号源端补。靠近源端做蛇形绕线容易让输入端的反射噪声增强靠近接收端位置调整对信号质量影响更小。如果实在空间不够可以在差分线末端预留一个专门绕线的区域这个在布局阶段就要提前想好。4. 常见问题与排查技巧实录4.1 规则明明设了却不生效查这4处我在群里经常看到有人问“我在Rules里设置了差分线宽5mil为什么布线时还是按8mil走”这问题我当年也遇到过排查顺序基本固定。第一查规则优先级。AD19允许多条规则同时存在如果之前有一条旧的Differential Pair Routing规则优先级更高且匹配范围也包含了这群网络新规则是不会生效的。打开Rules管理器看当前匹配的规则是哪一条把不需要的规则禁用或降低优先级。第二查Class匹配是否正确。如果你用IsDifferentialPairClass做约束但Class名称写了个空格或全角字符匹配就会失败。建议先切换到PCB Rules面板选中那条规则直接按“Query”按钮测试一下看高亮区域是否覆盖了目标差分对。第三查差分对是否真的被软件识别。如果网络没有在Differential Pair Editor里组成差分对那Routing规则中的Differential Pair Routing就不会起作用AD会退回到普通单端走线规则。检查方法是在PCB中打开Differential Pair Editor确认里面有对应的差分对。第四查布线时是否使用了正确的布线工具。很多人用交互式单端布线来拉差分对虽然也能拉出来但线宽线距规则根本不会按照差分规则执行。差分线必须用交互式差分对布线工具也就是那个图标像两条平行线加一个连接符的命令。4.2 等长调整总是超误差怎么快速定位差分对等长调整中最常见的问题就是调了半天DRC仍然报长度差超过限制。这种情况通常不是软件计算问题而是你在调整时只改了一根线另一根始终没动或者蛇形线的每一段绕线长度没有按模型计算。AD19的长度调整工具会实时显示目标长度和实际长度但有个容易被忽略的选项是“忽略过孔长度”。过孔长度在高速设计中不能忽略因为过孔寄生电容和电感都会影响信号传播时间。如果规则里允许包含过孔长度你在计算目标长度时就要把P/N两边的过孔数量差异考虑进去。排查时不要只看总长度还要分别看P线和N线的实际布线长度。有些板子P线走了顶层N线换到底层后又绕回顶层虽然最终报告里长度一致但换层旁路影响完全不同。等长不是只做数学游戏更要把几何路径的对称性一起考虑。如果通过蛇形线补差尽量把蛇形线段数控制在3段以内。段数越多高频损耗越严重。我实测过同样补10mil长度分3段绕比分8段绕的高频衰减要少得多。所以空间如果过于紧张优先考虑调整器件位置来减少长度差而不是堆蛇形线。4.3 过孔换层、铺铜与阻抗突变差分线换层后阻抗变化是我在调试高速板时遇到的比较多的一类问题。表层微带线的差分阻抗和内层带状线的差分阻抗在相同线宽下通常不一样比如表层100欧对应5/7mil内层100欧可能对应4.5/8mil。如果一条差分对内层和外层混合走线却不改变线宽线距阻抗必然在换层处发生突变。解决思路有两个要么让差分线尽量在同一层走完要么在不同层分别设置线宽线距然后再过渡。实际板子中同一层走完往往不现实那么内层和外层的规则值就要分别计算和设置。AD19支持为同一差分对的不同层设置不同规则通过Layer和Subclass的条件来区分。铺铜造成的阻抗变化也容易被忽略。芯片下方、差分线附近的铜皮如果离得太近等于改变了介质厚度和电场分布差分阻抗会出现几个欧到十几个欧的漂移。我的原则是差分线两侧至少留出3倍线宽的净空区不要铺铜。如果必须铺铜让铺铜跟差分线边缘保持足够距离并在铺铜上开一小段阻焊开窗来减少电容效应。还有一点和过孔相关差分对过孔间距要和差分线间距尽量一致尽量避免P过孔在北、N过孔在南这样会使两条信号的返回路径不对称。我习惯在过孔换层区域把两个过孔之间的间距设置成等于差分线间距然后围绕过孔打两三个地孔形成局部屏蔽。4.4 Gerber导出前必须检查的差分线项板画完导Gerber前我习惯做一次最终检查。差分线在Gerber里经常出问题的点不在线本身而在于阻焊层和钢网层。检查第一项焊盘和过孔之间的阻焊开窗是否覆盖了差分对走线区域。有些高性能差分线会在走线上开窗做加厚铜或阻抗微调但普通设计不需要如果开窗不对后续贴片时容易短路。检查第二项差分线相关的钻孔文件是否与PCB文件一致。过孔数量和过孔位置一旦有偏差差分对两端焊盘无法匹配连接器引脚整批板子就废了。所以在导出钻孔文件时我在Output Job里会把钻孔图和钻孔表同时导出再和PCB原图比对一遍。检查第三项差分对末端是否有泪滴。泪滴可以减缓焊盘处的阻抗突变同时提高焊盘连接的可靠性。AD19里可以通过Tools - Teardrops对差分对焊盘统一添加。有些高速板不要求加泪滴但我个人建议在连接器、IC引脚附近加上这部分对信号质量和可制造性都有好处。导出的Gerber建议用CAM350或类似的工具做一次VR浏览查看差分对是否在阻焊层上有异常开窗。我碰到过一次差分线走线很完美但阻焊层生成时自动把整条差分线都开窗了结果板厂做出来焊盘和走线全部暴露验收时才发现。4.5 相关场景扩展LVDS、485总线与FPGA布局布线LVDS信号在工业视觉设备里非常常见芯片手册通常要求差分阻抗100欧内层走线等长控制在±5mil以内。这里特别要注意LVDS信号的高低值LVDS的差分输出电压典型值在250mV到450mV之间共模电压约1.2V。PCB布线本身不会改变这个电特性但如果差分线两端的负载电阻匹配不当高低值会偏移信号接收失败。市面上很多LVDS连接器自带100欧终端电阻但在FPGA直连LVDS时FPGA内部可以配置差分终端电阻这个时候PCB线宽线距反而更关键。485总线也是典型的差分传输场景但它的速率通常较低很多工程师就不太重视布线。实际上485总线在长线缆和高速传输中同样会出现反射问题。485总线的布线规范是采用菊花链拓扑A/B两条线尽量走同一层、相互靠近不要跨分割终端电阻120欧要靠近最远端的收发器放置。调试时别一上来就量波形先用万用表检查AB之间的直流电平确认没有短路或接反再上示波器看差分信号。FPGA设计中布局和布线的区别经常被混为一谈。布局解决的是器件摆在哪、bank电压怎么分配、差分引脚的物理位置如何规划布线解决的是信号怎么走、阻抗怎么匹配、等长如何保证。在FPGA项目里我会先把FPGA引脚中的差分对和普通IO分开之后再规划bank电压和连接器位置。FPGA出线阶段优先拉高速差分对和时钟线再处理低速控制信号这个先后顺序能减少后期返工。对于时钟类差分信号比如MIPI、PCIe、SerDes布局时就要考虑给它们留出干净的带状线通道。时钟和复位信号不要和高速差分线平行过长的距离否则交叉耦合会造成抖动。如果板上同时有硬布线控制器或者多周期逻辑更要在原理图阶段就确定各路时钟域确保高速信号线布线原则一致不能到了PCB阶段才发现时钟资源布局不合理导致所有差分对都得绕远路。5. 差分线设计流程一张速查表解决日常80%的问题到了最后我把自己的差分线设计流程整理成一张表适合在项目启动时逐项核对。这不是什么高深理论全是实际跑过几轮之后沉淀下来的检查项。阶段关键检查项常见问题原理图差分对P/N命名规范、是否有后缀命名混乱导致PCB无法自动配对阻抗设计根据叠层计算90欧/100欧对应的W/S固定参数套用到不同叠层导致阻抗偏离PCB规则建立Differential Pair Class、设置规则优先级规则不匹配旧规则覆盖新规则布局预留差分对走线空间、参考平面完整差分对两侧铺铜太近或跨分割布线使用交互式差分布线、保持W/S一致窄处间距突变、90度直角走线等长设置长度目标、使用长度调谐工具蛇形线过密或补位靠近源端检查DRC、Gerber VR浏览、阻焊层确认过孔开窗错误、泪滴缺失我个人在实际做板时还有一个习惯就是每次发板前都会把差分线高亮显示一遍按颜色区分90欧和100欧然后对照板厂给出的阻抗线宽表格逐个确认。这个过程看起来很土但确实能拦住不少低级错误。最后再分享一个小技巧AD19里可以把差分对的规则设置保存为模板下次同类项目直接导入不用重新建Class和Query。模板文件路径一般在安装目录下的Settings里也可以自己导出导入。有了这套模板哪怕是新来的同事接手也能很快把90欧和100欧的差分线画对。差分线这件事说到底就是规则先行、细节跟进把每一步都检查到位板子就能少走弯路。