4. 层次化规则定义:如何在 ICV DRC 中定义作用于特定层次结构的规则
在 ICV DRC 中,层次化规则定义的核心在于 精确指定规则的作用范围。通过层次化路径(Hierarchical Path)和层次化操作符,设计者可以针对特定模块、单元或层次关系施加约束,避免全局规则对无关区域产生误报或过度约束。
4.1 层次化路径的基本语法
ICV DRC 使用类似文件系统的路径表达式来定位层次结构中的特定单元。路径由顶层单元名、中间层次名和底层单元名组成,各层级之间使用分隔符连接。
| 路径类型 | 语法示例 | 说明 |
|---|---|---|
| 路径 | TOP/INST_A/INST_B |
从顶层单元开始,逐级指定实例路径 |
| 相对路径 | ../INST_C |
相对于当前层次向上或向下引用 |
| 通配符路径 | TOP/*/INST_D |
使用 * 匹配任意中间层次 |
| 正则路径 | TOP/.*_MEM.* |
使用正则表达式匹配单元名称模式 |
最佳实践: 优先使用通配符路径而非正则路径,前者在规则编译和执行效率上通常更高。仅在需要复杂名称模式匹配时使用正则路径。
4.2 层次化操作符与作用域
ICV DRC 提供一组层次化操作符,用于定义规则在层次结构中的生效方式。这些操作符决定了规则是检查单元内部、单元边界,还是跨层次关系。
- WITHIN:规则仅作用于指定层次单元的内部区域,不检查边界。
- BETWEEN:规则检查两个指定层次单元之间的交互关系。
- EXCEPT:从规则作用域中排除指定层次单元。
- ONLY:规则仅作用于指定层次单元,忽略其他所有层次。
- HIERARCHICAL:规则在层次化展开后执行,保留所有层次信息。
4.3 层次化规则定义示例
以下代码展示了如何在 ICV DRC 规则文件中定义作用于特定层次结构的规则。注意路径的精确性和操作符的正确使用。
// 示例1:仅检查 INST_A 模块内部的金属间距
RULE METAL_SPACING_INTERNAL
{
LAYER M1
SPACING 0.18
WITHIN TOP/INST_A
}
// 示例2:检查 INST_A 与 INST_B 之间的交叉耦合
RULE CROSS_COUPLING_CHECK
{
LAYER M2
BETWEEN TOP/INST_A AND TOP/INST_B
SPACING 0.30
}
// 示例3:排除 INST_B 中的特定子模块
RULE WIDTH_CHECK_EXCLUDE
{
LAYER M1
WIDTH 0.22
EXCEPT TOP/INST_B/CELL_Y
}
// 示例4:仅对名称包含 MEM 的单元生效
RULE MEMORY_SPECIFIC_RULE
{
LAYER M1
SPACING 0.20
ONLY TOP/.*_MEM.*
}
4.4 层次化规则的优先级与冲突解决
当多个层次化规则作用于同一区域时,ICV DRC 遵循以下优先级规则:
- 精确路径优先:路径越精确的规则优先级越高。
- ONLY 规则优先:使用 ONLY 操作符的规则优先级高于 WITHIN 规则。
- EXCEPT 规则覆盖:EXCEPT 操作符可以排除其他规则的作用域。
- 后定义规则优先:在规则文件中后定义的规则优先级更高。
注意: 层次化规则的冲突可能导致意外的检查结果。建议在规则文件开头使用
HIERARCHY_PRIORITY 语句显式声明优先级策略,避免隐式依赖。
4.5 层次化规则调试与验证
在定义层次化规则后,建议通过以下步骤进行验证:
| 步骤 | 操作 | 预期结果 |
|---|---|---|
| 1 | 使用 REPORT HIERARCHY 命令输出层次结构 |
确认路径与实际设计一致 |
| 2 | 对单个模块运行规则,使用 DEBUG 模式 |
检查规则是否在预期区域生效 |
| 3 | 对比全局规则与层次化规则的结果差异 | 确认层次化规则正确缩小或调整了作用域 |
| 4 | 使用 VIOLATION LIST 输出违规报告 |
验证违规位置是否在规则作用域内 |
关键要点: 层次化规则定义的核心是“精确控制作用域”。通过合理组合路径、操作符和优先级策略,可以实现对复杂层次化设计的精细检查,同时避免全局规则带来的性能开销和误报问题。