ARTICLE DETAIL

资讯详情

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

Altium Designer差分对布线避坑指南:从原理图命名到PCB

Altium Designer差分对布线避坑指南:从原理图命名到PCB 上个月画一块USB集线器底板原理图里明明已经给D、D-加上了差分对标网表更新到PCB之后左下角状态栏没有任何报错两条网络也都在可我怎么调用交互式差分对布线都调用不出来。后来发现不是软件坏了而是原理图中同时存在了两套命名风格一对是USB_D / USB_D-另一对是DP / DNAltium识别差分对靠的是后缀规则这种命名不一致直接让工具“装看不见”。这类事情在Altium Designer 20里算不上冷门。差分对布线本身不复杂但从原理图阶段的命名规范到PCB阶段的规则设置、等长调整、DRC检查再到最后给板厂写阻抗说明整条链路只要有一个环节没对齐后面就是各种玄学问题。这篇东西我打算按“从原理图到PCB”的顺序把AD20里差分对相关的操作完整过一遍重点放在那些文档里不会明说、但实际画板时一定会遇到的坑上。适合刚接触高速PCB的工程师也适合那些已经布了一段时间、但对差分对规则一直“知其然不知其所以然”的设计者。1. 差分对在Altium里的“驱动链”命名、指令与识别机制1.1 为什么差分信号要成对走线简版原理先花一分钟说清楚底层逻辑否则后面设置规则时你没法理解为什么要填那些数字。差分信号是两根线上幅度相等、相位相反的信号接收端关心的是两端电压的差值而不是某根线对地的电压。好处有两个对外辐射相互抵消EMI低对共模噪声比如电源地弹、外部干扰同时耦合到两根线上的噪声天然免疫因为差值计算会把共模部分减掉。在PCB上体现这个原理手段就是让两根线“形影不离”——走线相邻、间距恒定、长度尽量相等。这样两根线受到的干扰相同串扰进入的是共模成分两根线长度不同则信号到达接收端的时间不同差值信号的眼图就会塌掉。差分对布线工具本质上就是通过对宽度、间距、长度的控制帮你把“形影不离”这四个字转化成几何坐标。1.2 原理图命名规则_P/_N是一切的起点Altium识别差分对靠的不是你画没画那根指令线而是网络名的后缀。默认规则是一个网络以_P结尾另一个以_N结尾并且去掉后缀后前缀完全一致Altium才判定它们是一对。举个例子合法的配对USB_D_P对USB_D_NETH_TX_P对ETH_TX_NDP0_P对DP0_N不合法的配对USB_D对USB_D-Altium默认不认“ / -”后缀DP对DN前缀不一样也不是标准后缀USB_D_P对USB_D_N_1后缀格式不一致有两件事需要特别提醒。第一USB_D这种命名在很多原理图库、尤其是网上找来的参考设计里非常常见。你要是从第三方库拿的符号务必检查网络名。AD20里可以在原理图编辑器的菜单栏找到“Place → Directives → Differential Pair”来放置差分对指令但指令只是“声明”真正触发合并的仍然是命名后缀。第二差分对指令放置时只落在其中一根网络上但它的作用范围是“匹配命名规则的另一根网络”。如果你只给网络标了_P没有对应的_N指令放下去没有任何报警到了PCB阶段这条网络会被单独落下看起来像丢了网络一样。1.3 差分对指令怎么放、放在哪里操作上在原理图中放置差分对指令的路径是Place → Directives → Differential Pair然后把指令附着在_P网络或_N网络的导线上。但这里有一个实际习惯问题指令放在原理图符号的引脚根部还是放在远处网络标号旁边我个人的建议是放在信号源输出引脚附近或者放在网络标号旁边总之要放在你能一眼看到的位置。原因很实际后期改版时如果有人在原理图上动过网络、改了名字差分对指令的位置会直接影响你排查的速度。放在源端引脚附近配合AD20的“交叉选择”交叉选择模式你一眼能看出哪个引脚出去的信号是差分对。另外不要在一张原理图上混用两种命名风格。有的工程师喜欢TX_P和TX_N有的喜欢TXDP和TXDN这两种风格单看都没问题但混在同一个工程里时TX_P和TX_N配成对TXDP和TXDN又是另一对一旦网络标号某个字母大小写不一致差分对就会悄悄消失。1.4 符号引脚与封装引脚的对应这块是“Unknown Pin”类报错的重灾区跟差分对直接相关。差分信号在器件符号上通常表现为成对的引脚比如收发器的D_P、D_N或者连接器符号里的1_、1_-。在原理图库编辑器里每个引脚有“引脚号Pin Number”和“名字Pin Name”。当你做差分对声明时Altium是根据网络名而不是引脚名来匹配网络的所以只要网络标号命名对引脚叫什么名字不影响差分对合并。但会影响“Unknown Pin”报错的是引脚号与PCB封装的焊盘号对应关系。比如封装里焊盘叫D原理图符号引脚号却写成1导入PCB时Altium找不到1号焊盘就会报错。这种情况常见于从其他EDA工具转过来的库或者网上随便下的符号库。解决办法是打开原理图库把引脚属性里的标号改成与PCB封装焊盘一致再更新原理图重新走一遍导入流程。2. 从原理图到PCB转接时最容易翻车的几个环节2.1 更新PCB文档ECO前的准备工作在AD20里从原理图把内容同步到PCB走的是Design → Update PCB Document软件会生成一份ECO工程变更单把元件、网络、规则清单列出来。很多人习惯直接点“执行变更”中间那一长串列表根本不看这个习惯在普通设计里可能没问题但遇到差分对时就容易埋雷。我的习惯是执行变更前先把ECO窗口里的“规则”分类展开看里面有没有出现以“Differential Pair”开头的规则条目。正常情况下如果你在原理图里放了差分对指令这里会出现对应的差分对规则如果这里空空如也说明原理图端的差分对声明就没生效千万别继续往下走。另一个容易忽略的点是网络类Net Class和差分对规则的关系。PCB的布线规则既可以挂在网络类上也可以单独挂在某个差分对上。我更推荐在PCB阶段把差分网络加入一个专门的网络类Diff_Nets然后在规则里以“Net Class”为作用范围来设置线宽、间距。这样做的好处是规则优先级清晰后期改一对差分对的参数时不用动全局规则。2.2 “Unknown Pin”的常见源头AD20的“Unknown Pin”报错分两种情况一种是原理图编译Compile阶段就报一种是执行ECO导入PCB时报。原理图编译阶段报“Unknown Pin”大概率是原理图符号里的引脚号与原理图库中该元件的模型引脚不匹配或者某个元件的PCB封装还没指定。这种报错跟差分对没有直接关系但它会中断整个网表的生成差分对自然也就无从谈起。执行ECO时报“Unknown Pin”多半是某一个库元件在PCB封装里找不到对应的焊盘号。举个例子网上的一个HDMI连接器封装焊盘号写的是A1、A2、B1、B2但原理图符号引脚号写的是1、2、3、4导入时两边对不上。解决办法是在原理图库中修正引脚号或者重画封装确认焊盘编号与符号引脚一一对应后再同步。排查这类问题有个效率技巧在ECO窗口里直接双击报错行AD20会高亮对应的原理图器件和引脚它能帮你快速定位是哪颗料出的问题。2.3 用差分对面板检查“漏网的差分对”PCB界面下打开面板的方法是右下角Panels → PCB然后把面板顶部的下拉框切到“Differential Pairs Editor”。这个面板是排查差分对问题的第一现场。面板里会列出工程里所有被识别的差分对以及它俩的状态名称、正负网络、是否已经布线、是否满足长度匹配。用一个我遇到过的场景说明它的价值。有一回我画一块板LVDS的时钟差分对在原理图里明明有指令进PCB面板却发现只列出了一条网络另一条网络被孤零零地扔在普通网络列表里。点进去查命名才发现LVDS_CLK_P这边写了而LVDS_CLK_N因为引线过长网络标号被一个文本框挡住了实际连接断开导致网络名根本没变成_N结尾。这种情况在原理图里用DRC检查都不一定能发现因为电气连接是完整的但网络名不匹配。所以我的建议是每次原理图改完、准备导入PCB之前花30秒打开PCB面板里的差分对编辑器看一眼确认所有该出现的差分对都在。这一步能省掉后面至少一个小时的排查时间。3. 布线之前先把约束搞清楚3.1 目标阻抗从哪来差分对布线规则里的线宽和间距不是凭空拍的它们服务于目标阻抗。不同接口的差分阻抗要求不同最常用的几个参考值如下接口类型差分阻抗要求常见应用USB 2.090Ω ± 10%鼠标、键盘、Hub以太网100Ω ± 10%PHY到RJ45、变压器HDMI100Ω ± 10%显示信号LVDS100Ω ± 10%屏幕接口、摄像头PCIe85Ω ± 10%高速扩展总线SATA100Ω ± 10%存储接口这些数值在芯片数据手册里都会标明没标明的以参考设计和板厂工艺为准。拿到目标阻抗后线宽和间距怎么算最快的办法是让板厂出叠层阻抗方案板厂的阻抗工程师会基于你的板厚、层数、材料、铜厚给出一组建议的线宽和间距。设计侧需要做的是把这组值填进AD20的差分对规则里。如果你在前期选型阶段就想自己估算可以用免费的阻抗计算工具比如Polar Si8000的试用版、或者各类在线微带线阻抗计算器。但注意计算工具里的介电常数、介质厚度必须和实际叠层一致否则算出来的值只是个参考。FR4材料的介电常数受玻纤布结构和树脂含量影响不同板材厂的同厚度板子实际阻抗也有差异所以最终以板厂实测为准。3.2 差分对布线规则的四个核心参数AD20中设置差分对规则的入口是Design → Rules → Routing → Differential Pairs Routing。打开后你会看到两类参数一类是线宽Width一类是间距Gap每一项都有Min、Preferred典型值、Max三个数值。需要分清的是这里的“间距”有两个顶层Min Gap / Preferred Gap和边缘到边缘的“线到线距离”。Altium里用“Primary Gap”表示差分对内两根线之间的间距还有“Secondary Gap”用于约束差分对与外部其他网络之间的间距。通常前者是耦合间距后者是安全间距很多新手只改了前者没改后者结果差分对紧贴着旁边的普通信号走串扰全吃进去了。我习惯在规则表里这样填参数最小值典型值最大值说明Width线宽4mil5mil8mil受阻抗要求影响Gap对内间距4mil5mil12mil间距越大耦合越弱Max Uncoupled Length//100mil允许不耦合的长度上限“Max Uncoupled Length”这条特别容易被忽略。它表示两根线之间允许出现多大一段“彼此分开”的距离超过这个值DRC会报错。在绕等长的时候蛇形绕线的转折处必然会出现短暂的“不平行”这个参数就是给这些转角留余量的。我一般设成100~150mil太小绕完等长的转角全在报警太大起不到约束作用。3.3 用Neck Down解决太紧的布线通道做BGA封装或者连接器附近布线的时候差分对要求的线宽和间距往往放不进去——引脚间距只有0.5mm甚至更小按计算出来的“Typical Width 5mil、Gap 5mil”根本出不了通道。AD20解决这个问题的方式是通过“规则作用域优先级”从上到下匹配。差分对规则里可以设置多个不同作用范围的规则并在规则优先级窗口Design → Rules → 右下角Priorities中调整顺序。比如在BGA扇出区域内设置一条“只作用于该区域”的差分对规则把Width降到4mil、Gap降到4mil这就是“Neck Down”颈部收缩的实际用途。设置Neck Down的方法是在差分对布线规则以外再建一个规则作用区域用WithinRoom或InComponent限定到某个Room或者某个器件然后给这个规则更高的优先级。布线时AD20会根据当前走线位置自动切换线宽和间距不需要你手动去调。但注意一点Neck Down区域的长度越短越好阻抗突变意味着反射。在BGA扇出区这种不可避免的地方用是正常的但绝不能在一条长走线的中间故意用Neck Down来绕避障碍物而不做阻抗补偿。3.4 间距和过孔耦合不是越大越好有一个常见的认知误区差分对两根线之间间距越小耦合越强越“抗干扰”。这并不完全正确。间距过小一来阻抗会明显下降为了维持目标阻抗可能要把线宽大幅收窄反而恶化了损耗二来制造误差对间距的敏感度变高板厂做出来的实际阻抗波动会非常大。更合理的做法是让差分对内间距等于或略大于阻抗计算推荐的间距同时保证两根线全程保持恒定间距。恒定比数值小更重要。另外过孔的问题也值得提前说。差分对如果必须换层两个过孔应尽量对称放置间距与走线间距一致。过孔本身的寄生电容会造成阻抗不连续所以能做好的板厂通常会建议在小区域增加anti-pad的直径或者把过孔附近的铜挖空void area来补偿。你在AD20里画差分对过孔时至少要做到两个过孔的孔径、焊盘、位置完全对称不要在过孔处把两根线拉得忽大忽小。4. 交互式差分对布线一段一段拉出来的经验4.1 进入差分对布线模式AD20中的差分对布线入口在Route → Interactive Differential Pair Routing快捷键是IP。进入布线模式后鼠标点击差分对中的任意一根网络AD20会自动把一对网络都拉出来。需要同时按Tab键打开属性面板确认当前使用的规则是你要的那条分辨率高的显示器下属性面板会出现在左上角浮动窗口。实际布线时我碰到过一种情况点击其中一根网络后AD20只拉一根线出来不拉另一根。排除规则没生效后最可能的原因是这条网络没有配对成功。回到PCB面板 → Differential Pairs Editor确认网络成对存在然后重新编译工程。注意原理图修改后要重新执行一次Design → Update PCB Document只保存是不够的。布线的顺序也有讲究。我习惯先把信号源端到负载端的路径整体拉通不急着调整等长先保证拓扑合理和参考平面连续。等所有差分对都拉通后再统一做等长调整。这样做的原因是等长调整时你可能需要绕线空间如果一根线已经绕得很难看会给旁边通道造成不必要的挤压。4.2 绕等长别一上来就用ShiftAAD20的自动等长工具确实好用快捷键是在布线过程中按ShiftA切换到自动长度调整模式然后拖动鼠标软件会根据目标长度和最大振幅自动绕蛇形线。但我的经验是绕等长之前先做两件事。第一确定目标长度。选中差分对的两根线在Reports → Measure Selected Objects或直接看属性面板里当前线的长度。找出较长的那一根作为基准长度以最短的路径拓扑为基准然后在交互式长度调谐工具的属性面板里输入目标长度值和公差。USB 2.0的差分对内等长要求一般很宽松±50mil甚至±100mil都行但像DDR这类高速接口等长要求就严格得多具体以芯片手册为准。第二绕线空间要事先留好。蛇形绕线需要横向空间两根差分线的外侧至少要留出10~15mil的净空否则绕到一半发现旁边是别的器件只能推翻重绕。在设计布局阶段就该给差分对留出等长调整的富余带宽。ShiftA自动绕线时通过键盘的1和2可以调整绕线模式社交网络上很多人推荐用“正弦波”模式但近几年的实践里我更倾向于接近“锯齿带弧角”Mitered的模式它兼顾了绕线效率和阻抗连续性特别是在空间紧张的时候正弦波的占用宽度往往更大。4.3 过孔与换层时要注意的对称性差分对换层的原则就一句话两条线同时换过孔对称参考平面不中断。实际中常见的问题是在盲埋孔工艺的板子上设计者为了图省事让两根线在物理位置上靠近的同一个换层点各自打了一个孔但由于扇出方向不同一个过孔打在铜皮边缘另一个打在铜皮中间两根线的过孔寄生参数完全不同等效于给差分对引入了一段不对称的阻抗突变。在AD20里处理这个问题我的做法是先把焊盘和过孔的网格设置成对齐状态比如G 5mil然后先打过孔1再用也锁定相同相对坐标的方式单独放置过孔2直接用精确坐标输入来保证误差在0mil。这个细节在低频板子上无所谓但跑到几百兆以上时过孔的不对称往往比走线长度的误差更加致命。4.4 相位交叉问题两条线不能交换角色这一点要单独强调差分对的两条线在走线过程中不能“交叉换位”。有些初学者在绕线时会因为避障让两条线突然交错一下从视觉上以为只是绕了个弯实际上这就等于让P线和N线交换了角色。接收端如果没做极性自动翻转的话信号相位就反了通信直接失败。雷电和USB4等带翻转协商的接口通过训练序列可以自动纠正但USB 2.0、LVDS这类简单协议没有这种能力。在AD20里检查相位问题可以在DRC中开启“Differential Pair”相关检查不过我更推荐靠肉眼交叉探针的方式用PcbDoc里按TM打开交互式多根走线选择工具勾选两根网络在走线时看高亮轨迹是否始终平行同向。一旦发现两条线在某个区域出现“麻花状”交叉必须返工。5. 高发问题与排查排错5.1 差分对调用不出来症状按了IP快捷键点击网络后没有任何反应或者只拉出一根普通单端线。排查顺序打开PCB面板的Differential Pairs Editor确认这两个网络确实被识别为差分对。如果不在这列表里回到原理图检查网络后缀命名是否规范差分对指令是否实际附着在网络导线上。如果原理图没问题重新执行Design → Update PCB Document在弹出的ECO窗口里选“重新生成全部规则”。检查差分对布线规则是不是被禁用了选中规则看属性面板里“Enable”是不是打了勾。我遇到过一次比较隐蔽的情况同时打开了两个PCB工程文件一个是旧版本板卡一个是最新版更新数据时把旧工程里的规则重新载入了新工程的差分对规则被旧规则的“同名”规则覆盖看起来有规则但实际生效的是旧参数。这种问题关掉多余工程窗口就能解决。5.2 器件选不中/内存占用涨到离谱PCB中元件“看不到但存在”或“鼠标点不上”的问题在AD20的差分对布线排错之后常常会掺杂出现原因五花八门最常见的是两个。一个是筛选器Filter误开。AD20底部状态栏有“查找相似对象”后的选择过滤如果你之前做过选择性高亮并且没有清空过滤条件PCB里能选中的对象会被限制为一类。解决办法是按ShiftC清除过滤或者在右下角面板打开“清除”按钮恢复选择全部对象。另一个是内存占用过高。AD20在打开大板子、尤其是铺铜区域实时刷新时占内存非常凶如果你同时开着3D视图和在线DRC内存会一路涨到卡顿。玩高速板的话建议把在线DRC改成手动批量DRCDesign → Rules → 在线DRC取消勾选布完线再统一检查。还有渲染相关的设置直接关掉“高亮显示3D模型”相关选项二维布线过程中根本用不到。5.3 等长DRC一直爆红等长调了半天DRC里“Maximum Length/Minimum Length”还是飘红这种问题我碰到的原因有这么几类第一类是目标长度本身设得不对。你设的目标长度必须大于所有单根线的实际长度如果你把目标长度设得比最长的那根还短无论怎么绕都绕不回去。正确的目标长度是“最长信号的最短物理路径”再加上余量。第二类是“Max Uncoupled Length”没有放开。绕线转折处两根线短暂分开如果这段距离超过规则阈值AD20会报uncoupled长度错误。解决方法不是盲目增大阈值而是检查蛇形绕线的转角是否有必要绕那么大尽量控制在200mil以内。第三类是规则的应用对象不对。如果你把等长规则写在了“All”对象上而差分对规则只作用于某几个网络DRC会用全局规则来检查差分对全局规则往往没有设置长度约束参数导致检查结果和你的初始意图不一致。建议把差分对长度约束直接写在差分对规则组里不要另建全局规则。5.4 明明有规则布出来却还是普通走线这种情况下信号看起来布了但DRC不认这是差分对走线一对差分线被当成两条普通单端线处理。根因通常是这两条线不满足“差分对基本条件”要么线宽不一致要么间距不一致要么某一段被剪断过导致物理连接不连续。AD20的DRC判定一条走线是不是差分对布线靠的是几何信息规则检查——线宽偏离Preferred太大直接判定为“不是差分对”。你把线宽从5mil手动改成3mil后再走线即使用IP拉线它也可能会“退化”成普通走线。遇到这种情况先看属性面板确认当前走线的“差分对”属性字段存在。另一个少见场景是线走到一半断开了断点后又按了普通走线模式续接结果断点附近产生了一段“非差分”的线路后续每一段走线就都是单端模式。实践中遇到断线重接时我习惯重新执行差分对布线指令而不是接着旧线头走线。6. 出图前复查从DRC到Gerber6.1 差分对专项DRC批量DRC之前我建议先把差分对相关的检查项单独跑一遍。在Design → Rules → 双击“Differential Pairs Routing” - 注意不是局部的“阻焊/装配”规则是Routing规则类别下的Differential Pairs Routing确保它的检查项全部勾选。另外在DRC运行设置里选中“Rules to Check”标签页确认以下几点差分对的线宽/间距规则状态是“在线检查Online”或“批量检查Batch”已勾选“Un-Routed Net”检查项里对差分网络不会报“未连接”误报“Length Matching”规则勾选上了跑完DRC后看Report里的Differential Pair分类栏重点关注有没有“Uncoupled Length”和“Length Mismatch”提示。一般我会把这个DRC报告导出成HTML存下来作为设计评审的附件。这个习惯在我经历了两次“事后发现等长没做”的返工之后养成的现在每块板子出图前必留一份。6.2 给板厂的阻抗说明怎么写PCB投产时差分对不是画完线就完事了板厂需要知道你要什么阻抗、怎么叠层、哪些网络是差分网络、允许的阻抗公差是多少。我习惯在投板资料里附一份简单的“叠层与阻抗说明”包含以下内容板材叠层结构哪些层是信号层哪些是参考地平面介质厚度各差分信号的目标阻抗比如“USB 2.090Ω±10%”“LVDS100Ω±10%”对应网络的线宽和间距即你在AD20规则里填的Preferred值需要特殊处理的过孔区域是否采用背钻、是否需要在内层加阻抗参考这份说明可以放在一个文本文件里也可以放在PCB文档的机械层注释里。很多板厂的下单系统里也支持直接上传阻抗文件但一份独立说明更不容易被漏看。需要特别说明的一点是如果规则里填写的线宽线距和板厂实测阻抗有偏差板厂通常会在EQ确认时提出“改线宽”或“改叠层”的方案。这时候不要只回复“可以”而是想清楚你是能接受改变线宽对布线空间和耦合有影响还是更倾向让板厂调整叠层中的介质厚度。这块确实是经验活因为同一个叠层不同厂家的压合工艺差异会导致阻抗漂移几个欧姆所以要给板厂留出容差。6.3 Gerber导出时容易被忽略的层Gerber导出File → Fabrication Outputs → Gerber Files在AD20里看似点两下就完事但差分对相关的坑还是有几个。最常漏的是“钻孔层”和“阻焊层”当然这跟差分对没直接关系所有设计都要检查。我针对差分对特别提醒两件事第一如果你在PCB里用了专门的差分对阻抗标识比如在丝印层标注了阻抗值“100Ω”检查丝印层是否导出。丝印层的文字不要压在差分走线上面否则对信号通道有影响但对制造来说只是可读性问题真正要注意的是丝印与走线间距是否满足工艺要求。第二如果你在机械层放了阻抗说明或叠层标识也要确认Gerber里包含该机械层。在Gerber设置窗口的“Layers”标签页机械层默认是“Plot”——也就是出图的但有时候会因为前一次导出设置了“不输出”而漏掉。导出的Gerber文件用CAM工具或AD20自带的CAMtastic打开复查一遍重点看差分对走线区域是否有意外的铜皮缺失或短路特别是打过孔后相邻层的anti-pad是否连通。这一步不能省尤其是外发PCB代工时网络表对齐和铜皮完整性都以Gerber文件为准而不是你的.PcbDoc文件。最后分享两个实际操作中的小技巧一个是关于差分对等长检查的。AD20里有一个非常容易被忽略的功能在PCB面板切换到Nets模式选中差分对的两根网络底部会显示当前总长度。利用这个信息我通常会在规则里把长度公差直接设置成“目标长度的±0.05%”代替默认的0mil避免DRC把可接受的微小差异当成错误。另一个是关于原理图端命名规范。如果你是团队协作或者在跟外部方案公司对图纸建议在原理图模板里写清楚差分对网络命名规范“所有差分网络统一采用前缀_P和前缀_N禁止使用 / -、P / N混用、以及大小写混写”。这句话我写进了公司内部的设计规范文档第一页后来几乎所有差分对相关沟通问题的发生率都降了下来。工具终究只是工具真正避坑的还是设计者自己是否在每一个环节都保持了前后一致。
返回列表