ARTICLE DETAIL

资讯详情

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

AD差分线规则设置避坑:从差分对识别到等长补偿

AD差分线规则设置避坑:从差分对识别到等长补偿 在 Altium Designer 里做差分线我见过的翻车现场远比想象中多有人把规则改了三遍板子上的线还是老样子有人 Preferred Gap 填了 4milDRC 却一声不吭还有人干脆放弃交互式差分布线用 Place 菜单里的 Track 一根一根手拉最后跑 DRC 满屏红叉。这些问题表面看是规则没设对实际上绝大多数是三个层面被混淆了差分对的身份根本没建立、规则的作用域和优先级搞反了、布线时用的工具压根不吃差分规则。这篇就把这三件事按顺序拆开把 AD 差分线规则设置里那些被反复抄错的地方挨个纠正一遍顺带把线宽间距怎么从阻抗反推、等长和相位怎么补、已经布错的线怎么批量救回来这些实操细节讲透。不管你是刚学 AD 的学生还是已经画过几块板的工程师只要你的差分线出过 DRC 报错、阻抗控不住、等长做不准下面这些内容应该都能直接拿去用。为避免版本差异带来的困惑文中涉及的菜单位置以 AD17 之后的版本为准老版本入口略有出入的地方我会单独标注。1. 先确认 AD 认不认这对线是差分对1.1 差分对是关系不是两根挨着的线很多人脑子里对差分对的理解是两根并排走的线所以在 PCB 里看到两条线贴在一起走就觉得差分规则该生效了。AD 不是这么工作的。在 AD 的数据模型里差分对是一个关联关系哪两个网络是一对、谁是正端谁是负端。这个关系不存在Differential Pairs Routing 规则就算写得再漂亮也找不到作用对象等于一张废纸。所以规则不生效的第一大原因往往不在规则对话框里而在更早的一步——差分对压根没被识别出来。判断方法很简单打开 PCB 面板把顶部下拉切到Differential Pairs Editor模式列表里如果空空如也或者只有一半的差分对那后面所有规则配置都是空转。1.2 命名后缀对不上规则再对也白搭AD 建立差分对关系的第一条路径是从网络名自动推断。它会扫描原理图编译后的网络名把符合命名模板的成对网络识别成差分对。这里有个很常见的坑不同项目、不同芯片厂商给的参考设计命名习惯完全不一样有人用TX1 / TX1-有人用USB_DP / USB_DM还有人用PCIE0_TX0P / PCIE0_TX0N。前两类一旦落在 AD 默认模板之外就识别不出来。命名形式常见来源AD 默认识别情况XXX_P/XXX_N通用规范识别最保险XXX/XXX-部分连接器、射频器件一般识别XXXP/XXXN芯片原厂参考设计多数版本识别XXX_POS/XXX_NEG工业类器件一般识别XXX_DP/XXX_DMUSB 类器件通常不识别需手动建XXX_TX/XXX_RX-部分高速接口不识别需手动建我自己现在的固定做法是不管原厂叫什么我在原理图里统一改成_P/_N后缀。这个后缀在几乎所有 AD 版本里都被识别风险最低。改名的代价只是原理图里多敲几个字符比在 PCB 里折腾规则划算得多。命名模板本身是可以配置的入口在项目选项Project » Project Options里不同版本这一项的位置不完全一样有的在 Options 页有的单独成块。如果你确实不想改网络名可以在那里把项目自己的命名习惯加进去加完之后必须重新编译工程才会重新识别。1.3 手动补建差分对的三个入口识别不出来的就得手动建。我常用的是下面这几种方式按效率从高到低排PCB 面板的 Differential Pairs Editor里面有一个从网络生成差分对的按钮可以按当前命名规则批量创建也能逐条 Add。手动 Add 的时候要特别注意 Positive 和 Negative 有没有填反——填反了不会报错但布线时正负端就调换了等长补偿方向也会跟着错。Design » Classes 里的 Differential Pair Classes适合按接口分组建类比如把所有 100Ω 的差分对塞进一个DP_100R类后面写规则时一行 scope 就能覆盖一整组不用挨个点名。原理图侧放置差分对指示符适合那种网络名完全不讲道理的场合直接在原理图里给两根线挂上差分对属性编译完 PCB 就自动带上关系。手动建完之后一定要回 PCB 面板再看一眼列表确认成对数量和正负极性都对。这一步花两分钟能省掉后面半小时的 DRC 排查。2. Differential Pairs Routing 规则里那几个数到底谁管谁2.1 线宽和间距是成对的不是六个独立参数打开 Design » Rules在 Routing 分类下找到Differential Pairs Routing你会看到一个两行三列的表格MinMaxPreferredWidth4mil8mil6milGap4mil8mil6mil这张表最容易被误读的地方在于很多人把它当成六个可以随便填的参数于是出现我把 Preferred Width 从 5mil 改成 6mil 了怎么线上还是 5mil这种问题。真相是——这三列是三个完整的方案每列里的线宽和间距是一组必须一起改。你把 Preferred Width 改了却没动 Preferred Gap实际布出来的是新线宽 旧间距差分阻抗直接从 100Ω 飘到 110Ω 以上而 DRC 还不会报错因为它只检查是否落在 Min/Max 区间内。注意改差分规则时养成一个习惯——每次动 Width 就顺手看一眼同一列的 Gap两个数要么一起写进笔记本要么一起改。Min/Max 这两列也不是摆设。Min 是 DRC 判定的下限Max 是上限Preferred 是交互式布线器默认取的值。布线过程中按 Tab 临时调整的数值就是在这个 Min/Max 区间里滑动一旦超出区间拖出来的线会立刻变成 DRC 违规。2.2 规则不是设计依据阻抗才是第二个认知偏差是把规则面板当成设计输入。正确的顺序应该反过来先定阻抗目标再定叠层最后才反推线宽和间距规则只是把这个结果固化下来。因为你在线宽间距框里填的任何数字本身没有任何电气意义只有和叠层参数绑在一起才有意义。这也是为什么从别人板子上抄一组 5mil/5mil经常出问题的原因人家的叠层是 6 层板、内层介质 0.1mm你的是 4 层板、外层到参考平面 0.2mm同样的线宽间距阻抗能差 20Ω。AD 从 17.1 之后的版本开始Layer Stack Manager 里带了阻抗计算能力可以按层定义单端和差分阻抗目标再让它帮忙推线宽间距甚至直接生成对应的布线规则。这比手算靠谱得多。但前提是你得先把叠层的真实参数喂进去——介质厚度、介电常数、铜厚这三个数据必须找板厂要不要用软件默认值也不要用网上抄的通用值。2.3 一个算例100Ω 差分对是怎么推出来的为了让这件事有可复现的手感我拿一个常见的微带线场景走一遍。工程上常用的估算公式是这样的来自 IPC-2141 体系的近似式单端微带线特性阻抗Z0 87 / sqrt(εr 1.41) × ln(5.98 × H / (0.8 × W T))边缘耦合差分阻抗近似Zdiff ≈ 2 × Z0 × (1 - 0.48 × exp(-0.96 × S / H))其中 W 是线宽S 是两条线之间的间距H 是到参考平面的介质厚度T 是铜厚εr 是介电常数。假设 4 层板外层到内层参考面 H 6milεr 4.31oz 铜厚 T ≈ 1.4mil目标是 100ΩW (mil)S (mil)Z0 (Ω)Zdiff (Ω)6871.9124.68855.696.281055.6100.391052.093.8101048.988.2从表里能看出两件事。第一W 8mil / S 10mil 这一组最接近 100Ω可以拿来做起点。第二S 从 8mil 加到 10mil阻抗只涨了 4Ω 左右说明间距对阻抗的调节能力是非线性且逐渐饱和的——继续把 S 拉到 20milZdiff 会趋近 2×Z0 也就是 111Ω 左右再怎么拉也上不去了。这条规律很实用当你发现间距怎么调都凑不到目标阻抗时说明问题在线宽和叠层上继续拉间距纯属浪费时间。还有一点必须提醒这些公式是手算预估误差通常在 5%~10%。真正定值的时候我会按算出来的结果留一点余量比如目标 100Ω 就按 96~98Ω 设计然后让板厂用他们的场求解器复核一遍。叠层能不能做出这个阻抗最终是板厂说了算不是你我说了算。3. 规则作用域和优先级为什么改完规则板子没变化3.1 Scope 查询语句写错的三类典型症状规则面板右上角那个 Full Query 输入框是差分规则里最容易出问题的地方。以下是三类高频错误第一类Scope 写成了具体网络名。比如InNet(USB_DP)这样写出来的是单端规则只对一根线生效另一根线不受管走出来的两条线宽度可能都不一样。差分规则必须用IsDifferentialPair或者InDifferentialPairClass(XXX)这样的语句。第二类忘了限定层。多层板里如果你只想让顶层和内层用不同线宽Scope 要写成(IsDifferentialPair) And (Layer Top Layer)。不写层限定一条规则全层通吃内层本来就该比外层细一点结果被迫跟外层一样粗阻抗全乱。第三类多个条件之间用错了逻辑符。AD 的查询语句里And和Or的优先级和你直觉可能不一样条件一多我就直接加括号省得出错。提示规则对话框底部通常有一个匹配对象预览改完 Scope 顺手看一眼它列出了哪些网络。如果列表是空的说明这条规则谁都不管等于没写。3.2 Priorities 列表顺序决定谁说了算AD 的规则匹配机制是从上往下找第一个匹配上的生效。这个机制带来的经典坑是你写了一条通用的差分规则 Scope 是IsDifferentialPair又写了一条针对某个高速接口类InDifferentialPairClass(USB3_100R)的专用规则。如果通用规则排在前面专用规则永远不会被匹配到因为通用规则已经把 USB3 的差分对拦下来了。这不是 AD 出 bug是规则引擎的正常行为。解决办法就是点规则对话框左下角的Priorities按钮把专用规则的优先级往上提让它排在通用的前面。原则是越具体越靠前越通用越靠后。我自己的规则列表一般按这个顺序排特定接口类的差分规则如InDifferentialPairClass(USB3_100R)特定层的差分规则如(IsDifferentialPair) And (Layer Top Layer)全局差分规则IsDifferentialPair单端线宽规则All改完优先级记得重新跑一次 DRC光看规则列表是看不出效果的。3.3 布线时按 Tab 改线宽埋下的规则炸弹这个坑我要单独拎出来讲因为它发生得极其隐蔽而且后果很严重。在交互式布线过程中按 Tab 调出属性面板改一下线宽或间距然后点确定——AD 会弹出一个提示问你要不要为这个改动创建一个新规则。很多人在走线走顺了的时候手快直接点了是。于是你的规则列表里凭空多出一条 Scope 为当前网络或当前差分对的规则优先级默认排在最上面。这条幽灵规则的杀伤力在于它作用范围极小小到你根本注意不到它的存在。之后你无论在全局规则里怎么改线宽这对差分对都纹丝不动因为它在更靠前的位置就被幽灵规则拦下了。我就被这个坑耽误过整整一个下午最后是在规则列表里从上往下逐条翻才发现多了一条从未主动创建的规则。我现在的做法很简单布线过程中尽量不按 Tab 改规则参数。确实需要临时改一下选否这样只影响当前这一次走线的结果不会往规则列表里塞东西。真要改规则退出布线状态回 Design » Rules 里老老实实改。4. 手动布线画差分对是最高频的翻车点4.1 Place 菜单里的 Track 根本不吃差分规则这是我认为最值得纠偏的一条。AD 里画线的入口有两个Place » Track或者工具栏上那支笔的图标Route » Interactive Routing这两个入口画出来的线在 DRC 眼里是一样的但它们对差分规则的处理完全不同。用 Place » Track 手拉你不能走差分对只能一根一根画画出来的两条线宽度间距完全靠你自己的手感差分规则对它没有任何约束力。DRC 一跑Differential Pairs Routing 违规能刷满整个屏幕。更麻烦的是这种画法下两条线的长度是分别计算的你肉眼看着差不多长实际差个几十 mil 很正常等长要求高的接口直接废掉。结论很硬差分对必须用 Route » Interactive Differential Pair Routing 来画不能手拉。快捷键是 P、I习惯之后比手拉还快。4.2 Interactive Differential Pair Routing 的真实用法这个工具的使用逻辑和普通布线不太一样第一次用容易懵。具体流程是先用鼠标点中差分对里的任意一根线或者任意一个属于该差分对的焊盘。点焊盘的时候要注意如果焊盘上挂着两个网络比如某些连接器的差分焊盘AD 会让你确认走哪一个。执行 Route » Interactive Differential Pair RoutingP、I。光标会变成一对鼠标移动时两条线一起走间距自动维持规则里的 Preferred Gap。走线过程中单击确定拐点双击或者右键结束。几个实战细节值得说清楚。出线阶段最考验耐心从 BGA 或者密集连接器的焊盘出来时两条线的焊盘间距往往和规则里的间距对不上工具会自动做一个渐变过渡这一段就是所谓的去耦段。这段长度是有讲究的后面第 5 节会细说。换层的时候两条线要同时打一对过孔位置尽量对称。过孔本身是不连续的阻抗点能少打就少打如果确实要换层两根线的过孔数量必须相等否则长度差和寄生参数差都出来了。绕障碍的时候工具默认会尽量保持两条线平行耦合。但如果障碍物实在躲不开它会暂时把两条线分开走各自绕过之后再合回来。这个分开—绕行—合回的过程中间距是失控的需要事后检查。4.3 包地、间距和过孔的几个经验值差分对要不要包地争论很多。我的观点是高速差分对USB3.0 以上、PCIe、HDMI两侧包地是有价值的但间距一定要拉开。包地走线离差分对太近会显著拉低差分阻抗把前面辛苦算出来的结果全毁掉。一般建议包地线到差分对边缘的距离不小于 3 倍线宽包地线上每隔一段打过孔接地。中低速的差分对比如 RS-485、CAN就没必要包地了浪费布线空间收益极小。过孔方面几个我固定遵守的原则一根差分对内两个过孔的数量、层间跨度必须完全一致换层处的过孔旁边补地过孔给返回电流一条就近的路过孔不要和相邻差分对的过孔排成一列容易形成串扰耦合换层之后立刻走一段耦合段再分叉不要在过孔出口就散开这些细节在规则面板里管不了只能靠布线的习惯去保证。5. 规则设完不等于等长做对5.1 Diff Pair Uncoupled Length 管的是什么规则列表的 High Speed 分类下有一条Diff Pair Uncoupled Length很多人从来没打开过它。这条规则有两个参数Maximum Gap两条线的间距超过这个值就视为不耦合Maximum Uncoupled Length允许的不耦合段总长度的上限它解决的是这样一个问题差分对从连接器、BGA 焊盘出来的时候焊盘本身就有一小段间距然后再逐渐收拢到规则要求的耦合间距。这一段还没耦合上的长度如果太长共模抑制能力会明显下降信号完整性受损。这条规则就是用来卡这个长度的。常见的错误配置是把它设成 0 或者一个非常小的值结果连接器区域一路报红怎么绕都过不了。合理的做法是先量一下器件引脚本身的间距再估算出线到耦合点大概需要多长在此基础上留一点余量填进去。我一般会把 Maximum Gap 设成耦合间距的 2 倍左右Maximum Uncoupled Length 按引脚间距的 3~5 倍来填具体看封装。5.2 Matched Lengths 和 Length 规则的分工高速差分对通常有两条约束同时存在对内等长和组内等长。对内等长指的是差分对两根线之间不能有太长的长度差一般要求比较严USB3.0 之类的要求通常在 5mil 以内PCIe 也差不多这个量级。这个由差分对内的相位补偿来保证。组内等长指的是同一个接口的多对差分线之间要对齐比如 HDMI 的四对 TMDS误差往往允许放到几十 mil。这个用Matched Lengths 规则来管Scope 写InDifferentialPairClass(HDMI_PAIRS)里面填 Tolerance。两条规则的写法差别不大但作用对象完全不同经常有人把对内等长写成 Matched Lengths结果规则不生效。对内等长的本质是同一对里的两根线不是多对之间的匹配。5.3 相位补偿只能用差分蛇形不能单线拉这是我想重点纠正的第二个高频错误。当差分对的两根线已经产生了明显的长度差常见原因是绕障碍时两根线绕的路径不一样需要补长度。很多人第一反应是选中短的那根用普通的 Interactive Length Tuning 打个蛇形把它拉长。这个做法是错的或者说只在特定情况下可行。为什么因为单线蛇形会破坏这一段的耦合。蛇形区域的间距失去了控制阻抗不连续同时两根线的相位关系在局部被强行扭曲。对于 GHz 级别的信号这一段就是明确的反射点和共模噪声源。正确的做法是用Route 菜单里的 Interactive Diff Pair Length Tuning。这个工具的工作方式是这样的默认模式下它会在差分#上整体打一段差分蛇形——两根线同步拐弯间距保持不变长度一起增加。这种补偿方式不破坏耦合是我首选的方式。如果两根线的长度差已经很大整体打蛇形补不回来可以切换到相位补偿模式只对较短的那一根做局部补偿。这种方式仍然会破坏局部耦合但至少是在工具控制下按规则间距做的比手工乱拉好得多。工具面板上要关注的几个参数Target Length目标长度、Pattern蛇形样式Accordion 最常见、Max Amplitude蛇形幅度上限。幅度不要设太大一般控制在 3~5 倍线宽以内蛇形段太夸张会占用大量布线空间也会引入额外的寄生参数。拐角优先选圆弧或者 45 度直角就别用了。提示不同 AD 版本里长度补偿工具面板的字段名称和图标有出入找不到 Target Length 的时候可以在面板上右键看看有没有从规则读取之类的选项。6. 已经布错的线怎么批量救回来6.1 Find Similar Objects 加 PCB List 的批量改法规则改对了但板子上已经布好的线不会自动更新——这一点必须接受。AD 的规则只约束未来的布线行为和 DRC 判定不会回头去改已有的铜皮。那已经布错的怎么办分两种情况。如果是线宽不对但走向是对的可以批量改不用重布。操作路径是在 PCB 里右键点击一根差分线选择Find Similar Objects在弹出的对话框里把筛选条件设成同一差分对或者同一层 相同线宽勾上 Select Matching确定之后所有符合条件的线都被选中。然后打开PCB List 面板把筛选范围设成选中的对象在 Width 列统一改值回车生效。这个操作有两个注意事项一是改线宽会改变线的占用宽度可能会造成新的间距违规改完必须重跑 DRC二是批量改线宽不会同步改间距如果你想把 5mil/5mil 改成 6mil/8mil间距得另外想办法通常得手动挪线或者干脆重布。如果是走向本身就有问题比如绕了远路导致长度超标、或者两根线相位差太大那就别救了删掉重布更快。判断标准很简单需要移动超过三个拐点的直接删。6.2 一个排查用的固定检查顺序踩了足够多次坑之后我固化了一套检查顺序遇到规则不生效这类问题时按这个顺序走基本能在十分钟内定位步骤检查内容常见问题1工程有没有编译没编译差分对关系不存在2PCB 面板的差分对列表数量不对、正负极性反了3规则的 Full QueryScope 写成单网络或漏了层限定4规则的 Priorities 顺序通用规则排在专用规则前面5规则里有没有多余的幽灵规则布线时按 Tab 误创建的6布线用的工具对不对用了 Place » Track 手拉7叠层参数和线宽间距是否匹配阻抗算了但叠层抄错了8跑一次完整 DRC看违规类型反推是哪条规则这套顺序的价值在于它是由外向内、由因到果的。很多人排查时习惯直接从第 7 步开始一头扎进阻抗计算里结果发现问题出在第 1 步——工程压根没编译过。7. 我现在画差分线时会守住的几条上面讲的都是方法和原理最后说几条我自己长期坚持的习惯都是从实际项目里用代价换来的。第一差分对命名在原理图阶段就统一成_P/_N。不管原厂参考设计叫什么名字进来第一件事就是改名。这一步看起来麻烦但它把后面所有关于识别、配对、规则作用域的问题一次性消掉了。改名的时候顺便检查一下有没有重名的网络避免合并出错。第二任何差分接口开始布线之前先把叠层和阻抗定死。我会向板厂要一份带介质厚度、介电常数、铜厚的叠层表把参数填进 Layer Stack Manager让它算出线宽和间距再把这些值写进规则。整个过程在动手画第一根线之前完成。先画后改的代价比先算后画高十倍不止。第三布线全程用 Interactive Differential Pair Routing绝不手拉。这是纪律问题不是技术问题。手拉一时爽DRC 火葬场。第四规则改完立刻跑一次 DRC。不要等到布线画完再跑那时候改起来代价太大。DRC 在这里的作用不只是查错更是验证规则有没有真的匹配上——规则写错了DRC 是唯一能告诉你真相的工具。第五等长补偿优先用差分蛇形尽量不用单线蛇形。如果实在必须用单线补偿一定要用工具而不要手拉并且补偿段的长度控制在布线总长的 10% 以内。第六过孔数量在对内严格对称。这是我会在布线完成后专门数一遍的项目。一根线三个孔、另一根两个孔这种错误在复杂的板子上太容易发生了而且它对信号完整性的影响相当明显。关于 AD 里差分线规则这件事说到底就是一个理解顺序的问题先让 AD 认识这对线再告诉它这对线该多宽多近最后用对的工具去画画完了用规则去验。这四步里任何一步跳过后面都会用 DRC 报错的方式找回来。至于线宽间距到底填多少那是个电气问题交给叠层和阻抗去决定规则面板只是记录结果的地方——把它当成设计输入是这个领域里最常见、也最容易被忽略的一个方向性错误。
返回列表