1. 为什么差分对走线在AD20里这么容易翻车
做高速数字电路设计的朋友都知道,Altium Designer 20 里最让人纠结的一类走线就是差分对。USB、以太网、MIPI、LVDS、HDMI,这些接口一旦跑起来,一对差分线没处理好,整板的信号完整性问题全来了。很多人把差分对做成两根平行的线就觉得万事大吉,结果阻抗不连续、时序偏差、EMI超标,最后回来查问题,发现从原理图标识阶段就埋下了雷。这篇教程我就把 Altium Designer 20 差分对走线的完整链路拆开讲一遍:从原理图怎么命名、怎么放置差分对标识,到PCB里差分对编辑器怎么用、差分对规则怎么设,再到交互式走线和等长绕线的实操手法,一次说透。
在开始之前,先给大家一个整体认知:AD20的差分对设计不是"画两根线"这么简单,它背后有一条完整的工具链——原理图阶段必须用_P/_N后缀把网络名定义清楚,再用差分对指令告诉软件"这两个网络是一对";PCB阶段要经过差分对编辑器收集网络、规则匹配、阻抗参数设计;最后才是手动布线。任何一个环节漏了,后面都会以各种诡异的方式报错。我见过太多人卡在"原理图标了差分对,PCB里却没有差分对"这个坎上,其实就是对这条工具链的运行机制理解不到位。
1.1 差分信号的本质:为什么我们非要折腾这一对线
先花一分钟说清楚差分信号是什么,这是后面所有设置的理论基础。差分信号是指在一对导线上传输两个等幅反相的信号,接收端比较的是两个信号的差值。比如发送端送出的是+1V和-1V,接收端读到的就是2V的电平差。这种传输方式天生抗共模干扰——外部噪声如果同时叠加到两根线上,差值基本不受影响——而且回流路径非常明确,对地平面的依赖比单端信号小得多。
这里面有个核心参数叫差分阻抗,也就是这对线在传输过程中呈现的阻抗特性。差分阻抗不是单独看某一根线的阻抗,而是由线宽、线间距、铜厚、介质层厚度和介电常数共同决定的。同样的叠层,两根线离得越近,差分阻抗越低;线越宽,阻抗越低。这也是为什么差分对规则设置里最重要的两个参数就是线宽(Width)和间距(Gap),它们直接决定了你做出来的板子阻抗是不是符合USB或者以太网要求的90Ω、100Ω。
所以你在AD20里设置差分规则时,心里要清楚:这些数字不是随便填的,它们最终会在板厂那里接受阻抗测试的检验。后面我会给出一套实际的参数经验值,但更重要的是理解它们为什么这么定。
1.2 AD20中差分对设计的完整链路:从原理图到PCB再回到规则
为了不让大家迷失在细节里,我先把AD20差分对设计的整体流程列出来,后面每一章对应一个环节:
- 原理图中把配对的两个网络命名为
USB_P和USB_N这样的格式,并放置差分对指令。 - 编译工程后,把原理图变化更新到PCB文档。
- 在PCB的差分对编辑器中确认差分对已经存在,必要时手动补建。
- 在PCB规则中为这些差分对设置线宽、间距、等长约束。
- 使用交互式差分对布线工具实际走线。
- 走完线后使用等长调节工具做对内、对间等长补偿。
- 跑DRC,检查差分对相关的间距、长度、阻抗约束是否全部满足。
这套链路里最容易被忽略的是第1步。很多人直接在PCB里手工画两根线,虽然也能画出来,但画出来的线不会被AD识别为真正的差分对,后续的等长调节、规则匹配全都用不上,DRC也不会把关,那跟普通平行线没区别。
2. 原理图阶段就把差分对"钉死":命名与标识的正确姿势
原理图阶段的差分对处理是整个链路的地基。这一步做对了,PCB阶段能省掉90%的麻烦;做错了,后面全是坑。
2.1 网络命名硬规则:_P/_N后缀不能乱来
AD20默认通过网络名的后缀来识别差分对的两根线。一个差分对由两个网络组成,正端网络以_P结尾,负端网络以_N结尾,且除了后缀之外,前半部分必须完全一致。下面这个表是典型的正确命名和错误命名:
| 类型 | 正端网络名 | 负端网络名 | 说明 |
|---|---|---|---|
| 正确 | USB_P | USB_N | 前半段都是USB,后缀_P/_N |
| 正确 | ETH_TX_P | ETH_TX_N | 带功能前缀也可以 |
| 错误 | USB_P | USBN | 少了下划线,AD识别不了 |
| 错误 | USB_P | USB_N_1 | 后缀不标准 |
| 错误 | USB_P | USB_NEG | 只有正端是对的,负端后缀不对 |
这个命名规则可以在Project Options里调整,但我强烈建议不要改,就用默认的_P/_N。原因很简单:保持工具默认行为能让你避免很多莫名其妙的问题,而且原理图库里的符号、别人的图纸、第三方生成的网表,九成都是按这个规则来的。
2.2 放置差分对指令:让软件知道"这两根线是一对"
命名只是前提,真正把两个网络"绑定"成差分对的动作是放置差分对指令。操作路径是:Place >> Directives >> Differential Pair,或者用快捷键P V D。执行后光标会带着一个菱形符号,把它放在你要定义的那两个网络附近,按Tab键打开属性面板。
在属性面板里,你需要关注三个字段:
- Net Name:这个差分对的名字,比如
USB,注意这里不需要带_P、_N后缀。 - Positive Net:正端网络,选择
USB_P。 - Negative Net:负端网络,选择
USB_N。
设置好后,把这个菱形符号放到两个网络标号的引脚区域,它会自动覆盖到这条网络线上。放置完成后,原理图上会出现一个带箭头的菱形标记,示意这个区域的两个网络构成一个差分对。
这里有一个经常被问到的点:是应该先放网络标签再放差分对指令,还是先放指令再放标签?我的习惯是先把两个网络标签分别放到对应的引脚上,确保网络名已经正确连接了,再放差分对指令。原因是差分对指令本身不负责创建网络,它只是告诉AD"这两个已存在的网络是配对的",所以先有网络,再绑定关系,逻辑上不会出错。
放完指令后,一定要执行一次项目编译(Project >> Compile PCB Project),然后打开Message面板确认没有差分对相关的报错。常见报错是"Net USB_P has no differential pair"之类的,这说明其中一个网络的配对关系没建立成功,多半是命名不匹配或者指令没有覆盖到网络。
如果你用的是比较新版本的AD20,原理图库里也可以直接给引脚分配差分对属性,但那是库设计层面的高级操作,常规项目在原理图上放指令就够了,不用把问题复杂化。
3. PCB里的三个设置关卡:差分对编辑器、规则类、等长规则
原理图阶段的工作完成后,更新PCB文档,差分对信息才会跟着网络一起进入PCB。但很多第一次做差分对的人,打开PCB后一脸懵:差分对到底跑哪去了?规则在哪设?宽度和间隙怎么填?这一章我把PCB里的三个关键关卡逐个讲清楚。
3.1 差分对编辑器:查看、验证、手动补建
在PCB编辑界面下,通过菜单PCB >> Differential Pairs Editor打开差分对编辑器。这个面板会列出当前PCB文档里所有被识别为差分对的网络组。你也可以在右侧面板栏里切换到PCB面板,在下拉列表里选择Differential Pairs Editor。
在这个编辑器里你能看到每个差分对的名字、正端网络、负端网络、以及当前的线宽和间距数值。用它的核心目的有两个:
第一,验证原理图的差分对设置是否完整传递到了PCB。如果列表里缺少某个差分对,说明原理图阶段漏标了,或者更新PCB时没有勾选差分对变更项。这种情况下,你可以直接在编辑器里手动添加:右键选择Add,然后在弹窗里手动选择正端网络和负端网络。但我要提醒一句——手动补建是补救手段,不是常规手段。原理图才是设计的源头,PCB里补建的差分对在下次工程变更时有可能被覆盖掉,治标不治本。
第二,统一查看所有差分对的当前参数。在这里你能直观地看到差分对的Width和Gap,如果发现某些差分对显示的值和预期不一致,说明它们的匹配规则没有生效,排查方向就指向规则设置,而不是继续在编辑器里改。这里显示的参数只是报告当前实际值,修改的主战场在规则编辑器里。
3.2 差分对布线规则:线宽、间隙与规则优先级
真正的参数设置发生在Design >> Rules里。打开规则编辑器后,定位到Routing >> Differential Pairs Routing这个规则条目,这是AD20专门为差分对布线设置的规则项。
双击现有规则或新建规则后,你会看到两个关键区域:
Where the First object matches:这决定了规则作用范围。默认是All,意思是对所有差分对都生效。但如果你同时有90Ω的USB差分对和100Ω的以太网差分对,就不能用All一把抓,而是要用Custom Query或网络类来区分。比较实用的方式是先在Design >> Classes里建一个网络类(比如叫DIFF_100R),然后把以太网相关的差分对网络全部拉进去,规则匹配方式选Net Class,指定为DIFF_100R。这样USB和以太网就能各自享受不同的线宽间距。
Constraints:这里是最核心的参数区。你需要关注以下字段:
| 参数 | 含义 | 建议初始值 |
|---|---|---|
| Min Width | 最小线宽 | 按阻抗计算结果设定,比如4mil |
| Preferred Width | 首选线宽 | 与期望阻抗对应,比如5mil |
| Max Width | 最大线宽 | 比首选宽1-2mil |
| Min Gap | 最小间距 | 按阻抗计算结果,比如8mil |
| Preferred Gap | 首选间距 | 与期望阻抗对应,比如8mil |
| Max Gap | 最大间距 | 比首选宽2-4mil |
| Min Coupled Length | 最小耦合长度 | 差分管脚应尽量保证耦合,通常设为10-20mil |
为什么Width和Gap要区分Min/Typical/Max三档?因为实际布线过程中,你会在转角处、过孔附近、遇到障碍物时被迫调整线宽和间距。AD20允许你在当前规则范围内滚动调整(后面布线章节会讲到),超出这个范围就会报DRC错误。这三档就是你给布线操作划定的"允许区间",区间越窄,阻抗一致性越好,但布线难度也越大;区间越宽,操作空间大,但信号质量没保证。
规则优先级是另一个大坑。差分对规则和普通的Width规则、Clearance规则之间是有优先级关系的。AD20按规则列表中从下往上的顺序逐级匹配,优先级从上到下递减。如果某个网络既匹配单端Width规则又匹配Differential Pairs Routing规则,而差分对规则的优先级更低,实际走线时AD会采用单端Width规则的线宽,导致差分对线宽完全失控。正确的做法是把差分对规规则拖到所有普通Width规则之上,或者在规则编辑器左下方的Priority按钮里点击调整优先级。
3.3 对间等长规则:多组差分对同时满足长度约束
除了对内等长(这个第四章走线时详细讲),多组差分对之间的长度匹配也是一个高频需求。比如并行传输的LVDS总线,或者某些控制器要求多对差分信号延迟一致。
AD20提供了一条专门的规则:High Speed >> Differential Pairs Matching(在部分版本中叫Differential Pairs Matching)。这条规则的作用是把多组差分对约束在同一个长度允许范围内。新建规则后,匹配对象选All或者特定网络类,然后设置:
- Tolerance:允许的最大长度偏差,常见0.5mm~1mm,要求高的系统可以设到0.25mm。
- Rule Scope:选择哪些差分对参与匹配,通常选网络类。
这个规则设置好之后,你在DRC阶段就能看到哪些差分对超出了等长范围,非常直观。如果项目中只有一两对差分信号,不涉及多对间等长,那这条规则可以不设,重点放在对内等长上。
4. 亲自上手:从第一根差分对到等长绕线的完整操作
规则全部设置好之后,接下来就是最让人兴奋也最容易出问题的实际操作环节。这里的操作手感很重要,很多知识点是改过几版板子之后才真正理解的,我尽量把细节一次讲透。
4.1 交互式差分对布线:入口、快捷键与操作手感
差分对布线不能像画普通单端线那样一根一根画,那样很难保证两线同步换层、同步拐弯。AD20专门提供了差分对布线工具,位于Place >> Interactive Differential Pair Routing,快捷键是P I。启动命令后,光标靠近任意一个差分管脚,如果这个网络已经被正确识别为差分对,光标下面会同时带上两根线——正端和负端,间距和线宽自动按规则里的Preferred值显示。
布线的过程中,下面这些快捷键直接决定效率和结果:
- Shift+R:切换布线模式,包括推挤走线、绕障走线、忽略障碍等。差分对布线最常用的是Push模式,后面的线会被自动推开,保持间距。
- 逗号和句号:切换差分对的线宽和间距(会在规则允许的Min/Max范围内切换组合),实时调整,方便你在主线上用一个值、在过孔区域用另一个值。
- 星号(*)或小键盘+/-:切换信号层,换层时AD会自动为两条线各添加一个过孔。
- Ctrl+Shift+滚轮:同样可以切换层,但会把滚轮操作映射到换层,比按星号直观一些。
- Backspace:撤销上一段走线,从上一个拐点重新拉。
实际操作中最重要的一条经验是:起线时先让光标吸附到引脚中心,确认两根线同时出现,再开始走。如果只出现一根线,说明这个引脚对应的网络没有被识别为差分对的一部分,停下来检查网络名和差分对指令,不要硬着头皮走。我见过太多人强行走完回头一看,负端线在另一层或者根本没连上。
在走线过程中还要注意,两条线应尽量平行、等长、保持恒定间距。遇到90°转角时,AD默认会切成45°斜角和圆弧的组合,这是合理的,因为直角会产生严重的阻抗突变。不要刻意取消这个行为。在狭窄区域确实需要拐90°时,尽量把转角处的Gap稍微拉大一点,缓冲阻抗变化。
4.2 换层、过孔与差分对的对称性控制
差分布线换层是信号完整性出问题的高发区。一对差分线在换层时,两个过孔必须保持与走线相同的间距对称放置,不能一个过孔在左边一个在右边。AD20在你使用差分对布线工具换层时会自动把两个过孔按当前间距放置,但前提是过孔自身的大小和间距符合规则要求。
几个值得注意的点:
- 换层前,先确认目标层的参考平面完整。如果信号从顶层换到底层,顶层和底层都要有连续的地平面,否则回流路径被切断,差分信号就变成单端信号了。
- 换层的那一小段短线,尽量走垂直方向(与主信号流向呈90°),减少参考平面切换引起的回流突变。
- 过孔不能打在差分线Gap的中间位置,这会破坏耦合结构。
完成一对差分线的布线后,建议立刻按L键(或者View >> Flip Board)翻转板子看一眼过孔位置是不是对称的。这个检查动作30秒就能做完,但能帮你省掉一次信号测试时才发现问题的返工成本。
4.3 等长绕线:对内、对间的实际操作
差分对内两线长度不一致,会导致接收端的差分信号出现共模分量,严重时直接判错数据。所以布线完成后,等长调节是必备操作。
AD20的等长调节工具入口在Route >> Interactive Differential Pair Length Tuning(快捷键T R)。启动后点击已经布好的差分对中的任意一条线,AD会自动识别整个差分对,弹出一段等长调整预览。
在调整面板里,最重要的设置是Target Length(目标长度)。你的目标长度应该设为这对差分线中最长的那一根的长度,因为等长调节只会让短线变长去追长线,不会把长线缩短。实操的时候,我习惯先选中这个差分对,打开PCB面板查看当前两根线的实际长度,然后取较大值加上0.1mm左右的余量作为Target Length。
接下来是绕线的具体操作:
- 走线从一端开始,沿原路径拖动,AD会在你拖动的路径上自动生成蛇形绕线。
- 按Tab键循环切换绕线形式,包括经典的U型蛇形、菱形绕线、锯齿形等。USB、以太网这类对串扰敏感的信号,首选U型蛇形。
- 按数字键1、2、3调节绕线的振幅(平行段的间距),按减号和等号键调节绕线间距。
- 绕线的实时长度会显示在光标旁,长度达到Target Length目标值后,颜色会从红色变为绿色,这时候按右键结束这一段绕线。
绕完后记得再跑一次Tools >> Length Tuning面板确认最终长度在公差范围内。
对间等长(多个差分对之间等长)的操作和这个类似,区别在于目标长度要设为所有参与匹配的差分对中最长的那个。你可以先逐个记录每对差分线的长度,找出最大值,然后把每一对都按这个值绕一遍。这个过程比较机械,但多对并行信号绕完之后,DRC里那排等长报错一次性全消掉的爽感,还是很值得的。
5. 高频翻车现场与排查手册:这些坑我当年每个都踩过
最后这部分,我把自己和身边同事在差分对设计里踩过的坑整理成一份排查手册。大家看完之后如果也遇到类似问题,直接对照来查,比翻文档快得多。
5.1 原理图里标了差分对,PCB里却没有
现象:在原理图里放置了差分对指令,网络名也是标准的_P/_N,但更新到PCB后打开差分对编辑器,列表里空空的。
排查链路:
- 先检查原理图编译是否通过了差分对校验。编译后Message面板如果出现"Net ... is not matched with a differential pair"的警告,说明指令没放对位置,或者指令属性里Positive Net/Negative Net与实际网络名不一致。
- 执行
Design >> Update PCB Document,在工程变更对话框中仔细看列表中是否有Add Differential Pair这一项。如果没看到,说明AD认为这次更新不需要新增差分对。比较常见的原因是之前更新过一次,但那次更新没有勾选差分对,之后重新更新时AD只检测到网络变化而没有检测到差分对新增。 - 确定原理图确实没问题的前提下,最稳的做法是:先编译器编译工程,然后执行
Design >> Update PCB Document,在弹出的对话框左下角点击Validate Changes和Execute Changes,确保所有变更项被正确执行。
这条排查链路是标准化的,如果走完还是不行,再考虑在PCB差分对编辑器里手动添加。但手动添加相当于绕过程序校验,后续DRC只能查规则,查不到差分对关系本身是否完整。
5.2 差分对规则设置了但不生效
现象:规则编辑器里Differential Pairs Routing设置得很漂亮,线宽5mil间距8mil,实际走线时却自动变成了10mil的普通宽度,或者DRC一直报错说Gap不满足。
排查链路:
- 先确认规则作用范围是否包含了你要布的差分对。如果你在
Where the First object matches里选了某个网络类,而这个类里没包含对应网络,规则自然不生效。最快验证方法是在规则的Custom Query里输入HasDifferentialPair('USB'),手动指定匹配的差分对名。 - 检查规则优先级。规则编辑器右下角的
Priority按钮打开后,看Differential Pairs Routing在列表中的位置。差分对规则必须排在普通Width规则和Clearance规则之上(也就是列表靠上位置,优先级数字更小)。否则网络同时满足两条规则时,优先生效的可能不是差分对规则。 - 检查是否同时存在多条Differential Pairs Routing规则。AD20允许多条规则作用于同一个差分对,但只有优先级最高的那条会生效。建议每个差分对只保留一条匹配规则,避免混乱。
5.3 差分对走线变灰或变绿,DRC报错
现象:布线过程中或者走完线后,差分对变成灰色或绿色高亮,DRC报出大量Clearance Constraint Violations。
排查链路:
最常见的原因是普通Clearance规则和差分对Gap规则冲突。差分对内两根线的距离通常只有8mil甚至更小,但你在单端Clearance规则里填的Min Clearance可能是10mil。如果两条线被识别为两个普通网络而不是差分对的一部分,DRC就会按Clearance规则去查,报错没商量。
解决办法是在Clearance规则里增加一条针对差分对网络的豁免规则,或者把差分对网络的最小间距要求单独降低。如果你不想改Clearance规则,更简单的办法是把差分对规则比Clearance规则优先级调高,同时保证差分对网络确实被差分对规则匹配到了。AD在计算DRC时,如果网络属于差分对,会优先使用差分对规则的Gap进行计算,而不去套用普通Clearance。
另外还有一种情况:走线过程中不小心切换到了单端布线模式(有些版本快捷键容易按错),导致一根线走成了普通走线,另一根还在差分对模式里。这时候Vio一定会出现问题。检查方法就是看光标下是不是同时带着两根线,如果不是,按Shift+R切回差分模式重走。
5.4 差分对等长但阻抗仍然不达标
现象:长度明明匹配了,Gap和Width也按规则设置了,但板厂反馈阻抗测试不合格,或者实测眼图不过。
排查链路:
- 先算一下你是不是把单端阻抗和差分阻抗搞混了。很多新手会用单端50Ω的经验值去设计差分线,导致差分阻抗完全不对。差分阻抗通常是单端阻抗的两倍左右,100Ω差分对应50Ω单端,但叠层不同会有差异。
- 检查有没有跨越参考平面分割。哪怕是一条完美的100Ω差分对,如果某一段走线的参考地被分割了,这一段阻抗就变了。注意过孔旁边的地过孔留下的反焊盘空隙,这些也会破坏参考平面连续性。
- 线宽和间距是不是在转角处被默认改了?AD20在拐角处自动调整线宽间距的功能在一些版本里默认是启用的,如果转角处的Gap被撑大,阻抗会上升一小段。可以在Rule里把转角处约束改成保持Gap不变,或者绕线时减少直角。
这条其实不是纯AD操作问题,更多是设计习惯问题。我从自己打样回来的阻抗报告得出的结论是:差分阻抗不是软件里填对了就行的,最终要以板厂的叠层和阻抗测试为准。正规做法是发板前把叠层和阻抗要求发给板厂,让板厂给你算出匹配的线宽间距,然后你在AD规则里按板厂的建议值填写,再发板。这个顺序反了,大概率会多花一次打样费。
6. 收尾前再说几句大实话
差分对走线在Altium Designer 20里其实不复杂,复杂的是理解它背后这套"原理图标识 + PCB规则 + 交互布线"的联动逻辑。只要记住三个关键词:命名规范、差分对指令、规则匹配,整个流程就能串起来。新手最容易翻车的地方,恰恰是在原理图阶段图省事,把全部希望寄托在PCB的手动操作上。真正做过几块高速板之后,你会发现原理图阶段的30秒标识工作,比PCB阶段花半小时去排查问题划算得多。
我个人现在布差分对,已经形成了一套固定习惯:原理图放置差分对指令后立刻编译,确认Message面板干净;更新PCB后第一时间打开差分对编辑器,数一遍数量对不对;规则设置时总是不忘调优先级;走线全程开DRC;等长调节完成后截一张Length Tuning报告留档。这套动作看着繁琐,但好处是每块板子都是一样的流程,出问题的时候能快速定位到具体环节,而不是东一榔头西一棒子地瞎猜。最后再分享一个小技巧:如果你的项目里差分对数量很多,建议在原理图里就把它们统一命名成带功能前缀的格式,比如MIPI_TX0_P、MIPI_TX0_N,方便在PCB规则里用网络类批量管理。这个习惯早期养成,后面做越大的板子,受益越明显。