
做高速板这几年差分对布线始终是个绕不开的硬骨头。USB、HDMI、LVDS、PCIe随便哪个接口拿出来没布好差分对轻则信号完整性翻车重则整套板子推倒重来。Altium Designer 20AD20作为目前国内使用率极高的PCB设计工具默认就给了非常完整的差分对布线支持但很多工程师其实一直没把它的潜力用满。我见过不少人还在手动一根根拉线、拿尺子量长度、靠肉眼判断等长费时费力不说出来的效果还不稳定。这篇东西我就结合自己在AD20里的实际项目经验从差分对规则配置、交互式布线、等长优化、常见坑点排查这几个维度把差分对布线整个流程从头到尾捋一遍。无论你是刚接触PCB设计的学生还是已经画过几块板子但总在差分对上调不通的工程师这篇文章都能给你一套可以直接照抄的优化方案。我不敢说这是唯一正确的做法但这套流程我在多块量产板上实测过稳。1. 差分信号与差分对布线为什么值得单独花时间研究很多人刚接触差分对的时候都会困惑不就是两根线走一起吗跟普通走线有什么区别还真不是。差分对的核心在于两根线上传输的是一对极性相反的信号接收端读的是它们之间的差值而不是某一根对地的值。这个机制天然带来了抗共模干扰的能力因为外部噪声通常同时耦合到两根线上最后在求差的时候被抵消掉。这也是USB、千兆以太网、HDMI这类高速接口普遍采用差分信号的根本原因。1.1 差分信号的抗干扰与阻抗连续原理既然接收端读的是差值那么对布线来说最重要的一件事就是两根线的耦合要稳定、对称。如果两根线宽窄不一、间距忽大忽小、或者其中一根绕了老大一个弯另一根却走直线差分阻抗就会在整个链路里来回跳变产生反射和辐射。就好比两个人要配合说双簧一个快一个慢节奏乱掉整体效果自然崩。差分阻抗这个概念很多刚上手的人会跟单端阻抗混在一起。单端阻抗是信号线相对参考平面形成的阻抗而差分阻抗是两根线在耦合状态下整体呈现的阻抗。常规的100欧差分阻抗USB、千兆网意味着两根线之间的特性阻抗不是每根线到地的阻抗。在AD20里配置差分规则时你设置的是线宽和线间距最后由叠层结构决定实际阻抗是否落在目标值附近。它们之间的关系不是线性的线越宽阻抗越低线距越近耦合越强、阻抗也会变化。所以看到“线宽5mil、间距5mil得到100欧”这样的推荐值换一块叠层就不一定成立必须自己算。1.2 AD20里差分对布线的完整工作流在AD20里做差分对布线标准流程其实很短但每一步都有讲究。先是原理图阶段给需要差分的一对网络打上差分对标记比如P和N后缀导入PCB后确认差分对属于哪个差分对类然后按阻抗计算的结果去规则管理器里填线宽和线距接着才能用交互式差分对布线命令一次性拉出两根线。拉完之后再用等长调节命令做长度匹配最后跑一遍DRC确认没有违反间距和匹配公差。这套流程里面最容易被忽略的是“差分对类”这个中间层。AD20的规则管理器里面既可以针对单根网络设置线宽规则也可以针对差分对类设置专门的差分对规则。如果你不把差分对归类虽然也能布但规则匹配容易出问题尤其在有多组差分对、不同阻抗需求的项目里比如USB要90欧、HDMI要100欧不建类就只能写死一组规则后期调整非常痛苦。1.3 我为什么推荐直接用交互式差分对布线有些工程师习惯先拉一根再用Copy功能复制到另一边或者干脆靠手工对齐。这种做法在低速板子上也许看不出问题但高速链路里两个问题特别致命第一手工复制很难保证整条路径的耦合间距一致某个拐角处间距突变阻抗就跳了第二两条线的长度差很难控制可能明明看着差不多实际已差了数百mil。AD20的交互式差分对布线快捷键PD会自动维持你在规则里设定的线间距同时实时显示两根线的长度差和总长度。也就是说只要规则没设错拉出来的差分对天然就是等间距的后续只需要集中精力处理等长问题。这比手动去对两根线的位置可靠太多。后面我会专门讲这套交互式工具的技巧包括怎么配合快捷键、怎么处理换层和过孔。2. 布线前的规则准备叠层、阻抗与差分对定义很多新手拿到一个板子就直接开始拉线拉到一半发现规则不对、线宽不够、阻抗对不上再回头改规则结果一片红。差分对布线尤其不能这么干因为差分对的线宽和线距是由物理叠层和阻抗需求提前锁死的事后改动的代价远比普通信号线大。2.1 叠层结构与阻抗计算先把叠层定下来才有资格谈线宽线距。四层板的典型叠层一般是顶层走微带线、内层走带状线常用的是“信号-地层-电源层-信号”或者“信号-电源层-地层-信号”。不同层到参考平面的距离不同同样的线宽线距算出来的阻抗差别很大。以常见的1.6mm板厚四层板为例如果顶层到第二层介质厚度约0.1mm-0.15mm介电常数取4.2-4.5之间想做到100欧差分阻抗表层的微带线通常需要线宽4.5-5.5mil、线间距5-7mil左右。内层的话因为上下都有参考平面阻抗计算结果和表层不太一样往往需要把线宽调大一点。这些数值没有统一答案一定要拿叠层参数去算。计算工具方面AD20自带的阻抗计算器只能做初步估算精度有限。我习惯去Sierra Circuits或Polar的在线阻抗计算工具复核一遍输入介质厚度、介电常数、铜厚、线宽线距就能快速得到单端和差分阻抗的预估值。量产板的话更靠谱的做法是把叠层参数发给板厂让他们帮忙算或者直接问板厂要推荐的线宽线距毕竟实际生产出来的叠层跟他们工艺强相关。2.2 AD20差分对规则配置的关键参数打开AD20的规则管理器Design -Rules在Routing - Differential Pairs Routing下面能找到差分对的核心规则。这里你需要理解几个关键参数Min Width / Preferred Width / Max Width差分线的线宽范围实际布线时按Preferred Width走。一般是同一个值比如5mil。Min Gap / Preferred Gap / Max Gap差分对内部两根线之间的间距这是决定耦合强度的关键参数一般沿用Preferred Gap。Min Neck Width / Min Neck Gap在狭小空间内允许差分线收缩的最小宽度和间距。在BGA出线或者过孔密集区域特别有用neck模式的宽度和间距可以比正常值小但要保证阻抗尽量接近目标。很多人在规则里只填了Width和Gap忘了去定义Neck值结果在BGA里差分对出不了线只能强行加宽扇出区域白白浪费布局空间。正确的做法是提前算出Neck值一般是正常线宽的0.8倍左右间距可以压到正常值的0.7倍在规则里填好需要的时候用ShiftW快捷键切换线宽。差分对规则设置页里还有一个需要搞懂的点差分对类的优先级。AD20允许多个差分对规则并存比如USB和HDMI的差分阻抗要求不同你就可以建两个差分对类分别设置规则然后给具体差分对指定属于哪一类。在规则管理器的左上角会显示规则的优先级Priority数字小的优先级高。如果某个差分对命中了多个规则系统会按优先级最高的那条执行。2.3 原理图阶段定义差分对的三种方式差分对的定义最好从原理图就开始做不要等到PCB阶段再手工给网络配对。AD20支持三种常见方式命名约定网络名以_P和_N结尾也可以自定义后缀在Project Options里配置导入PCB时AD20会自动识别成差分对。这种方式最简单只要命名规整就行。手动添加差分对在原理图里选中两条网络右键添加Differential Pair可以手动命名比如USB_D和USB_D-可以命名为USB。适合网络名不符合默认约定的情况。使用差分对指示符在原理图上放置Differential Pair符号将两个网络绑定AD20会自动把它们识别为一对。从我的经验来说第一种方式最不容易出错因为网络名本身就有很强的可读性后期查问题时一眼就能找到对应的差分对。需要注意的是差分对的名字不要在AD20里重复比如你已经有一个叫“USB”的差分对就不能再来一个叫“USB”的否则导入时会报冲突。3. 核心实操AD20差分对布线优化技巧规则和原理图都准备好之后才真正进入布线环节。这一部分我尽量讲得细致一些因为很多技巧属于“文档里不会写、但实际特别好用”的那种。3.1 交互式差分对布线的正确打开方式在PCB编辑器中选择菜单Route - Interactive Differential Pair Routing或者直接用快捷键PD就能进入交互式差分对布线模式。此时点击一对差分网络中的任意一条另一条会跟着一起走AD20会自动保持规则中设定的间距。但这里有个很容易踩的坑很多人进入交互式布线模式后发现点击网络没有任何反应或者只拉出一根线。这种情况绝大多数是因为网络没有正确分配成差分对或者原理图导入时没有勾选差分对识别选项。遇到的时候先回Project Options确认差分对命名规则是否正确再看PCB面板的Differential Pairs列表中是否有这对网络。拉线过程中的几个常用操作ShiftW切换差分线的宽度模式正常/Neck在BGA出线或过孔夹缝里特别有用。ShiftSpace切换走线拐角模式45度、圆弧、任意角度循环切换。差分对走线我一般用45度拐角或圆弧不推荐直角因为直角拐角会产生阻抗突变量对高速信号尤其不利。逗号和句号,和.切换走线层换层时AD20会自动在两个过孔之间插入一段短走线或者直接用盲埋孔看你的过孔模板。Tab键打开差分对布线属性对话框可以临时修改线宽、线距、过孔尺寸等当前值只对当前操作生效不改规则表。拉线的时候还有个细节不要总想着一步到位又直又短高速差分对宁可靠近参考平面边缘也别穿过分割线尤其是在内层走线时参考平面的完整性比走线距离更重要。如果内层被分割成多个电源区域差分线一旦跨过分割缝回流路径就被切断了这时候即使等长做得再准眼图也好看不了。3.2 等长优化绕线不是随便绕的等长是差分对布线里最折磨人、也最能看出经验差距的一个环节。AD20自带等长调节工具先选中目标差分对然后菜单Route - Interactive Length Tuning或者快捷键TU进入等长调节模式。进入等长模式后先按Tab配置目标长度和公差。这里有两个选择一是手动输入你要匹配到的总长度二是通过规则管理器里的Length规则自动抓取目标长度。我个人推荐在规则里定义好目标长度这样有多组差分对时能统一控制。比如一组8对HDMI差分设定目标总长度2000mil、公差±5mil布完一对就能立刻看到绿色或红色的长度提示。绕线方式方面AD20支持蛇形绕线、锯齿绕线和单侧绕线。高频信号我建议用圆弧绕线如果板厂工艺允许因为蛇形的尖角容易产生局部电容变化对阻抗的影响比对走线长度的影响更大。如果做不了圆弧至少把蛇形绕线的拐角设成45度不要用90度直角。绕线的幅度和间距也有讲究蛇形绕线的叠高peak-to-peak amplitude建议控制在信号上升沿对应的空间长度范围内一般至少是线距的3倍以上。如果绕线叠得太小两根差分线的耦合反而会被破坏绕得太大又可能引入串扰和辐射问题。我常用的经验值是对于100欧差分、线宽5mil、线距5mil的情况蛇形幅度取20-30mil蛇形间距取10-15mil左右也就是至少保证相邻绕线之间的间距大于线距的2倍。另外一个很多人不注意的点等长调节不一定非得集中在差分对的末端绕在中间位置往往效果更好。我曾经把一大段蛇形绕线堆在连接器附近结果那段的耦合和阻抗跟整条线明显不匹配后来把绕线位置分散到中间后测试波形改善不少。绕线的原则是均匀分布、平滑过渡而不是抠出一个完美的小方块。3.3 换层、过孔与参考平面完整性的处理差分对换层是高速布线中绕不开的动作而过孔处理不好往往就是整个链路的瓶颈。AD20默认会根据当前的差分对规则在换层处放置两个过孔间距会尽量匹配差分线的间距。这里有一个隐藏参数过孔的间距和尺寸需要在过孔模板里预先设置。如果板子过孔很小比如0.3mm/0.2mm的机械孔但差分线距是8mil那两个过孔之间的距离也应当尽量接近8mil这样过孔周围的阻抗能保持相对连续。另一个要点是换层时的回流过孔俗称伴地孔。差分信号换层意味着回流电流也要跟着从参考平面穿过过孔跳到另一层如果旁边没有伴随地孔提供低电感回流路径信号回路面积会变大辐射和串扰随之增加。所以在差分对过孔旁边打一对地过孔是常规操作。这不是AD20自动完成的需要手动打过孔或借助地过孔阵列Stitching Vias功能。具体做法是在过孔两侧各放1-2个GND过孔尽量靠近差分过孔间距控制在20-30mil以内为宜。关于参考平面完整性我自己处理多层板时有个强制要求差分对要么全程走在同一层要么换层时确保新层的参考平面是完整的地平面。如果某层下面正好被电源分割线切开了宁可变换走线层或调整电源分割位置也不让差分线跨缝。这一点说多了都是泪我早期有一块板子就是因为一组差分线跨了电源分割缝导致HDMI信号在长线传输时不达标反复查了很久最后才发现。3.4 差分对布线完成后的微调技巧布线不是拉完就算完微调阶段同样有技巧。AD20的交互式布线支持推挤模式按Shift R循环切换Ignore忽略障碍、Push推挤、Hug贴边和Walkaround绕行模式。差分对在推挤模式下AD20会同时推挤差分对的两根线保持间距不变这个功能在调整周围走线时尤其好用。调整差分线拐角时我喜欢用快捷键ShiftSpace切到45度模式后用Ctrl键临时切换成任意角度把某个拐角修正成更平滑的过渡。但是要记住所有临时修改的走线最后必须跑一遍DRC确认没有产生间距违规。因为AD20的推挤功能偶尔会“推过头”把某一小段间距推到了规则值以下。此外AD20的PCB面板里有个Differential Pairs Editor可以一眼看到所有差分对的长度、长度差、是否满足公差。建议拉完线之后先用这个面板扫一遍比一条条点开看属性快得多。我在项目中通常会把差分对长度做成一个表格截图贴在评审文档里方便硬件工程师逐条确认。4. DRC检查与高频踩坑问题实录布线完成后不跑DRC就发板等于裸奔。差分对相关的DRC错误在高速板里尤其常见因为它们的规则往往比普通网络更严格。这一章我把最常见的几类问题整理成速查表你照着核就行。4.1 差分对相关的DRC规则AD20的DRC检查范围在Design - Rules里可以逐项勾选。跟差分对直接相关的规则主要有两块Routing - Differential Pairs Routing检查差分对的线宽、间距是否满足规则表中的设定。这个规则开了之后任何一段差分间距不对的地方都会报错。High Speed - Matched Lengths检查差分对之间的等长匹配情况。这里需要设置Min/Max数值超过公差就会报错。我建议在有差分对的板子上把这两项都打开并且把Matched Lengths的检查粒度设到单对差分网络级而不是按网络类整体检查。否则可能出现这种情况整组差分对的平均长度达标了但其中某两对之间差了50milDRC还不报。在实际发板前的检查流程里我会额外做一次“差分对长度报告”在Report菜单下选择Differential Pair Length Report会生成一个文本报告包含每对差分线的实际长度和长度差。这个报告是硬核证据发给板厂的时候可以附上避免板厂按自己的理解做了不必要的工艺调整。4.2 常见问题速查从unknown pin到等长不达标问题1原理图导入PCB时报unknown pin这个热词出现频率很高但大多不是差分对本身的问题而是原理图里元器件的引脚编号和PCB封装对不上。比如原理图库里三极管标了E/B/C封装里却画了1/2/3导入时自然找不到对应pin。解决方法是回到原理图库和PCB库统一引脚编号在AD20的Library Editor里检查每个元件的Pin Designator。还有一种情况是原理图中网络连接到了某个引脚但封装里没有这个pin常见于部分厂家提供的分立封装引脚命名不一致。这类问题排查时先在Messages面板定位到具体元件再核对两边的引脚定义即可。问题2差分对变成了普通网络导入PCB后发现没有自动生成差分对。最常见的原因是网络名后缀不符合Project Options里配置的命名规则。AD20默认支持后缀为_P和_N大小写均可但很多芯片的USB网络是DP/DM命名这时就需要手动添加差分对或在Project Options的自定义后缀列表里加上DP/DM。需要注意的是当你改了Project Options后必须重新导入一次原理图才能生效。问题3等长怎么绕都差一大截这种情况通常不是绕线手法的问题而是差分对两边的起点和终点不在同一水平位置。差分对在连接器处往往有一个物理错位导致两根线天生就差了一段距离后面再绕也难以弥补。接到这类板子时我通常先选中差分对在PCB面板里看“End to End”长度差如果初始差超过100mil就说明不能只靠绕线解决需要重新调整其中一根线的走线路径或者把连接器的方向微调把起点对齐。问题4DRC报了间距违规但看起来是正常的多半是差分对处于Neck模式线宽或间距比正常规则值小而DRC里的差分对规则没有开启Neck检查或Neck检查参数没填。去规则管理器的Routing - Differential Pairs Routing页面把Min Neck Width和Min Neck Gap填好且DRC检查项里勾上“Neck”相关选项。这种“假违规”最容易让人精神内耗我反正被它坑过不止一次。问题5差分过孔报错或短路AD20差分对自动添加过孔时如果过孔模板里的间距比差分线间距小很多DRC会报两个过孔间距过近或者过孔跟旁边的铜皮短路。解决方式是建立一个专用的差分对过孔模板在Pad Via Library里新增一个Via Template把过孔孔径和孔间距调整成匹配差分线规格的值然后把这组过孔指定给差分对规则使用。5. 个人心得与几点补充建议整理到这里差分对布线的核心链路基本讲完了。但作为一个被高速板反复蹂躏过的人我最后还想多说几句跟“工具之外”有关的东西。第一点AD20提供的是工具但决定差分对质量的永远是你的叠层设计和布局规划。我见过太多人在布线阶段死磕绕线方式和阻抗匹配却忽略了布局阶段让差分对路径过长、过孔过多、甚至跨分割。布局时把高速接口靠近板边、差分对尽量短、不要横穿大功率区域这些带来的收益远比你在布线阶段精细化调整要高。第二点规则表里多花十分钟布线阶段省一天。包括差分对类、Neck参数、匹配长度规则、过孔模板全部提前配好。我在每个项目开始前都会做一套“项目模板”把常用差分对规则固化进去新项目直接套用基本不用改。这不仅省时间还能保证团队里不同人画出的板子风格一致。第三点PCB设计是个经验活但也是科学活。遇到差分信号测试不过的情况不要一拍脑袋就加宽走线、或者把距离拉大先回到叠层和阻抗计算上用仿真软件比如HyperLynx或者AD20自带的信号完整性仿真模块看看波形反射和串扰来源。很多时候问题就出在参考平面不连续或者过孔Stub太长上这些都不是“走线好看”能弥补的。最后再分享一个我自己的小习惯每次发板之前我会把所有的差分对在PCB面板里列成表格逐条核对目标长度、实际长度、长度差、参考平面状态然后在文档里截图存档。等板子回来测试再不过这份记录能帮你快速定位是制造问题、叠层问题、还是走线问题而不是两眼一抹黑从头猜。差分对布线这个东西说难确实难说简单也简单。难在涉及的知识面太广从电磁场理论到PCB工艺都得懂一点简单在只要你把流程理顺了每一步都按规则来AD20能帮你省掉九成的重复劳动。希望这篇东西能帮你少走点弯路画出来的板子一版通过。