ARTICLE DETAIL

资讯详情

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

Allegro约束管理器入门:物理与间距规则从入门到实战

Allegro约束管理器入门:物理与间距规则从入门到实战 很多人第一次打开 Allegro 的 Constraint Manager心里都会冒出一个念头这东西怎么这么复杂界面左侧是一棵密密麻麻的树右侧是一堆看不懂的表格什么 Physical、Spacing、Electrical名称叠着名称规则套着规则还没开始布线就已经被劝退了。但如果你把这个工具拆开看它的核心逻辑其实非常朴素就是两件事先建规则集再把网络分配进去。这篇文章我就围绕这件事把 Allegro 约束管理最基础也最关键的物理规则和间距规则讲透。适合刚接触 Allegro、被规则设置折磨过的新人也适合那些用 Allegro 画了好几年板子、却一直“能用就行”的工程师。把这套逻辑盘顺了后面接触差分对、等长、高速约束才不会一头雾水。1. Allegro 的规则系统为什么让人头疼1.1 一个典型翻车现场先还原一个很常见的场景。你画完原理图导入网表在 Allegro 里准备布线听说 50 欧姆单端线要走 5mil于是打开 Constraint Manager进到 Physical 页面把默认线宽改成 5mil开始走线线宽确实变成 5mil 了心里还挺美。但没过多久你需要给一组关键信号设置 4/6/7mil 的等长线宽规则。你明明在 Physical 里也建好了规则集走线的时候却完全没按这个规则生效线宽依然是 5mil。你再回头检查发现自己只是建了规则集根本没有把它分配给具体的网络。同样的情况也发生在间距规则上。你设置了某两组网络间距要做到 8mil但走线的时候两条线 4mil 间距挨着走DRC 一点反应都没有。你去论坛发帖求助回复五花八门但本质往往只有一个没有理解 Allegro 约束体系“先建集合再分配”的机制。1.2 把规则理解成公司的“着装规范”我用一个生活化的类比来解释这件事你一听就明白。假设你是一家公司的行政要规定不同职级员工的着装。你不会跑到每个人面前说“你穿蓝衬衫你穿黑裤子”那样太乱了。合理的做法是先制定几套规范——高管穿深色正装普通员工穿商务休闲车间工人穿防静电工装。这几套规范就相当于 Allegro 里的Constraint Set约束集。然后你再根据花名册把员工归到对应规范下张三归高管李四归普通员工王五归车间工人。这个“归属”的动作就相当于 Allegro 里把网络分配到约束集。最后这套制度还可以按部门细化比如市场部可以比技术部穿得稍微随意一点这又对应了 Allegro 里按 Class、Bus、XNet 不同层级去覆盖规则的做法。所以Allegro 的规则管理并不是直接在某根线上写死“线宽 5mil”而是先在 Constraint Set 里定义好一套或多套规则。再把网络、总线、差分对、区域等对象分配给这些规则集。系统根据分配关系自动算出每条走线最终适用的约束值。1.3 为什么这么设计反而高效你可能会想为什么不直接在 Net 属性里写死线宽线距那样不是更直观吗确实如果只是一块小板子直接改属性没问题。但一旦遇到几百条高速线、几十个差分对、复杂的 DDR 总线直接改网络属性就是灾难。用约束集的方式你只需修改一套规则所有分配了这套规则的网络全部同步生效。复用、继承、覆盖都变得非常灵活。Allegro 这套设计本质上是为复杂系统准备的。前期学习曲线确实陡但规则体系一旦建立好后期改动的成本极低。这也是几乎所有大型 EDA 工具都采用这套设计的原因。2. 认识 Constraint Manager 的界面与分类2.1 打开方式和整体布局打开 Constraint Manager 的方法有两种菜单栏Setup - Constraints - Constraint Manager工具栏点击带有“C”字样的快捷按钮打开的窗口默认分左右两栏左侧是对象树类似资源管理器的目录结构右侧是规则表格展示当前选中的对象类型相关的约束参数。左侧对象树顶层一般有这几大类Physical物理规则管的是线宽、线长、过孔、差分对参数。Spacing间距规则管的是走线、过孔、焊盘、铜皮等对象之间的最小距离。Same Net Spacing同网络间距规则管的是同一网络内过孔到走线、过孔到焊盘等的间距。Electrical电气规则管的是相对延迟、绝对延迟、总长、阻抗、串扰、时序等高速设计内容。如果你是第一次接触我建议先不要管 Electrical那是后面做高速设计才用得到的东西。先把 Physical 和 Spacing 吃透。2.2 Physical 和 Spacing 的树形结构差异在 Physical 节点下核心子节点是Physical Constraint Set定义各种物理约束集如不同线宽、不同过孔组合。Net / Bus / XNet / Differential Pair把约束集分配给具体的网络对象。Region定义物理区域规则用于局部覆盖。Spacing 节点下则是Spacing Constraint Set定义各种间距约束集。Net / Bus / XNet / Differential Pair把间距约束集分配给网络对象。Same Net Spacing同网络间距约束。Region区域间距规则。可以看到两者的结构是对称的核心思路完全一样。你把 Physical 这套逻辑搞懂了Spacing 基本就是换了一个表格重复一遍。2.3 右侧表格到底在填什么右侧表格看似复杂实际就是一张“规则集定义表”。以 Physical 为例表格里每一行就是一个约束集每一列是约束集的具体参数约束集名称最小线宽推荐线宽最大线宽允许过孔列表DEFAULT4mil5mil6milVIA12/22POWER10mil15mil20milVIA16/28你在表格里新增一行写下数值就等于新建了一套物理规则集。之后你要把哪些网络套用这套规则就把网络拖到对应集合下或者编辑网络对象完成分配。Allegro 中的这种“拖拽分配”操作非常高频。左侧树中把网络从默认组拖到某个约束集下规则就生效了。这个动作熟练之后比命令行还要顺手。3. Physical 物理规则线宽、过孔与区域覆盖3.1 物理规则到底管哪些事物理规则约束的是走线本身的物理属性最核心的是三项线宽参数Minimum Line Width最小线宽Recommended Line Width推荐线宽Maximum Line Width最大线宽除了线宽还包括走线允许使用的过孔列表Vias差分对的线宽、线距、耦合参数Neck 设置比如焊盘出线时允许缩窄的值Region区域规则常规项目里你至少会用到两三套物理规则。比如普通信号线最小 4mil推荐 5mil最大 6mil。电源线最小 10mil推荐 15mil最大 20mil。差分对线宽 5mil线距 8mil。3.2 新建一套 Physical Constraint Set 的完整步骤这里我直接给出一套可照抄的操作流程打开 Constraint ManagerSetup - Constraints - Constraint Manager。在左侧树展开Physical - Physical Constraint Set。在右侧表格空白行右键选择Create - Physical Constraint Set。给约束集起名例如PWR_10_15。在表格中设置 Minimum、Recommended、Maximum 三列线宽值。点击 Vias 列的按钮勾选该约束集允许使用的过孔类型。完成后关闭窗口并保存。注意到这一步你只是定义了一套规则并没有把它应用给任何网络。下一步分配才是关键。3.3 把规则分配给网络分配网络有三种常用方式最简单直观的方式在 Constraint Manager 左侧树展开Net - All Layers右侧选中目标网络直接拖拽到Physical Constraint Set对应的集合名称下。在 Allegro 主界面操作选中某根网络右键 -Electrical/Physical Constraint - 选择约束集。批量操作在左侧树中按 Bus、Class 或 XNet 维度选中多个网络统一拖拽分配。如果你的设计里存在总线可以直接在 Bus 或 XNet 层级统一分配子网络会全部继承。这就是“父级分配、子级继承”的战斗方式非常高效。3.4 区域规则同一个板框内用两套物理约束很多板子不是全板一套规则。DDR 区域往往需要更严格的线宽线距和过孔类型电源区域可能需要宽走线天线区域可能要净空板边甚至要禁布。这些需求靠的就是Region物理区域规则。操作思路先画一个区域。菜单Shape - Rectangular或其他形状画好后选中图形。右键 -Assign to Region或者使用Z-Copy从板框拷贝出一个区域。打开 Constraint Manager进入Physical - Region。为这个 Region 建立或指定一套约束集例如DDR_TOP。在 Region 表格中把该区域分配给对应规则。需要特别注意Region 规则优先级高于普通网络规则。也就是说即使某网络本身分配了默认约束集当走线进入某个 Region 时以 Region 的约束为准。这也是很多新人踩坑的地方明明网络规则没毛病但走线一进入某个区域就疯狂报错。遇到这种问题先看线是不是落在了某个 Region 内。3.5 Physical 规则实操心得我在实际项目里总结了几条经验约束集命名一定要有语义。PWR_10_15比SET1好一百倍。规则一多名字就是索引。默认约束集要足够宽松。把默认规则设得很严格结果一上来全板都是 DRC 报错根本没法干活。正确做法是默认规则放宽特殊网络用更高优先级规则去收紧。过孔列表一定要和线宽规则配套。如果你在约束集里限制了大过孔不能用布线时就会遇到“明明过孔库里有这个型号却选不了”的问题。4. Spacing 间距规则安全距离到底在哪里生效4.1 间距规则管什么间距规则约束的是两个对象之间的最小距离。对象包括走线、过孔、焊盘、铜皮、板框、文字等。最常见的间距约束场景有信号线与信号线的间距信号线与电源网络的间距过孔与焊盘的间距铜皮与走线的间距走线到板框的间距4.2 搞清楚 Spacing 约束集与网络的映射和物理规则一样间距规则也是先定义一套Spacing Constraint Set再把网络分配过去。在 Spacing 页面里最经典的就是一张二维矩阵表。行是来源对象列是目标对象交叉点就是最小间距值。比如来源 / 目标走线过孔焊盘铜皮走线5mil6mil6mil8mil过孔6mil6mil6mil8mil焊盘6mil6mil6mil8mil铜皮8mil8mil8mil8mil这张矩阵实际上就是在告诉你这类对象遇到那类对象最小距离是多少。默认模板里的数值一般偏保守你可以按需修改。4.3 什么时候需要多套 Spacing 规则一个正常项目我建议至少区分三套间距规则默认间距规则大部分普通信号网络使用。电源间距规则电源地网络与信号网络之间需要拉开距离。差分对间距规则差分对内部线距通常由差分规则统一控制。举个实际例子。假设普通信号线间距要求 5mil电源网络与其他网络之间要求 8mil具体操作是在Spacing - Spacing Constraint Set里新建两个约束集。一个叫DEFAULT_SP矩阵统一设置 5mil。一个叫PWR_SP在匹配电源网络时把间距调整到 8mil。将电源网络如 VCC、3V3、GND分配到PWR_SP。其余网络保持默认约束集。这样 DRC 检查时遇到电源网络与其他网络的间距会自动按 8mil 卡控。4.4 间距规则最容易踩的两个坑坑一只改数值不分配网络。很多人改了 Spacing Constraint Set 里的数值却没给任何网络分配结果全板 DRC 依旧按默认规则检查改了等于没改。我建议改完间距规则后做一个验证动作随便找一根普通信号线和电源网络线手动拉近到小于新间距的距离看 DRC 是否立刻报警。如果没报警说明分配动作有问题回去检查。坑二板框间距没覆盖。默认模板常常不检查走线到板框的距离很多人做设计时 DRC 不报错板子做出来铜皮离板边太近甚至露铜。解决办法是在 Spacing 矩阵中手动把 Board Outline 加入进去并设置合适的间距值。5. 约束的优先级到底该听谁的5.1 从默认规则到区域性规则的覆盖逻辑Allegro 的约束系统存在一条优先级链条。结合我的日常使用可以总结成默认规则 - 网络规则 - 总线规则 - 差分对规则 - 区域规则 - 特定网络规则后面的优先级高于前面。打个比方全板默认线宽 5mil某根网络单独分配了 4/6/7mil 约束那这根网络按 4/6/7 执行。这根网络又恰好穿过一个 DDR RegionRegion 内要求线宽 4mil那在 Region 内部按 4mil 执行。这根网络没有分配任何自定义规则那么自动使用全板默认规则。这套优先级是处理复杂设计的关键。理解了它之后遇到一切“规则突然不起作用”的问题第一反应就应该去查优先级覆盖而不是怀疑软件有问题。5.2 怎么看某根网络最终生效的规则不需要记复杂命令Allegro 提供了非常实用的工具。在 Constraint Manager 左侧选中某个网络右键选择Audit Constraints或者菜单Setup - Constraints - Audit Constraints它会列出该网络当前应用到的规则来源并标明哪一个规则最终生效。我自己处理怪异 DRC 报错时会第一时间对这根网络做一次 Audit。很多时候不是规则没设而是被某个 Region 或约束集覆盖了。用 Audit 排查比瞎猜效率高得多。5.3 一个真实的优先级陷阱案例有个工程师朋友做 4 层板在Physical - All Layers里把所有网络的线宽改成了 6mil但有一根 BGA 出线的网络怎么改都还是 4mil。他查了很久最后发现这根网络之前无意中被分配到了一个叫BGA_FANOUT的约束集那个集里的最小线宽是 4mil。这个约束集优先级高于默认规则所以他在默认表格里改根本没效果。解决办法很简单把那根网络从BGA_FANOUT里拖回默认约束集或者修改BGA_FANOUT的线宽值。类似的问题基本上每周都能在 EDA 论坛上看到。遇到时不要急着怪软件先检查分配和优先级。6. 完整实操做一个双约束规则的小板子6.1 项目背景假设你在画一块蓝牙模块底板28mm × 38mm 双层板。主要网络分成三组电源网络VBAT、3V3、GND。射频网络RF_ANT50 欧姆阻抗控制的单端走线。普通 IOI2C、UART、GPIO 等信号。设计需求是普通 IO最小线宽 4mil推荐 5mil最大 6mil线距不小于 5mil。电源网络最小 10mil推荐 15mil最大 20mil与其他网络间距不小于 8mil。射频网络线宽 5.5mil 满足 50 欧姆阻抗两侧净空 10mil。下面我们一步步实现。6.2 第一步建立 Physical 规则打开 Constraint Manager进入Physical - Physical Constraint Set。默认有一个叫 DEFAULT 的约束集。这个集合作为全板兜底。新建约束集PWR_10_15Minimum 为 10milRecommended 为 15milMaximum 为 20mil。新建约束集RF_50OHMMinimum 为 5milRecommended 为 5.5milMaximum 为 6mil。修改 DEFAULTMinimum 为 4milRecommended 为 5milMaximum 为 6mil。6.3 第二步建立 Spacing 规则进入Spacing - Spacing Constraint Set。使用默认集合DEFAULT_SP把矩阵中 Line 到 Line 设为 5milLine 到 Pad 设为 6milLine 到 Via 设为 6mil。新建集合PWR_SP把 Line 到 Line、Line 到 Pad、Line 到 Via 都设为 8mil。新建集合RF_SP把 RF 网络与其他对象的间距设为 10mil特别是 Line to Line 和 Line to Shape 两项。6.4 第三步分配网络到约束集这一步很多人搞错我特意放慢速度讲一遍。在 Constraint Manager 左侧树展开Net - All Layers右侧会出现所有网络。选中 VBAT、3V3、GND拖到PWR_10_15这个 Physical Constraint Set 下。选中 RF_ANT拖到RF_50OHM这个 Physical Constraint Set 下。剩下的网络保持默认也就是 DEFAULT。然后 Spacing 部分再重复一遍选中 VBAT、3V3、GND拖到PWR_SP集合下。选中 RF_ANT拖到RF_SP集合下。剩余网络保持默认集合。注意如果某个网络不属于任何特殊分组就不需要手动拖它会自动落在默认集合里。这也是为什么给默认集合起个贴合项目语义的名字很重要。6.5 第四步验证是否生效完成分配后关闭 Constraint Manager回到 Allegro 主界面。菜单Display - Status打开 DRC 状态窗口。执行Setup - Constraints - Update DRC确保 DRC 是最新结果。随手拉一根普通走线用Route - Connect走线按 Tab 切换线宽观察推荐线宽是否显示 5mil。再拉一根 VBAT 走线切线宽时看看推荐值是不是 15mil。如果这些都没问题说明规则已经生效。如果没生效优先检查第三步的分配动作是否完成网络名是否写错。6.6 实操中的几点补充分配网络时建议先在 Setup 里给网络创建 Class例如POWER、RF、SIGNAL。创建好 Class 后在 Constraint Manager 里按 Class 拖拽一次就能处理一批网络不用一个个手动拖。每次修改规则后裸眼观察之前务必先更新 DRC。Allegro 的 DRC 不是实时的不更新它就显示旧结果。如果项目里后面还会反复用到这套规则可以在文件层面做模板。具体做法是单独做一个含约束规则的空板文件之后每次新项目从它开始复制。7. 常见问题与排查技巧实录7.1 设置了线宽走线时却没有效果原因通常是没有把约束集分配给目标网络。你修改的只是规则集本身并没有把它和网络挂钩。排查思路检查 Physical Constraint Set 中是否已分配目标网络。检查目标网络是否被其他更高优先级的规则覆盖。使用Setup - Constraints - Audit Constraints查看最终生效规则。7.2 间距明明违反DRC 却不报警原因可能是 DRC 没有更新也可能是间距矩阵里没有设置对应的对象组合或者目标网络没有分配到间距约束集。排查思路手动执行一次 Update DRC排除更新不及时的问题。检查 Spacing Constraint Set 中该网络分配的集合是否覆盖了相关对象组合。检查线是否进入了一个 RegionRegion 优先级高会覆盖现有约束。7.3 差分对的线宽改不动原因差分对的线宽受 Physical Constraint Set 中差分对属性的控制而不是普通的线宽项。你需要找到该差分对所归属的差分规则集在其中修改线宽和线距参数。注意差分对在布线前还要在 Electrical 里建立对应的 Differential Pair 约束集设置 Primary Gap、Primary Width 等参数这属于下一篇文章的内容。7.4 拖到约束集后表格里看不到网络这个多半是左侧树层级看错了。比如你把网络拖到了 Physical 下的 Net 树却跑到 Spacing 的表格里去查看自然看不到。Physical 和 Spacing 是两套独立的对象树各自有各自的网络分配表。7.5 Constraint Manager 打开很慢在 Allegro 17.4 版本中网络数量较多的大型设计会出现 Constraint Manager 启动明显变慢的情况有时要等几十秒。建议打开前先关掉一些不必要的窗口或者先选中少量网络再打开。实在是卡可以尝试把显示配色方案恢复成默认某些第三方配色会明显拖慢渲染速度。7.6 Allegro 打开 brd 弹出版本选择框时不知所措这也是很多 17.4 新用户会遇到的情况。打开.brd文件时没有直接进入 Allegro PCB Designer而是先弹出 Product Choice 选择框。这里需要按自己的功能需求选择产品类型一般画板就选Allegro PCB Designer如果只是看文件选Allegro PCB Viewer。这个选择会影响工具的功能菜单范围选错后部分菜单项会缺失。8. 从零搭建自己的规则模板8.1 为什么建议沉淀规则模板每个人的项目类型各异但一套成熟的规则模板能让你从“每次都在设规则”变成“打开模板直接干活”。比如你长期做 4 层 MCU 板就可以把下面的内容沉淀成模板默认物理规则普通信号 4/5/6mil电源 10/15/20mil。默认间距规则信号间距 5mil电源间距 8mil板框间距 15mil。常用过孔规则12/22 过孔、16/28 过孔。常用区域规则DDR 区域、晶振下方禁布区、天线净空区。Allegro 中约束信息是随.brd文件保存的。你可以单独建一个“规则模板.brd”里面只放板框和约束不画任何东西。每次新项目就从它开始复制或者通过规则导入功能迁移。8.2 规则的导入导出Allegro 支持约束信息的导入导出。路径是导出File - Export - Constraints导入File - Import - Constraints导出时可以勾选 Physical、Spacing、Electrical 等规则类型导出一个 XML 或文本文件。导入到新设计时要注意网络名是否匹配。如果你源设计和新设计的网络命名完全一致导入后规则会自动匹配。如果名称不一致会出现大量未分配情况需要手动调整这一点务必留意。8.3 模板的三条铁律基于多年经验我总结出模板设计的三条铁律默认规则一定是最宽松的兜底规则。默认规则设得太严新手一上来全板 DRC 爆红有点劝退。所有特殊网络都要有明确的命名规则。电源网络、射频网络、高速总线命名尽量统一分配时不迷路。Region 规则尽量少但每个都有清晰命名的和注释。Region 过多会显著增加排查难度。“先宽后严”这个思路和软件调试里的排查方法论是一致的。先保证细节宽松再对特殊网络精准收紧整体效率最高。9. 从这套体系往后看这篇内容把 Allegro 约束管理的地基打完了。如果你跟着实操走了一遍应该能处理大多数常规板卡的约束问题。接下来要进阶的东西还有很多差分对规则如何在 Physical 和 Electrical 两个层面控制差分对的线宽、线距、长度匹配。等长与相对延迟如何用 Relative Propagation Delay 实现一组总线信号的时序匹配。XNet 与串扰一个网络经过串联电阻、磁珠或电容后怎么把分段网络视为一个整体来约束。区域规则的实战BGA 出线区、DDR 区域、电源平面分割区域的约束设计。这些内容我计划在下一篇的“Allegro 约束管理二”里继续展开。尤其是差分对和等长是很多工程师日常最容易接触到的高速约束值得单独花篇幅聊透。最后分享一点个人体会。约束管理看起来是个设置窗口实际上是一套“设计规则的语言”。你掌握得越熟练与硬件工程师、Layout 工程师之间的沟通就越顺畅。很多“这根线为什么不能走这里”“这个间距为什么不行”的争论最后都能在 Constraint Manager 里找到明确答案。下一次我们继续。
返回列表