3. 网络与总线对象建模

在 Allegro 的约束管理体系里,约束并不是直接挂在“线”上的,而是挂在“对象”上的。Constraint Manager 之所以能对成千上万条连接施加不同规则,前提是这些连接已经被组织成有语义的对象:Net 表示一条电气网络,Bus 表示一组相关网络的集合,Differential Pair 表示两条需要等长、等阻抗协同布线的网络,XNet 则表示穿过无源器件(电阻、电容、电感、磁珠等)后仍然在电气上连续的一条“扩展网络”。理解这四类对象的创建方式与分类逻辑,是后续所有约束分配的基础。

四类对象的语义与边界

Net 是最基本的对象。在 Allegro 中,一条 Net 由原理图网表导入后自动生成,其成员是同一网络上的所有引脚(Pin)与过孔、走线段。Net 的名字通常来自原理图网络标签,例如 DDR_DQ0、PCIE_TX0_P。约束(如线宽、间距、阻抗)默认作用于 Net 级别。

Bus 是 Net 的逻辑分组。它并不改变电气连接,只是把一组命名有规律的网络归到一起,便于批量施加约束。例如把 DDR_DQ0 到 DDR_DQ7 归为 DQ_BUS,就可以对整组网络统一设置等长组、间距规则。Bus 的成员可以是普通 Net,也可以包含差分对。

Differential Pair 是两条 Net 的配对对象。它要求两条网络在布线时保持等长、等间距、参考同一参考平面,并通常要求差分阻抗(如 100Ω)。在 Allegro 中,差分对既可以由原理图通过命名约定(如 _P/_N、+/-)自动识别,也可以在 Constraint Manager 中手动创建。

XNet 是“穿过无源器件后的网络”。例如 CLK_OUT 经过一个 22Ω 串联电阻后到达 CLK_IN,从驱动器到接收器看,这是一条完整的信号路径,但网表中被电阻分成了两段 Net。XNet 把这两段合并为一个对象,使等长、时序约束能够作用于整条路径,而不是只作用于其中一段。

Net / Bus / Differential Pair / XNet 对象关系 Net DDR_DQ0 Net DDR_DQ1 Net DDR_DQ7 Differential Pair PCIE_TX0_P / _N Bus:DQ_BUS(成员 DQ0~DQ7) 批量施加等长组、间距、线宽约束 XNet:穿过串联无源器件的完整信号路径 驱动器 U1.CLK_OUT Net:CLK_OUT R22 22Ω Net:CLK_IN 接收器 U2.CLK_IN XNet:CLK_OUT → R22 → CLK_IN(整条路径统一约束) Net 是基本电气网络;Bus 是逻辑分组;Differential Pair 是等长等阻抗配对;XNet 是跨无源器件的扩展网络

创建方式:从原理图命名到 Constraint Manager 手动组织

Net 的创建是自动的。导入网表后,Allegro 会为每个网络名生成一条 Net 对象。真正需要设计者介入的是 Bus、Differential Pair 和 XNet。

Bus 的创建有两种常见路径。第一种是在原理图中用总线符号(Bus)把相关网络归组,导入后 Allegro 会识别出 Bus 成员;第二种是在 Constraint Manager 的 Net 工作表中,选中若干 Net,右键创建 Bus 或直接使用 Create Bus。例如选中 DDR_DQ0 至 DDR_DQ7,命名为 DQ_BUS,后续就可以对 DQ_BUS 整体设置 Relative Propagation Delay 等长组。

Differential Pair 的创建依赖命名约定或手动配对。命名约定通常要求两条网络以 _P/_N、+/- 或 _H/_L 结尾。若原理图命名不规范,可在 Constraint Manager 的 Differential Pair 工作表中手动选择两条 Net,执行 Create Differential Pair,并指定差分对名称。创建后需要检查 Phase Tolerance(相位容差)和 Primary Gap(主间距)等参数是否与叠层阻抗设计一致。

XNet 的创建需要先定义“无源器件”。在 Constraint Manager 中,通过 Analyze > XNet 或 Setup > XNet 指定哪些器件类型(如 R、L、C、FB)参与 XNet 构建。Allegro 会沿着这些器件把两段 Net 串成一条 XNet。例如把 R22 标记为 XNet 器件后,CLK_OUT 与 CLK_IN 会合并为一条 XNet,此时对该 XNet 设置等长或时序约束,才能覆盖整条路径。

创建 XNet 前,务必确认无源器件的两个引脚在网表中确实属于不同 Net,且器件本身不参与逻辑功能(如不是跳线电阻)。否则可能把本应独立的网络错误合并。

分类与命名:让约束可批量、可追溯

对象创建之后,分类决定了约束能否被高效复用。推荐按“接口 + 功能 + 位号”三层命名。例如 DDR 接口的数据组命名为 DDR_DQ_BUS,地址组命名为 DDR_ADDR_BUS,差分对命名为 PCIE_TX0_DP。这样在 Constraint Manager 中可以通过筛选器快速定位。

分类时要注意几个边界问题。第一,差分对不要重复加入普通 Bus,否则等长约束可能冲突;第二,XNet 的成员 Net 不应再单独设置与 XNet 冲突的时序规则;第三,Bus 的成员如果包含差分对,应明确 Bus 级约束与差分对级约束的优先级。Allegro 的约束优先级通常是:对象级(Net/Diff Pair/XNet)高于 Bus 级,Bus 级高于全局默认。

对象类型 创建来源 典型约束 常见误用
Net 网表自动生成 线宽、间距、阻抗 把整组网络逐条设置,效率低
Bus 原理图总线或手动创建 等长组、批量间距 把差分对重复纳入普通 Bus
Differential Pair 命名约定或手动配对 差分阻抗、相位容差、间距 未检查 P/N 是否接反
XNet 指定无源器件后自动串联 整条路径等长、时序 把跳线电阻误设为 XNet 器件

规则驱动的对象组织方法

规则驱动的核心思路是:先定义“约束类”(Constraint Class),再把对象归入类中,最后对类施加规则。例如创建一个 DDR_DQ_CLASS,把 DQ_BUS 加入其中,设置等长公差 ±50mil、线宽 4mil、间距 4mil。这样新增一条 DQ 网络时,只需把它加入 DQ_BUS,约束自动继承,无需重复配置。

实际操作中,建议按以下顺序推进:第一步,导入网表后先检查 Net 命名是否规范;第二步,按接口创建 Bus 和 Differential Pair;第三步,识别需要跨无源器件的路径,创建 XNet;第四步,建立 Constraint Class,把 Bus、差分对、XNet 分别归入对应类;第五步,在 Constraint Manager 中逐类设置规则,并用 Analyze 检查是否有未覆盖或冲突的对象。

判断对象组织是否成功的标准:在 Constraint Manager 中任意选中一条网络,都能清楚看到它属于哪个 Bus、是否属于某个差分对、是否被某条 XNet 覆盖,以及最终生效的约束来自哪一级。若出现“约束来源不明”或“同一网络被两条规则同时命中”,说明分类边界需要重新梳理。

最后需要强调,Net、Bus、Differential Pair、XNet 不是互斥关系,而是层层叠加的组织结构。一条 Net 可以同时是某个 Bus 的成员、某个差分对的一半、某条 XNet 的一段。约束体系能否稳定运行,取决于这些叠加关系是否清晰、命名是否一致、优先级是否明确。把这四类对象建好、分好类,后续的等长、阻抗、时序、间距规则才能真正落地。