3. 设计规则检查(DRC)基础与Pegasus运行环境

DRC(Design Rule Check)是物理验证的第一道关卡,它把代工厂工艺能力翻译成一组可计算的几何约束,再对版图逐层检查。理解DRC,关键不是记住某条规则的名字,而是理解“规则类型—检查对象—违例判据”三者的对应关系,以及Pegasus如何把这些规则组织成可执行的运行环境。

一、DRC基本规则类型

版图由多层几何图形构成,DRC规则本质上是对这些图形的尺寸、相对位置和分布密度施加约束。常见类型可归纳为以下几类:

  • 宽度(Width):单层图形自身的最小尺寸。例如M1最小宽度0.05μm,检查的是同一多边形内相对边之间的距离。
  • 间距(Space):同层或异层图形之间的最小间隔。同层间距检查两个独立多边形边缘的距离;异层间距(如M1到Via1)则检查跨层图形的关系。
  • 包围(Enclosure):某一层必须被另一层覆盖的最小余量。典型如Via1被M1包围0.03μm,判据是外层图形边界到内层图形边界的距离。
  • 延伸(Extension/Overhang):图形超出参考边界的长度。例如Poly超出有源区的最小延伸量,常用于保证栅极与有源区的套准余量。
  • 密度(Density):单位窗口内某层图形面积占比。CMP工艺要求金属密度落在一定区间,过高会碟形凹陷,过低会侵蚀,因此密度规则通常给出最小值和最大值。
  • 面积与计数:最小面积(Area)、最小孔数(Min Hole)、最小台阶(Notch)等,用于约束图形的可制造性。

这些规则在规则文件中通常以“层定义 + 规则语句 + 判据参数”的形式出现。例如一条间距规则会先声明参与检查的层,再给出距离阈值和检查条件(如是否忽略同网节点)。理解规则类型,才能在看到违例时快速判断是尺寸不足、间距过近,还是密度越界。

DRC规则类型与几何判据示意 宽度 Width 同层相对边距离 ≥ Wmin 间距 Space 独立图形边缘距离 ≥ Smin 包围 Enclosure 外层到内层边界 ≥ Enc 延伸 Extension 超出参考边界 ≥ Ext 密度 Density 窗口内面积占比 ∈ [Dmin, Dmax] 面积 / 台阶 最小面积 / 最小台阶 规则文件结构:层定义 → 规则语句 → 判据参数 layer M1 4 layer VIA1 5 space(M1) ≥ 0.05 enclosure(VIA1,M1) ≥ 0.03 density(M1) ∈ [0.3,0.7] area(M1) ≥ 0.01

二、Pegasus运行脚本与规则文件结构

Pegasus是Cadence的物理验证引擎,其运行入口通常是一个运行脚本(runset),配合规则文件(rule deck)完成检查。运行脚本负责指定输入版图、规则文件、运行模式、输出目录和资源参数;规则文件则定义层映射、规则语句和检查选项。

一个典型的Pegasus运行脚本结构如下:

# runset: drc_run.rs
layout = "top.gds"
cell   = "TOP"
rule   = "tech.drc"
mode   = "hierarchical"
threads = 16
output = "./drc_out"
report = "drc.rpt"
summary = "drc.sum"

规则文件通常分为三部分:层定义区、规则检查区、输出控制区。层定义把GDS层号映射为可读名称,规则检查区逐条写出检查语句,输出控制区决定报告格式和违例分类。例如:

# tech.drc
layer M1 4
layer VIA1 5
layer M2 6

# 宽度检查
width(M1) >= 0.05
# 间距检查
space(M1) >= 0.05
# 包围检查
enclosure(VIA1, M1) >= 0.03
# 密度检查
density(M1, window=100um) >= 0.30
density(M1, window=100um) <= 0.70

运行脚本与规则文件分离,便于同一套规则在不同项目、不同工艺节点间复用。实际项目中,规则文件往往由代工厂提供,运行脚本由验证工程师根据项目需求调整。

三、层次化与扁平化模式选择

Pegasus支持层次化(hierarchical)和扁平化(flat)两种检查模式。层次化模式利用版图的层次结构,对重复单元只检查一次,再通过层次引用关系传播结果;扁平化模式则把整个版图展开为单一层次,逐图形检查。

选择依据主要看设计规模和重复度。如果设计中有大量重复的标准单元、存储器阵列或IP模块,层次化模式能显著减少计算量,但要求版图层次结构清晰、单元边界规则一致。如果设计层次混乱、存在大量跨层次图形合并,或者规则本身涉及全局密度、跨模块间距,扁平化模式反而更直接,但内存和运行时间会随版图面积线性增长。

实际工程中常采用混合策略:主体用层次化模式,对少数复杂区域或全局规则单独做扁平化检查。Pegasus允许在运行脚本中通过 mode 参数切换,也支持在规则文件中用 hier 或 flat 关键字对特定规则单独指定模式。

四、多线程与分布式计算资源配置

DRC检查是计算密集型任务,Pegasus支持多线程和分布式两种加速方式。多线程通过 threads 参数控制单机并行度,适合单节点多核环境;分布式通过任务划分把版图切成多个区域,分发给多台机器并行检查,最后合并结果。

配置多线程时,线程数不宜超过物理核数,否则会因上下文切换导致效率下降。一般建议设置为物理核数的70%~90%,留出资源给内存和I/O。例如16核机器可设 threads = 12 到 14。

分布式配置需要指定任务划分方式和机器列表。常见做法是按版图坐标切分,每个区域独立检查,再合并违例报告。配置示例:

# 分布式配置
distributed = true
partition = "grid"
grid_x = 4
grid_y = 4
hosts = "node01 node02 node03 node04"
threads_per_host = 8

分布式检查的关键是任务均衡。如果某个区域图形密度远高于其他区域,会出现“长尾”现象,整体运行时间由最慢的任务决定。因此划分时应尽量让各区域图形数量接近,或对高密度区域单独增加线程。运行结束后,Pegasus会生成合并报告,包含总违例数、分类统计和每个区域的检查状态。

判断DRC运行是否健康,可以看三个指标:总运行时间是否随线程数增加而下降、各分布式任务耗时是否接近、违例报告是否完整覆盖所有检查规则。如果线程增加后时间不降反升,通常是I/O瓶颈或内存不足;如果某任务耗时明显偏长,说明划分不均,需要调整分区策略。