
做了这么多年的高速板子我越来越觉得差分对这条东西很多人的理解其实一直停留在“两根线拉平行”的阶段。真到了调USB 3.0、PCIe、千兆网口这些接口的时候才发现规则没设好、走线方式不对板子回来信号跑不起来问题排查能查到你怀疑人生。这篇东西我就把ADAltium Designer里差分对从规划、建规则、到实际拉线的完整套路捋一遍重点讲讲规则设置里的门道以及怎么用快捷键把走线效率提上去。先声明一点我下面讲的都是以AD 20为基础的界面和操作逻辑如果你还在用AD 09或者AD 16部分菜单位置会有差异但核心思路完全通用。这篇文章适合两类人一是刚接触高速PCB设计的同学看完能直接上手建差分对二是有一定经验但想优化自己走线流程的工程师这里面的坑和效率技巧我几乎都是用真实项目试错试出来的。1. 动手拉线前先把差分阻抗这件事想清楚很多刚接触差分对的朋友一上来就打开AD的规则管理器噼里啪啦把线宽填成5mil、线距填成5mil然后发现板子做完信号眼图一塌糊涂。问题出在哪出在你根本不知道这组差分线需要多大的差分阻抗也不知道目标阻抗和层叠结构、线宽线距之间的对应关系。1.1 目标差分阻抗从哪来不是拍脑袋定的差分阻抗的目标值永远来自芯片手册和接口协议。我列几个最常见的标准值USB 2.0 / USB 3.x90Ω差分但部分笔电设计会走85Ω具体看主控端的要求PCIe1.0到5.085Ω差分PCIe对阻抗的敏感度极高千兆以太网100Ω差分HDMI100Ω差分SATA100Ω差分LVDS接口100Ω差分但也有些是90Ω所以在建差分对之前第一件事是打开你所用的主控芯片的数据手册找到对应用户外设的接口部分确认它对差分阻抗的具体要求同时还要确认共模阻抗有些接口对共模阻抗也有明确要求下面会讲。1.2 层叠和参考平面决定了你的线宽线距确定了目标阻抗第二步是拿到板厂的层叠结构。层叠决定了信号层到参考平面之间的距离也就是介质厚度H这个参数是影响阻抗最核心的变量。同样的5mil线宽介质厚度4mil和介质厚度8mil做出来的阻抗完全不一样。以我常用的四层板为例典型的层叠是Top信号层、L2地平面、L3电源平面、Bottom信号层。这种结构下Top层和Bottom层的信号参考L2地走线的阻抗控制就取决于Top到L2的介质厚度。你如果选中了JLC7628这种常见叠层外层到参考平面大约是4mil左右的介质厚度100Ω差分阻抗大概需要4mil线宽配5mil线距。但如果是6层板或者8层板层叠结构变了参考平面位置变了线宽线距就要重新算。这一步需要用到阻抗计算工具常见的免费的可以用Saturn PCB Toolkit行业内用的比较多的是Polar Si9000。把层叠的介电常数、介质厚度、铜厚、线宽、线距填进去就能算出对应的差分阻抗值。我建议所有做高速板的人都养成一个习惯先算阻抗再定线宽线距最后才去AD里面写规则。别偷懒按经验值硬填板厂的实际叠层和你上一次的板子很可能不一样。1.3 参考平面完整性比线宽线距更重要这个点我放在最前面讲是因为踩过太多次坑。差分信号的回流电流是依靠参考平面来形成回路的如果差分线走线途中经过的区域下方参考平面被掏空或者被分割了回流路径被迫绕路差分阻抗就会在跨分割的位置发生突变产生严重的EMI和信号质量问题。有一次我做一块采集板板上有两组千兆网口的差分线从连接器拉出来之后穿过一片区域刚好那片区域下方我为了隔离模拟地和数字地挖了一条分割槽。结果板子回来网口能link上但是一跑大流量就偶发断流。最后用TDR实测差分阻抗在跨分割的那段直接飙到130多欧。所以记住这句话差分对可以放宽对走线长度的要求但绝不能跨分割参考平面。如果实在避不开那么跨越点必须增加缝合电容或跨分割电容来提供回流路径但这是补救措施别当常规手段。2. 差分对规则设置完整流程一步步来别漏项这一章是全文的核心我会从创建差分对开始到把布线规则和等长规则全部设置到位一步一步走完整个流程。重点不只告诉你怎么填参数而是告诉你为什么这么填。2.1 创建差分对原理图命名和PCB面板联动差分对本质上是两个网络组成的一对信号AD识别差分对的逻辑可以从两个层面来做。第一个层面是在原理图里做。前提是给网络起名的时候就要注意成对命名我建议统一用信号名_P和信号名_N的格式比如USB_P和USB_N、PCIe_TX0_P和PCIe_TX0_N。AD对这种后缀格式有自动识别能力你不需要手动告诉它哪个和哪个是一对。还有一种方法是在原理图中给网络添加差分对属性放置差分对符号不过这种操作相对少见多数工程师习惯在PCB界面再去手动建。第二个层面是直接在PCB界面建。打开PCB面板在下拉菜单里切换到Differential Pairs Editor。在这个窗口里点击左下角的Add然后在弹出的对话框中第一栏输入差分对的名称第二栏和第三栏分别选正网络和负网络。AD会自动扫描所有网络并从你选过的网络里排除掉重复的这个设计比较省心。这里有个常见的坑有些人的原理图网络命名是USB_DP和USB_DM这种风格AD并不会自动把它识别成一对正负网络你得手动在Differential Pairs Editor里指定。所以如果想让流程更顺滑建议从原理图阶段就统一_P和_N的命名风格。建好之后差分对会出现在窗口中点住这行可以把它拖进右边的PCB区域然后就可以用专门的差分对布线工具进行拉线了。2.2 三类核心规则布线线宽线距、等长容差、解锁长度差分对规则设置在Design → Rules里主要涉及三大类每一类我分开讲。第一类Differential Pairs Routing差分对布线规则打开规则管理器左侧Routing → Differential Pairs Routing会自动列出你建的每个差分对。要设置的关键参数有三个Preferred Width首选线宽前面用阻抗计算工具算出来的目标线宽Gap线距算出来的目标线距这个参数同时定义了差分对内两根线的耦合间距Min Width / Max Width最小和最大线宽一般我会设成Preferred Width的±1mil给布线调整留一点余量但不建议太大否则容易在调整时被你随手改乱这里有一个很多新手会困惑的问题Gap到底是指edge-to-edge还是center-to-centerAD里的Gap默认指的是两根导线的边缘间距不是中心距。所以填数之前看清楚单位不要想当然。第二类Matched Length等长规则差分对的两根线在物理长度上必须尽量一致否则正负信号到达接收端的时间不同步会产生共模噪声和时序偏移。打开Routing → Matched Length在下面的表格里找到你建的差分对需要设置两个核心参数Tolerance容差允许的最大长度差这个数值因协议而异。经验上PCIe和USB 3.x的差分对于等长容差要求通常控制在5mil以内千兆以太网要求相对宽松一些10~15mil问题不大。但请注意这个容差是针对一个差分对内部的两根线而言的不是针对整组总线。总线级的等长比如PCIe的TX和RX之间通常还有单独的时序预算那是在原理图设计阶段就要考虑的事。Matched Length目标长度这个可以设成一个绝对值比如2000mil但更常见的做法是留空或者设为0表示以实际较长的一根线为基准等长规则会自动把短的那根延长到和长的那根匹配。第三类Uncoupled Length解耦长度这个规则很多人会忽略。Uncoupled Length指的是差分对内两根线在没有耦合状态下单独走线的长度比如从芯片引脚扇出到开始有耦合的区域这段距离就是解耦长度。过长的解耦长度会引入共模噪声。在Routing → Uncoupled Length里设置经验值是控制在50~100mil以内最多不要超过250mil。边角料区域的解耦几乎不可避免但尽量缩短。2.3 规则优先级的坑我在这里翻过车AD的规则是有优先级的同一种类型的规则如果设置多条规则覆盖同一片区域高优先级的规则会优先生效。差分对规则最常见的坑是你建了一条全局的差分对布线规则比如线宽5mil、线距5mil然后你给某个特定的差分对又建了一条规则设置为4mil线宽、6mil线距结果拉线的时候发现那对线还是不走你设置的4/6而是走了全局的5/5。原因就是全局规则的优先级比特定规则的优先级高。AD默认在规则管理器的左下角同一个规则的优先级越高它排在上面。你需要选中特定的差分对规则然后点击Priorities按钮把它的优先级调到全局规则之上。这种错误发生在你设置了规则但忘记调优先级的情况下表现是“我明明设置了规则为什么走线不是我要的”排查起来特别费时间。我现在建差分对规则时会一次性把优先级的调整顺序形成习惯全局的作为保底每个差分对单独建规则并及时调优先级避免后面返工。2.4 耦合模式边缘耦合和Broadside耦合的区别大多数情况下我们讨论的差分对都是边缘耦合edge-coupled也就是两根线在同一层并排走靠横向的电磁场耦合。但在高密度板子上有些工程师为了减小占板面积会把一组差分对的两根线放在相邻两层上下重叠这种叫Broadside耦合。AD支持创建这种立体差分对但我要提醒你Broadside耦合对层叠的对称性要求较高而且两个信号层之间必须有连续的参考平面否则阻抗控制会非常困难。我在实际项目中很少用Broadside耦合主要是调试阻抗问题的时候麻烦板厂对这种结构的工艺控制也没有边缘耦合成熟。所以除非你是在做叠层受限的高密度背板普通板子老实走边缘耦合就好。3. 高效走线技巧把AD用出肌肉记忆规则设置好之后真正考验效率和耐心的是拉线过程。差分对走线如果一根一根地拉再手动调等长效率极低。下面这些操作是我每天在用的熟练之后速度可以提升一倍。3.1 交互式差分对布线快捷键别再一个个点菜单了在PCB界面走差分对的入口是Place → Differential Pair Route快捷键是PD或者直接在英文输入法状态下按P再按D。触发命令后鼠标点选差分对的一端就可以开始拉线了。拉线的过程中常配合这几个快捷键ShiftW快速切换线宽弹出窗口让你选预设好的线宽值,逗号和.句号实时调整差分对的Gap值不需要进规则管理器Shift 空格切换布线的拐角模式有45度、圆弧、90度几种差分对走线通常用45度拐角Ctrl 左键点击快速选中整条走线段的网络用来查看连线状态很方便/-小键盘切换信号层换层时AD会自动在起点和终点处放置过孔Tab布线过程中随时修改当前走线属性比先去规则管理器改更快走差分对的时候我习惯先用ShiftW确认线宽匹配规则值然后用逗号句号微调线距因为有些局部区域比如BGA扇出口标准线距挤不进去需要临时缩小线距走出来之后再恢复。3.2 等长调整的手法蛇形线和反馈式微调差分对内等长调整最核心的命令是Route Tuning快捷键TR。选中一根需要延长的那根线通常是较短的那根执行Tuning命令鼠标在线上拖动AD会自动以蛇形线的方式延迟路径把线延长到目标长度。这里有几个实操细节会影响走线质量和时间调整模式执行Tuning命令后按Shift空格可以切换蛇形线的起伏模式有椭圆和三角两种。对于高频差分信号建议使用椭圆模式Mitered因为它对阻抗的突变影响更小。蛇形线的间距蛇形线的相邻边之间的距离也就是绕线间距至少要保持3倍线宽以上否则蛇形线相邻部分之间会形成额外的耦合导致局部阻抗严重下降。调整幅度不要一次拖太多先用一个较小的振幅做初步匹配然后在Rules菜单里打开Matched Length的规则检查快捷键TDR运行DRC查看实际偏差再根据偏差值做二次调整。整组等长调整往往需要两到三轮耐心比手速重要。3.3 换层和过孔的处理别忽略回流路径差分对在高速信号中换层本质上是电流从一条回流路径切换到另一条回流路径的过程。换层处必须有过孔而且这个过孔的大小和位置都有讲究。理想情况下差分对换层时两个过孔应该尽量靠近保持和差分对相同的间距以减少过孔引入的不连续。对于板上的GND过孔我习惯在差分对过孔旁放置一个地过孔作为回流切换的桥接这个地过孔离差分过孔越近越好一般建议不超过50mil。另外在AD中有一个很实用的技巧就是批量给差分对加过孔。选中差分对的两个过孔按TUPUn-Route快捷键是UP可以一次性删除整条差分网络放置过孔的时候选中两个过孔后可以按Ctrl 左键一起拖动保持相对位置不会跑偏。这里分享一个我个人的习惯走差分对换层时一定保证两个过孔放置时是对称的不要一个过孔离参考地过近、另一个过孔离地很远。不对称的过孔结构会带来共模转换导致EMI超标这个现象用频谱仪扫一下就能看得很明显。3.4 BGA扇出和密集区域的特殊情况处理BGA扇出是差分对走线里最让人头疼的地方之一。芯片的BGA引脚间距通常只有0.8mm甚至0.65mm标准差分线对在这个密度下无法保持完整的耦合间距所以几乎必然要走一段解耦长度。在AD中处理这种情况我的做法是先给BGA区域的差分对单独建一个规则把Gap缩小到能挤过去的程度比如从6mil缩小到4mil同时把线宽稍微减小然后从焊盘扇出到BGA边缘后再回到正常的规则参数。所以刚才强调的规则优先级就派上用场了——BGA区域的规则一定要优先于全局规则否则你这段解耦区域根本走不出来。扇出的时候建议直接用AD的Fanout功能它是自动让每一根网络从焊盘往外拉一段极短的小引线然后再走主线这样比手动一根根拉要快得多。4. 实测中会踩的坑每一个都是用板子试出来的规则设了、线也走了但板子回来之后信号还是异常这种情况我见得太多了。下面这些坑是我自己在实际项目中遇到并且验证过的包括一些和直觉相反的现象。4.1 等长误差不是越小越好别钻牛角尖很多人认为差分对等长误差当然是越小越好了最好是0mil误差。但实际上如果你把一对差分线做成绝对等长反而可能在某个位置被迫做非常紧的绕线蛇形线折角处的阻抗突变有可能比长度偏差带来的影响更严重。我记得有一块PCIe板的调试经历刚开始把等长容差设成了±2mil蛇形线绕得非常密集结果眼图测试反而不如容差±5mil时好。后来分析原因正是因为蛇形绕线间距太近局部耦合变强阻抗跌落到了80欧以下。经验上绝大多数高速串行协议的差分对于5mil以内的等长偏差是完全可以接受的对应的时延差大约在0.3ps以下完全在协议余量之内。所以设定容差的时候先查协议要求别盲目追求极小值。合理的等长设计是用尽量平缓、宽松的蛇形线去匹配长度而不是用密集的锯齿去硬抠数值。4.2 紧耦合和松耦合之争取决于你的走线空间差分对设计里面有个争论到底应该把两根线靠得很近紧耦合还是故意拉开一点距离松耦合CSD上跑的90Ω差分如果线距过窄线宽也窄加工误差对阻抗的影响会被放大。反过来线距过宽就退化成两根独立的单端线抗共模干扰能力会减弱。以我自己的经验空间充足的情况下我用紧耦合多一些也就是线距通常在5~7mil左右因为这个模式下回流面积小共模噪声低但如果在BGA区域、连接器区域这种空间受限的地方我不会硬着头皮去维持紧耦合而是适当松开线距以能走通为第一优先级然后保证解耦长度足够短。这里要强调的是AD的差分对规则支持全局一套参数、局部一套参数所以你不必为了迁就BGA的密集区域而牺牲整个板子的耦合质量。给不同区域设置不同规则是高速PCB设计的基本功。4.3 参考平面断裂怎么看怎么防前面讲原理的时候提过参考平面断裂的问题这里结合AD的检查工具再说一下实际操作。判断参考平面是否断裂有两个办法。一个是在AD里切换到信号层和参考平面层的叠加视图看差分走线的投影是否完全落在参考平面的铜皮范围内。另一个是用DRC的Un-Routed Net检查但那个只能查出断路查不出参考平面的不连续。我在实际项目中更依赖一个土办法把GND平面的铜皮用高亮色填充然后打开差分走线的透明模式眼睛扫一遍看走线下方是否有大面积的挖空区域。这个方法虽然土但在板子层数不多的时候非常高效。如果发现某个区域实在无法避开参考平面的裂缝那就必须在裂缝两侧加入缝合过孔stitching vias让回流电流能跳过裂缝继续走。AD的Place → Via Stitching命令可以批量放置缝合过孔选择覆盖区域后一键打孔。4.4 差分对网络命名和正负网络不一致的坑这其实是新手最容易踩的坑而且错误信息非常隐蔽。AD在创建差分对后如果两个网络的长度有差异它在DRC里会报警但如果你正负网络选反了AD也会有提示。最典型的情况是原理图阶段网络命名不规范到了PCB阶段手动添加差分对的时候一不小心把正负网络的顺序选错。这个时候你走差分线完全看不出问题但差分阻抗其实是负负相加整个信号的极性反了。从AD 16之后的版本开始创建差分对时会自动检查网络名是否符合_P/_N规则但如果是手动指定它不会拦你。我的经验是在原理图阶段就把差分网络命名标准化并且在创建差分对之后利用AD的Differential Pair Editor快速核对一下每对的正负顺序。这个检查30秒都用不到但能省掉你之后几个小时的测试时间。5. 再聊几个平时不太注意但能明显提升效率的细节走线这件事学会了主力操作还不够一些边角料的功能用好了体验完全不一样。5.1 快捷键模板可以导入导出AD的快捷键是可以导出成文件的快捷键入口在DXP → Preferences里的PCB Editor → General下面有快捷键配置的备份和恢复。我每次重装软件都会把键盘快捷键配置导出来换电脑时一秒恢复。同时我也保留了几个自己习惯的快捷定义比如F1用来切换层、F2直接运行DRC这个因人而异但强烈建议大家花十分钟把自己常用的操作设置成肌肉记忆。5.2 多层板拼板时可以借用差分对工具如果你做的是四层板以上的项目拼板的时候如果想顺便把差分对规则带过去可以直接使用AD的Design → Board Shape → Define Board Shape from selected objects来做板框然后使用Place菜单里的Embedded Board Array进行拼板差分对工具同样适用于拼板后的子板区域。5.3 用AD的Slice功能处理覆铜与差分对的关系差分对走线上方如果有大面积覆铜铜皮和差分线之间会形成微带线结构影响阻抗。解决方法是给差分线周围留出禁止覆铜区或者用AD的Place → Polygon Pour Cutout在这个区域挖一个矩形坑出来。这个方法我在做着射频和高速混合的板子时经常用效果很直接。5.4 慎用右键的“Snap”功能拉差分线的时候如果开着自动吸附鼠标会被系统拉向一些焊盘或走线的网格点导致你拉出来的线歪歪扭扭。AD默认这个Snap是开的但走差分对时我一般会把它关掉或者只在关键节点临时打开。怎么快速开关按ShiftE即可循环切换吸附模式熟练之后布线会顺手很多。最后说一点我个人对差分对设计的体会这东西表面上是规则设置和走线的活儿本质上是对信号回流、阻抗控制、协议余量三个层面的理解。AD只是个工具它只会忠实地执行你设置的规则但规则背后的取舍始终是人在把握。多看看芯片手册、多和板厂确认叠层、多实测验证仿真结果这些基本功做扎实了AD里的每一个参数设置你都会心里有数。下次直播或者写评论的时候如果碰到有人说“我按教程设置了规则但走线不对”你大致就知道他问题出在哪了——大概率是优先级和参考平面这两件事没琢磨透。