3. 物理规则与间距规则实战

在 Allegro 的约束管理体系里,物理规则(Physical Rules)和间距规则(Spacing Rules)是两条最基础、也最容易被“配了但没生效”的规则线。物理规则回答的是“这根线多宽、这个过孔多大、这对差分线怎么走”;间距规则回答的是“不同网络之间至少隔多远”。本节把它们放在一起实战,是因为二者在 Constraint Manager 中共享同一套“约束集 → 指派对象”的驱动逻辑:先建规则,再把规则挂到网络、类、区域或叠层上,最后用实际布线验证。

一、先理清约束集与指派对象的关系

Allegro 的物理约束集(Physical Constraint Set,简称 PCS)和间距约束集(Spacing Constraint Set,简称 SCS)都是“可复用的规则容器”。一个 PCS 里可以定义线宽(Line Width)、过孔(Via)、差分对(Differential Pair)、最小线间距(Neck)等参数;一个 SCS 里则定义各类对象之间的间距值。规则本身不绑定任何网络,只有通过“指派”动作,才能把约束集挂到 Net、Class、Bus、Differential Pair、Region 或 Xsection 上。

理解这一点非常关键:约束集是“模板”,指派是“应用”。同一个 PCS 可以同时被多个网络类引用,修改模板后所有引用它的对象同步更新。这也是为什么工程上推荐“先建集、后指派”,而不是逐个网络去改参数。

物理约束集与间距约束集的创建与指派链路 物理约束集 PCS PCS_50R_SIG 线宽:5.0 mil 过孔:0.25/0.50 mm 差分对:5.0/7.0 mil 颈缩:4.0 mil 最大并联长度:50 mil 间距约束集 SCS SCS_DEFAULT 线-线:5.0 mil 线-孔:6.0 mil 孔-孔:8.0 mil 线-铜皮:8.0 mil 差分对内:5.0 mil 指派 Assign Net → PCS Class → PCS Diff Pair → PCS Region → SCS Xsection → SCS 实际设计对象 网络类 CLASS_HIGH_SPEED 引用 PCS_50R_SIG 差分对 DIFF_CLK_P/N 引用 PCS_50R_SIG 区域 REGION_DDR 引用 SCS_DEFAULT 叠层 Xsection TOP/BOTTOM 引用 SCS_DEFAULT 电源网络 VCC_1V2 引用 PCS_POWER 约束集是模板,指派是应用;修改模板后所有引用对象同步更新,无需逐个网络重配

二、创建物理约束集:线宽、过孔、差分对

打开 Constraint Manager,在 Physical 分支下右键 Constraint Set → Create → Physical Constraint Set,命名建议带用途和阻抗信息,例如 PCS_50R_SIG。创建后重点填四组参数:

  • Line Width:分 Min / Max / Nominal 三档。常规 50Ω 单端信号在常见 FR-4 叠层上,外层线宽约 5.0~6.0 mil,内层约 4.5~5.5 mil。示例中取 Nominal 5.0 mil、Min 4.0 mil、Max 6.0 mil。
  • Via:指定过孔焊盘直径与钻孔直径,例如 0.50 mm 焊盘 / 0.25 mm 钻孔。若需要过孔列表,可在 Via List 中挂多个过孔类型,按优先级排列。
  • Differential Pair:设置差分对内线宽(如 5.0 mil)、对内间距(如 7.0 mil)、最大并联长度(如 50 mil)、相位容差(如 5 mil)。
  • Neck:颈缩模式下的最小线宽,通常比 Min 再小 0.5~1.0 mil,用于 BGA 出线等拥挤区域。

创建完 PCS 后,在 Physical 分支的 Net / Class / Diff Pair 行上,把对应对象的 Referenced Physical Constraint Set 改为 PCS_50R_SIG。此时规则才真正生效。若某网络未指派,Allegro 会回退到 Default 约束集,这也是“明明配了却没用”的最常见原因。

三、设置间距规则矩阵

间距规则的核心是 Spacing Constraint Set 中的二维矩阵。行和列分别是对象类型:Line、Via、Pin、Shape、Hole、Test Point 等。矩阵中每个交叉格填入最小间距值,单位与设计单位一致(示例用 mil)。

