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:规则在层次化展开后执行,保留所有层次信息。
层次化操作符作用域示意图 TOP 顶层单元 INST_A 模块 WITHIN 规则作用域 (仅检查内部) INST_B 模块 EXCEPT 排除区域 (规则不生效) INST_A/CELL_X INST_B/CELL_Y BETWEEN 跨模块检查

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 遵循以下优先级规则:

  1. 精确路径优先:路径越精确的规则优先级越高。
  2. ONLY 规则优先:使用 ONLY 操作符的规则优先级高于 WITHIN 规则。
  3. EXCEPT 规则覆盖:EXCEPT 操作符可以排除其他规则的作用域。
  4. 后定义规则优先:在规则文件中后定义的规则优先级更高。
注意: 层次化规则的冲突可能导致意外的检查结果。建议在规则文件开头使用 HIERARCHY_PRIORITY 语句显式声明优先级策略,避免隐式依赖。

4.5 层次化规则调试与验证

在定义层次化规则后,建议通过以下步骤进行验证:

步骤 操作 预期结果
1 使用 REPORT HIERARCHY 命令输出层次结构 确认路径与实际设计一致
2 对单个模块运行规则,使用 DEBUG 模式 检查规则是否在预期区域生效
3 对比全局规则与层次化规则的结果差异 确认层次化规则正确缩小或调整了作用域
4 使用 VIOLATION LIST 输出违规报告 验证违规位置是否在规则作用域内
关键要点: 层次化规则定义的核心是“精确控制作用域”。通过合理组合路径、操作符和优先级策略,可以实现对复杂层次化设计的精细检查,同时避免全局规则带来的性能开销和误报问题。