4. 约束驱动验证方法
在 Allegro 中,约束本身不是“设计意图的备注”,而应当被当作可执行的验证规则来使用。Constraint Manager 里填写的每一类约束,最终都要落到一个可检查的对象上:网络、引脚对、差分对、总线、区域、层或过孔。约束驱动验证的核心思路是:先把设计意图翻译成约束,再把约束翻译成可重复执行的检查动作,最后让检查结果能够回归到每一次改版中。如果约束只停留在“填过”,而没有形成“能查、能判、能复现”的规则,那么它就无法真正闭环。
一、约束的分类与可检查对象
Allegro 的约束大致可以分为六类,每类约束对应的检查对象和验证方式并不相同。电气约束主要针对网络和引脚对,例如最大飞行时间、最大负载、拓扑结构;物理约束针对线宽、过孔、走线层和区域,例如最小线宽、最大过孔数;间距约束针对不同网络、不同对象之间的间距,例如线到线、线到孔、孔到孔;时序约束针对等长、相对延迟和匹配组,例如差分对内等长、总线内等长;差分约束针对差分对的线宽、间距、耦合方式和过孔;阻抗约束针对单端和差分阻抗,通常与叠层和线宽共同决定。
把这些约束转化为验证规则时,第一步是明确“检查对象是谁”。例如,电气约束中的“最大飞行时间”检查对象是网络或引脚对;物理约束中的“最小线宽”检查对象是走线段或区域;间距约束中的“线到线间距”检查对象是两个不同网络之间的几何关系;时序约束中的“等长”检查对象是匹配组内的所有网络;差分约束中的“对内等长”检查对象是差分对的两条线;阻抗约束中的“目标阻抗”检查对象是走线段与叠层组合。只有对象明确,后续的规则才能被 Allegro 的 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 中的约束才能真正成为板级设计验证的驱动力。