2. 约束管理器界面与对象模型

Constraint Manager(约束管理器)是 Allegro 中承载所有设计规则的中央数据库。理解它的第一步,不是记住某个按钮在哪,而是建立“对象模型”这一心智地图:约束不是挂在整块板子上的,而是挂在具体对象上,并沿着对象层级向下继承。只有先分清“约束挂在谁身上”,才能判断一条规则为什么生效、为什么被覆盖、为什么改了没反应。

一、启动方式与工作区布局

Constraint Manager 的启动入口有三个常用途径:一是菜单 Setup > Constraints > Constraint Manager;二是在工具栏点击约束管理器图标;三是通过 Setup > Constraints > Modes 先设定工作模式再进入。三者打开的是同一个数据库,区别只在于进入时的默认视图。

工作区在结构上分为左右两栏。左栏是对象浏览器(Object Browser),以树形结构列出可被约束的对象类别;右栏是工作表(Worksheet),以行列网格显示具体约束值。工作表顶部还有一行域选择器(Domain),用于在 Physical、Spacing、Electrical、Same Net 等域之间切换。理解这个“左选对象、右填数值、上切域”的三段式布局,是后续所有操作的基础。

需要特别提醒的是:Constraint Manager 中的修改是即时写入的,没有“保存”按钮。改完一个数值,规则立即进入设计数据库。因此在大批量修改前,建议先确认当前处于正确的域和对象行,避免误改。

二、四类约束域与对象类型

Constraint Manager 把规则划分为四个域,每个域对应不同的物理对象和设计意图:

  • Physical(物理约束):作用于走线、过孔、铜皮等几何对象,管理线宽、过孔尺寸、差分对间距等“物理尺寸”类规则。
  • Spacing(间距约束):作用于不同网络、不同对象之间的间隙,管理线到线、线到焊盘、线到铜皮等“安全距离”类规则。
  • Electrical(电气约束):作用于网络或引脚对,管理时序、阻抗、延迟、拓扑等“信号完整性”类规则。
  • Same Net(同一性约束):作用于同一网络内部的对象,管理同网络走线与焊盘、过孔之间的最小间距,防止同网络短路。

这四个域不是并列的四个文件夹,而是从“几何”到“电气”逐层抽象的四个视角。同一个网络可能同时受 Physical 的线宽约束、Spacing 的间距约束和 Electrical 的阻抗约束,三者互不替代。

三、约束层级与继承关系

约束对象模型的核心是层级继承。Constraint Manager 中的约束按以下层级组织:

  1. Global(全局):作用于整个设计,是所有对象的默认值。
  2. Class(类):把具有相同约束需求的网络归为一组,如 DDR_DATA、CLK、POWER。
  3. Net(网络):单个网络的约束,优先级高于 Class。
  4. Pin Pair / Xnet(引脚对/扩展网络):最细粒度,作用于具体引脚之间的连接,优先级最高。

继承规则是:下层未定义时继承上层,下层一旦定义则覆盖上层。例如,全局线宽设为 6 mil,DDR_DATA 类设为 4 mil,那么属于该类的网络自动使用 4 mil;若其中某条网络单独设为 5 mil,则该网络使用 5 mil,其余同类网络仍用 4 mil。这个“就近覆盖”原则是排查约束冲突的第一判断依据。

Constraint Manager 对象模型与约束继承 工作区布局 域选择器 Domain Physical / Spacing / Electrical / Same Net 对象浏览器 Net Class Pin Pair Xnet Bus Differential Pair 工作表 Line Width Neck Width Via Size Clearance Impedance Delay 约束层级与继承方向 Global 全局约束 默认线宽 6 mil | 默认间距 8 mil | 默认过孔 12/24 mil Class 类约束 DDR_DATA:线宽 4 mil | 间距 6 mil | 阻抗 50 Ω Net 网络约束 DDR_DQ0:线宽 5 mil(覆盖类约束) Pin Pair / Xnet 引脚对约束 U1.A1 → U2.B3:延迟 850 ps(最高优先级) 继承规则:下层未定义 → 继承上层;下层已定义 → 覆盖上层 优先级:Pin Pair > Net > Class > Global 优先级递增

四、实际配置示例:为 DDR 数据组建立约束

下面以一个典型场景说明操作过程。假设设计中有 8 条 DDR 数据线 DDR_DQ0 至 DDR_DQ7,需要统一设置线宽 4 mil、间距 6 mil、单端阻抗 50 Ω。

第一步,在 Physical 域中新建一个 Class,命名为 DDR_DATA,把这 8 条网络加入该类。第二步,在 Class 行对应的 Line Width 列填入 4,单位默认为 mil。第三步,切换到 Spacing 域,在 DDR_DATA 类行填入 Clearance 为 6。第四步,切换到 Electrical 域,在 Impedance 列填入 50,并确认阻抗计算模型已关联到叠层中的对应层。

此时若发现 DDR_DQ0 因为靠近连接器需要局部加宽到 5 mil,可以在 Net 层级单独为它设置 Line Width 为 5,其余 7 条仍继承类的 4 mil。这就是“就近覆盖”的实际应用。

在批量修改前,建议先用 Analyze > Analysis Modes 确认当前哪些约束处于启用状态。如果某个域的约束被关闭,即使数值填了也不会生效,这是初学者常见的“改了没反应”原因之一。

五、约束冲突的排查思路

当设计中出现 DRC 报错或约束未按预期生效时,按以下顺序排查:先确认报错对象属于哪个域(Physical、Spacing、Electrical 还是 Same Net);再在对象浏览器中定位该对象所在的层级;然后检查该层级是否已定义约束,若未定义则向上逐层查找继承来源;最后确认该域的约束开关是否打开。这个“域 → 层级 → 定义 → 开关”的四步排查法,可以覆盖绝大多数约束相关问题。

Same Net 约束容易被忽略。它管的是同一网络内部对象之间的间距,例如同网络走线到自身焊盘的距离。如果只设置了 Spacing 而没设置 Same Net,同网络内部仍可能出现不符合预期的间隙。两者作用范围不同,不能互相替代。

建立对象模型概念之后,后续所有约束操作都可以归结为三个问题:这条规则挂在哪个对象上?它继承自哪里?它覆盖了谁?把这三个问题问清楚,Constraint Manager 的使用就从“记按钮”变成了“读结构”。