ARTICLE DETAIL

资讯详情

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

Net Antennae报错详解:PCB设计中走线残端的定位与修复

Net Antennae报错详解:PCB设计中走线残端的定位与修复 做硬件设计的人应该都被DRC报错追着跑过。尤其是项目工期紧、板子复杂的时候一开DRC满屏飘红心跳都漏半拍。这次要聊的Net Antennae (Tolerance0mil) 就是典型的“看起来像间距问题、其实完全不是”的报错。我第一次在AD19里看到这个错误时放大了半天也没看出哪个网络“挨太近”后来才搞明白这玩意儿说的是走线或过孔上长了一截“断头路”——也就是俗称的天线/stub。如果这个报错你也撞见过或者眼下正被它卡着这篇文章直接把定位和修复的路子给你捋清楚。这个报错本身不难处理但很多人堵在“不知道怎么快速找到它”和“找到之后不确定该不该删、删了会不会出别的问题”这两步。我会从规则本身的逻辑讲起再到AD19里具体用什么工具把每一处stub揪出来然后分场景说清楚到底怎么修最后用一个四层板的真实排查过程做复盘把整个流程串起来。文章里出现的操作路径和参数都是我实际验证过的。1. 先搞清楚Net Antennae这个报错到底在说什么1.1 官方定义的通俗化拆解Net Antennae直译就是“网络天线”在Altium Designer的DRC规则里它检测的对象是走线Track、过孔Via等导体上存在的“未连接残端”。什么叫残端就是你画了一条线一端连着焊盘或过孔另一端却孤零零悬在空气中没有到达任何电气连接点。这根悬空的线头从电气角度看就像一根天线所以叫Antennae。在AD19里这个规则的默认名称是Net Antennae (Tolerance0mil)所属规则类别是Manufacturing。它的工作逻辑很简单系统遍历板上的所有铜箔走线找出那些有开放端点Open End的走线再测量这个开放端点到最近电连接对象焊盘、过孔、敷铜区域等的距离只要超过设定容差就报错。Tolerance0mil意味着容差是0也就是只要存在不连接的残端就直接标记不接受任何妥协。很多新手第一眼看到Tolerance0mil会误以为是间距规则里某个“距离参数”设错了。这里必须区分开Clearance规则管的是两个不同网络导体之间的最小距离而Net Antennae管的是同一根网络内部有没有“走到一半就断掉的线段”。一个是横向的“安全距离”问题一个是纵向的“连没连到位”问题完全是两码事。1.2 Tolerance0mil背后的逻辑Altium把这个容差默认设成0mil是有原因的。对于PCB制造来说一根悬空的走线残端如果是纯孤立的铜皮其实在制造环节不会产生致命问题甚至很多板子上留几根stub打样出来也照样能工作。但从设计质量和高速信号的角度看stub就是一颗不定时炸弹。高频信号在传输线末端遇到开路时会发生全反射。反射回来的信号会叠加到原信号上造成振铃、过冲严重时直接让接收端误判电平。过孔stub尤其讨厌因为它是垂直方向的一段导体在多层板里就像一根插在信号路径上的“吸管”会形成阻抗不连续点。信号速率越高stub的影响越明显。所以Tolerance0mil的设计意图是逼你在设计阶段就把这些隐患清干净而不是等板子回来了拿示波器去猜。这就像体检报告上不给你“临界值”的台阶下只要超标就亮红灯强迫你去复查。1.3 为什么电路板不允许“断头路”你可以把PCB上的网络想象成水管网络。一根水管从源头接出来中间分了几路每一路末端都要接到水龙头或者设备上水流才有意义。但如果你想当然地留了一截管子在那里末端既没接水龙头也没封堵那这截管子里面就会积水、积气时间长了还影响主管道的水压。PCB走线里的stub就是这截没有封堵的水管。更直白点说信号走在PCB走线上从驱动端到接收端走线的特征阻抗是设计好的。一旦中间冒出来一截支线信号在这个支路分叉口会同时感受到两条路径一部分能量拐进支线到头再反射回来。反射回来的能量和主信号叠加波形立刻乱掉。对低速数字电路来说这种乱可能在容限范围内但对DDR、PCIe、高速SerDes这类接口stub长度稍微过线就会导致眼图闭合、误码率飙升。理解到这层你就能明白为什么AD19宁可“一刀切”式地把容差设成0也不给默认放宽。它的本意不是找茬而是让你在布局布线阶段就保持信号路径的连续性。2. 定位报错用AD19自带工具顺藤摸瓜2.1 DRC面板的交互式定位拿到报错后最要紧的事是先把每一处Net Antennae从满屏红绿交错的PCB上揪出来。不要凭肉眼在板子上瞎找那种效率太低了。正确的第一步是打开Messages面板快捷键Alt6或者菜单View → Panels → Messages把DRC运行结果里所有Net Antennae的错误项集中起来看。在Messages面板中每一行错误记录都带有坐标信息比如“Net Antennae: Track A on Top Layer Between (xx mil, yy mil) And (xx mil, yy mil)”。鼠标双击这一行AD会自动跳转到对应位置并以高亮形式把出错的走线标出来。这个跳转非常准直接就把镜头怼到残端脸上。如果你一次性跑完DRC后报错数量太多上百条密密麻麻铺过来记得先在Messages面板顶部把Filters筛一下只看Net Antennae类型的错误避免跟其他规则报错混在一起。筛选完之后再按网络名排序同一根网络上的多段stub就可以连在一起处理修完一根顺便修下一根不用来回跳。2.2 用Filter和Mask快速锁定全部目标单条跳转适合逐个处理但如果你想一次性看清所有Net Antennae在板子上的分布用PCB Filter配合Mask功能会更直观。操作方法在PCB编辑器中按下键盘上的F12或者在菜单栏找到PCB → Filter打开PCB Filter面板。它是AD里一个功能很强的对象筛选器支持按对象类型、网络、层、规则类型等条件组合过滤。在Filter面板里输入IsTrack And InNet(你的网络名)或者更粗暴地输入IsTrack再配合快捷键Ctrl单击左侧的DRC错误类型列表可以快速把特定网络上的所有Track高亮出来。实际工程里我最常用的组合是先在Messages面板里选中一个Net Antennae错误然后在PCB Filter表达式栏用IsTrack OnTopLayer之类的条件把当前层所有的线显示出来再用快捷键ShiftS单层显示CtrlShift滚轮也可以快速切换单层视图这样残端就暴露得很清楚。Mask功能也很好用快捷键是[和]可以调节遮罩透明度选中对象之外的一切都会被压暗相当于给PCB打了一束手电筒。这种“手电筒扫射法”在处理密密麻麻的走线时特别舒服眼睛不容易累也能很自然地把同一网络的多处stub横向对比。2.3 如何辨别真正的stub与误报定位过程中最让人心态崩的是一路跳转过去发现有些位置看起来明明连上了焊盘却还是被报成Net Antennae。这时候别急着动手删线先搞清楚到底是不是误报。最常见的误报场景有三个。第一个是被泪滴Teardrop顶出来的出泪滴后焊盘旁边多了一段非常短、不在同一网络上的小铜皮或者泪滴把走线端点覆盖了一部分AD在计算开放端时误判。第二个是圆弧走线Arc和直线段在视觉上重合但电气拓扑上并没有真正连接肉眼看着是连续的其实是两条分立的Track端点贴在一起系统一查就发现还有一个Open End。第三个是板框边缘、Keepout区域贴得太近导致一条走线在视觉上被截断看起来连接到一起了实际电气连接却断了。针对这种情况我的经验是先把报错对应坐标放大到极限快捷键PageUp然后选中该走线打开Properties面板去看它的Net属性和Physical层级。如果你能看到一条完整的Track从起点到终点都归属于同一个Net且端点正好落在焊盘中心那多半是误报或泪滴干扰。解决误报的办法通常是重新走一遍这段线手动把断开的节点连接起来或者删掉泪滴重出让系统重新计算拓扑。别硬扛也不要用“Ignore Violation”去糊弄因为后面导出Gerber做最终检查时问题还会冒出来。3. 精准修复三类典型stub的根治方案3.1 走线残端删线重走还是补线连接真正确认是走线残端之后修复的核心思路只有两个方向要么把残端延伸出去接到它本该连接的目标上要么把残端干脆删掉让信号路径恢复干净。选择哪个方向取决于这截残端是不是多余的。如果你的板子上有一个DIP封装焊盘你从它引出去一根线走到一半发现还要再拉一根分支结果分支拉完后主线上还留了一个很短的断头线这种情况通常就是布线过程中的“中途放弃”遗留物。处理方法最简单选中这段线段按Delete删除。删的时候注意不要误删主干建议先用Tab键或Shift单击精准选中目标Track。如果残端是连接某个未完成网络的半截线你先要判断这个网络是不是真的不需要连接了。比如调试用的测试点、备用焊盘确实可能不需要走线那直接删线DRC自然消白。但如果这个网络是核心信号只是当时布线没布完那就要把线补接到对应的过孔或焊盘上确保电气连通完整。补线的时候别用自动布线一股脑灌进去手动拉线更可控拉完再跑一次DRC。3.2 过孔引起的stub换层、改孔位还是Back Drill过孔类stub跟走线类stub不太一样它的问题经常出现在换层场景。比如一个信号从顶层走到内层中间打了一个过孔这个过孔如果从顶层一直贯通到底层那么信号实际上只用了过孔的一段剩下的那段铜壁就变成了stub。层数越多、板子越厚这种过孔stub越长对高速信号越不利。处理方式分几种。第一种是尽量把过孔打在走线换层的实际交汇点附近减少多余的过孔本体长度。有些工程师习惯性地在走线中间打孔其实完全没必要反而人为制造了stub。第二种是在设计规则里给高速信号网络设置“不允许使用通孔”或者指定盲埋孔用激光盲孔替代通孔从源头消灭长stub。第三种是对通孔做背钻Back Drill也就是让制板厂把通孔不需要导电的那一段特意钻掉只保留信号实际使用的部分。背钻会增加成本需要和生产厂沟通一般只在高速板、有明确SI仿真需求时用。很多人在AD19里改过孔层时忽略了“孔的类型”在Properties面板里可以切换Via类型为Through、Blind Buried、Micro等。如果你用的是通孔又要满足高频性能索性在规则里把过孔的Span范围限制一下别让过孔无谓地贯穿所有层。3.3 焊盘与连接片场景下的处理思路还有一种容易被忽视的Net Antennae来源是从贴片焊盘延伸出来的一小段短铜皮或者连接片Tab它在DRC里也会被判成stub。这种场景常见于焊盘边缘拉了一根很短的热焊盘Thermal Relief连接但另一头没有接敷铜或者两个同一网络的焊盘之间原本想用一小段铜皮搭桥搭了一半发现没必要又留了一小截。修复这类问题不建议直接把焊盘形状改小去“躲开”报错那样可能弄巧成拙。正确做法是先把这段短线所在的网络高亮确认它是否真的没有接其他对象。如果确定无用用Cut命令快捷键E-K把线段剪掉或者重新画一下焊盘之间的连接。另外如果板上有多个同一网络焊盘需要连到敷铜尽量用覆铜Polygon Pour统一覆盖而不是靠手动拉短线。覆铜本身有独立的连接规则一般不会触发Net Antennae也很少留下残端。3.4 关于Tolerance、Net Tie与规则豁免理论上你可以修改Net Antennae规则的Tolerance值让系统放过长度小于某个阈值的stub。比如设置成5mil、10mil一些微小的残端就不会报错了。但我并不推荐无脑放宽。Tolerance设得越大DRC的筛查能力越弱等板子出问题再去追根溯源成本高得多。有一种合理的放宽场景模块化设计或者维修跳线时会故意留出一小截“测试针脚”或“调测焊盘”这段线本身不长也不影响信号质量。这时候可以在Rule Scope里指定只对某几个网络或某个Room放宽Tolerance其他网络保持0mil。操作路径是Design → Rules → Manufacturing → Net Antennae在Where The Object Matches里选择Advanced选项用Query表达式筛选目标网络再单独设一个并行规则把容差改大一点。规则优先级记得调高否则默认的0mil规则还是会拦截。还有一种做法是使用Net Tie符号。如果你确实需要用一段铜皮把两个引脚“硬连”在一起且这段铜皮在原理图里没有对应网络可以在原理图中加一个Net Tie器件再关联到PCB封装上。这样DRC会识别出这是一个特殊的连接器件不再把两端不同网络的对象之间的连接当成Net Antennae报错。这个方法在混合信号地分割、模拟地与数字地单点连接时很常用。4. 实战案例一块四层板的Net Antennae排查全过程4.1 案例背景与初次DRC结果我有一次处理一块四层MCU控制板主控是STM32系列板上带了DDR颗粒、两个SPI Flash、一个LCD排线接口和若干电源模块。板子尺寸不大走线密度中等布局布线阶段我基本靠在线DRC提示来调整。等整体拉完线我习惯性地跑了一次全板DRC结果Messages面板瞬间涌出57个错误其中Net Antennae占了41个剩下的主要是Clearance和UnRouted Net。当时我第一反应是“是不是灌铜没灌好”因为很多Net Antennae会在覆铜边缘出现。但仔细一看坐标分布41个错误里有一大半集中在MCU附近的过孔区域另一小半在一个SPI Flash附近的扇出走线上。前者是过孔stub后者大概率是走线断头。4.2 逐条定位与修复过程还原我按住Ctrl双击Messages里的第一条Net Antennae画面跳到一个过孔处。放大后发现这颗过孔从顶层打到内层电源层但底层的焊盘还在孔径也没做背钻。从DRC视角来看过孔在底层那一截没有连接任何走线就是一个标准的stub。我没有立刻换过孔型号而是先给这个网络做了高亮发现信号是从顶层走到内层再出来的这条路径根本不需要经过底层那这颗过孔其实是个多余通孔。我的处理是把这排过孔统一检查了一遍凡是只在内层换层的直接把过孔类型改成Blind ViaSpan只覆盖需要用到的L1到L3多余的铜壁直接从物理上消灭掉。改完之后这一类错误立刻少了将近20个。接着处理SPI Flash附近的走线断头。SPI Flash的扇出线比较宽我在给一个引脚加测试点的时候拉了一根短线到测试焊盘后来测试点位置改了旧线却留了一截。这颗残端特别短只有几十mil的样子视觉上很不显眼但DRC照样报。我的处理是选中这段线确认它没有连接到任何过孔或焊盘后直接Delete。这里有个小技巧删除前先高亮这根线的网络确认同网络的其他部分没有路由依赖到这条线段否则会造成开路。剩下还有几条Net Antennae分布在LCD排线接口附近。我放大一看是地网络覆铜和排线焊盘之间有一个很短的连接铜带另一端悬空。这其实是我为了散热特意加的一段热焊盘但在DRC眼里它是残端。我把它两端的归属关系重新做了调整将这段连接铜带改成连接到覆铜的Thermal Relief而不是直接延伸出去。改完后那几条错误也消掉了。整块板子从41个Net Antennae降到0用时大约40分钟主要时间花在逐条确认和比对层叠上。4.3 修复后的验证与复盘全部改完后我没有直接导出Gerber而是先重新跑了一次全板DRC确认错误清零。接着把板子切换成3D视图用CtrlD的显示模式过了一遍关键网络重点看了DDR相关的过孔是不是还存在长stub风险。因为DDR信号速率不高只要stub不在地址/数据线上的关键位置可以接受但为了保险我还在DRC规则里给DDR网络组单独设置了Net Antennae的Tolerance5mil用来过滤掉一些无关紧要的短线。复盘时我总结出一个教训Net Antennae报错虽然叫“天线”但它不等于高频信号专属问题普通低速板上也会因为布线习惯不好而大量出现。AD19默认0容差实际上是在逼你养成良好的走线习惯。尤其是扇出、打孔、加测试点时随手留下的残端当时看着没关系到了改版或者做SI仿真的时候都会变成账要还。5. 连带问题出Gerber前必须过一遍的DRC相关检查5.1 别把Net Antennae和Partial Route混为一谈有人会把Net Antennae和另一个DRC报错“Partial Route”混在一起。Partial Route的意思是一根走线只有一部分被完成或者走线本身存在未连接的分段常见于使用交互式布线被中断、或者自动布线跑到一半取消的场景。它的报错信息通常会包含“Net(s) have a partial conflict”这样的描述在Messages面板里的Rule类型也跟Net Antennae不是同一个。两者虽然都表现为“线没连完整”但Partial Route更偏向“连线未完成”它报出来的往往是一整段缺失的连接而不只是一小截残端Net Antennae更偏向“存在多余的开放端点”。排查时不要看到“没连上”就一股脑去删线先把Messages面板里的Rule分类看清楚。如果是Partial Route说明有网络从起点到终点之间根本没有完整路径这时候要往前找断点而不是只在端点附近处理。5.2 第三方DRC工具可以做的补充验证AD19自带的DRC已经很强但如果你面对的是高密度板、多层板或者对工艺比较敏感的设计我通常建议出Gerber后再用Klayout这类第三方工具做一轮独立DRC验证。Klayout可以读取ODB或Gerber文件也能导入层叠信息和钻孔数据再做一次规则检查。好处是它的检查不依赖AD内部的设计模型纯粹基于几何数据能发现一些AD因为自带模型偏差而漏掉的边角问题比如不同层的铜皮间距在Gerber实际文件里与AD渲染存在细微差异。当然Klayout的学习成本是有的它的脚本语言是Ruby和Python界面也比较硬核。但如果你只是拿它来跑一遍基础检查不需要太多脚本知识把对应的DrC规则文件加载进来直接Run即可。实际用的时候要注意Klayout的规则文件格式和AD的规则不对等不要指望导入AD的规则就能一模一样复现参考一下就好。5.3 导Gerber前最后的检查清单每次出Gerber前我会固定走一遍下面这个检查清单尤其是处理过Net Antennae之后一定要确认最终版本没有重新引入问题DRC全版运行一次Messages面板里的Error全部清零Warning逐条评估。重点查看Net Antennae规则是否有因为误报而临时放宽Tolerance的情况如果有确认放宽范围只覆盖目标网络。检查过孔类型与层叠设置确认多层板上的过孔Span没有超范围。输出Gerber之前用AD的Output Job配置好Gerber和钻孔文件同时导出ODB备用。导出后在CAM编辑器或Klayout里打开校验钻孔层、铜皮层、丝印层对齐情况再跑一次基础间距检查。这几步能帮你避免“DRC在AD里是绿的到了板厂那边却被批回来”的尴尬。很多板厂做工程预审时也会自己跑一遍DRC如果Net Antennae问题没清干净轻则发邮件问你确认重则影响交期。我在实际项目中的习惯是布线阶段就把在线DRC打开让Net Antennae这类问题尽量在走线过程中暴露而不是等全部拉完线再集中处理。这个习惯替我节省了大量收尾时间。另外一个建议是修改DRC规则时需要顺手在注释里写清改动原因不然板子放两周再回头看连自己都忘了当初为什么把某个网络容差放宽了。
返回列表