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 可以同时被多个网络类引用,修改模板后所有引用它的对象同步更新。这也是为什么工程上推荐“先建集、后指派”,而不是逐个网络去改参数。
二、创建物理约束集:线宽、过孔、差分对
打开 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 矩阵可以这样填:
| 对象 | Line | Via | Pin | Shape |
|---|---|---|---|---|
| Line | 5.0 | 6.0 | 6.0 | 8.0 |
| Via | 6.0 | 8.0 | 6.0 | 8.0 |
| Pin | 6.0 | 6.0 | 6.0 | 8.0 |
| Shape | 8.0 | 8.0 | 8.0 | 8.0 |
矩阵填完后,还要处理两个容易忽略的维度:Same Net Spacing 和 Xsection。Same Net Spacing 控制同网络对象之间的最小间距(例如同网络过孔与过孔、同网络线与线),通常比异网络小,示例取 4.0 mil。Xsection 则允许按叠层分别指定间距,例如 TOP 层线-线 5.0 mil、内层 4.5 mil,用于补偿外层蚀刻偏差。
四、把规则应用到实际叠层与区域
规则建好后,需要落到具体物理范围。Allegro 提供三种主要落地方式:
- 按叠层指派:在 Constraint Manager 的 Xsection 分支中,为 TOP、INNER1、BOTTOM 等层分别指定 SCS。例如 TOP 层用 SCS_TOP(线-线 5.0 mil),内层用 SCS_INNER(线-线 4.5 mil)。
- 按区域指派:在 PCB 上绘制 Shape 作为 Region,然后在 Constraint Manager 的 Region 分支中把该 Region 关联到指定 SCS。DDR 区域、射频区域、电源区域常用这种方式。
- 按网络类指派:把高速信号归入 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 不会报出对应违规,这本身就是一种反向验证。
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。这样一套“模板 + 指派 + 区域覆盖”的结构就完整了。后续无论改线宽还是改间距,只需回到约束集修改一次,所有引用对象同步更新,规则驱动布线的效率才真正体现出来。