做高速板这些年,我见过太多“看起来没问题”的差分走线:两条线并排拉过去,间距整整齐齐,结果是上板后千兆网口丢包、USB 偶尔枚举失败、HDMI 在某些显示器上间歇性花屏。原理图翻来覆去查不出问题,最后用示波器看接收端波形才发现,源头都在 PCB 的差分对上——要么线宽线距完全没按 100Ω 设计,要么两条线一条长一条短,要么干脆跨了分割,回流路径被切断。
这篇文章就围绕 Altium Designer 整理一套我一直在用的差分走线流程:从差分规则设置到阻抗匹配,再到等长绕线和最终验证。内容不追求把每个按钮都讲一遍,而是把决定成败的关键节点和你真正需要理解的原理讲透。适合正在学 PCB Layout 的硬件工程师,也适合从其他 EDA 转过来、想在 AD 里把高速差分信号一次做对的同行。
1. 为什么差分对比单端信号更值得花时间去调
1.1 用一对线传一个信号,到底图什么
差分信号的本质,是发送端同时输出一个正极性信号和一个反极性信号,接收端真正检测的是两者之差。任何同时耦合到两条线上的外界噪声,在接收端做减法时会被直接抵消。这个特性让差分传输在强干扰环境里依然能保持稳定,比如电机驱动里的编码器线、长距离网线、高速串行总线。与此同时,两条线上的电流方向相反,它们产生的电磁场在空间上会互相抵消,辐射出去的 EMI 比同等摆幅的单端信号小得多。这也是为什么很多高速接口宁可多占一倍的走线面积,也要用差分传输。
可以把它类比成会议室里的双人耳语传话。如果只有一个人说,旁边开着收音机时,对面的人要把说话声从噪声里分离出来很费劲;如果两个人一个说正相的句子、一个说反相的句子,接收的人把两个耳朵听到的信号相减,收音机噪声因为两只耳朵都接收到相同强度,会被干净地减掉。差分信号在 PCB 上做的事,本质上就是这个减法。
1.2 高速接口里到处是差分信号
USB、PCIe、HDMI、DisplayPort、以太网、LVDS、MIPI、RS-485、CAN 物理层……这些接口的速率从几十 Mbps 到几十 Gbps 不等,但底层的物理层几乎都是差分传输。你做的板子不管是交换机、工控机还是消费电子主板,只要带上这些接口,PCB 设计里就躲不开差分对。掌握一套能复用的差分走线方法,能覆盖绝大多数产品的开发需求,而不必每次开新项目都从零学一遍。
1.3 什么时候不能省
低速低噪声场景里,比如 I2C、UART、GPIO,完全没必要做差分,铺普通走线就行。但有三种情况别偷懒:
- 任何差分规约的差分信号必须做差分对,不能当成两根独立信号线分别拉。
- 速率较高、时序敏感的单端信号也要单独处理,不能沿用普通低速走线的思路。
- 高速差分换层时必须保证参考平面连续,否则即使“线成对”,回流路径一旦撕裂,信号照样劣化。
我见过有人把 USB 2.0 的 D+/D- 当普通信号线分别走,结果功能能通,但手一碰外壳就断连,重新枚举要好几秒。差分走线不是玄学,它要求的是端到端的对称性,而对称性从建立差分对的那一刻就开始了。
2. 差分走线阻抗从何而来:微带线/带状线的阻抗模型
想设置阻抗匹配,先要搞懂阻抗在 PCB 上到底是怎么来的。很多人打开 Altium 规则就开始填 100Ω,却不清楚这个 100Ω 由哪些参数决定。这一章不推导复杂的电磁场方程,而是把工程上必须理解的几个关键点讲明白。
2.1 特性阻抗与差分阻抗不是一回事
一根走线相对于参考平面,存在分布电容和分布电感。这两者随着线宽、介质厚度、介电常数变化,形成了单位长度上的特性阻抗 Z0。这是单根线的概念。差分信号是两根线一起工作,彼此之间存在电磁场耦合,所以差分阻抗 Zdiff 并不是简单的 2×Z0,而是一个和耦合系数 k 相关的值:Zdiff ≈ 2×Z0×(1-k)。k 越大,差分阻抗越低。
这个公式对工程最直接的意义是:当你把差分对的两条线越贴近,间距 S 越小,耦合越强,差分阻抗会下降。如果这时候还想保持 100Ω,就得把线宽相应调细一点,或者增大介质厚度。所以规则设置里的线宽和线距永远是联动考虑的,不是两个孤立的参数。我见过不少新手只调线宽不调线距,结果阻抗越改越偏。
2.2 决定阻抗的五个关键参数
工程上真正影响阻抗的,归结起来就是下面这张表。不需要精确记住每个公式,但要能判断“某个参数变大,阻抗往哪个方向走”。
| 参数 | 符号 | 变大时对阻抗的影响 | 工程原因 |
|---|---|---|---|
| 线宽 | W | 阻抗下降 | 导体变宽,分布电容增大 |
| 介质厚度 | H | 阻抗上升 | 走线到参考平面距离增大,电容减小 |
| 介电常数 | εr | 阻抗下降 | 介质束缚电场能力增强,电容增大 |
| 铜厚 | T | 阻抗略微下降 | 导体表面积略增,电容效应略增 |
| 线距 | S | 差分阻抗增大 | 两条线之间耦合减弱,k 减小 |
常见 FR-4 板材的介电常数在 4.2~4.6 之间,高频材料如 Megtron6 在 3.3~3.5 左右。工程上最直观的提醒是:介质厚度 H 对阻抗最敏感。同一个叠层,表层 4mil 的 prepreg 和 8mil 的 prepreg,阻抗差可能达到 20Ω 以上。所以你在拿到板厂叠层表时,第一个要确认的尺寸就是各级介质厚度。
2.3 紧耦合与松耦合的取舍
差分对的线距 S 决定了耦合强弱,也决定了设计风格。
紧耦合(S 小于 W)时,两条线耦合强,对外部干扰不敏感,EMI 表现好,但代价是对线宽和线距的加工误差非常敏感。板厂在生产时线宽偏 0.5mil、间距偏 0.5mil,阻抗就可能超出公差。松耦合(S 大约等于或大于 2 倍 W)时,工艺容忍度高,阻抗容易控制,但占板面积更大,两条线对外部噪声的抵御能力也会弱一些。
工程上最常见的 100Ω 差分,在四层板表层微带线场景下,板厂往往会给出 5/8 这样的组合:5mil 线宽、8mil 间距。90Ω USB 差分也常在 5/8 或 6/8 附近。但请注意,这只是一个常见参考,最终必须以板厂的叠层表和你自己的目标阻抗为准。
3. 层叠结构是阻抗设计的“地基”:先定层叠再谈走线
3.1 线宽不是拍脑袋定的
经常有人在群里问:“100Ω 差分用多宽?”这个问题本身就不完整。因为同样的线宽,在不同介质厚度、不同介电常数、不同铜厚下,阻抗会差出十万八千里。正确的流程只能是:
- 确定层叠结构、层间距和板材类型。
- 确定目标阻抗,比如单端 50Ω、差分 90Ω、差分 100Ω。
- 用阻抗计算工具或板厂叠层表,得到推荐的线宽和线距。
- 把推荐值填进 AD 的差分规则。
反过来,如果自己先拍脑袋定一个 4mil 线宽、4mil 间距,再让板厂去压合,最后做出来阻抗只有 70Ω,信号质量自然出问题。这个顺序不能倒,先有层叠和阻抗目标,后有走线尺寸。
3.2 四层板的叠层骨架示例
四层板最常见的结构是:L1 Top 信号层、L2 地平面、L3 电源平面、L4 Bottom 信号层。表层走线属于微带线结构,信号只在一侧有参考平面;如果走内层(L2 和 L3 之间的带状线层),那就是带状线结构,信号上下都有参考平面。两种结构计算阻抗的公式不同,因此同样目标阻抗下,推荐线宽也会有明显差异。
以一个典型的四层板为例:PP 厚度 4mil,core 厚度 40mil,铜厚 1oz,FR-4 板材。表层微带线要做到 100Ω 差分,板厂给的推荐值大概率在 5mil 线宽、8mil 间距附近;同样的 100Ω 如果走内层带状线,线宽可能需要加粗到 4~5mil 或调整间距。这就是为什么在 AD 里要给不同层建不同的差分规则,而不是一套规则吃到死。
3.3 开工前先拿到阻抗叠构表
我个人的习惯是,PCB 布局布线开始之前,先把“目标阻抗清单”发给板厂:单端 50Ω、差分 90Ω、差分 100Ω,并标清楚哪些层需要哪些阻抗。板厂会返回一份叠层表,里面直接给出每层推荐的线宽线距。这个过程相当于把阻抗计算交给有实际工艺数据的人,比你自己瞎猜可靠得多。
当然,自己也要有基本的判断力。可以用 Saturn PCB Toolkit 或 Polar Si9000 先估算一遍,防止板厂给的方案偏离常识。拿到推荐值后还要检查可加工性:比如连接器 fanout 区域能不能走出 6mil 线宽的差分对,如果走不出来,就要提前和板厂协商调整叠层或者接受阻抗偏差。这一步做得越早,后面返工的概率越低。
4. Altium Designer 差分走线规则设置实操
4.1 先建差分对,再谈规则
在 AD 里做差分走线,第一件事是把两个网络“绑定”成一个差分对,否则规则设置得再完整也不会生效。创建差分对有几种主流方式,你可以根据项目习惯选:
- 原理图驱动:在原理图中把差分对网络命名为 xxx_P 和 xxx_N,比如 USB_D_P / USB_D_N,放置 Place → Directives → Differential Pair 指令。导入 PCB 后,在 Design → Differential Pairs 对话框里点击 Auto Generate,AD 会按命名规则自动组成差分对。
- 手动创建:在 PCB 编辑器右侧面板打开 Differential Pairs 面板,在空白处右键选择 Add,然后在下拉框里分别指定 Positive Net 和 Negative Net。
- 批量检查:打开 Design → Differential Pairs,查看所有已生成的差分对,确认没有漏掉或错配。
注意,网络命名后缀要严格一致。我习惯统一用 _P/_N,因为很多元器件库里的差分封装也是这么命名的。一个项目里不要混用 _P/_N、+/-、_M/_P 等风格,否则后期写脚本、检查、导出都会很痛苦。
4.2 差分规则的核心参数
差分对建好后,进入 Design → Rules → Routing → Differential Pairs Routing,新建或编辑规则。这里最重要的几个字段:
| 字段 | 说明 | 填写建议 |
|---|---|---|
| Trace Width Min/Preferred/Max | 差分对中每条走线的宽度 | Preferred 填板厂推荐线宽 |
| Clearance Gap Min/Preferred/Max | 两条差分线之间的净距 | Preferred 填板厂推荐间距 |
| 长度/等长相关 | 在 Matched Length 规则中设置允许的偏差 | 按信号速率和芯片手册填写 |
我的习惯是,板厂给 5/8 时,Preferred 填 5mil 和 8mil,Min/Max 各放宽 10%~20%,给布线过程留一点微调空间。如果你的 DRC 想控得严一些,可以直接把 Min 和 Max 设得很贴近 Preferred,逼自己按目标值走。区别只是后期检查的宽容度不同。
还有一点要注意:AD 在不同版本里对这一部分规则的字段位置略有差异,AD17 之后支持 Gap 的 Min/Preferred/Max,老版本可能只有单一数值。以你当前版本的 Properties 面板为准,但核心概念是一样的。
4.3 不同层使用不同规则:Query 的用法
表层微带线和内层带状线的阻抗计算模型不同,同样的 5/8 尺寸在表层也许是 100Ω,到了内层可能就变成 90Ω。所以必须给不同层设置不同的差分规则。
正确做法是:
- 分别新建两条差分规则,一条的 Query 设置为
InLayer('Top Layer'),另一条设置为InLayer('Bottom Layer')或对应的内层。 - 在 Rules 面板里调整优先级,让层特定规则优先于全局规则。
- 也可以在规则属性界面里直接勾选适用的层,AD 会自动生成对应的 Query。
我在做六层板时,曾经因为内层和表层共用一套差分规则,导致内层 100Ω 差分实际只有 90Ω 左右,后来用仿真抽参才发现。这一步非常容易被忽略,因为 DRC 不会报错,只有测出来才知道问题。记住:规则里填的是物理尺寸,但你要的是电学指标,同样尺寸在不同层意味着不同的电学结果。
4.4 交互式差分走线实操
规则就绪后,布线时使用 Place → Interactive Differential Pair Routing,快捷键是 P + I + D。这个命令会同时拉一对线,并自动保持你设定的 Gap 和 Width。实际布线中我常用的操作如下:
- 走线过程中按 Tab 键,在属性面板里实时修改 Gap 和 Width,方便在局部空间紧张时微调。
- Shift+R 切换布线模式:Ignore(忽略障碍)、Avoid(避开障碍)、Push(推挤已有走线)。我默认用 Avoid,比较安全。Push 模式在板子很满的时候能提高效率,但偶尔会推出奇怪的绕线路径,走完要重点检查。
- Shift+Space 切换拐角模式:45 度、90 度、圆弧。高速差分一般用 45 度或圆弧,不建议用 90 度角。不是说 90 度一定不能用,而是后续阻抗连续性和信号质量风险更高。
- 换层时按小键盘 * 键放过孔。差分对换层时,两个信号过孔尽量靠近成对放置,并且要在旁边加一个地过孔,给回流电流提供低阻抗路径。这个地孔不是可选项,对高速差分来说几乎是刚需。
走线过程中盯一下状态栏的线宽和间距显示。如果推挤之后间距被挤小了,即使 DRC 不报错,阻抗也已经偏了,退回 Review 阶段时要逐个检查。
4.5 用 Length Tuning 把等长做准
差分对走完之后,进入 Route → Interactive Length Tuning(不同版本菜单位置略有不同,部分版本叫 Interactive Differential Pair Length Tuning)。选中其中一根线,工具会显示当前长度与目标长度的差值。Tab 打开属性面板,可以设置目标长度、允许误差、绕线样式、振幅和间距。
绕线样式方面,低速率下 Accordion(手风琴形)足够;超过 5Gbps 的信号,建议使用圆弧形或 Trombone(拉管式)走线,减少拐角处的反射。绕线结束后,按 Esc 退出,然后跑一次 DRC,确认所有差分对都满足等长规则。
5. 相位匹配和等长:差分走线的行程规划
5.1 等长不等于等时
很多人以为等长就是两条线物理长度一样,这个理解在低速时够用,但在高速场景下并不严谨。信号在 PCB 上的传播速度不是固定值,它和所在层的有效介电常数有关。表层微带线的磁场一部分在空气中,有效介电常数较低,信号传播速度较快;内层带状线周围都是介质,有效介电常数更高,速度相对较慢。
所以同样 1000mil 的长度,表层走线耗时比内层走线要短一些。差分对内等长控制,本质上是控制两条线之间的相位差,也就是时间差。工程结论很简单:尽量让差分对的两条线在同一个信号层走完,不要一条走表层、一条走内层。如果换层不可避免,两条线要在同一位置同步换层,这样才能让介质差异带来的时延偏差最小。
5.2 对内误差目标怎么定
差分对内等长误差到底控制在多少,取决于你使用的接口协议和数据速率。作为工程经验值,可以参考这张表:
| 信号速率 | 对内长度差建议 | 备注 |
|---|---|---|
| <1Gbps | 20~50mil | 一般不需要特别紧张 |
| 1~5Gbps | 5~15mil | 以芯片手册为准 |
| 5~10Gbps | 2~5mil | 尽量同层走线,绕线谨慎 |
| >10Gbps | 按时间单位 ps 控制 | 必须做信号完整性仿真 |
具体换算时,可以用一个粗略估值:FR-4 微带线上,信号传播速度大约是 6~7mil/ps。如果手册要求对内 skew 小于 10ps,那么长度差就要控制在 60~70mil 以内。这只是微带线的估算,内层带状线速度更慢,同样时间预算对应的物理长度会更短,所以高速设计里尽量按时间预算而不是物理长度来思考。
在 AD 里,你可以在差分规则里设置 Matched Length 的 Tolerance,也可以在 Interactive Length Tuning 的属性面板里直接输入目标长度和误差。无论用哪种方式,最后都要靠 DRC 来确认。
5.3 绕线的实际技巧
绕线是补长度差的主要手段,但绕线质量直接影响信号质量。我总结了几条实操经验:
- 绕线区域优先选择走线比较直、周围没有太多元器件的地方。不要在连接器或芯片引脚附近激烈绕线,那里参考平面往往不完整,绕出来的线段更容易引入阻抗不连续。
- 蛇形线相邻折返段之间要保持足够距离,中心距至少 3 倍线宽。否则折返段之间会形成平行耦合,反而给串扰制造路径。
- 绕线区域正下方不要有镂空或密集过孔,尽量保证地平面完整。
- 如果只差 2~3mil,完全没必要绕一整圈蛇形。用 45 度角折一下就能补出好几 mil 的长度,整个走线区域反而更干净。
我甚至会刻意在比较空的区域留一点绕线余量,方便后面万一时序调整需要加长。PCB 上最怕的不是没空间绕线,而是所有区域都被塞满,最后只能硬着头皮在敏感位置绕线。
6. 差分走线常见的坑:跨分割、过孔残桩与不对称走线
6.1 跨分割与参考平面断裂
这是高速差分走线最容易踩的坑,而且很难在 DRC 里直接查出来。症状是板子功能不稳定、EMI 测试超标、眼图清晰度不足。
成因其实并不神秘。差分信号虽然靠两条线之间的电压差工作,但每一根线相对于参考平面仍然存在回流电流。当地平面被开槽、被分割或在高密度区域被挖空时,回流电流被迫绕很远的路,形成一个大电流环路,导致阻抗突变和共模辐射。
排查方法很简单:在 AD 里把显示切到参考地层,单独看差分线正下方有没有被铜箔切割或隔绝。换层处检查每个差分过孔旁边是否都有地过孔。在 3D 模式下看有没有跨过板内挖空区域。这几点只要有一个没做到,高速差分都有隐患。
6.2 差分对不对称与不同层走线
症状是 ESD 或 EMI 测试过不了,或者误码率偏高。差分对不对称的常见表现有几种:两条线一根直走一根绕线;一根走了表层另一根换了内层;换层位置不一致。这些都会造成共模分量增大,让系统对外部干扰变得更敏感。
排查时直接在 Differential Pairs 面板里列出所有差分对的长度差,按差值从大到小排序,优先处理差异最大的那几对。然后逐对检查换层点是否对称。我在 Review 阶段会开高亮网络,把一对差分线的两条线分别用两种颜色显示,一眼就能看出它们有没有同进同出。
6.3 过孔带来的阻抗不连续
过孔在高速信号眼里不是一个简单的金属孔,而是一个引入寄生电容和寄生电感的阻抗结点。差分对换层时,两个过孔的间距、旁边的地回流过孔、过孔残桩长度,都会影响这个结点对信号的破坏程度。
解决思路是分级处理:速度不高的差分,只要保证两个信号过孔靠近、旁边有地孔就可以;速度上来之后,使用更小的过孔钻孔尺寸,避免不必要的焊盘;10Gbps 以上的设计,可以考虑让板厂做背钻,把过孔残桩去掉。有条件的话,把过孔纳入仿真,在 HyperLynx 或 SIwave 里直接抽取过孔模型验证,比靠经验猜测更靠谱。
6.4 与其它网络距离太近和包地不当
差分对内两条线靠得很近,这是设计需要。但如果它和旁边的单端线、普通信号线也靠得很近,同样会互相串扰。经验法则是差分对与其他非耦合网络的间距至少保持 3 倍线宽,特别敏感的信号可以做到 4~5 倍。
包地是一个容易走极端的操作。低速时会有点用,但高频时如果包地线离差分线太近,反而会增加对地电容,改变差分阻抗;如果地孔疏密不均,包地线本身还可能变成一条谐振天线。工程上如果非要包地,包地线距离差分线至少 2~3 倍线宽,地孔每隔 100~200mil 打一个。包不好,不如不包。
6.5 低成本验证设计的三个步骤
没有高级仿真环境时,我习惯用下面三个步骤来验证设计:
- 跑一遍 DRC。把差分线宽、间距、匹配长度等规则全部打开。规则里写的是不是你要的?逐条核对,尤其注意不同层是否启用了正确的层规则。
- 让板厂做阻抗测试条。下单时在工艺要求里写明需要阻抗测试条,板厂会在同批次板材上做出对应的阻抗验证条。回来后关注测试结果,这比任何仿真都接近实际工艺水平。
- 上板后用示波器看接收端眼图。如果眼图清晰度不足、抖动偏大,再回到 PCB 上排查参考平面、过孔、等长这些问题。
有条件的项目当然可以做完整的 S 参数仿真,但仿真只是参考,最终的归宿还是板材、工艺和你布线的实际质量。
最后说一点实操体会。最早我学差分走线时,把大量时间花在熟悉 Altium Designer 的菜单和快捷键上,后来发现真正提高设计质量的,是叠层和阻抗这两个底层概念。AD 的差分规则只是执行层,你要是不知道 100Ω 是由介质厚度、线宽、间距共同决定的,就算把按钮背下来也没用。所以新手拿到一块板子,第一件事别急着拉线,先找板厂要叠层表,定好目标阻抗,再倒推线宽线距。思路顺了,Altium Designer 的操作就是水到渠成的事。