本文基于 Calibre v2017.1 官方手册,深度拆解 nmDRC-H(层级化 DRC) 的核心机制、多线程运行、性能优化、特殊场景处理及与 LVS 的联动配置,助力大规模层级化版图实现 "超高效验证 + 低资源占用 + 无缝衔接 LVS",同时兼容扁平化规则文件,降低迁移成本。
一、nmDRC-H 核心优势与底层机制
Calibre nmDRC-H 是一款全层级化 的设计规则检查(DRC)应用程序。它能够充分利用设计中的层级结构,减少处理时间、内存占用量以及 DRC 结果的数量。nmDRC-H 是针对层级化版图的专用 DRC 工具,核心竞争力在于复用单元验证结果,相比扁平化 nmDRC,可实现:
- 处理时间缩短 50%~90%(单元复用率越高,收益越显著);
- 内存占用降低 30%~70%(数据存储在最低层级,避免重复加载);
- DRC 错误计数去重(重复单元的错误仅报告一次,减少冗余)。
Calibre nmDRC-H 可直接使用其扁平化版本 Calibre nmDRC 的规则文件。二者的运行逻辑基本一致,差异仅体现在层级化处理算法,以及通过层级化错误抑制功能减少设计规则错误数量这两点上。
部分 SVRF(标准验证规则格式)规范语句仅适用于 Calibre nmDRC-H。这类语句即便出现在 Calibre nmDRC 扁平化运行的规则文件中,也会被程序忽略。
Calibre nmDRC-H 对设计没有任何限制,无论是几何图形重叠的单元布局,还是单元布局之间的相互重叠,都能兼容处理。
1.1 Calibre nmDRC-H 结果数据存储
层级化处理的一个重要特性是:Calibre nmDRC-H 会将数据(原始图层几何图形或派生图层几何图形)保存在尽可能低的层级。对于原始图层图形,这意味着 Calibre 会像用户原始设计中那样,在单元内仅存储一次该数据。
在生成派生图层图形的图层操作中,程序会尝试在每个单元内独立分析图形,仅在需要结合上下文分析数据时,才会将图形提升至更高层级。随后,Calibre 会在最低层级 生成派生图层图形,并且和原始图层图形一样,在图形所属的单元内仅存储一次。由于 DRC 结果是映射到 DRC 结果数据库中的派生图层元素,因此 Calibre nmDRC-H 天然具备错误抑制能力。
-
数据存储逻辑:
- 原始图层:按版图层级存储,单元模板(如 cell A)仅存储一次,实例化时无需重复加载;
- 派生图层(如错误层):优先在单元内部分析生成,仅当需要跨单元上下文时才 "提升" 层级,同样存储在最低可能层级;
- 错误抑制:重复单元的错误仅在单元模板中存储一次,报告时关联所有实例化位置(如 cell A 实例化 3 次,错误仅报告 1 次)。
-
错误坐标转换:所有错误结果会自动转换为顶层单元坐标,与扁平化结果的坐标一致性保持兼容,不影响后续调试。

