1. 高速信号线为什么必须走差分对
1.1 从单端走线的噪声困局说起
很多刚接触高速板设计的朋友,习惯把每一根信号线都当成独立的单端网络来处理。在低速时代这没什么问题,一根线拉过去,只要连通就行。但当信号速率往上走,比如USB 2.0的480Mbps、HDMI的TMDS通道、PCIe的Gen1/Gen2,甚至DDR的时钟线,单端走线的短板就暴露得非常明显。
单端信号的本质是"一根线对地"传输,它参考的是地平面。问题在于,地平面并不是理想导体,板子上任何一处开关噪声、电源纹波、其他信号的回流,都会在地平面上产生电位波动。这个波动会直接叠加到你的信号上,因为你的信号是以地为基准来判断高低的。信号幅度越小、速率越高,这个叠加的噪声占比就越大,眼图就越闭合。
我早期做过一块带USB接口的板子,当时图省事,D+和D-两根线各走各的,长度差了将近8毫米,也没做阻抗控制。结果插上电脑能识别,但一传大文件就频繁掉线。后来用示波器一测,眼图几乎糊成一团。这就是典型的单端思维用在高速差分场景上的翻车案例。
1.2 差分对的共模抑制到底强在哪
差分对的核心思路是:用两根线传输一对幅度相等、极性相反的信号。接收端不看单根线对地的绝对电压,而是看两根线之间的电压差。这个"看差值"的动作,就是共模抑制的来源。
打个比方,假设外界噪声同时耦合到D+和D-上,让两根线的电位都抬高了0.3V。对于单端信号来说,这0.3V就是实打实的干扰;但对于差分接收端来说,D+是V+0.3,D-是V-+0.3,两者相减,0.3被抵消掉了,差值依然是V+减V-。噪声被"共"掉了,这就是共模抑制。
当然,这个抵消有个前提:两根线受到的干扰必须尽可能一致。这就要求它们在物理上靠得足够近、走得足够平行、参考同一个平面。一旦两根线分开了,受到的干扰不一致,共模抑制就会大打折扣。所以差分对走线的第一原则不是"连上",而是"成对且紧耦合"。
1.3 什么速率开始必须认真对待差分
不是所有差分信号都要如临大敌。我的经验是分几个档:
| 信号速率 | 典型场景 | 差分处理要求 |
|---|---|---|
| 低于100Mbps | 低速RS485、CAN | 等长即可,阻抗可放宽 |
| 100Mbps到1Gbps | USB 2.0、以太网 | 严格等长、阻抗控制、紧耦合 |
| 1Gbps以上 | HDMI、PCIe、SATA | 全流程管控,过孔、换层都要算 |
低于100Mbps的差分,你只要保证两根线大致等长、走在一起,基本不会出问题。但一旦上了百兆,尤其是USB 2.0这种480Mbps的,等长误差、阻抗偏差、参考平面断裂,任何一个环节没做好,眼图就会给你脸色看。到了Gbps级别,连过孔的数量、换层时参考平面的处理都要精打细算。
所以标题里说的"高速信号线",我理解主要针对的是百兆到数Gbps这个区间。这个区间用AD20的交互式差分对布线,效率提升最明显,也最容易踩坑。
2. AD20差分对布线前的三项硬准备
2.1 原理图阶段就要把差分对定义清楚
很多人拿到板子直接开画,画到一半发现差分对没定义,又回头去原理图里补,结果网络类、规则、布线全乱套。正确的顺序是:差分对的定义必须在原理图阶段完成,而不是PCB阶段临时抱佛脚。
在AD20里,差分对的识别靠的是网络命名规则。最通用的做法是用"_P"和"_N"后缀,比如"USB_DP"和"USB_DN",或者"HDMI0_TX0_P"和"HDMI0_TX0_N"。AD20默认的差分对命名模板就是"_P"和"_N",只要你的网络名符合这个模式,软件就能自动识别成一对。
具体操作是在原理图里,用"Place"菜单下的"Directive"放置一个差分对指示符,或者更省事的办法是直接在工程里设置差分对命名规则。我一般用后者,因为不用在原理图上到处贴标签,干净。
设置路径是:在PCB界面,打开"Design"菜单下的"Classes",找到"Differential Pair Classes",右键新建一个类,然后把符合命名规则的网络对加进去。但更推荐的做法是在原理图编译后,让AD自动从网络名生成差分对,这样不容易漏。
提示:如果你的网络名不是"_P/_N"结尾,比如用了"+/-"或者"P/N"混用,AD20可能识别不出来。统一命名规范是省事的前提。
2.2 差分对规则里那几个必须改的参数
定义完差分对,接下来是规则。AD20的规则系统很强大,但默认值往往不适用于高速差分。打开"Design"菜单下的"Rules",找到"Differential Pairs Routing"这一项,里面有几个参数必须根据你的叠层和阻抗要求来改。
第一个是"Min Width"和"Preferred Width",这是差分线单根的线宽。第二个是"Min Gap"和"Preferred Gap",这是两根线之间的间距。这两个参数决定了差分阻抗。以常见的USB 2.0为例,目标差分阻抗是90欧姆,单端阻抗大约45欧姆。在四层板、介质厚度0.2mm、介电常数4.2的常见叠层下,线宽大概走6mil、间距6mil能接近90欧姆。但这个值必须用阻抗计算工具算过,不能拍脑袋。
第三个是"Max Uncoupled Length",这是允许两根线分开的最大长度。这个参数非常关键,很多人忽略它。差分对在布线过程中,遇到焊盘、过孔或者绕线时,两根线难免会短暂分开。分开的那一段就是非耦合段,非耦合段越长,共模抑制越差。一般建议控制在5mm以内,严格的话3mm。
第四个是"Phase Tolerance"或者叫"Max Phase Difference",这是两根线的相位误差,本质上就是等长误差。对于USB 2.0,一般要求等长误差在5mil以内;对于HDMI,可能要压到2mil甚至更小。
| 参数 | 典型值(USB 2.0) | 作用 |
|---|---|---|
| 单根线宽 | 6mil | 决定单端阻抗 |
| 线间距 | 6mil | 决定差分阻抗 |
| 最大非耦合长度 | 5mm | 控制共模抑制 |
| 相位误差 | 5mil | 控制等长 |
2.3 叠层与参考平面的确认
差分阻抗对参考平面非常敏感。如果你的差分线走在顶层,参考的是第二层地平面,那第二层必须是完整的地,不能有裂缝、不能有分割。一旦参考平面不完整,回流路径就会绕远,阻抗突变,信号质量直接崩。
我在实际项目里遇到过一种情况:板子为了走线方便,把地平面在某个区域挖开了一条缝,结果差分线正好跨过这条缝。测试时眼图抖动特别大,后来把缝补上,问题立刻消失。所以布线前一定要确认:差分线正下方的参考平面是完整的。
另外,如果差分线需要换层,换层过孔附近必须保证参考平面连续。比如从顶层换到底层,中间经过第二层地和第三层电源,那过孔旁边要放足够的地过孔,给回流提供低阻抗路径。这个细节后面还会展开讲。
3. 交互式差分对布线的完整操作链路
3.1 从单根布线切换到差分对模式
AD20的交互式布线快捷键是"P"然后"T",但这是单根布线的入口。差分对布线有独立的入口:先选中你要布的差分对,可以是在PCB面板里选中"Differential Pairs"下的某一对,也可以直接在图上点选其中一根线,然后按快捷键"P"再按"I",或者用菜单"Route"下的"Interactive Differential Pair Routing"。
进入差分对布线模式后,光标会变成十字,同时两根线会一起跟着走。这时候你移动鼠标,软件会自动保持两根线的间距和并行状态。这个"自动保持"就是交互式布线的核心价值,它省去了你手动调整两根线间距的麻烦。
但要注意,AD20在差分对模式下,默认是按"Preferred Gap"来保持间距的。如果你在规则里设的Preferred Gap是6mil,那它就走6mil。如果遇到空间不够,它会尝试压缩到Min Gap,但压缩后阻抗会变,所以尽量别让它压。
3.2 走线过程中的实时等长调整
差分对布线最怕的就是两根线长度不一致。AD20在差分对模式下,会实时显示两根线的长度差。你可以在布线时按"Tab"键调出属性面板,里面有一栏"Target Length"和"Actual Length",还有"Phase Difference"的实时数值。
如果发现长度差在扩大,比如因为绕过一个焊盘导致一根线多走了,你可以用"Interactive Diff Pair Length Tuning"来补偿。快捷键是"P"然后"L",或者菜单"Route"下的"Interactive Diff Pair Length Tuning"。进入调谐模式后,你可以在较短的那根线上加蛇形绕线,把长度补回来。
这里有个经验:调谐蛇形不要加得太密。蛇形的幅度和间距如果太小,会引入额外的寄生电容和电感,反而破坏阻抗。一般蛇形的幅度建议在3倍线宽以上,间距在4倍线宽以上。AD20的调谐工具里可以设置这些参数,默认值有时候偏激进,需要手动调。
3.3 遇到焊盘和过孔时的处理技巧
差分对在布线时,最头疼的就是遇到焊盘。比如USB连接器的焊盘,两个焊盘的中心距可能只有0.5mm,而你的差分线间距是6mil(约0.15mm),根本对不上。这时候两根线必须"散开"去接焊盘,散开的那一段就是非耦合段。
处理原则是:散开要尽量短、尽量对称。AD20在差分对模式下,当你把光标移到焊盘上时,它会自动尝试把两根线分开接到两个焊盘。但自动的不一定最优,你需要手动调整,让两根线散开的长度和角度尽量一致。
过孔的处理更讲究。如果差分对需要换层,两个过孔必须对称放置,而且过孔旁边要加地过孔。地过孔的作用是给回流提供最短路径。我一般会在差分过孔的两侧各放一个地过孔,距离控制在1mm以内。如果空间允许,四个地过孔围一圈更好。
注意:差分过孔本身会引入阻抗不连续,所以过孔的数量越少越好。能在一层走完的,绝不换层。
3.4 布线完成后的DRC检查重点
布完线不是就完事了,必须跑DRC。AD20的DRC里,针对差分对的检查项主要有几个:差分对间距是否满足规则、相位误差是否超标、非耦合长度是否超限。
跑DRC之前,建议先把规则里的"Max Phase Difference"和"Max Uncoupled Length"设成你实际能接受的值,不要用默认的"0"或者很大的值。设成0会导致所有差分对都报错,设成很大又等于没检查。
DRC报出来的差分对错误,要逐条看。常见的错误有:某一段非耦合长度超标、两根线相位差超标、差分对间距小于最小值。每一条都要定位到具体位置,然后决定是调整布线还是放宽规则。放宽规则要谨慎,因为规则放宽意味着你接受了更差的信号质量。
4. 差分对布线里最容易翻车的五个细节
4.1 参考平面裂缝导致的回流绕路
前面提过参考平面裂缝的问题,这里展开讲。差分线的回流,在差分模式下,主要是在两根线之间流动,但仍有部分回流会通过参考平面。如果参考平面有裂缝,回流被迫绕行,就会形成一个大的环路,这个环路会辐射噪声,也会接收噪声。
更隐蔽的一种情况是:差分线跨过了电源平面的分割。比如你的板子有3.3V和1.8V两个电源区域,中间有分割带。如果差分线正好跨过这个分割带,而它的参考平面又是电源层,那回流就会在分割带处断开。这种情况下,即使你差分对本身走得再完美,信号质量也会崩。
解决办法很简单:差分线的正下方,必须是完整的地平面,不要用电源平面做参考。如果叠层限制只能用电源平面,那至少要保证电源平面在该区域是完整的,没有分割。
4.2 蛇形绕线引入的阻抗突变
等长调谐用的蛇形绕线,如果参数没设好,会引入阻抗突变。蛇形绕线的每一个拐弯,都会产生寄生电容。如果蛇形太密,寄生电容累积起来,会让该段的阻抗偏低,信号到达这里就会反射。
我见过一块板子,为了把等长误差压到1mil,在差分对上加了非常密的蛇形,结果测试时眼图反而比不加蛇形还差。后来把蛇形间距放大,问题解决。所以等长不是越精确越好,要在"等长"和"阻抗连续"之间找平衡。
一般经验是:蛇形的单段长度不要小于3倍线宽,蛇形之间的间距不要小于4倍线宽。如果实在空间不够,宁可接受稍大一点的等长误差,也不要加过密的蛇形。
4.3 过孔数量与换层次数的隐性代价
每一个过孔都会引入阻抗不连续,差分对的两个过孔如果不对称,还会引入相位误差。所以差分对换层,代价是双重的。
我的原则是:能在一层走完的差分对,绝不换层。如果必须换层,尽量只换一次,而且两个过孔要严格对称。换层时,过孔旁边的地过孔不能省,而且要尽量靠近。
还有一个细节:换层后,差分对的参考平面可能变了。比如从顶层换到底层,顶层参考第二层地,底层参考第三层电源。如果第三层电源不完整,那换层后的那段差分线就失去了良好的参考。所以换层前要确认新参考平面是否合格。
4.4 差分对与其它信号的间距控制
差分对虽然抗干扰能力强,但它本身也会干扰别人,也会被别人干扰。所以差分对与其它信号之间要保持足够的间距。一般建议是3倍线宽以上,严格的话5倍。
特别是差分对与时钟信号、开关电源信号之间,间距要更大。时钟信号是周期性的,容易耦合到差分对上形成固定频率的干扰。开关电源的噪声频谱很宽,也容易耦合。
另外,差分对与差分对之间也要保持间距。如果两对差分对走得太近,它们之间会互相耦合,形成串扰。一般建议差分对之间的间距不小于5倍线宽。
4.5 测试点与调试接口的预留
板子做出来是要测试的,差分对如果没有测试点,调试时会非常痛苦。所以布线时要预留测试点。测试点可以是一对小焊盘,也可以是过孔。
测试点的位置要尽量靠近接收端,这样测到的信号最接近实际接收到的。测试点本身会引入寄生电容,所以测试点的焊盘不要太大,一般不超过1mm。
如果差分对速率很高,测试点可能会明显影响信号。这时候可以考虑用高频探头直接探测过孔,或者预留同轴连接器的焊盘。这些都要在布线阶段就规划好,不能等板子回来再想办法。
5. 从规则到实测的验证闭环
5.1 用AD20的层叠管理器反推阻抗
布完线之后,建议用AD20的"Layer Stack Manager"再核对一遍叠层和阻抗。AD20内置了阻抗计算功能,你可以在叠层管理器里输入线宽、间距、介质厚度、介电常数,它会算出对应的差分阻抗。
这个功能的好处是,你可以快速验证你的布线参数是否满足目标阻抗。如果算出来偏差较大,就要回头改规则或者改叠层。我一般会在布线前就算一遍,布线后再算一遍,确保没有因为叠层调整导致阻抗跑偏。
5.2 导出Gerber前必须复查的差分项
导出Gerber之前,有几个差分相关的项必须复查:
- 差分对的线宽和间距是否与规则一致
- 差分对的等长误差是否在允许范围内
- 差分对的参考平面是否完整
- 差分过孔的地过孔是否齐全
- 差分对与其它信号的间距是否足够
这些项可以用AD20的"PCB Rules and Violations"面板逐条检查,也可以用"Reports"菜单下的"Board Information"生成报告。我习惯用后者,因为报告可以存档,方便追溯。
5.3 实测眼图与仿真结果的对照
板子回来之后,如果有条件,一定要测眼图。眼图是差分信号质量的最终裁判。测眼图需要高速示波器和差分探头,如果没有,至少要用矢量网络分析仪测一下差分阻抗和插入损耗。
实测结果要和仿真结果对照。如果实测眼图比仿真差很多,说明实际板子有仿真没考虑到的问题,比如参考平面不完整、过孔不对称、材料参数偏差等。这时候要回头定位,而不是凑合用。
我在一个HDMI项目里,仿真眼图很好,但实测眼图抖动很大。后来发现是连接器焊盘处的非耦合段太长,导致共模噪声超标。把焊盘处的散开长度缩短后,眼图明显改善。这个教训说明,仿真不能替代实测,但实测能验证仿真。
6. 几个能直接抄的实操配置
6.1 USB 2.0差分对的规则模板
以常见的四层板、目标差分阻抗90欧姆为例,规则可以这样设:
- 单根线宽:6mil
- 线间距:6mil
- 最大非耦合长度:5mm
- 相位误差:5mil
- 差分对与其它信号间距:20mil
- 差分过孔地过孔距离:1mm
这套参数在多数四层板上能跑通USB 2.0。但叠层不同,参数要微调,不能照搬。
6.2 HDMI差分对的规则模板
HDMI的TMDS通道速率更高,要求更严:
- 单根线宽:5mil
- 线间距:5mil
- 最大非耦合长度:3mm
- 相位误差:2mil
- 差分对与其它信号间距:25mil
- 差分过孔地过孔距离:0.8mm
HDMI对阻抗的要求是100欧姆差分,比USB的90欧姆高,所以线宽和间距都要相应调整。
6.3 交互式布线的快捷键速查
| 操作 | 快捷键 |
|---|---|
| 差分对布线 | P, I |
| 差分对等长调谐 | P, L |
| 切换布线层 | 数字键或小键盘 |
| 调整线宽/间距 | Tab |
| 放置过孔 | 数字键盘的"+"或"-" |
| 结束布线 | 右键或Esc |
这些快捷键用熟了,布线速度能快一倍。特别是"P, I"和"P, L",是差分对布线的核心操作。
7. 我在差分对布线里踩过的真实坑
7.1 一次因为命名不规范导致的差分对丢失
早期做项目,原理图里差分对命名用了"USB+“和"USB-”,结果AD20识别不出来,PCB里根本没有差分对。布线时只能手动两根线一起走,等长全靠目测,最后眼图一塌糊涂。后来统一改成"_P/_N"后缀,问题解决。这个坑让我明白,工具再强,也得按它的规则来。
7.2 蛇形绕线加过头反而更差
前面提过蛇形绕线过密的问题,我自己也踩过。有一次为了把等长误差压到1mil,在差分对上加了非常密的蛇形,结果测试时眼图比不加还差。后来把蛇形间距从2倍线宽放大到5倍线宽,眼图立刻改善。这个教训是:等长是手段,不是目的,信号质量才是目的。
7.3 参考平面裂缝的隐蔽性
参考平面裂缝这个问题,最坑的地方在于它很隐蔽。板子看起来走线很漂亮,DRC也不报错,但实测就是不行。我遇到过一次,差分线跨过了地平面的一条缝,缝是之前为了隔离模拟地和数字地挖的。后来把缝补上,问题消失。所以布线前一定要看参考平面,不能只看走线。
7.4 过孔不对称导致的相位误差
差分对换层时,两个过孔如果不对称,会引入相位误差。我有一次换层时,一个过孔放在焊盘旁边,另一个过孔为了避让走线挪远了一点,结果两个过孔不对称,相位误差超标。后来把两个过孔重新对称放置,问题解决。这个坑提醒我,差分对的对称性要贯穿始终,包括过孔。
8. 差分对布线的进阶思路
8.1 用网络类批量管理差分对规则
如果板子上差分对很多,比如有十几对HDMI和USB,逐条设规则会很累。这时候可以用网络类来批量管理。在"Design"菜单下的"Classes"里,新建一个"Differential Pair Classes",把所有差分对加进去,然后针对这个类设规则。这样改一次规则,所有差分对都生效。
8.2 用xSignals处理更复杂的拓扑
AD20的xSignals功能可以处理更复杂的拓扑,比如一个差分对经过连接器、经过串联电容、再到接收端。xSignals可以把这些分段定义成一个完整的信号路径,然后针对这个路径做等长和阻抗控制。这个功能在DDR和高速串行接口里特别有用。
8.3 把差分对规则导出复用
如果你经常做类似的项目,可以把差分对规则导出成文件,下次直接导入。AD20的规则可以导出为".RUL"文件,导入后所有规则都在。这个技巧能省很多重复劳动。
差分对布线这件事,说到底就是"对称、连续、完整"六个字。对称是两根线要对称,连续是阻抗要连续,完整是参考平面要完整。AD20的交互式布线工具能帮你做到前两点,但第三点要靠你自己对叠层的理解。工具是辅助,脑子才是核心。