2. Allegro设计环境与规则体系架构
Allegro PCB Editor 的规则体系并不是一个“设置面板”,而是一套贯穿设计流程的约束管理架构。理解它的关键在于:先分清界面中哪些区域负责“定义规则”,哪些区域负责“应用规则”,再理解规则本身按什么层级组织、按什么优先级生效。只有把这三件事串起来,才能在后续布线、铺铜、DRC 检查中准确预判软件的行为。
一、界面分区与设计流程的对应关系
Allegro 的主界面可以按功能划分为几个稳定区域。左侧的 Visibility 面板控制各层的显示与隐藏,它决定了你在画布上“看得见什么”,但不改变规则本身;右侧的 Find 面板决定选择过滤器,它影响你“能选中什么对象”,是精确编辑的前提;下方的 Command 窗口用于输入命令和查看执行反馈,例如输入 add connect 进入布线状态。菜单栏中的 Setup → Constraints 是规则体系的入口,而 Setup → Constraint Manager 则是规则集中管理的主界面。
设计流程与界面操作是对应的:导入网表后先做器件布局,布局阶段主要受 Spacing 规则约束;进入布线阶段后,Physical 规则决定线宽与过孔,Electrical 规则决定时序与拓扑;最后铺铜和 DRC 检查时,所有规则同时参与校验。因此,规则不是“最后再设”,而是在流程各阶段逐步生效的。
二、规则层级:从全局到对象
Allegro 的规则按作用范围从大到小分为若干层级,理解这个层级是避免“改了规则却不生效”的核心。典型的层级关系如下:
- Global(全局):作用于整个设计,例如默认线宽、默认间距。它是所有对象的兜底值。
- Class(类):将网络分组后统一约束,例如把 DDR 数据线归为一个 Class,统一设置线宽和间距。
- Net(网络):针对单根网络的规则,优先级高于 Class。
- Pin Pair / Xnet(引脚对/扩展网络):用于时序等需要精确到引脚对的场景,优先级最高。
- Region / Area(区域):在特定区域内覆盖全局规则,例如 BGA 内部使用更细的线宽和更小的间距。
优先级的基本原则是:越具体的对象,优先级越高。当同一对象同时被 Global、Class 和 Net 规则覆盖时,Net 规则生效;若某网络属于某个 Region,则 Region 规则在该区域内覆盖 Net 规则。这个“就近覆盖”的逻辑,是排查规则冲突时的第一判断依据。
三、物理规则、间距规则与电气规则的组织方式
Physical(物理)规则主要管理线宽、过孔和走线层。在 Constraint Manager 中,它按 Line Width、Neck Width、Via 等列组织。例如,可以为一个 Class 设置最小线宽 0.1mm、最大线宽 0.3mm、默认线宽 0.15mm。实际布线时,软件会取默认值,若空间不足则允许降到 Neck Width,但不会低于最小值。
Spacing(间距)规则管理对象之间的最小距离,包括线到线、线到孔、孔到孔、线到铜皮等。它通常以矩阵形式呈现:行和列分别代表不同的对象类型,交叉单元格填入间距值。例如,设置 Line 到 Line 为 0.15mm,Line 到 Via 为 0.2mm。矩阵的读取方向是“行对象到列对象”,设置时要注意对称性,避免只设一半导致反向检查失效。
Electrical(电气)规则管理时序、拓扑和信号完整性相关约束,主要包括 Relative Propagation Delay、Total Etch Length、Differential Pair、Net Schedule 等。例如,DDR 数据组可以设置相对传播延迟公差为 ±25mil,差分对设置线宽 0.1mm、间距 0.15mm、相位公差 5mil。电气规则通常需要先建立 Pin Pair 或 Xnet,才能精确到具体连接关系。
四、规则生效的观察与验证
规则设置完成后,不能只靠“觉得设对了”来判断。实际工作中应通过以下方式验证:在 Constraint Manager 中查看 Worksheet 的 On 列是否勾选;在画布上选中对象后,通过右键 Show Element 查看当前生效的规则来源;执行 Tools → Quick Reports → DRC 查看违规项。若发现规则未生效,优先检查对象是否被更高优先级规则覆盖,或 Region 边界是否包含了该对象。
五、规则冲突的排查思路
实际项目中最常见的问题是“规则设了但 DRC 不报”或“规则没设但 DRC 报了”。前者通常是因为对象被更高优先级规则覆盖,例如某网络属于一个 Region,而 Region 内的间距比 Net 规则更宽松;后者往往是因为 Global 规则中残留了默认值,而该对象没有被任何 Class 或 Net 规则覆盖。排查时建议按“先看对象属于哪个层级,再看该层级是否被更高层级覆盖”的顺序进行,而不是反复修改规则值。