十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Altium Designer差分线规则:从识别到阻抗反推与DRC排查

Altium Designer差分线规则:从识别到阻抗反推与DRC排查 差分线规则这块我前前后后被问过几十次症状几乎一模一样有人在 Altium Designer 的 Rules 里把 Differential Pairs Routing 的线宽填成 5 mil、间距填成 5 mil结果走线的时候软件完全不理他间距还是 8 mil有人规则里什么参数都填了DRC 一跑一整页 Clearance 报错还有人从别的软件转过来发现差分对这个概念在 AD 里根本不是他理解的那个东西。差分线规则设置之所以容易翻车不是因为它复杂而是因为大多数教程只告诉你在哪个菜单里填什么数没告诉你这些数是从哪来的、规则在什么条件下才会真正生效、以及哪几条规则会互相打架。这篇内容我想把这件事从头到尾捋一遍差分对怎么被 AD 识别、规则优先级怎么判定、线宽和间距怎么从目标阻抗反推出来、Max Uncoupled Length 这类参数到底该给多少、Length 与 Matched Lengths 为什么要配套使用以及从 Allegro 转过来最容易犯的几个错。文中所有参数都是量级示例具体数值必须以你手里的叠层和接口规范为准但方法和判断逻辑可以直接搬走。1. 差分线规则设了等于没设先把 AD 的规则作用链捋清楚很多人一上手就在 Rules 对话框里埋头填数填完发现没用就开始怀疑软件有 bug。实际上 AD 的差分线约束是一条三段式的链路任何一段断了后面的规则都不会起作用。把这条链路想清楚了九成的规则不生效都能自己定位。1.1 差分对从原理图到 PCB 的三段链路第一段是识别。AD 不是靠这两根线看起来是一对来判断差分对的它靠的是网络名或者你在 PCB 里手工建立的配对关系。如果原理图里写的是USB_D和USB_D-而项目选项里的差分对命名后缀配的是默认的_P和_N那软件根本不会把这两个网络当差分对后面的规则、交互式差分布线、长度调谐全部用不了。第二段是归类。识别成功之后这两个网络会自动进入All Differential Pairs这个差分对类同时你也可以把它们再归到自定义的网络类里比如USB3_RX。差分对规则用的是差分对类长度类规则用的是网络类这两套类不是一回事混用是后面一大堆怪问题的根源。第三段才是约束与检查。规则本身只做两件事在交互式差分布线时提供首选值以及在 DRC 时做合规检查。它不会阻止你手动把线拉到任何位置。这一点非常关键后面会单独讲。所以当你觉得规则没生效时正确的排查顺序是先确认 PCB 面板里这两根线有没有被识别成一对切到 Differential Pairs Editor 模式看一眼再看规则的作用范围是否真的命中了这对网络最后才怀疑参数本身。1.2 规则优先级为什么你的差分对规则被 Clearance 顶掉了AD 的规则体系是同一类规则按优先级从上往下匹配第一条命中的生效右侧还有通过右键New Rule建出来的子规则子规则默认优先级高于父规则。很多人把所有差分对塞进一条规则里然后给某一个关键接口单独写了一条更严格的规则结果发现严格的那条不生效——十有八九是它排在下面或者它其实建成了父规则而不是子规则。我的习惯是把差分对规则拆成一主多子的结构主规则做兜底作用范围写宽一点关键的几条高速链路USB3、PCIe、HDMI各建一条子规则单独给线宽、间距和未耦合长度。这样改一条不会影响别人看规则列表也一目了然。另一个更隐蔽的优先级问题是与 Clearance 的冲突。差分线内部的间距往往比普通走线的安全间距小有些版本下 DRC 会用 Clearance 规则去量同一对差分线内部的两根线于是你设了 0.2 mm 的差分间距Clearance 却要求 0.25 mm报错就这么来了。稳妥的处理是建一条 Clearance 子规则作用范围指向InDifferentialPairClass(All Differential Pairs)把最小间距设得比差分间距更小一点并且放在普通 Clearance 规则的上方。代价是这条规则同时也放宽了相邻差分对之间的检查所以相邻对之间的间距要求就得靠布线规范比如对间距不少于 3 倍线宽和设计评审来保证不能指望 DRC 提醒你。注意不同 AD 版本对差分对内部间距的处理不完全一致先用一小块测试板跑一遍 DRC看清楚到底谁在报错再动规则别照着别人的规则清单原样抄。1.3 规则是检查器不是约束器交互式差分布线才吃 Preferred 值这是我最想纠正的一个认知偏差。规则里的 Preferred 值只有在交互式差分布线Route » Interactive Differential Pair Routing时才被实时采用你手动一根一根地走线规则不会来管你只会在最后 DRC 的时候告诉你这里不合规。同理如果你在布线过程中按 Tab 打开属性面板手工锁了线宽或者用了 ShiftW 选了一个不在规则里的线宽实时值就会覆盖规则值看起来就是规则形同虚设。实操上我是这么确认的走一两段之后按 Tab看属性面板里显示的宽度和间距跟规则里的 Preferred 值对不对得上对不上就先结束当前走线重新从菜单发起交互式差分布线别在一条带病的走线上硬拉。另外如果你启用过忽略障碍/推动之类的布线模式并手工调整过间距后续同一对线上的间距可能一直沿用你手工改过的值直到你重新发起一次差分布线。理解了这三段链路后面所有关于命名、参数、配套规则的内容才有落脚点。2. 纠偏第一步让 AD 正确识别你的差分对规则写错可以改识别不了就没得谈。这一节全部围绕让 AD 认得出你的差分对展开包括命名、批量生成、以及手工建对为什么会莫名消失。2.1 命名约定是纲_P/_N与/-的取舍AD 判断差分对的默认依据是网络名的后缀约定正端默认_P负端默认_N。这个约定在项目选项里的 Class Generation 选项卡不同版本里选项卡名称略有出入找 Positive Net Name Suffix / Negative Net Name Suffix 这两个字段就对了配置。你可以改成/-、_H/_L、_DP/_DN但一定要和原理图里的实际网络名对上。实际项目里踩得最多的坑是混着用原理图工程师给 USB 写了USB_D、USB_D-给 PCIe 写了PCIE_TX0_P、PCIE_TX0_N而项目选项里只配了_P/_N。结果 PCIe 被识别了USB 没有。所以第一步不是改软件而是先定规范再画图整个项目最好整个公司统一一套后缀写进设计规范文档谁也别自作聪明。还有几个细节值得提前避开大小写。网络名后缀保持大小写一致_p和_P不要混着来虽然多数情况下不敏感但没有必要给自己制造不确定性。分隔符选择。差分对名里尽量只用下划线避免空格、点号、斜杠这类在网表传递和脚本处理中容易被转义的字符。正负端成对出现。只写了_P没写_N或者两个网络名除了后缀还差一个字符都识别不出来。批量检查的办法是导出网表用文本工具筛一遍所有以_P/_N结尾的网络名看有没有落单的。不要在中间插器件。这是命名之外的问题如果差分对中间串了共模电感、AC 耦合电容或者 ESD 器件网名会断成两截AD 会认为这是两条独立的差分对。这种情况下必须在 PCB 端用 xSignals 把它们重新串起来后面的长度匹配规则才有意义。2.2 从网络批量生成差分对Differential Pairs Editor 实操命名规范定好之后生成差分对不要一根一根手工点。把 PCB 面板切到Differential Pairs Editor模式面板上方有个创建差分对的入口选从网络创建Create Differential Pairs From Nets 之类AD 会按当前命名约定扫描整个板子上的网络把能配成对的列出来你可以勾选后一次性生成。做板子比较急的时候这一步能省掉大量时间也避免手工点漏。生成完务必核对两件事一是数量对不对对照接口清单数一遍二是有没有张冠李戴——比如同一颗芯片的 RX0 和 TX0 被配到了一起如果命名里有共同前缀这种错配是可能发生的。配错了就在面板里删掉重来不要指望后面的规则能纠正。面板里还有一列很有用长度。把列显示打开之后你能直接看到每对差分线两根线的实际布线长度以及它们的差值。这在布线完成后做自检时非常方便比一个个选中网络去查快得多。2.3 手工建的差分对为什么会莫名消失很多老工程师习惯直接在 PCB 里手工建差分对改起来快不用回去动原理图。这在单个版本迭代里没问题但有一个大坑差分对的定义在原理图侧靠命名约定或类指定当你从原理图执行 Update PCB、或者重新导入网表时PCB 里手工建的那些配对关系有可能被清掉或者被覆盖。表现就是今天还在的差分对同步一次网表之后没了或者变成两条独立的网络。我的做法是能用命名约定的就不用手工建命名确实是历史遗留改不了的时候才在 PCB 里手工补同时在变更记录里标注清楚这部分配对依赖手工维护每次网表同步后必须核对。少部分项目还真的出现过同步之后差分对丢失、走线全部变成单端、DRC 结果完全变样的情况所以每次大的网表同步之后我都会把 Differential Pairs Editor 打开扫一眼数量。2.4 网络类、差分对类、xSignal 三者别混用这三个东西在 AD 里分工很明确但名字都带类太容易混名称归属层级主要用途典型规则引用网络类 Net Class网络集合分组管理信号长度、间距、布线层InNetClass(DDR_DQ)差分对类 Differential Pair Class差分对集合差分布线线宽、间距、未耦合长度InDifferentialPairClass(All Differential Pairs)xSignal / xSignal 类信号路径跨越串联器件后的完整路径用于长度匹配InxSignalClass(...)最典型的使用错误是差分对中间有 AC 耦合电容工程师直接把电容两侧的网络塞进同一个网络类然后给这个网络类写 Matched Lengths 规则。结果是 AD 只能看到电容左边的两根线和电容右边的两根线这四段独立网络它能保证这四段各自之间长度接近但保证不了整条链路的长度一致——因为穿不过电容。正确姿势是用 xSignalsAD17 之后版本内置通过向导指定起点器件、终点器件和串联器件让它生成完整的 xSignal 和 xSignal 对再用 Matched Lengths 规则去约束 xSignal 类。这个纠偏点值多少钱我见过一个高速接口反复调不通最后定位就是这里电容两侧的线段长度差被网络类等长掩盖了加起来整条链路差了 6 mm 以上。3. 纠偏第二步线宽与间距不是抄板厂模板而是从阻抗反推这一段是整篇里技术含量最高、也最容易被糊弄过去的部分。网上流传的差分线走 5/5 mil差分间距取 4 倍线宽这类说法脱离了叠层和介质厚度以后基本都是错的。3.1 先要叠层再谈线宽把板厂阻抗表变成规则参数差分线的线宽和间距是被目标差分阻抗反推出来的而差分阻抗由线宽、间距、铜厚、到参考平面的介质厚度、介质介电常数共同决定。换句话说不拿到叠层任何线宽间距都是猜的。我的流程是这样的先定接口和阻抗目标USB 2.0/3.x 通常按 90 ΩHDMI、DisplayPort、以太网按 100 ΩPCIe 按 85 Ω具体以对应规范和你用的主控手册为准不要跨版本套用。把接口清单和板子层数、总厚度要求发给板厂让他们给一份可制造的叠层方案 阻抗表。这份阻抗表里一般会直接给出单端 50 Ω 和差分 100 Ω 对应的线宽/间距这是最省事、也最靠谱的起点。拿到阻抗表后不要直接采信回到 AD 的 Layer Stack Manager 里把铜厚、介质厚度、介电常数如实录进去然后用软件自带的阻抗计算/场求解功能复核一遍。板厂给的表通常是基于他们的标准叠层和典型 εr你的实际板子如果介质厚度不一样数值就得重算。复核结果落进规则里的 Preferred 值两侧留出工艺公差作为 Min/Max。第 4 步特别重要Min/Max 不是装饰。板厂蚀刻有公差线宽可能上下浮动 10%如果你把 Min 和 Preferred 设成一样的值阻抗波动会直接反映到良率上。3.2 一个完整的目标阻抗反推示例含计算过程假设一个很常见的四层板总厚 1.6 mm顶层信号、第二层完整地平面顶层到地平面的介质厚 0.21 mm介电常数按 4.3 估铜厚 1 oz约 35 μm。目标是外层微带差分 100 Ω。第一步先估单端 50 Ω 的线宽。微带线的阻抗和 W/h 强相关h 0.21 mm 时50 Ω 大概落在 W/h ≈ 1.8 附近也就是 W ≈ 0.38 mm约 15 mil。这一步不用算得很准它只是给差分线宽提供一个起点。第二步考虑差分。差分走线两根线之间有耦合耦合会让差分阻抗低于两根独立 50 Ω 线叠加出来的值所以线宽要收窄。先假设间距 S 0.2 mm约 8 mil此时 W/h ≈ 1 附近单根线的单端阻抗大概在 60 Ω 上下两根耦合成差分之后大致落在 100 Ω 左右。把 W 取 0.2 mm约 8 mil、S 取 0.2 mm作为第一轮迭代值。第三步用叠层管理器复核然后微调。看模型给出的差分阻抗是偏高还是偏低偏高就加宽线或者缩小间距偏低就反过来。一般迭代两三轮就能收敛到 ±5% 以内。这一步的优先级顺序建议是先定线宽再调间距因为线宽还牵扯到载流和工艺而间距是相对自由的。现在回头看那个流传甚广的 5/5 mil0.127 mm 线宽、0.127 mm 间距同样在 h 0.21 mm 的叠层上线宽细化到 0.127 mm 会让单根线的单端阻抗升到 70 Ω 以上两根耦合成差分阻抗大概会跑到 110125 Ω 这个量级。对一条 90 Ω 或 100 Ω 的高速链路来说这就是十几个百分点的阻抗失配反射和眼图闭合是迟早的事。这就是抄模板翻车的典型原因——数值本身没毛病放在别人的叠层上刚好能用放在你的叠层上就是错的。再说工艺侧的边界。普通的双面板/多层板工艺6/6 mil 是常规水平5/5 mil 大部分板厂都能稳定做4/4 mil 需要跟板厂确认3/3 mil 以下属于偏紧的工艺价格和良率都要打折而且蚀刻公差带来的阻抗波动会明显放大。所以即使理论算下来要求 3.5 mil 线宽也要先跟板厂聊一轮别闷头把规则写进去。3.3 差分间距到底取多少耦合强弱与阻抗敏感度间距的选择背后是耦合强度和阻抗可控性的权衡。间距越小两根线之间的耦合越强差分阻抗越低对共模噪声的抑制越好走线占用的面积也越小间距越大两根线越来越像两条独立的 50 Ω 单端线差分阻抗越接近单端阻抗的两倍同时对间距加工误差的敏感度下降。业界常见的取值是把间距控制在不大于两倍线宽的范围内强耦合的场景会取 S ≈ W。对于高速接口比较稳妥的做法是让 S 落在 1 到 2 倍的 W 之间。倘若为了凑一个整齐的数字把 S 压到远小于 W阻抗对间距的敏感度会急剧升高间距加工偏差 0.02 mm阻抗可能就动好几个百分点。反过来如果 S 大过 3W耦合已经很弱此时差分的共模抑制优势基本体现不出来还不如老老实实按两条单端线控制。有一条经验值我一直在用在给定的叠层上把间距每变动 0.05 mm 带来的差分阻抗变化量记在心里。用场求解器扫一遍就能得到这个敏感度比如间距 0.05 mm阻抗 4 Ω那你在布线时想把间距从 0.2 拉到 0.25 来方便出线就知道代价是阻抗要跑到 106 Ω 左右。这个敏感度数据在跟板厂沟通工艺公差时也很有用可以直接换算成阻抗公差报给对方。3.4 阻抗规则与差分对规则的联动AD18 之后Layer Stack Manager 里可以定义阻抗目标Routing Width 规则里可以选择按阻抗约束线宽这样线宽就不再是你手工填的数字而是软件按叠层算出来的。听起来很美好但用之前必须确认两件事一是叠层里的介质参数厚度、εr、铜厚是真的二是模型算出来的结果和你板厂的阻抗表对得上。对不上就说明某一方的参数有问题这时候宁可相信板厂的实测数据也别硬信软件模型。我个人的做法是两套数据都要但以板厂为准软件里配好阻抗目标方便画图时自动取线宽规则里的 Min/Max 则按板厂给的公差手工填最后在阻抗测试条上做验证。这三者对齐了才算真正把差分阻抗管起来。4. 差分对规则里的参数逐项读哪些必须改哪些改了就出事Rules 对话框里 Differential Pairs Routing 那一页有十来个字段新手很容易全填一遍求心安实际上每一栏都有它明确的语义和适用场景填错比不填更麻烦。4.1 Min/Preferred/Max 三档值的真实含义先说清楚三档值的分工这是最容易理解偏差的地方Preferred Width / Preferred Gap交互式差分布线时实时采用的数值也是你在画图时看到的那个宽度和间距。它同时是长度调谐和规则检查的基准。它必须和你的阻抗反推结果一致。Min Width / Max Width、Min Gap / Max Gap允许的边界。布线过程中如果是为了避让焊盘或过孔而临时收窄、放宽只要落在边界内就不报错超出就报错。它们不参与实时取值只是检查边界。实践中的配置比例大概是Preferred 取阻抗反推值Min 取 Preferred 的 0.8 倍左右Max 取 Preferred 的 1.2 倍左右。这个 ±20% 的窗口不是随便拍的数字它的含义是我允许蚀刻公差和局部避让带来的波动但超过这个范围阻抗就已经不可接受了。真正严格的接口比如 85 Ω 的 PCIe窗口可以收到 ±10%代价是布线时容易被规则卡住需要提前规划好出线区域。还有一个细节容易被忽略线宽和间距的 Min/Max 是分别判断的。可能出现线宽在范围内、间距超限的情况报错信息里会指出来看的时候注意区分。4.2 Max Uncoupled Length最容易把 DRC 搞爆的一项未耦合长度指的是差分对两根线没有并行走线的那部分长度最典型的来源有三个从焊盘出来到进入耦合区的那一小段、换层过孔附近、以及绕线避让区域。这个参数的意义是控制阻抗不连续和共模噪声的产生值越小越理想但小到不现实就会让 DRC 里全是报错。给值的方法有两种我更推荐第二种**方法一是按经验拍。**常见的说法是未耦合长度不超过 5 倍线宽。假如线宽 0.2 mm那就是 1 mm。这个量级对于慢速差分USB 2.0 这一档是够用的。**方法二是按 skew 预算反推。**先确定这条链路对内允许的 skew两根线的传播延时差然后把它折算成允许的未耦合长度。折算用的传播速率是关键外层微带大约 150 ps/inch也就是约 5.9 ps/mm内层带状线大约 180 ps/inch约 7.1 ps/mm。假设某个接口的对内 skew 预算是 10 ps那对应的未耦合长度就是 10 / 5.9 ≈ 1.7 mm外层。超过这个值即使两根线总长度一样实际到达时间也会因为一段走微带、一段走带状线或者一段未耦合而错开。但我必须提醒一句未耦合长度设得太小第一个报错的就是芯片出线扇出区。BGA 或 QFN 焊盘出来的那几十个 mil 到一两百个 mil天然就是未耦合的这部分无法消除。所以实际取值要留出焊盘出线的余量比如算出来 1 mm但焊盘出线就要 1.2 mm那就把值放到 1.5 mm同时接受这部分带来的 skew在别的地方补回来。反过来如果某个接口规范要求极严那就得靠封装出线设计把出线做成对称的、尽量短的来减少未耦合段而不是靠规则硬卡。4.3 配套规则Length、Matched Lengths、Via Count、Clearance差分对规则只管线宽线和间距真正决定信号能不能用的还有一组配套规则它们都在 High Speed 类别下不同版本分组略有差异规则作用作用范围写法常见坑Length约束单条网络/类的绝对长度范围InNetClass(...)与 Matched Lengths 交叉覆盖同一组网络互相打架Matched Lengths约束组内网络之间的长度差InNetClass(...)或InxSignalClass(...)中间串了器件时穿不过去必须改用 xSignalsMax Via Count限制组内网络的最大过孔数InDifferentialPairClass(All Differential Pairs)两条线过孔数不一致长度天然错开Differential Pairs Routing线宽、间距、未耦合长度InDifferentialPairClass(...)手工布线不吃 Preferred 值关于 Length 和 Matched Lengths 的共存我的建议是不要让它们覆盖同一组网络。绝对长度和相对等长同时约束很容易出现长度合规但等长不过或者等长合规但总长超限的拉锯。合理的分工是关键链路比如内存到主控的一整组数据线用 Length 定一个绝对范围保证总延时可控再对需要等长的子集用 Matched Lengths 定相对容差。如果两个都必须有就把 Length 的窗口留得宽松一些让 Matched Lengths 去干精细活。Max Via Count 是很多人根本不建的一条规则但它的价值很高假设一对差分线正端过了一个过孔换层负端老老实实没换层两者的长度差就是一个过孔的电气长度。按前面算的速率一个 1.6 mm 通孔折算下来大约 11 ps相当于外层走线约 1.9 mm。这种差距靠后期绕线去补要么补不回来要么补出一大块难看的蛇形。用规则把过孔数卡住比如最多 2 个布线时自然就会两根线一起换层。4.4 一套可以直接抄的规则清单含查询语句把前面这些拼起来一套可用的规则骨架大概长这样数值只是示例换成你自己的Routing / Differential Pairs Routing外层微带 Scope: InDifferentialPairClass(All Differential Pairs) OnLayer(Top Layer) Min Width: 0.16mm Preferred Width: 0.20mm Max Width: 0.24mm Min Gap: 0.16mm Preferred Gap: 0.20mm Max Gap: 0.24mm Max Uncoupled Length: 1.5mm Routing / Differential Pairs Routing内层带状线 Scope: InDifferentialPairClass(All Differential Pairs) OnLayer(Mid Layer 1) Min Width: 0.11mm Preferred Width: 0.14mm Max Width: 0.18mm Min Gap: 0.20mm Preferred Gap: 0.25mm Max Gap: 0.30mm Max Uncoupled Length: 1.5mm High Speed / Length关键链路绝对长度 Scope: InNetClass(PCIE_TX0) Min Length: 20mm Max Length: 90mm High Speed / Matched Lengths对内与组间等长 Scope: InxSignalClass(PCIE_TX0_xS) || InNetClass(PCIE_TX0) Tolerance: 0.5mm High Speed / Max Via Count Scope: InDifferentialPairClass(All Differential Pairs) Maximum Via Count: 2 Electrical / Clearance差分对内部间距豁免 Scope: InDifferentialPairClass(All Differential Pairs) Minimum Clearance: 0.15mm 优先级高于普通 Clearance 规则写完规则别急着画先在 Rules 对话框里用查询助手验证一遍作用范围。更直观的办法是把 PCB 面板切到 Rules 模式选中某条规则用面板下方的测试按钮把命中的对象高亮出来——能高亮到你预期的差分对说明规则真的生效了。这一步花两分钟能省掉后面几个小时为什么规则不生效的纠结。5. 完整实操从零把一组 100 Ω 差分对的规则和走线做完前面讲的是原理和判断这一节按真实顺序走一遍包括每个动作背后的意图、容易出问题的地方以及做完之后怎么验证。5.1 建类、建差分对、建规则顺序很重要我先说为什么是这个顺序。类是一切规则的载体差分对必须先被识别成对才能进入差分对类规则的作用范围依赖于类类都没建好就写规则等于给空气写规则。完整步骤定命名规范并落到原理图。这一步在画原理图之前就完成写完检查一遍所有差分网络的_P/_N后缀是否成对出现。同步网表打开 PCB 面板切到 Differential Pairs Editor确认差分对已经被自动识别。数量不对就回去查命名别在 PCB 端硬凑。按功能建网络类。把同一组需要等长的信号比如某一组 DDR 数据线、某一路 PCIe 通道建成网络类方便后面写长度规则。注意网络类的粒度太粗会导致等长组过大绕线难做太细会导致规则条数爆炸维护成本高。经验是按同一组总线、同一个方向、同一颗器件来划分。关键接口建子规则。主差分对规则做兜底USB3、PCIe、HDMI 这些各建一条子规则单独给参数。长度相关规则最后建。因为长度目标要等布线大致走向定了才能估。太早设死长度目标布线时会被卡得很难受。5.2 交互式差分布线起手、换层、过孔、端接从菜单发起 Route » Interactive Differential Pair Routing选中差分对的一端开始。有几个动作是我每次都会做的**起手先直走一段再拐弯。**从焊盘出来让两根线先并行走一小段大概 2 到 3 倍线宽让耦合先建立起来再进入拐弯。如果一出焊盘就斜着拐两根线的出线长度会不对称而且这段未耦合区会累积 skew。**拐弯用 45° 或圆弧不要 90°。**这一点在交互式差分布线里其实是自动处理的AD 会自动调整内圈走线来保持间距恒定。但要留意的是拐弯处外圈走线会自然比内圈长密集拐弯会累积不小的对内长度差。所以高速链路的路由我尽量做少拐弯、大半径把长度差的来源控制在少数几个位置方便后面统一定量补偿。**换层时两根线一起走。**用 Shift 加点击或者过孔快捷键放置一对过孔两个过孔并排、间距尽量和走线间距接近。换层位置补地过孔常见做法是让地过孔距离信号过孔在 1 mm 以内有条件的话用两个地过孔夹住一对信号过孔回流路径短、阻抗突变小。这一步规则管不到全靠布线时的自觉但它的影响比线宽偏差大得多。**端接器件对称放。**AC 耦合电容要成对、同面、紧邻两侧走线保持等长。ESD 器件放在靠连接器一侧避免器件内部引脚长度差引入额外的不对称。我见过一个案例两个耦合电容一个放在正面一个放在背面结果背面那根线要多打两个过孔光过孔就带来了二十多皮秒的偏差后面怎么绕都补不平。**参考平面必须完整。**差分线跨越平面分割是比任何规则参数都严重的错误。跨分割会让回流路径断裂、阻抗突变规则里没有任何一项能检测到这个问题。布线时我会把带平面分割的区域先标出来差分线绕开实在绕不开就在跨分割处附近加缝合电容这个做法要在接口允许的范围内使用并跟硬件工程师确认。5.3 手动补线场景老版本 AD16 里的做法有些朋友用的是 AD16 或者更早的版本或者需要在一块已经布好的板子上局部修正差分线这时候就得手动补。手动的核心思路是用几何保证间距用软件核对结果具体做法先把栅格设成间距的倍数。比如差分间距 0.2 mm把栅格设成 0.1 mm 或 0.2 mm这样每一格移动就是半个或一个间距靠栅格就能保证大致对齐。先走一根再走另一根用等距偏移功能辅助。AD 有按指定间距复制/偏移走线的功能可以基于已有走线生成一条等距的走线把偏移量填成间距值比手工拖要准得多。拐弯处手动补。45° 拐弯的外圈线段需要手工拉长让两根线的拐弯段保持平行等距。这一块最耗时间也最容易留下间距不均的隐患。走完必须用 DRC 和长度面板核对。手动布线的间距误差是肉眼看不出来的只能靠工具量。我的态度很明确手动布差分只适合局部修正不能作为常规手段。它没有实时吸附间距的靠几何精度保证一致性远不如交互式差分布线。如果整个项目都靠手动布说明环境或者规范有问题值得花时间把自动流程理顺。5.4 长度调谐对内 skew 与组间等长分开处理长度调谐要分清两种目标它们的处理方式完全不同对内 skew同一对里 P 和 N 的长度差应该用单根线的长度调谐去补偿较短的那一根或者用差分配对调谐在两根上同时加长这种方式保持耦合但不改变两根之间的差值。补偿的位置尽量靠近源头一侧让耦合区之后的长度保持一致。调谐图案的幅度要控制住业界常见经验是相邻折线的中心距不小于 4 倍线宽振幅控制在 2 到 3 倍线宽以内超出这个范围串扰和阻抗不连续的影响就会明显起来。组间等长不同差分对之间的长度差用匹配长度规则约束目标然后用长度调谐功能在每条走线上加蛇形。这里的关键是目标长度从哪来。调谐对话框里通常可以选从规则取或者手工输入。如果规则里已经设了目标长度就选从规则取避免手填的数字和规则不一致如果只是临时调手工输入一个和最长的那根接近的值然后调完再看面板核对。调谐过程中通常可以用快捷键微调目标长度和振幅具体按键各版本略有出入最稳的办法是按 Tab 打开对话框直接改参数。调谐做完之后一定要回面板核对。PCB 面板切到 Differential Pairs Editor看每对线的两根长度和差值AD17 之后的版本还可以用 xSignals 面板看跨越器件的完整路径长度和延时。凭感觉认为调完了是最危险的我见过不少板子就是在这一步放松了最后靠仿真才发现对内差了几百皮秒。5.5 验证DRC、面板长度核对、TDR/实测回归验证分三层缺一层都可能留下隐患**第一层是 DRC。**Tools » Design Rule Check 打开检查对话框确认 Rules To Check 里 High Speed 类别下的 Length、Matched Lengths以及 Routing 类别下的差分相关检查都已经勾上分组名称不同版本略有差异看到 Length 和 Matched Lengths 就说明找对了位置。建议在线检查和批量检查都开着在线检查能让你在画图时立刻发现问题批量检查用来做最终验收。生成的那份 HTML 报告我会导出来存档作为设计评审的附件。**第二层是长度数据核对。**三种常用方式PCB 面板切到 Nets 或 Differential Pairs Editor 模式把长度列显示出来AD17 之后用 xSignals 面板看完整路径或者用板级信息报告导出所有网络的布线长度做表格分析。我个人最喜欢最后一种因为可以把数据丢进表格里排序、算差值一眼就能看出哪一组不齐。**第三层是实测。**打样时务必加上阻抗测试条让板厂测单端和差分阻抗有条件的话做 TDR 测试把实测阻抗曲线和设计目标对比。这里要提醒的是测试条的叠层和走线必须和主板一致否则测出来的数据没有参考价值。很多板厂默认用的测试条和你的主板叠层不一样出报告前记得确认。6. 常见问题与排查速查表前面几节讲的是怎么做对这一节讲做错了怎么救。我把自己和同事踩过的坑整理成一张表出问题的时候按症状查比按理论推快得多。6.1 高频故障速查表症状最可能的原因处理方式规则填了但走线间距不变手工布线不吃 Preferred 值或起手时用了 ShiftW 选了别的线宽用交互式差分布线重新起手按 Tab 检查实时属性差分对在 PCB 面板里显示不出来网络名后缀与项目选项不匹配有一端落单对照命名规范逐个核对必要时在项目选项里改后缀同步网表后手工建的差分对消失差分对定义在原理图侧被网表覆盖优先靠命名约定识别手工建的做变更记录并每次同步后核对DRC 报同一对差分线内部间距不足Clearance 规则与差分对间距规则打架建一条作用于差分对类的 Clearance 子规则优先级放在上面DRC 报大量未耦合长度超限Max Uncoupled Length 设得小于焊盘出线的固有长度按 skew 预算重新算给焊盘出线留出余量长度匹配规则怎么调都不过差分对中间串了器件网络类穿不过去用 xSignals 向导生成完整路径规则改用 xSignal 类两根线长度差怎么都补不平过孔数不一致一个换层一个没换加 Max Via Count 规则布线时两根线一起换层改了规则重新布线还是老样子多条同类规则命中或子规则优先级不对用规则测试功能高亮命中对象调整优先级阻抗实测比设计值偏高线宽偏细或间距偏大叠层介质厚度与设计不符复核叠层参数按实测反推调整线宽间距调谐绕线之后串扰变差蛇形振幅过大、相邻折线间距过小振幅控制在 23 倍线宽内折线中心距不小于 4 倍线宽6.2 从 Allegro 转过来最容易犯的三个错热词里出现 Allegro 不是偶然很多团队是两套工具并行或者中途切换切换时的思维惯性会直接导致规则设置出错。**第一个错是把差分对当成先建后设的对象。**在 Allegro 里常做的流程是先做 Xnet、再定义差分对、再到约束管理器里设 Physical/Spacing 约束差分对是一个可以随时手工创建的逻辑对象。AD 里差分对的第一来源是网络命名约定是网表传递过来的属性。用 Allegro 的思维在 AD 里手工建完差分对同步一次网表就可能没了。**第二个错是去约束管理器里找参数。**Allegro 的约束是集中式的同一个界面里能看到物理约束、间距约束、相对延时约束。AD 是分散式的线宽和间距在 Routing 类别下长度和等长在 High Speed 类别下各自独立。找错位置然后抱怨AD 没有这个功能我见过太多次。**第三个错是相对延时和长度的换算习惯。**Allegro 的约束常直接按时间ps来写转换到 AD 之后很多人还是习惯填长度mm于是自己手工折算折算时又用错了传播速率外层和内层不一样最后等长目标本身就错了。AD 较新版本的 Length 规则支持直接按延时约束能用延时就用延时免得来回算。6.3 几个我踩过的坑与对应做法最后分享几个具体到让人心疼的坑。**坑一把最小间距设得比线宽还小。**早年做一块 USB 3.0 的板子为了省地方把差分间距压到 0.15 mm线宽 0.2 mm。阻抗仿真跑出来还行但板厂反馈蚀刻后间距偏差大实测差分阻抗落到了 85 Ω 以下。后来复盘间距太小时两根线的蚀刻互相干扰实际间距的分布比大间距时宽得多。教训是间距不要压到线宽的 0.75 倍以下除非叠层和工艺都经过验证。**坑二忽略了内层和外层要用不同的线宽。**同一对差分线在顶层走一段、换到内层走一段如果两条线用了同一套线宽间距内层那段的阻抗必然偏。正确做法是按层建子规则外层和内层的 W/S 分别迭代。发现这个问题是在一次 TDR 测试上同一对线的阻抗曲线出现了明显的台阶正好对应换层的位置。**坑三长度调谐绕在了错误的区域。**有一块板子的 DDR 差分时钟走线长度差在布线阶段就补好了但补在了靠近主控的一侧结果在后面那条长走线上又出了问题整条链路的对内差反而变大了。后来的做法是对内 skew 的补偿尽量放在链路末端靠近接收端且长度不超过链路总长的十分之一避免在一端绕出一大块蛇形引入额外的耦合和损耗。**坑四测试条和主板叠层不一致。**这个是交付阶段才发现的板厂给的阻抗报告挺好看全都在 ±5% 以内但实测主板的阻抗就是不在范围内。追问之下才知道测试条是按板厂的标准叠层做的和我们板子的介质厚度不一样。从那以后每次发板我都会在工艺文件里单独写明阻抗测试条必须采用与主板相同的叠层结构并在收货时核对报告里的叠层描述。**坑五规则改完忘了重新编译工程。**改完规则不生效的时候先怀疑规则本身没问题但有时候是工程状态没刷新。稳妥的操作顺序是改规则之后执行一次工程编译再重新发起布线如果还是不行关掉当前 PCB 文档重开一次比在菜单里瞎点来得快。关于差分线规则这件事我个人在实际操作中的体会是真正决定成败的不是规则里那几个数字而是数字背后的三件事——识别对不对、叠层准不准、验证全不全。数字是可以迭代出来的参数调错了重画一遍就好但识别错了你会在后面花几天时间去找为什么规则不生效叠层不准整条链路的阻抗是一笔糊涂账验证不做全问题就会留到打样之后那时候改动的成本是前面的几十倍。所以每次开新项目我都会先把命名规范、叠层阻抗表、规则骨架这三样东西定下来再动手画第一条差分线。这个习惯看着慢实际上省掉的时间远比想象中多。
返回列表