一个典型的 SCS_DEFAULT 矩阵可以这样填:

对象LineViaPinShape
Line5.06.06.08.0
Via6.08.06.08.0
Pin6.06.06.08.0
Shape8.08.08.08.0

矩阵填完后,还要处理两个容易忽略的维度:Same Net Spacing 和 Xsection。Same Net Spacing 控制同网络对象之间的最小间距(例如同网络过孔与过孔、同网络线与线),通常比异网络小,示例取 4.0 mil。Xsection 则允许按叠层分别指定间距,例如 TOP 层线-线 5.0 mil、内层 4.5 mil,用于补偿外层蚀刻偏差。

间距矩阵中的值不是越大越好。过大的间距会直接压缩布线通道,导致层数增加或布线失败。建议先按 IPC 或板厂能力给基线值,再针对高速、电源、射频等特殊网络单独建 SCS 覆盖。

四、把规则应用到实际叠层与区域

规则建好后,需要落到具体物理范围。Allegro 提供三种主要落地方式:

  1. 按叠层指派:在 Constraint Manager 的 Xsection 分支中,为 TOP、INNER1、BOTTOM 等层分别指定 SCS。例如 TOP 层用 SCS_TOP(线-线 5.0 mil),内层用 SCS_INNER(线-线 4.5 mil)。
  2. 按区域指派:在 PCB 上绘制 Shape 作为 Region,然后在 Constraint Manager 的 Region 分支中把该 Region 关联到指定 SCS。DDR 区域、射频区域、电源区域常用这种方式。
  3. 按网络类指派:把高速信号归入 CLASS_HIGH_SPEED,整体引用 PCS_50R_SIG 和 SCS_HIGH_SPEED,避免逐网络配置。

区域指派的优先级高于叠层指派。也就是说,如果 DDR 区域同时落在 TOP 层,区域规则会覆盖叠层规则。实际项目中,常用“叠层给基线、区域给例外”的组合策略。

五、验证规则是否真正生效

规则配完后,不要直接开始布线,先用三个动作验证:

  • 在 Constraint Manager 中执行 Tools → Reports → Constraint Report,导出当前所有网络的物理与间距约束,检查是否有网络仍落在 Default 集上。
  • 在 PCB 上选中一根已布线的网络,右键 → Show Element,查看其实际线宽、过孔和间距是否与约束集一致。
  • 运行 DRC 更新(Tools → Update DRC),观察是否有 Spacing 或 Physical 类报错。若规则未生效,DRC 不会报出对应违规,这本身就是一种反向验证。
常见坑:修改了 PCS 中的线宽,但 PCB 上已有走线不会自动变宽。约束集只影响后续布线和 DRC 检查,已布线对象需要手动或通过 Change 命令更新。若希望批量刷新,可在 Constraint Manager 中执行 Analyze → Analysis Modes 后重新布线,或使用 Skill 脚本批量修改。

六、一份可直接参考的配置示例

以下是一组用于 4 层板、含 DDR3 和 50Ω 单端信号的示例参数,可作为建集起点:

PCS_50R_SIG:
  Line Width: Min 4.0 / Nom 5.0 / Max 6.0 mil
  Via: 0.50 mm pad / 0.25 mm drill
  Diff Pair: 5.0 mil width / 7.0 mil gap / 50 mil max parallel
  Neck: 4.0 mil

SCS_DEFAULT:
  Line-Line: 5.0 mil
  Line-Via: 6.0 mil
  Via-Via: 8.0 mil
  Line-Shape: 8.0 mil
  Same Net: 4.0 mil

SCS_DDR_REGION:
  Line-Line: 4.0 mil
  Line-Via: 5.0 mil
  Via-Via: 6.0 mil
  Same Net: 3.0 mil

把 PCS_50R_SIG 指派给 CLASS_HIGH_SPEED 和 DIFF_CLK_P/N,把 SCS_DEFAULT 指派给 TOP/BOTTOM 叠层,把 SCS_DDR_REGION 指派给 DDR 区域 Shape。这样一套“模板 + 指派 + 区域覆盖”的结构就完整了。后续无论改线宽还是改间距,只需回到约束集修改一次,所有引用对象同步更新,规则驱动布线的效率才真正体现出来。