4. 约束驱动验证方法

在 Allegro 中,约束本身不是“设计意图的备注”,而应当被当作可执行的验证规则来使用。Constraint Manager 里填写的每一类约束,最终都要落到一个可检查的对象上:网络、引脚对、差分对、总线、区域、层或过孔。约束驱动验证的核心思路是:先把设计意图翻译成约束,再把约束翻译成可重复执行的检查动作,最后让检查结果能够回归到每一次改版中。如果约束只停留在“填过”,而没有形成“能查、能判、能复现”的规则,那么它就无法真正闭环。

一、约束的分类与可检查对象

Allegro 的约束大致可以分为六类,每类约束对应的检查对象和验证方式并不相同。电气约束主要针对网络和引脚对,例如最大飞行时间、最大负载、拓扑结构;物理约束针对线宽、过孔、走线层和区域,例如最小线宽、最大过孔数;间距约束针对不同网络、不同对象之间的间距,例如线到线、线到孔、孔到孔;时序约束针对等长、相对延迟和匹配组,例如差分对内等长、总线内等长;差分约束针对差分对的线宽、间距、耦合方式和过孔;阻抗约束针对单端和差分阻抗,通常与叠层和线宽共同决定。

把这些约束转化为验证规则时,第一步是明确“检查对象是谁”。例如,电气约束中的“最大飞行时间”检查对象是网络或引脚对;物理约束中的“最小线宽”检查对象是走线段或区域;间距约束中的“线到线间距”检查对象是两个不同网络之间的几何关系;时序约束中的“等长”检查对象是匹配组内的所有网络;差分约束中的“对内等长”检查对象是差分对的两条线;阻抗约束中的“目标阻抗”检查对象是走线段与叠层组合。只有对象明确,后续的规则才能被 Allegro 的 DRC 引擎识别和执行。

约束驱动验证:从设计意图到可回归规则 设计意图 电气性能要求 物理尺寸要求 间距安全要求 时序匹配要求 差分耦合要求 阻抗控制要求 Constraint Manager Electrical:飞行时间/负载 对象:网络 / 引脚对 Physical:线宽/过孔/层 对象:走线段 / 区域 Spacing:线-线/线-孔 对象:网络对 / 几何对 Timing:等长/相对延迟 对象:匹配组 / 差分对 Diff Pair:线宽/间距/耦合 对象:差分对 Impedance:单端/差分阻抗 对象:走线段 + 叠层 可检查、可回归的验证规则 规则1:DRC 在线检查 走线时实时标红,违反即提示 规则2:批量 DRC 报告 生成 .rpt,按约束类型分类统计 规则3:等长/时序报告 匹配组内偏差、差分对内偏差 规则4:阻抗/叠层核对 线宽-叠层-目标阻抗一致性 规则5:版本回归对比 新旧版本 DRC 差异清单 回归判定:无新增违反 → 通过 每次改版后重新执行规则,形成闭环回归

二、把约束写成可执行的规则

在 Constraint Manager 中,约束的填写方式决定了它能否被检查。以差分对为例,假设某对 USB 3.0 差分线要求单端阻抗 45 Ω、差分阻抗 90 Ω、对内等长偏差不超过 5 mil、线宽 4 mil、间距 6 mil。这些参数需要分别落到不同的约束表中:阻抗约束在 Electrical 或 Impedance 表中设置目标值,物理约束在 Physical 表中设置线宽和间距,时序约束在 Relative Propagation Delay 表中设置匹配组和容差。如果只设置了差分阻抗而没有设置对内等长,那么 DRC 只能检查阻抗相关的几何规则,无法发现两条线长度不一致的问题。

再以间距约束为例。假设某电源网络与信号网络之间要求最小间距 8 mil,而普通信号之间要求 5 mil。在 Spacing 约束中,需要先建立网络类或网络对,再为不同类之间指定不同的间距值。如果只设置了全局默认间距,那么电源与信号之间的特殊要求就会被淹没。正确的做法是:在 Net Class 中把电源网络归为一类,信号网络归为另一类,然后在 Spacing 矩阵中设置类与类之间的间距。这样,当走线靠近时,Allegro 会按照矩阵中的值进行实时检查,而不是使用统一默认值。

三、验证规则的执行与结果判读

约束填写完成后,验证动作分为在线检查和批量检查两种。在线检查在走线、移动、修改过孔时实时触发,违反约束的位置会以高亮或标记形式显示。批量检查通过 Tools → Quick Reports 或 DRC 报告生成,输出一个包含违反类型、对象、层、坐标和实际值的报告文件。对于时序约束,还可以使用 Constraint Manager 中的 Timing 报告或 Sigrity 工具查看匹配组内各网络的延迟偏差。

结果判读时,不能只看“有没有报错”,而要看“报错是否属于本次改版新增”。一个实用的做法是:在每次改版前保存一份 DRC 报告作为基线,改版后重新生成报告,对比两份报告中的违反项。如果新增违反项为零,说明本次改版没有引入新的约束冲突;如果新增违反项集中在某一类约束上,例如间距或等长,就可以快速定位到改版中受影响的对象。这种回归对比比单纯看“总违反数”更有意义,因为总违反数可能因为修复了旧问题而下降,也可能因为新增了检查项而上升。

四、约束回归的检查清单

为了让约束驱动验证真正可回归,建议在每次改版后按以下清单执行检查。第一,确认 Constraint Manager 中的约束表没有被误改,特别是差分对、匹配组和网络类。第二,执行一次完整 DRC,保存报告并与基线对比。第三,检查时序报告中等长偏差是否仍在容差内,重点关注差分对内和总线内。第四,核对阻抗约束对应的线宽和叠层是否与当前版本一致。第五,记录本次新增或修改的约束项,作为下一次回归的基线更新内容。

约束驱动验证的关键不是“约束填得多”,而是“每条约束都能被检查、被复现、被回归”。如果某条约束在 DRC 中没有任何对应的检查项,那么它只是一条备注,不是验证规则。

在实际项目中,约束的维护往往比约束的初始设置更耗时。建议把 Constraint Manager 中的约束表导出为文本或表格,纳入版本管理,这样每次改版都能看到约束本身的变化。当约束变化时,验证规则也随之变化,回归对比才有意义。只有把约束、检查、报告和回归串成一条链,Allegro 中的约束才能真正成为板级设计验证的驱动力。