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 把这两段合并为一个对象,使等长、时序约束能够作用于整条路径,而不是只作用于其中一段。
创建方式:从原理图命名到 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 设置等长或时序约束,才能覆盖整条路径。
分类与命名:让约束可批量、可追溯
对象创建之后,分类决定了约束能否被高效复用。推荐按“接口 + 功能 + 位号”三层命名。例如 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 检查是否有未覆盖或冲突的对象。
最后需要强调,Net、Bus、Differential Pair、XNet 不是互斥关系,而是层层叠加的组织结构。一条 Net 可以同时是某个 Bus 的成员、某个差分对的一半、某条 XNet 的一段。约束体系能否稳定运行,取决于这些叠加关系是否清晰、命名是否一致、优先级是否明确。把这四类对象建好、分好类,后续的等长、阻抗、时序、间距规则才能真正落地。