该设计包含 3 个单元 A 的实例,且单元 A 内部的两个图形存在间距违规错误。Calibre nmDRC-H 在分析单元 A 时便会检测出该错误,这个错误的判定与上下文无关。因此,Calibre nmDRC-H 仅会在单元 A 的模板中存储一次该错误的几何信息,并且仅报告一次该错误。
而非层级化的 DRC 应用程序会先将单元 A 扁平化处理,导致顶层单元中出现 6 个图形,最终报告 3 个独立的错误。在这个例子中,Calibre nmDRC-H 能够自动识别出其中两个错误属于重复错误。
Calibre nmDRC-H 生成的 ASCII 或二进制 DRC 结果数据库,其格式与扁平化版本完全相同。同时,Calibre nmDRC-H 也会将所有 DRC 结果转换到顶层单元的坐标系中,这与扁平化应用程序的处理逻辑保持一致。
错误抑制的具体流程如下:
- 假设 DRC 结果 R 是单元 A 中的一个派生多边形。
- 若单元 A 是顶层单元,Calibre nmDRC-H 会完全按照扁平化系统的方式,将结果 R 写入 DRC 结果数据库。
- 若单元 A 不是顶层单元,Calibre nmDRC-H 会在整个层级结构中选择单元 A 的一个实例 。程序会通过该实例的全局坐标转换关系,将结果 R 映射到顶层单元的坐标系中,再将其写入 DRC 结果数据库。
- 所选的单元 A 实例,是在扁平化层级结构中处于最左下角位置的那个实例。
Calibre nmDRC-H 与 Calibre nmDRC 生成的 ASCII 或二进制 DRC 结果数据库,唯一区别在于前者的 DRC 结果数量通常更少。
1.2 扁平化与层级化结果呈现对比
在 DRC 汇总报告和结果数据库中,Calibre nmDRC 对扁平化结果和层级化结果的呈现方式有所不同。层级化结果呈现提供了多种配置选项,帮助用户更好地解读结果。
若希望在 Calibre RVE 中按单元查看结果,必须在规则文件中添加语句:DRC Cell Name YES CELL SPACE XFORM。该语句会使 Calibre nmDRC 以单元坐标系而非顶层单元坐标系来呈现结果。
| 输出内容 | 扁平化运行 | 层级化运行 |
|---|---|---|
| DRC 汇总报告 | 扁平化结果统计数量 | 优先显示层级化结果统计数量,括号内标注预估的扁平化结果数量。默认不显示单元独立统计数据。如需查看单元统计数据,可启用 DRC Summary Report HIER 选项。 |
| DRC 结果数据库与 RDB 文件 | 扁平化结果 | 每个 DRC 结果仅存储一次。结果位置位于错误单元在层级结构中最低层级、最左侧实例的顶层边界内。默认不存储单元专属数据。如需存储单元相关结果,可添加语句 DRC Cell Name YES CELL SPACE XFORM。 |
| Calibre RVE 结果呈现 | 扁平化视图 | 默认显示顶层单元结果。如需查看单元相关结果,可选择菜单 Highlight > Highlight in Context(在上下文中高亮显示)。 |
二、核心运行配置
2.1 运行模式
Calibre nmDRC-H 和 Calibre nmLVS-H 均支持多线程运行模式,可大幅缩短运行时间。
- 多线程(MT)模式 :利用同一台主机的多个 CPU 核心,通过命令行选项
-turbo启用。 - Calibre MTflex 模式 :利用多台主机组成的网络资源,通过命令行选项
-remote或-remotefile启用。
2.2 超大规模并行(Hyperscaling)
超大规模并行是一种运行模式,能够在多线程或 Calibre MTflex 运行中,对图层操作进行并行处理 。该模式通过命令行选项 -hyper 启用,无需额外的许可证,仅需满足常规的多线程或 Calibre MTflex 运行要求。
相较于普通多线程运行,超大规模并行模式通常能使实际运行时间再缩短一半,同时还能提升处理器利用率的扩展性。只要硬件支持多线程或 Calibre MTflex 模式,建议优先启用超大规模并行模式,除非有明确的理由不使用。
命令行调用示例如下:
bash
运行
calibre -drc -hier -turbo -hyper rules
calibre -drc -hier -turbo -remotefile config.txt -hyper rules
注 启用超大规模并行模式时,必须在规则文件中正确设置
Layout Base Layer语句 (也可使用Layout Top Layer,但优先推荐前者)。若设置不当,往往会导致性能下降,这一点对所有 Calibre nmDRC-H 运行均适用。
在 Calibre MTflex 模式下启用超大规模并行时,需注意:Calibre MTflex 配置文件中的 REMOTE HOST ... LAYERDIR 选项,适用于内存受限、需要使用基于磁盘的图层 的从机。在超大规模并行运行中使用 LAYERDIR 选项,可能会导致性能显著下降,具体影响程度取决于规则文件和数据情况。
超大规模并行模式对层级化对象的统计方式,与传统层级化运行有所不同。具体来说:
- 超大规模并行会将内部识别的极小单元(通孔和接触孔)进行扁平化处理。
- 同时,也会根据
Layout Base Layer语句(或适用时的Layout Top Layer语句)的设置,将内部识别的顶层单元进行扁平化处理。
这意味着超大规模并行运行与传统层级化运行的对象统计数量可能存在差异,这属于正常现象。两种模式的结果数量不同,并不代表其中一种模式遗漏了另一种模式检测到的结果,而是因为超大规模并行会选择性地扁平化部分数据,进而影响结果统计数量。
nmDRC-H 通过 -hier 启用层级化模式,支持多线程、分布式、超缩放(Hyperscaling)等加速方式,核心命令组合如下:
| 运行模式 | 命令行示例 | 适用场景 | 核心参数说明 |
|---|---|---|---|
| 基础层级化 | calibre -drc -hier rule_file |
小规模层级化版图 | -hier:启用层级化模式 |
| 单机多线程 | calibre -drc -hier -turbo rule_file |
单机多核 CPU | -turbo:自动适配 CPU 核心数,并行处理 |
| 超缩放加速(推荐) | calibre -drc -hier -turbo -hyper rule_file |
中大规模版图 | -hyper:并行处理层操作,比 -turbo 快 2 倍,需配置 LAYOUT BASE LAYER |
| 分布式加速 | calibre -drc -hier -turbo -remote host1,host2 -hyper rule_file |
超大规模版图 | -remote:指定分布式主机列表;-remotefile:从文件读取主机配置 |
关键注意事项(超缩放模式)
- 必须配置
LAYOUT BASE LAYER <layer_name>(优先于LAYOUT TOP LAYER),否则性能严重下降; - 分布式模式下避免使用
REMOTE HOST ... LAYERDIR(磁盘 - based 图层),会导致大幅性能损耗; - 超缩放会自动扁平化小型单元(过孔、接触孔)和顶层单元(基于
LAYOUT BASE LAYER),属于正常行为,不影响错误完整性。
2.3 层级化运行效率
不同的图层操作,其运行性能存在差异。在选择各类图层操作和选项时,需要注意以下几点特性:
-
尺寸检查操作
Enclosure(包围检查)、External(外部检查)和Internal(内部检查),比大多数其他操作的速度更慢。尤其是在使用带约束的PROJECTING过滤器、未使用OPPOSITE关键字的区间约束、NOT PROJECTING过滤器、NOTCH/SPACE过滤器,或CONNECTED/NOT CONNECTED过滤器时,性能差异会更为明显。 -
双层布尔运算的速度,通常快于多边形拓扑运算。
-
对于单层布尔运算
AND(约束条件不为>= 1或> 1时)、XOR,以及Magnify(放大)和Rotate(旋转)操作,Calibre nmDRC-H 会采用扁平化方式 处理。这会导致输出图层以纯扁平化实例化的形式存在,对性能消耗较大。 -
当测量约束包含
0但不包含90,或包含90但不包含0时,Angle(角度)操作也会以扁平化方式处理,同样会带来较大的性能开销。 -
只有当某个单元的所有实例在设计的扁平化视图中,具有一致的旋转或镜像变换参数 时,
Shift(平移)、Grow(生长)和Shrink(收缩)操作才能在该单元内完成。否则,输入几何图形必须被提升至具备上述变换特性的最低层级,以确保从扁平化视图来看,操作结果是正确的。 -
在执行
Net Area Ratio Print(网络面积比输出)前,网络面积比累积图层会被先进行扁平化处理。 -
相较于扁平化模式,
Rectangles(矩形提取)操作在层级化模式下的逻辑更为复杂,是运行速度较慢的层级化操作之一。
| SVRF 语句 | 作用 | 适用场景 |
| DRC CELL NAME YES CELL SPACE XFORM | 保留单元名称和单元空间坐标,支持在 RVE 中按单元查看结果 | 单元级调试(定位重复错误根源) |
DRC SUMMARY REPORT HIER |
汇总报告中显示层级化错误计数(格式:层级化计数(预估扁平化计数)) | 快速了解错误去重效果 |
|---|
2.4 扁平化示例
Calibre nmDRC-H 支持图层以层级化 和扁平化两种形式存在。
一个图层可以有以下三种存在形式:
- 纯层级化实例化:图层仅以层级化形式存在。
- 纯扁平化实例化:图层仅以扁平化形式存在。
- 双重实例化:图层同时以扁平化和层级化两种形式存在。
Calibre nmDRC-H 通过以下三种方式生成图层的扁平化实例:
Flatten(扁平化)操作的结果图层,为纯扁平化实例化。- 不支持层级化处理的图层操作,或输入图层包含扁平化实例的图层操作,其结果图层为纯扁平化实例化。
- 若某个操作的输入图层不支持层级化处理,或其他输入图层包含扁平化实例,Calibre nmDRC-H 会将该输入图层转换为双重实例化形式。此外,程序也可能为该输入图层创建一个临时的扁平化副本。
为了支持非层级化图层操作,或兼容扁平化与层级化实例化共存的场景而进行的任何扁平化处理,都是完全自动的。
2.5 路径长度结果差异
在某些特殊情况下,层级化运行中 Path Length(路径长度)操作的结果,可能与扁平化运行的结果存在差异。这类情况通常出现在多边形顶点交汇的奇异点位置。

