做了这么多年PCB,我越来越觉得差分线是高速设计里最绕不开的一关。AD19里拉差分对其实不难,真正让人头疼的是90欧和100欧这类阻抗规则怎么落到实际走线上,以及为什么规则明明设了,线拉出来还是不对、等长总调不满意。这篇文章我就把自己从原理理解到AD19实操的整套流程拆开,包括叠层怎么算、差分对怎么定义、规则怎么填、等长怎么调,顺便把LVDS和485这些常见场景一并聊透。无论你是刚接触高速布线,还是已经被等长折磨过几轮,这篇都值得从头看一遍。
1. 差分线是什么:等大反相的那一对线
1.1 差分线的原理,不依赖“地”的传信方式
差分信号说白了就是一对接线同时传输两个幅度相等、相位相反的电压,接收端只关心两者之差。普通单端信号靠的是“线与地之间的电压”,地一旦有噪声,信号就跟着脏;差分信号则是“两根线之间的电压差”,地噪声同时爬到两根线上,做减法时自然抵消了。这就是差分线抗共模干扰的底层逻辑。
你把它想象成两个人抬一桶水:地面晃动(共模噪声)会让两个人一起晃,但桶里水面始终是平的;可要是其中一个人身高变了(差模噪声),水面立刻斜了。接收端做的就是看水面斜不斜,而不在乎地晃得多厉害。
这也是为什么差分线特别适合走长距离、低摆幅的高速信号。它不需要一个绝对干净的地参考,两根线自己形成一个回路,对外辐射小,抗干扰强,而且摆幅可以拉得很低——LVDS那种只有350mV摆幅的信号,用单端方式根本没法可靠传输。
布线上要求也很明确:两根线要尽量等长,保证差模时刻对齐;两根线之间要控制间距,因为间距直接决定了差分阻抗;整条路径要尽量避开高噪声源,否则再好的共模抑制能力也会被逼到极限。
1.2 哪些接口必须用差分:USB、LVDS、以太网、RS485
实际项目里遇到差分线的接口非常集中,我把最常见的情况整理一张表,方便你对照着看。
| 接口 | 典型差分阻抗 | 说明 |
|---|---|---|
| USB 2.0 | 90欧 | D+/D-差分对,绝大多数规范按90欧控制 |
| HDMI | 100欧 | TMDS每个通道都是差分,也有设备用90欧,按芯片手册来 |
| LVDS | 100欧 | 显示屏接口、ADC采样链路,100欧±10%很常见 |
| 千兆以太网 | 100欧 | MDI即为差分线对,规范按100欧 |
| RS-485 | 120欧 | 板内走线通常不强求严格阻抗,但按差分原则处理更稳 |
你会发现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.5mil
- Max Width: 5mil
- Preferred Width: 4mil
- Preferred Gap: 8mil
至于90欧,如果同样叠层需要更宽的线,我会把Preferred Width改成5mil,Preferred 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设成1995mil,Max设成2005mil,Preferred设成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里把差分布线绑到Crtl+Shift+D上,方便合手。切换层时用Shift+Ctrl+滚轮(或者小键盘*号),换层位置软件自动加过孔。
差分线换层这件事要特别谨慎。每换一次层就多两个过孔,过孔在这个区域等于阻抗突变点,尤其在高速信号上,过孔的寄生电容会直接影响信号完整性。实在要换层,至少做两件事:一是在过孔旁边补一个回流地孔,让回流路径尽量连续;二是换层前后的层叠参考平面要保持一致,比如从“参考第二层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里动手拉线,你会发现原本玄乎的差分线,其实每一步都有章可循。