
做了这么多年PCB我越来越觉得差分线是高速设计里最绕不开的一关。AD19里拉差分对其实不难真正让人头疼的是90欧和100欧这类阻抗规则怎么落到实际走线上以及为什么规则明明设了线拉出来还是不对、等长总调不满意。这篇文章我就把自己从原理理解到AD19实操的整套流程拆开包括叠层怎么算、差分对怎么定义、规则怎么填、等长怎么调顺便把LVDS和485这些常见场景一并聊透。无论你是刚接触高速布线还是已经被等长折磨过几轮这篇都值得从头看一遍。1. 差分线是什么等大反相的那一对线1.1 差分线的原理不依赖“地”的传信方式差分信号说白了就是一对接线同时传输两个幅度相等、相位相反的电压接收端只关心两者之差。普通单端信号靠的是“线与地之间的电压”地一旦有噪声信号就跟着脏差分信号则是“两根线之间的电压差”地噪声同时爬到两根线上做减法时自然抵消了。这就是差分线抗共模干扰的底层逻辑。你把它想象成两个人抬一桶水地面晃动共模噪声会让两个人一起晃但桶里水面始终是平的可要是其中一个人身高变了差模噪声水面立刻斜了。接收端做的就是看水面斜不斜而不在乎地晃得多厉害。这也是为什么差分线特别适合走长距离、低摆幅的高速信号。它不需要一个绝对干净的地参考两根线自己形成一个回路对外辐射小抗干扰强而且摆幅可以拉得很低——LVDS那种只有350mV摆幅的信号用单端方式根本没法可靠传输。布线上要求也很明确两根线要尽量等长保证差模时刻对齐两根线之间要控制间距因为间距直接决定了差分阻抗整条路径要尽量避开高噪声源否则再好的共模抑制能力也会被逼到极限。1.2 哪些接口必须用差分USB、LVDS、以太网、RS485实际项目里遇到差分线的接口非常集中我把最常见的情况整理一张表方便你对照着看。接口典型差分阻抗说明USB 2.090欧D/D-差分对绝大多数规范按90欧控制HDMI100欧TMDS每个通道都是差分也有设备用90欧按芯片手册来LVDS100欧显示屏接口、ADC采样链路100欧±10%很常见千兆以太网100欧MDI即为差分线对规范按100欧RS-485120欧板内走线通常不强求严格阻抗但按差分原则处理更稳你会发现90欧和100欧几乎覆盖了九成场景。USB管线和HDMI类常见90欧LVDS和以太网多走100欧。别小看这10欧的差别在高速信号上阻抗不对会直接带来反射、振铃和眼图恶化。做板子之前一定要先确认你用的芯片手册里写的阻抗要求不要想当然“用了差分就100欧”我这几年被坑的经验就是从“我觉得”开始的。2. 动手前的准备叠层、阻抗计算与AD19差分对定义2.1 90欧和100欧是怎么算出来的很多人以为差分阻抗就是线宽决定其实它由四个因素共同决定线宽、线距边到边距离、参考层距离、介质介电常数。同样的4mil线宽在不同叠层下差分阻抗可能从85欧跳到110欧。所以第一步永远是确认叠层。以最常用的4层板举例顶层走微带差分线参考层是第二层GND介质层厚度大概4mil介电常数4.2左右铜厚1oz大约1.35mil。这种情况下线宽4mil、线距8mil单端奇模阻抗能做到50欧上下差分阻抗基本落在100欧附近。如果同样叠层想把差分阻抗调到90欧常见做法是减小线距或者略微加宽线宽。比如把线距从8mil缩到5mil或者把线宽从4mil加到5mil差分阻抗就会降下来。但具体数值一定要用工具算别凭感觉填。我常用的工具是Polar SI9000和Saturn PCB Design Toolkit后者免费输入叠层参数直接出阻抗非常方便。工具选型上Saturn PCB Toolkit胜在免费且界面直观适合在项目早期大概估算Polar SI9000是做正式阻抗计算时业界用得最多的板厂也认它的计算报告。我的建议是先拿Saturn快速摸一遍参数范围再拿Polar出正式计算结果和板厂沟通时附上Polar报告能避免后续扯皮。2.2 在AD19里建立差分对从原理图到PCB叠层和阻抗都有数了接下来就是把差分对在AD19里真正定义出来。这一步做不扎实后面规则全是空的。原理图阶段最简单的做法是把一对差分网络命名成带_P和_N后缀的名字。比如USB差分线命名为“USB_DP”和“USB_DN”AD识别到这两个网络后就能在导入PCB时自动建立匹配关系。更规范的做法是在原理图里选中这两个网络用Place菜单下的Differential Pair命令给它们打上差分对标记相当于告诉AD“这两个网络是一对”。导入PCB之后打开PCB面板切换到Differential Pair Editor选项卡就能看到AD已经帮你建好的差分对列表。如果原理图没打标记也可以在这个面板里手动添加选择网络名点添加一对差分线就建立了。这里有个很容易忽略的细节差分对建立后要确认两个网络确实分属于同一个差分对而且方向一致。方向反了拉线时P和N会交叉高速信号直接完蛋。检查方法很简单在差分对编辑器里选中这对线图上会高亮显示两端肉眼确认一下朝向就对了。3. 规则设置90欧/100欧差分规则如何落地3.1 放进差分规则前的叠层参数确认在AD19里Design菜单打开Layer Stack Manager你可以把叠层参数录入软件。为什么我坚持要先做这一步因为AD在计算走线阻抗时需要知道介质厚度、铜厚、介电常数这些信息如果你建立的层叠参数和板厂实际生产差异太大后面就算规则填得再精确也是白搭。叠层设计上还有一层逻辑也很重要你把哪一层作为参考平面。同样是表层差分线如果参考平面是完整的GND阻抗稳定如果参考平面被分割了比如隔行葬了一个电源区差模回流路径会被迫绕路实际阻抗和仿出来的完全两码事。所以叠层阶段就要确认关键差分线的参考层是哪层这一层在走线区域不能被其他信号撕裂。另外叠层参数不是板厂单方面给的你最好在发板前把“我预期什么叠层、什么阻抗”发给板厂让他们审核可行性。好多项目翻车就翻在自己随便按默认叠层算了阻抗板厂实际生产换了介质材料结果阻抗整体偏移等长也白做了。3.2 实操在Rules里设置差分线宽线距叠层确认后规则的具体填写是关键一步。在PCB编辑界面打开Design Rules定位到Routing Differential Pairs Routing。这是AD里控制差分线物理参数的核心规则包含线宽Width、线间间隙Gap和受约束长度Length三大部分。操作方法上我习惯先建一个差分对类Differential Pair Class把需要的差分对归进去然后规则对象直接指向这个类。这样多条差分线规则统一不用逐个网络去匹配。以100欧规则为例我在表层微带条件下设置Min Width: 3.5milMax Width: 5milPreferred Width: 4milPreferred Gap: 8mil至于90欧如果同样叠层需要更宽的线我会把Preferred Width改成5milPreferred Gap改成5mil再让软件检查一下规则是否冲突。AD19里你设置完这些值软件会基于叠层自动计算对应的阻抗估算值在规则属性窗里能看到这是个很实用的参考至少能判断你设置的线宽线距方向对不对。规则Priority也要检查。如果项目里同时存在“所有走线”“差分对类”两条规则默认规则优先级低差分规则要高否则差分线会套用通用走线规则你在差分规则里填得再漂亮也没用。打开Rules面板右侧的Priority按钮把Differential Pairs Routing的优先级拉到最前面。3.3 目标长度与等长公差的约束写法差分线长度约束同样在这个规则面板里设置。很多新手只设置线宽线距到了要等长的时候才到处找不知道其实Length那一栏就在差分对规则里。在Differential Pairs Routing规则的Length部分AD提供了Min、Max、Preferred三个值。需要做等长时我的习惯是首先通过芯片手册和电路时序计算出一个目标延迟/长度范围然后在规则里填上Min和Max。举例来说一对LVDS信号要求误差不超过5mil我就把Min设成1995milMax设成2005milPreferred设成2000mil。填写之后再用Length Tuning工具去修线。这样在拉线过程中AD会实时提示当前长度是否符合约束。用鼠标悬停在线端也能看到长度报告不用自己拿尺子量效率提升非常明显。如果你填了Length约束但发现软件怎么走线都不提示长度状态先检查这个差分对是不是真的在规则范围内。很多人直接在Min/Max里填了数字但规则对象只匹配了单个网络而不是差分对类等于约束没生效。正确做法和线宽线距一样规则对象一定要选到Differential Pair类或者具体的差分对。4. 差分布线全流程实操4.1 布局思路先留出走线通道布线永远跟在布局后面差分线尤其如此。布局时候就把差分线的路径留出来比后面强行绕线省事得多。我一般会在布差分前先把关键器件的位置摆好芯片引脚的差分对出线方向尽量和走线方向一致避免一出来就要拐弯甚至换层。布局上有一条很重要的原则参考平面完整。差分线下方不要有分割的电源平面更不要在关键差分路径下面走其他信号。如果同一个BGA里同时扇出多对差分要规划好哪几对走表层、哪几对走内层避免互相交叠。FPGA这种器件尤其明显芯片内部的布局布线是Vivado或Quartus工具干的活外部这些差分对走成什么样完全是板级工程师的责任两者别混在一起谈。我还习惯把每个差分对当成一个“整体”来摆。比如USB座子的两根引脚出线时它们应该平行出、方向一致而不应该一个往上一个往下绕到别处去。布局阶段多花十分钟排一下顺序布线阶段能省下一小时。4.2 交互式差分布线实操记录AD19拉差分线核心操作是Route菜单下的Interactive Differential Pair Routing。启动命令后点击差分对的一端软件会自动同步推挤两根线保持你设置的Gap。这个功能用起来非常顺手两根线的间距是自动维持的你只需要控制走向和层切换。实际操作时我的习惯是先设快捷键。AD默认的一些交互布线快捷键我不太顺手为了高速布线效率我会在Preferences PCB Editor Interactive Routing里把差分布线绑到CrtlShiftD上方便合手。切换层时用ShiftCtrl滚轮或者小键盘*号换层位置软件自动加过孔。差分线换层这件事要特别谨慎。每换一次层就多两个过孔过孔在这个区域等于阻抗突变点尤其在高速信号上过孔的寄生电容会直接影响信号完整性。实在要换层至少做两件事一是在过孔旁边补一个回流地孔让回流路径尽量连续二是换层前后的层叠参考平面要保持一致比如从“参考第二层GND”的表层换到“参考第三层PWR”的内层中间隔了电源层回流路径会乱跳。拉线过程中如果发现差分对和你预想的路径有冲突别硬拉先停下来重新看布局。差分线最怕的就是为了绕开一个位置而做出大面积S形那种走法不仅等长难调信号质量也会打折扣。4.3 等长调节从“拉得动”到“调得准”差分线布线完成后接下来就是等长调整。AD19里专门有针对差分对长度调整的命令Route Interactive Differential Pair Length Tuning。启动后选中需要调整的差分对软件会在你指定的区域内自动拉出蛇形线来匹配目标长度。操作前先打开PCB面板里的Differential Pair Editor配合右下角或头顶的长度报告看每对线当前长度和目标长度的差异。知道了差值再决定蛇形线幅度和节距。快捷键方面Tab键能呼出Tune长度参数设置在里面设置蛇形线振幅、间距和形状我常用的形状是Accordion间距至少保持3倍线距以上太近了蛇形线之间的耦合反而会破坏差分质量。调整等长其实是个“微调”过程。我习惯先把所有相关差分对拉到同样长度然后再去逐对收敛到规则约束范围内。别想着一次到位先拉大差不差再用精确值微调效率最高。一个很少被注意的细节蛇形线不要走成直角或者锐角。在AD里可以设置延长线以45度或圆弧方式折返这就避免了信号在拐角处产生额外反射。有些强迫症工程师喜欢把所有蛇形线拉得整整齐齐这固然好看但前提是电气上没问题不要为了美观牺牲等长间距要求。5. 真实项目里的差分线细节LVDS、485与高速信号避坑5.1 LVDS差分对的高值低值与终端匹配LVDS应该是除USB之外板级工程师最常接触的差分接口。它的电平特征是共模电压大概在1.2V左右差分摆幅只有±250mV上下。网上常说的LVDS差分线高值和低值就是指这个差分摆幅的正负端。因为摆幅小、速度快它对布线质量尤其敏感。关于LVDS的100欧阻抗除了线宽线距按100欧控制外更关键的是接收端通常需要一颗100欧终端匹配电阻把差分线上残余的能量吸收掉。很多方案里这个电阻集成在接收芯片内部了如果你的芯片没有集成千万记得在接收端靠近引脚的位置放一颗电阻阻值按100欧来做。LVDS布线我推荐保持4到6mil线宽、8到10mil间距这种量级然后严格按照100欧差分阻抗计算验证。等长误差控制在±5mil以内就够了不需要像有些差分标准那样做到±2mil那么极限。相比等长LVDS更怕的是参考平面不完整和走线离时钟线太近这两点在实际中更常见。5.2 485总线布线与调试心得RS-485虽然也属于差分通信但它和USB/LVDS完全是两码事。485的信号速率通常不高板级走线往往不需要精确控制90欧或100欧这种阻抗规范里的120欧特性阻抗更多是靠双绞线来实现的。但这不代表485布线可以随便乱走。485总线在板内的走线我习惯按严格的“双线并行走”处理A、B两根线上不出现在不同层保持平行等长控制做到100mil以内就够了毕竟速率不高。更关键的是拓扑结构RS-485推荐总线型菊花链而不是星形拓扑。星形连接会在分支处产生阻抗突变长距离通信时反射会很严重调试时表现就是数据偶尔出错、波特率一高就乱码。调试485我踩过不少坑最典型的几个AB之间没有终端电阻或终端电阻值不对导致反射波形振铃明显。偏置电阻没加或阻值不合适总线空闲时A/B电平不确定接收端乱采数。通常AB之间加偏置A上拉到VCC、B下拉到GND阻值选10k到20k量级确保空闲时AB压差大于200mV。屏蔽层接地问题屏蔽层应该单端接地不要两端都接否则形成地环路反而引入噪声。如果你手头测到485波形振铃第一步不是改走线而是先确认终端电阻是不是靠近总线的两端节点放的。终端电阻位置不对加多少都白搭。5.3 高速信号线布线我的几条铁律结合这些年做高速板的经验我把自己的几条硬性规矩列出来每一条都是被实际问题教训出来的走线越短越好。这是前提等长可以让线“一样长”但改变不了“所有线都太长”带来的问题。布局阶段最大程度缩短关键差分对长度比后面拼命等长有效得多。参考平面完整而且连续。差分线下方有分割阻抗就乱回流就绕信号就脏。规则检查时一定要加上“跨分割检查”。少换层换层必打过孔地孔。换层不但产生阻抗不连续还为回流电流制造了“跳楼”路径。旁边打过孔地孔至少能让回流电流尽量贴着信号路径走。差分对之间保持至少3倍线距的间距。太近了线对之间有串扰尤其是那些成捆走的差分总线线对间距不够到高速频段就会互相噪声耦合。保持对内两根线间距恒定。在蛇形等长时不要为了调长度把两根线强行拉近或拉开这会破坏差模阻抗的一致性。这几个原则看起来平淡但实际板子里90%的差分问题都能回溯到其中某一条。越到调试后期你越会发现所谓高速布线做的不是“画线”而是“控场”——控制每个区域的阻抗、回流和耦合。6. 常见问题速查表与排查实录6.1 差分对拉不出来的几种可能从新手到老工程师谁都会遇到“差分线拉不动”的情况。我把常见的几类故障整理成了表格遇到问题可以直接对着查。现象可能原因解决方法互动差分布线时无响应没有建立差分对在PCB面板的Differential Pair Editor里新建只有单根线能拉网络名不满足_P/_N匹配规则检查原理图命名重新导入拉完线后规则检查报错差分对没有归入对应规则类在Rules里指定差分对类并进行匹配Gap不随操作变化驱动模式不匹配确认差分线型不要用普通Interactive Routing去拉排查这类问题有个通用思路先看差分对是否建立再看规则对象是否匹配最后看优先级。按这个顺序查十分钟内都能解决。6.2 等长调不动、规则不生效的排查等长调不动主要原因基本集中在这几个地方没有在规则里设置Length约束软件不知道你的目标长度是多少。Length约束设了但规则对象没有指向该差分对等于白设。目标长度与实际物理约束差距太大比如目标长度是3000mil实际可走线空间只有2000mil软件怎么绕都不可能达标。第一种和第二种都是规则配置问题。检查方法在Rules面板里看有没有针对该差分对的Length规则生效鼠标点中差分对后看规则覆盖状态如果显示“No applicable rules”那就是规则匹配出问题了。第三种就比较麻烦了只能回头调整布局把差分对的两个器件拉近或者调整蛇形线幅度和间距参数让在物理上能把目标长度“塞”进去。另外一个经验AD里蛇形线振幅设置要和布线空间匹配振幅设太大软件在空间不够时反而调不出来振幅太小长度增长又太慢要绕很多圈才能凑够目标长度。我通常设振幅10mil到20mil之间、节距不小于线距的4倍比较稳妥。6.3 出Gerber与阻抗测试环节的坑AD19出Gerber时最需要确认的是当前PCB上实际走线是否已经按最新的差分规则更新。有人改了规则却忘了重新走线出Gerber时的线宽线距还是旧值板厂按旧值去做阻抗自然不对。导Gerber之前务必做一次完整的DRC设计规则检查尤其关掉“在线DRC”只想快速看图的工程师离线完整DRC能帮你抓住大量“看起来没问题”的隐患。Gerber导出本身注意在Output Job里把需要的层全部勾选包括GTO顶层丝印、GBL/BOT底层、GTL/TOP顶层、以及钻孔层和光绘层。差分线不需要单独的Gerber附加项只要铜层里对应的线宽线距正确就行。板子回来后的阻抗测试我一般关注三点第一板厂是否提供了阻抗测试报告测试值是否在90欧±10%或100欧±10%范围内第二如果有阻抗测试失败的走线通常问题出在叠层参数与实际生产不一致和板厂确认介质厚度和介电常数数据第三自己用TDR时域反射计测试时要确保测试夹具和探针位置不会额外引入过孔、焊盘的阻抗突变否则测出来的数根本不能代表走线本身。别小看这块很多项目在样板阶段用TDR测出阻抗不在范围内最后查来查去发现测试方法不对——探针点的过孔和焊盘本身就把阻抗拉偏了。真正测的时候要么把探针点放在线末端要么在测试板里专门做一条阻抗测试线别拿实际走线直接怼。我个人在实际操作中最深的体会是差分线这个事七分在前期准备三分在AD里拉线。不管是90欧还是100欧你花在叠层计算、规则配置、布局规划上的时间永远比在布线阶段纠结那几mil线距更有价值。做板子这几年我几乎每一个被差分线折磨的晚上最后都归结到最初规则设置不够仔细或者叠层没有跟板厂核实清楚上。希望大家拿到这篇文章后先按顺序把叠层和规则理清再回到AD里动手拉线你会发现原本玄乎的差分线其实每一步都有章可循。