图2 层级化与扁平化结果对比
如图2左侧所示,图层 A 的两个多边形在顶点处接触。扁平化的 Calibre nmDRC 会报告 2 个结果,这符合预期。而层级化的 Calibre nmDRC 仅报告 1 个结果,原因是派生的边缘图层是一个合并图层 。层级化引擎不会保留原始图层 A 的多边形与派生边缘图层之间的关联关系,因此在这种情况下只会产生一个结果。这种结果数量的差异,仅出现在图层 A 多边形存在奇异点的位置,如图中所示。
图 2右侧展示的是预期行为,仅用于对比参考。如果在 Coincident Edge(重合边缘)操作中交换图层 A 和 B 的顺序,也会得到类似的结果。后续的图层派生操作便利用了这一特性。
为了统一类似图2 左侧场景下的结果数量,可以采用如下处理方法:
svrf
multi_A = A TOUCH B > 1
// 多个 A 多边形与一个 B 多边形接触
// multi_A 图层上可能存在奇异点
single_A = A NOT TOUCH B > 1 // 该图层上不存在奇异点
edge1 = multi_A COINCIDENT EDGE B
// 扁平化操作在奇异点处会显示 2 个结果
edge2 = B COINCIDENT EDGE multi_A
// 交换输入图层顺序;扁平化操作在奇异点处会显示 1 个结果
edge1 { PATH LENGTH edge1 < m }
edge2 { PATH LENGTH edge2 < m }
// 结果数量可能不同,但输出内容一致
edge = single_A COINCIDENT EDGE B
// 对于 single_A 图层,无需针对奇异点进行特殊处理
edge { PATH LENGTH edge < m }
2.6 图层面积输出
在扁平化应用程序中,首次生成某个图层时,会在运行日志中输出该多边形类型图层的总面积,以及其他相关统计信息。而层级化应用程序默认不会执行此操作,因为这会耗费较多时间。不过,用户可以通过添加 SVRF 规范语句 DRC Print Area,主动要求输出该信息。
该语句会指示层级化 Calibre 应用程序,在生成图层时输出该图层的扁平化面积,同时还会输出该图层的其他相关统计信息。
2.7 掩膜结果输出中的文本对象
通过添加 SVRF 规范语句 DRC Map Text,可以让 Calibre nmDRC-H 将输入版图数据库中的所有文本对象,转移到掩膜数据 Calibre nmDRC 结果数据库中。
文本对象在输入数据库和结果数据库中会保持相同的层级结构,除非 Calibre nmDRC-H 在层级化处理过程中对某个实例进行了扩展或扁平化处理。在这种情况下,程序会将文本对象相应地提升至更高层级。
用户可以结合使用语句 DRC Map Text YES 和 DRC Map Text Layer,指定将哪些图层的输入文本对象写入输出结果。
默认情况下,即使文本图层被映射到其他图层,Calibre 应用程序也会保留几何输入版图数据库中的 TEXTTYPE(文本类型)属性。如果通过 Layer Map TEXTTYPE 规范语句映射文本对象,那么几何 DRC 结果数据库中的文本会被放置在映射的目标图层上,同时保留原始的文本类型属性。
示例如下:
示例 映射文本对象以输出
svrf
LAYER MAP 10 TEXTTYPE 1 10 // 将图层 10.1 映射到 Calibre 图层 10
LAYER mapped_text 10
TEXT LAYER 10 // 声明 Calibre 图层 10 为文本图层
DRC MAP TEXT YES // 将文本对象输出到掩膜结果中
DRC MAP TEXT LAYER mapped_text // 输出的文本图层保留原始数据类型 1
在这个例子中,图层 10 上文本类型为 1 的对象,会被映射到 Calibre 图层 10。输出结果中的这些文本对象,其文本类型仍会保留为 1。如果通过 Layer Map 语句指定了与输入文本类型不同的目标文本类型,那么输出时会使用该目标文本类型。
2.8 Calibre nmDRC-H 对 Hcell 的使用
Hcell 语句被 Calibre nmLVS-H 用于标识版图单元 与源文件单元之间的对应关系。在电路提取过程中,版图中的 Hcell 会被保留,这一点与层级化 DRC 运行的原理类似。
只有当预期流程(即后续需将掩膜结果图层用于 LVS 验证)符合本文所述时,才应在 Calibre nmDRC-H 的规则文件中添加 Hcell 或 Layout Preserve Cell List 规范语句。不应仅仅为了阻止 Calibre nmDRC-H 自动扩展单元,而使用这些语句。
所有层级化 Calibre 应用程序的初始阶段,都是根据原始输入版图数据库构建一个内部层级化数据库。为了优化 Calibre 算法的性能,程序会对原始数据库进行多方面的修改。最显著的修改是:部分单元实例会被自动扩展,同时还会自动创建新的单元和实例。
自动扩展单元实例的原因有很多,其根本目的都是为了优化层级结构,提升 Calibre 算法的运行效率。但对于 Calibre nmLVS-H 而言,扩展版图中的 Hcell 可能会引发问题。因此,在 Calibre nmLVS-H 的电路提取阶段,构建层级化数据库时,无论牺牲多少性能,都不会自动扩展规则文件中 Hcell 语句、Hcell 列表或 Layout Preserve Cell List 语句指定的任何版图单元。
在许多 Calibre nmDRC-H 的应用流程中,目标是对数据库进行修改,而非执行传统的 DRC 检查。Calibre nmDRC-H 创建的输出数据库,后续可能会用于 LVS 验证。在这种情况下,不希望 DRC 流程扩展某些单元 ------ 这些单元在后续的 LVS 流程中可能会被指定为 Hcell(扩展操作本质上会将单元从层级结构中移除)。因此,无论牺牲多少性能,Calibre nmDRC-H 同样不会扩展规则文件中 Hcell 或 Layout Preserve Cell List 规范语句指定的任何版图单元。
需要注意的是,这并不意味着 DRC 操作不会跨 Hcell 边界移动数据。如果在 Calibre nmDRC-H 中执行数据缩放操作,数据很可能会从某些单元中被提升至更高层级。Hcell 虽然会在层级结构中被保留,但数据仍有可能被移出 Hcell。
三、性能优化终极技巧
1. 避免 "隐性扁平化" 操作(性能杀手)
nmDRC-H 对部分操作不支持层级化处理,会自动转为扁平化执行(性能损耗大),需尽量避免:
| 需避免的操作 / 场景 | 替代方案 |
|---|---|
单图层布尔运算 AND(约束≠≥1/>1)、XOR |
重构规则,用多图层布尔运算替代 |
Magnify(放大)、Rotate(旋转) |
前端设计中完成,避免 DRC 阶段执行 |
Angle 操作(约束含 0 不含 90,或反之) |
拆分约束为两个独立操作(如分别检查 0° 和 90°) |
非一致旋转 / 反射的单元执行 Shift/Grow/Shrink |
前端统一单元的旋转 / 反射属性,或接受扁平化执行 |
2. 层操作性能优先级(从快到慢)
-
两图层布尔运算(
AND/OR/NOT); -
拓扑操作(
SIZE/EXPAND EDGE); -
维度检查操作(
EXT/INT/ENCLOSURE)------ 带PROJECTING/NOTCH/SPACE过滤器时最慢; -
Rectangles操作(层级化模式下复杂度高)。
3. 其他优化建议
-
同一层规则集中放置:将涉及同一层的所有规则连续编写,工具处理完后立即释放内存;
-
复用中间层优先定义:将多个规则共用的中间层(如
poly OR diff)提前定义,减少重复生成; -
限制检查区域:用
LAYOUT REGION仅检查核心电路区,减少计算量。
六、summary
Calibre nmDRC-H 的核心价值在于层级化数据复用与并行计算 ,通过 -hier+-turbo+-hyper 组合可最大化性能收益,同时兼容现有规则文件,迁移成本低。关键成功因素包括