4. 版图层操作与布尔运算

在Calibre nmDRC规则开发中,版图层操作与布尔运算是构建所有检查逻辑的基础。版图数据本质上是一组按层编号组织的多边形集合,而DRC规则的核心工作,就是对这些多边形集合进行逻辑组合、尺寸变换和关系判断。如果对操作语义理解不准确,规则可能语法通过但结果完全错误,甚至产生大量假错或漏检。本节围绕AND、OR、NOT、XOR、SIZE、GROW、SHRINK等操作,说明其语义、典型用法和常见误用。

一、布尔运算的集合语义

Calibre中的层操作可以理解为对多边形集合的运算。设A、B为两个版图层,则:

  • AND(交集):输出同时属于A和B的区域,即A ∩ B。常用于提取两层重叠部分,例如检查金属层与通孔层是否真正交叠。
  • OR(并集):输出属于A或属于B的区域,即A ∪ B。常用于合并同层多个图形,或把多个派生层合成一个检查层。
  • NOT(差集):输出属于A但不属于B的区域,即A − B。常用于“某层上排除某区域”的场景,例如有源区排除场氧区。
  • XOR(异或):输出仅属于A或仅属于B、但不同时属于两者的区域,即(A − B) ∪ (B − A)。常用于比较两个版本或两个派生层是否完全一致。

需要特别注意的是,NOT不是交换运算,A NOT B与B NOT A结果完全不同。XOR虽然对称,但在版图检查中通常用于“找差异”,而不是“找重叠”。很多初学者把XOR误当成OR使用,导致检查结果把重叠区域排除掉,这是典型误用。

二、SIZE、GROW、SHRINK的尺寸变换语义

SIZE是对多边形进行边缘偏移的操作。正数表示向外扩张,负数表示向内收缩。GROW和SHRINK可以看作SIZE的专用形式:GROW通常指按指定量向外扩张,SHRINK指按指定量向内收缩。它们改变的是图形的几何边界,而不是逻辑集合关系。

例如,若要对某层金属向外扩张0.05μm,可写为:

M1_grow = SIZE M1 BY 0.05
; 或
M1_grow = GROW M1 BY 0.05

向内收缩则用负值或SHRINK:

M1_shrink = SIZE M1 BY -0.05
; 或
M1_shrink = SHRINK M1 BY 0.05

尺寸变换会改变图形的拓扑。当收缩量超过图形半宽时,图形可能消失;当扩张量较大时,相邻图形可能合并。这些变化会直接影响后续布尔运算和间距检查的结果。因此,在规则中连续使用SIZE时,必须清楚每一步之后图形是否还存在、是否已经合并。

三、典型组合与常见误用

实际规则中,布尔运算和尺寸变换经常组合使用。例如,检查金属间距时,常先对金属层做SHRINK或GROW,再与另一层做AND,以提取特定区域。又如,检查某层是否被另一层完全覆盖时,可用A NOT B,若结果非空则说明存在未覆盖区域。

常见误用包括:

  • 把AND和OR混用:需要找重叠时用了OR,结果把不重叠区域也纳入检查范围。
  • 忽略NOT的方向:写反了A和B的顺序,导致检查对象完全错误。
  • 把XOR当OR:XOR会排除重叠部分,若本意是合并两层,结果会丢失重叠区域。
  • SIZE符号写反:向外扩张写成负值,导致图形收缩甚至消失,后续检查全部失效。
  • 连续SIZE后未检查图形是否合并:扩张后相邻图形连成一片,原本独立的间距检查失去意义。
建议在规则开发中,对每个派生层都先用版图查看工具单独显示,确认其几何形状和覆盖范围符合预期,再接入后续检查。尤其是经过SIZE和NOT的层,最容易出现“看起来对、实际错”的情况。

四、操作语义对照与检查思路

为了便于快速判断,可以把常用操作按“输入—输出”关系整理如下:

操作语义典型用途常见误用
ANDA ∩ B提取两层重叠区与OR混用
ORA ∪ B合并同层或派生层误用于找重叠
NOTA − B排除指定区域顺序写反
XOR(A−B) ∪ (B−A)比较差异当成OR使用
SIZE边缘偏移扩张或收缩图形符号写反
GROW向外扩张扩大检查范围扩张量过大导致合并
SHRINK向内收缩缩小图形或提取中心区收缩过量导致图形消失

在调试时,如果发现检查结果异常,可以按以下顺序排查:先确认每个派生层的几何是否正确,再确认布尔运算的输入顺序和操作类型,最后确认尺寸变换的量值和方向。多数规则错误并非语法问题,而是对操作语义的理解偏差。

版图层布尔运算与尺寸变换语义图解 AND(交集) A ∩ B OR(并集) A ∪ B NOT(差集) A − B XOR(异或) (A−B) ∪ (B−A) SIZE / GROW / SHRINK 尺寸变换 原始图形 A GROW +d 向外扩张 SHRINK −d 向内收缩 注意 收缩过量 图形消失 扩张过量 图形合并 调试排查顺序 ① 确认每个派生层几何是否正确 → ② 确认布尔运算类型与输入顺序 → ③ 确认SIZE量值与方向 → ④ 确认图形是否合并或消失 多数规则错误源于操作语义理解偏差,而非语法问题

掌握这些操作的语义后,规则开发的重点就从“能不能写”转向“写得对不对”。建议在编写每条规则时,先明确输入层是什么、经过哪些操作、输出层应该是什么形状,再用版图查看工具逐层验证。只有把每一步的几何变化都看清楚,才能避免布尔运算和尺寸变换带来的隐蔽错误。