ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Altium Designer差分对设计全流程:从原理图到PCB的避坑指南

Altium Designer差分对设计全流程:从原理图到PCB的避坑指南 做板子最怕什么不是原理图画不出来而是原理图阶段欠下的债最后全在PCB布线时加倍还回来。今天聊的差分对走线就是典型的事前省事、事后遭殃。你画USB2.0、HDMI、千兆网口背后全指着差分对工作但很多工程师从Altium Designer的原理图到PCB这一路坑是一个接一个地踩踩完还说不清问题出在哪。我自己在AD20里翻过不少车也帮同事排查过不少“看起来没问题但就是跑不通”的差分信号。实话讲差分对不是简单的“两根线一起走”就完事从原理图的网络命名、元器件库的引脚一致性到PCB阶段的阻抗计算、规则配置、等长调节每一环都有对应的坑。这篇文章我按“原理图 → 规则 → 布线 → 等长 → 排查”的完整流程来写把AD20里差分对设计的操作步骤和避坑点一次讲透。还在用老方法“先画完再改”的朋友建议你把这一篇存下来慢慢看。1. 为什么差分对要从原理图一路管到PCB1.1 差分信号到底在“差”什么差分信号是两条振幅相等、相位相反的信号线接收端比较的是两条线之间的电压差不是对地的绝对值。这就带来两个直接优势一是外界的共模干扰同时作用在两条线上相减之后被抵消二是接收端的判断不依赖地电平抗噪能力明显强于单端信号。但这也是有代价的。要让“相减”这个逻辑成立两条线必须尽量保持同步到达否则差值波形会被拉宽、振铃、抖动眼图直接闭合。所以在PCB上差分对有两个硬指标阻抗要连续长度要匹配。阻抗决定信号在传输过程中反射多少长度差决定两条信号到达接收端的时间差。这两件事做不好差分信号的优势就荡然无存。1.2 关键参数不在原理图阶段定好后面全白搭很多人的习惯是先把原理图随便一画网络标号乱了无所谓反正到PCB再整理。但对应到差分对这个习惯会浪费大量时间。AD20识别差分对最简单的方式就是靠网络名后缀比如USB_DP_P和USB_DP_N。如果你在原理图里随手命名为A1和A2到了PCB编辑器软件根本不知道它们是一对差分你只能手动去“创建差分对”还得一个个点网络。更麻烦的是阻抗。差分对的目标阻抗取决于接口协议USB 2.0常见90ΩHDMI和千兆网常见100ΩDDR内存走线常见40Ω单端、80Ω差分。这个阻抗由线宽、线距、介质厚度、铜厚共同决定。你不在原理图阶段就想清楚板子层叠和目标阻抗到布线时大概率是凭感觉拉线板厂反馈阻抗超标再回头改一版板子来回好几轮时间和钱都烧在沟通上。1.3 我只见过几种典型的低级失误第一种原理图里差分对的两个网络名字看着像对但中间隔了个磁珠或共模电感网络名被断开AD20识别不了完整的差分对DRC一直报错。第二种规则里只设了线宽和间距没有看差分阻抗是否满足结果板子做回来眼图惨不忍睹。第三种等长时只看总长度一模一样没注意蛇形走线的间距压得太小导致原本的耦合被破坏等效阻抗直接飘了。这几类问题都不是高深的技术难题纯粹是流程上的疏忽。把原理图和PCB当成一个整体来设计而不是割裂的两个环节大部分坑都可以提前避开。2. 原理图阶段就把差分对的地基打牢2.1 差分对网络命名与自动识别规则AD20对差分对的识别其实有固定套路。最省心的做法是给差分对的两条网络统一加_P和_N后缀例如HDMI_TX2_P、HDMI_TX2_N。在原理图编译后AD会自动把它们识别为一条差分对。你不需要额外画一个“差分对”符号只要命名规范软件就会默认组合。有人可能习惯用和-后缀比如A/A-这种我也见过。AD20并不是不能识别但存在一些版本兼容问题尤其在导入导出工程、跨部门协作时容易出现差分对识别不完整。所以我的个人建议是统一使用_P/_N后缀拒绝花活。网络标号里也尽量不要带空格和特殊字符别问为什么问就是踩过坑。如果你接手了一个老工程网络名完全不规范也不想大动干戈改名字可以用AD20的转换功能在PCB编辑器中执行Tools → Convert → Create Differential Pairs From Nets在弹出的对话框中手动勾选两条网络强制性建立差分对。这个方法适合临时补救但不符合“长期可维护”的标准新项目不建议这么干。2.2 元器件库引脚编号是“Unknown Pin”的重灾区原理图阶段最容易让人崩溃的报错之一就是Unknown Pin。很多人第一反应是“库里没有这个封装”其实真正的原因是原理图符号里的引脚编号和PCB封装里的焊盘编号不一致。举个例子某原理图符号的第1脚写的是1但PCB封装的焊盘编号写的是A1导入网络表时AD就不知道这个引脚该连到哪个焊盘直接报Unknown Pin。这种问题在从网络上下载的元器件库、或者从别的工程师手里拷来的工程里特别常见。正规的做法是在创建或修改元器件时打开原理图符号库.SchLib逐个对照引脚编号比如引脚属性里的Designator写的是1PCB封装.PcbLib里对应焊盘的Designator也必须写1。如果你用公司的集成库.IntLib在Component Properties里双击封装就能看到对应关系。排查方法其实也不难原理图编译完成后打开Messages面板定位到Unknown Pin对应的元件和网络再进去检查引脚编号。改封装或改符号时记住一定要同时更新到库文件里不然下次用还是会报错。2.3 用Net Class管理多组差分对而不是靠肉眼一个板卡上往往不止一组差分信号比如一块主板上既有USB又有HDMI还有千兆网口。如果全部挤在默认的“Differential Pairs”类里后期设置规则时你会疯掉——因为不同接口的阻抗和等长容差完全不同。我的习惯是在原理图阶段就给每类差分信号分好类。具体操作是在原理图编辑器中选中差分对网络放置Net Class指示符或Differential Pair Class指示符把相同接口的差分网络归到一个类比如DP_USB、DP_HDMI、DP_ETH。这样导入PCB后所有规则设置都可以按Class来做而不是一条网络一条网络地设。AD20里还可以通过Design → Classes看到这些类非常直观。如果你之前没做过分类PCB阶段也可以补救在PCB面板的Differential Pair Editor里右键新建Differential Pair Class再把成对的网络拖进去。但这就是亡羊补牢不如原理图阶段顺手做了。3. PCB规则配置才是差分对设计的核心战场3.1 先算阻抗再定线宽和间距这是一切的前提PCB布线不是碰运气差分对的线宽和间距必须由叠层和目标阻抗反推。我常用的工具是Polar Si9000也有人用Saturn PCB Toolkit或者直接用AD20自带的阻抗计算功能。不管用哪个先确认下面几个参数板厚、层数、参考层位置、介质材料FR4的介电常数常见约4.2、铜厚、以及走线所在的层。以一块1.6mm厚四层板为例假设顶层到内层参考平面之间的介质厚度是0.1mm左右铜厚1oz35μm表层微带线走100Ω差分常见的线宽在4~5mil、间距在5~8mil范围内。如果走到内层带状线因为两旁都有介质和参考平面同样100Ω条件下线宽和间距的组合又会不一样通常内层需要更宽的线或者更大的间距。这里的数值绝对不能照抄必须按实际叠层去算。算完阻抗后把这组线宽和间距填进规则里中间忘掉“感觉差不多”这个说法。差分阻抗不满足信号完整性测试那一关就过不去这是硬指标没有商量余地。3.2 Differential Pair Routing规则的五项关键参数在PCB编辑器中进入Design → Rules → Routing → Differential Pair Routing这里就是差分对的核心规则。需要关注的参数有五个线宽、线距Gap、耦合方式、规则适用范围、以及和外部网络的Clearance。线宽和线距直接来自阻抗计算。AD20支持设置Min、Preferred、Max三项我习惯把Preferred设成阻抗计算器给出的推荐值Min和Max留出20%左右的余量方便布线时微调。线距Gap的取值直接影响差分阻抗所以不要轻易为了“省地方”把间距压小。适用范围上建议新建规则时选择InDifferentialPairClass(DP_USB)这类条件精准匹配某个差分对类而不是全局用一条规则覆盖。不同接口的差分阻抗不一样全局规则只会让DRC报告变成废纸。Clearance规则也很容易忽略。差分对内部两条线之间用的是Gap参数但差分对与其他网络之间用的是普通的Electrical → Clearance规则。如果这条规则没设置好铜皮或者普通信号线离差分线太近会破坏差分对的耦合和阻抗甚至引入串扰。我的习惯是给差分对单独设一个Clearance规则比普通网络大一些通常3~5倍线宽以上。3.3 多组差分规则如何协作而不打架当你同时有USB、HDMI、千兆网等多组差分信号时规则优先级就变得很重要。AD20的规则优先级逻辑是“范围越小越优先”比如InDifferentialPairClass(DP_USB)就比All优先InNet(USB_P)又比InDifferentialPairClass(DP_USB)优先。我一般在PCB规则面板底部通过右下角的Priorities按钮调整规则顺序把更具体的Class规则放在上面。这样即使之后有人新建了全局Differential Pair Routing规则也不会把之前设置好的USB、HDMI规则覆盖掉。常见接口的差分参数我整理了一张表方便参考都是常见工程经验值具体以阻抗计算为准接口类型目标差分阻抗对内等长容差常见线宽/间距经验值USB 2.090Ω±5mil4.5mil / 6milUSB 3.0 / 3.190Ω±5mil且关注对内偏移对4.5mil / 7milHDMI TMDS100Ω±5mil4mil / 6mil千兆以太网100Ω±5mil4mil / 8milLVDS100Ω±5mil4mil / 7milDDR3/DDR4差分时钟80Ω±2~5mil按叠层计算表中的数值只是经验范围不同层叠下结果差异很大。真正动手前一定要用自己板子的叠层去算别把别人项目的参数硬套在自己头上。4. 布线实操从拉线到等长调节的完整动作4.1 交互式差分布线的正确打开方式规则配好后布线就轻松多了。在PCB编辑器中按快捷键T W调出Interactive Differential Pair Routing此时光标会自动吸附到差分对的其中一条线两条线会一起拉出来。走线过程中按Shift Space切换拐角模式45度角、圆弧、任意角度随你切换。差分对走线的基本原则是保持耦合。两条线沿途的间距尽量跟规则里设置的Gap一致不要太随意。拉线的时候如果遇到BGA扇出过孔要成对放置最好是并排对称打不要让一条线从过孔左侧绕、另一条从右侧绕这样长度差和耦合都会被破坏。换层是另一个容易出问题的地方。当差分对从表层转内层时两条线要同时打孔不能一先一后换层点最好位于BGA扇出区之外留有足够余量给过孔过孔桩和回流路径。我还习惯在换层过孔附近加回流地过孔让回流电流可以就近换层减小回路面积。4.2 等长调整的细节别让“蛇形”毁掉阻抗差分对布线完成之后就要做等长。这步大多数人都会但做好的没几个。快捷键T R调出Interactive Length Tuning先点击需要调整的那根线然后按Tab键设置目标长度、最大振幅、以及走线样式。目标长度怎么定如果是新设计可以直接量另一根线的长度把目标值设成跟上者一致如果有芯片手册要求就按手册给的最大长度和组间长度差来设。振幅Amplitude是关键参数我见过有人把蛇形线振幅拉到30mil结果两条线之间耦合完全被打乱阻抗也变了。经验上蛇形振幅不要超过线距Gap的2~3倍蛇形走线的间距也最好不要小于线距本身否则邻近耦合会干扰正常信号。调节过程中注意看AD20界面下方的长度提示它会实时显示当前长度和与目标长度的差值。调整完成后DRC会自动把等长结果体现出来。如果长度差比较大先粗略拉一次蛇形再缩小振幅做微调不要一上来就塞一个大回环。4.3 参考平面和整板布局的视角差分线再漂亮底下参考平面断了也白搭。高速差分信号的回流电流会沿着参考平面返回源端如果参考平面被分割回流电流被迫绕大圈环路面积变大EMI和信号完整性问题都会冒出来。我的习惯是在布线阶段随时按键盘上的数字键3切入透明模式直接看PCB板底下的参考平面。凡是要穿过参考平面分割线的差分对都会在透明模式下原形毕露。如果不得不跨分割建议在跨分割处加一个去耦电容或者调整走线路径绕开分割区域。另外不要把所有差分对都塞进一个狭窄区域。相邻差分对之间的间距如果太近会产生组间串扰。一般建议不同差分对之间至少有3倍线宽以上的距离如果空间紧张至少也要隔开一个地过孔。4.4 位号与丝印镜像这种细节别翻车在PCB上调整器件时镜像翻转元器件会把位号文本也跟着镜像结果板子做出来丝印上的位号是反的贴片时又难看又容易误导工人。这个问题在AD20里其实很好解决选中被镜像的位号文本打开Properties面板找到Text属性把Mirror选项取消掉即可。如果是多个位号可以过滤选择后批量修改。不要小看这类细节。一个板子电气设计再牛丝印一塌糊涂生产端和维修端都会对你有意见。差分对走线对丝印的要求不高但器件翻转之后位号方向跟其他器件不一致别人看图会用得很痛苦。顺手把这步做好板子交付时至少不会在工作台层面被吐槽。5. 常见问题与排查技巧实录5.1 差分对识别不了网络明明存在却拉不出线这个问题在我的工作里遇到过至少三次原因各不相同。最常见的是网络名在原理图阶段就不规范没有_P/_N后缀AD根本没把它们当成差分对。解决办法我在前面提过用Tools → Convert → Create Differential Pairs From Nets手动创建。第二个常见原因是网络被无源器件断开。比如两条差分线中间串了个磁珠或共模电感网络名从USB_P变成了USB_1差分对自然断裂。这种情况要么把磁珠放在差分对之外要么把滤波器件设计成可以合并网络的形式。如果你一定要在差分线路上串器件建议改为在接收端附近放置共模滤波而不是在线路中间硬插。第三个原因比较隐蔽是AD20工程文件跨版本或跨电脑打开后差分对设置没有同步过去。遇到这种情况打开PCB面板里的Differential Pair Editor看差分对列表是否为空如果为空就重新从原理图导入或手动创建。5.2 等长报告显示不通过但线明明调得很整齐先别急着怀疑DRC有Bug九成情况是目标长度和容差设错了。检查一下规则里的Matched Lengths确认Tolerance单位是不是设成了mm但实际等长调的是mil。mil和mm混用一个6mil的容差如果按照6mm去看当然永远不过。还有一种情况是等长调节只调整了其中一段比如BGA扇出区内部那段没有算进来。AD20计算的是整个网络的总长度不是屏幕上可见的那段。如果扇出区长度不一致即使外面绕得再漂亮整体还是不匹配。解决办法是将BGA扇出路径也纳入等长规划必要时在扇出区内就做小规模绕线。最后想说一个更阴间的坑有些网络存在多个分支比如差分线经过一个终端电阻网络AD20统计的是整条网络的总长度而不是差分对两条线各自的主路径长度。这种拓扑本身就很难做等长一般建议避免在差分主路径上挂多余分支实在绕不开就需要手动检查各分支路径。5.3 跨分割、过孔残桩带来的信号质量问题PCB打样回来高速通信测试不过常见症状是丢包、花屏、眼图闭合。很多工程师第一反应是“芯片坏了”“电源纹波大”但查到最后往往是差分走线的物理缺陷。跨分割是头号元凶。差分对经过电源/地平面分割处时阻抗突变远比你想象的大。排查方法选中某条差分线在PCB中打开Nets面板高亮显示同时按3进入透明模式仔细看走线下方参考平面的完整性。如果下方没有完整铜皮这组走线就必须改道。过孔残桩Stub也容易被忽略。对于高速信号换层过孔未使用的部分就像一根短截线天线会引起谐振和反射。频率越高越敏感。解决办法是尽量选择板厚较薄的叠层或者在允许的情况下使用背钻工艺把不需要的过孔段钻掉。这个视板厂工艺和成本决定但在方案评估阶段就要想到别等测试不过了再临时找方案。另外检查一下差分对末端有没有短接或终端的处理是否符合协议要求。有些工程师在原理图阶段就把源端串阻、接收端下拉电阻接错位置导致接收端看到的共模电平和差分摆幅都不对。这种情况PCB再完美也没用得回头改原理图。5.4 出制造文件前的总检查清单在交付板厂之前我会固定做几件事算是一个简单但有效的保险第一跑一遍完整DRC重点看Differential Pair Routing和Matched Lengths是否全部满足。不要只看有没有错误还要看警告警告多了说明设计很勉强迟早出问题。第二用OutJob文件统一输出Gerber和钻孔文件。AD20自带的OutJob功能比手动逐层导出要可靠它能保证每次导出的文件集合是一致的避免漏层、漏钻孔的尴尬。需要注意的是在输出完成后用Gerber Viewer快速过一遍每一层确认差分对所在层的走线和过孔都在。第三把叠层文件、阻抗计算表、以及差分规则参数一并交给板厂。板厂会根据你的叠层微调阻抗但前提是你把目标值给清楚。不要只说“我要100Ω差分”至少把走线层、线宽、间距、参考平面都写进制造说明里。这样板厂才能一次性把阻抗控制在合理范围内。第四检查丝印和位号方向。批量选中所有位号确认没有镜像文字。我见过不少板子因为位号镜像返工重做丝印又慢又贵完全可以提前避免。5.5 排查技巧速查表现象可能原因排查方法拉不出差分对走线网络名不规范、网络被无源器件断开检查_P/_N后缀查看Differential Pair EditorDRC报Unknown Pin原理图符号引脚编号与PCB封装焊盘编号不一致对比.SchLib和.PcbLib中的引脚名称等长调整总不过目标长度或容差单位错误、扇出区未纳入计算检查Matched Lengths规则切换mil/mm显示高速通信测试不过参考平面跨分割、过孔残桩过长透明模式查看铜皮检查过孔背钻方案丝印位号反了器件镜像翻转未修正位号Properties面板取消Mirror差分阻抗超标线宽线距未按叠层计算、耦合被蛇形线破坏重新计算阻抗检查蛇形振幅和间距说说我个人的一点体会做差分对这件事我自己的体会是它不依赖天才灵感依赖的是流程纪律。原理图阶段命名规范元器件库引脚对得上差分对Class归好PCB阶段按叠层算阻抗规则按Class精准配置布线时保持耦合和等长最后老老实实跑DRC、出Gerber、附上阻抗说明。这套流程看起来啰嗦但能稳定地帮你把板子一次做对而不是在打样和返工之间反复横跳。最后再分享一个小习惯我在工程里会专门建一个命名为“DP_RULES”的封装文档里面存着常用的差分阻抗计算表、层叠模板和规则截图。每做一个新项目先把叠层参数填进表里算一遍再往AD20规则面板里填数值。这样即使隔了半年再回头看老项目也能快速回忆起当初是怎么定的参数不用重新翻聊天记录或者问同事。这年头工程师能给自己留多少可靠的“过程资产”后面就能省多少时间。
返回列表