
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是V0.3D-是V-0.3两者相减0.3被抵消掉了差值依然是V减V-。噪声被共掉了这就是共模抑制。当然这个抵消有个前提两根线受到的干扰必须尽可能一致。这就要求它们在物理上靠得足够近、走得足够平行、参考同一个平面。一旦两根线分开了受到的干扰不一致共模抑制就会大打折扣。所以差分对走线的第一原则不是连上而是成对且紧耦合。1.3 什么速率开始必须认真对待差分不是所有差分信号都要如临大敌。我的经验是分几个档信号速率典型场景差分处理要求低于100Mbps低速RS485、CAN等长即可阻抗可放宽100Mbps到1GbpsUSB 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.8mmHDMI对阻抗的要求是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的交互式布线工具能帮你做到前两点但第三点要靠你自己对叠层的理解。工具是辅助脑子才是核心。