目录
[二、层类型(Layer Types)](#二、层类型(Layer Types))
[2.1 原始层(Original Layers)](#2.1 原始层(Original Layers))
[2.1.1 Datatypes and Texttypes](#2.1.1 Datatypes and Texttypes)
[2.1.2 数据类型映射的具体处理逻辑](#2.1.2 数据类型映射的具体处理逻辑)
[2.1.3 图层映射的常见问题](#2.1.3 图层映射的常见问题)
[2.2 派生多边形层(Derived Polygon Layers)](#2.2 派生多边形层(Derived Polygon Layers))
[2.3 派生边层(Derived Edge Layers)](#2.3 派生边层(Derived Edge Layers))
[2.4 派生错误层(Derived Error Layers)](#2.4 派生错误层(Derived Error Layers))
[三、层定义(Layer Definitions)](#三、层定义(Layer Definitions))
[3.1 显式定义(Explicit)](#3.1 显式定义(Explicit))
[3.2 隐式定义(Implicit)](#3.2 隐式定义(Implicit))
[3.3 重复定义(Duplicate)](#3.3 重复定义(Duplicate))
[四. 图层类型总结](#四. 图层类型总结)
一、核心基础概念
Calibre 工具采用基于边(edge-based) 的处理方式。基础几何数据类型包括多边形(polygons) 和多边形的边(edges of polygons)。
这些工具的核心处理对象是多边形的边,而非多边形区域本身(尽管工具会对两者均进行操作)。每条边都始终关联着其所属的多边形。只要建立了相应的电路连通性,多边形和边还可以关联到某个电气节点(electrical node)。
下图展示了边与多边形的关系:每条多边形的边都具有外侧(exterior side) 和内侧(interior side)。边的 "侧" 由以下规则定义:边的哪一侧邻接多边形的外部区域,哪一侧邻接多边形的内部区域。在当需要区分边的内侧与外侧时,所有图示均会将边的内侧标记为阴影部分。

二、层类型(Layer Types)
几何版图数据库由与芯片制造中所用材料相对应的图层构成。这些图层包含多种对象,如多边形、路径、文本对象和属性信息。其中,多边形和路径由边组成。Calibre 工具本质上是基于边(edge-based)进行处理的,但它可处理的图层分为以下四种类型。

Calibre 支持 4 类层,核心分为「原始层」和「派生层」,具体如下:
| 层类型 | 定义与用途 | 语法示例(SVRF) |
|---|---|---|
| 原始层(Original Layers) | 又称「绘制层」,对应芯片制造中的实际材料层,存储原始布局数据(多边形、路径等) | - 简单层:LAYER m1 2(层名 m1,编号 2) - 层集:LAYER met 3 4 5(层 3-5 合并为 met) - 嵌套层集:LAYER all_met m1 met(合并 m1 和 met) |
| 派生多边形层(Derived Polygon Layers) | 由层操作(布尔、拓扑运算等)生成的合并多边形,可用于后续层操作或结果输出 | gate = poly AND oxide(poly 和 oxide 的交集生成 gate 层) |
| 派生边层(Derived Edge Layers) | 由层操作生成的多边形边 / 边段,用于尺寸检查(如边长、角度) | long_metal_edge = LENGTH metal > 5(筛选 metal 层中长度 > 5 的边) |
| 派生错误层(Derived Error Layers) | 存储 DRC 错误结果(如间距违规、包围不足),仅支持 DFM 相关操作后续处理 | min_ml_width { INTERNAL m1 < 0.08 }(检查 m1 层内部间距 < 0.08 的错误) |
2.1 原始层(Original Layers)
原始图层(或绘制图层)是表示原始版图数据的图层。在规则文件中,可通过Layer语句中的图层名称或编号来引用它们。
验证系统还允许使用图层集(layer set),即给多个图层编号分配同一个图层名称。这种情况下,**图层集的作用等同于一个普通图层,其包含的所有构成图层上的图形会被合并。**与普通图层类似,规则文件中可通过名称或别名引用图层集。
以下是在 SVRF 规则文件中声明原始图层的示例:
LAYER m1 2 // 普通图层(名称m1,编号2)
LAYER met 3 4 5 // 图层集(名称met,包含编号3、4、5的图层)
LAYER all_met m1 met // 另一图层集(名称all_met,包含图层m1和图层集met)
在大多数图层操作中,工具会先自动合并原始图层上的多边形数据,再使用该图层。在合并数据表示中,工具会将所有重叠或共享一条边的多边形合并为一个多边形。主要例外情况是单层布尔运算------ 这类运算会基于未合并的原始图层执行。通常,与未合并数据相比,合并数据能更准确地反映真实掩模的形态。
2.1.1 Datatypes and****Texttypes
-
默认情况下,Calibre 的内部数据库图层不使用数据类型(**datatype )或文本类型(**texttype )。所有版图数据库图层(无论是否包含数据类型或文本类型)在 Calibre 数据库中均通过图层编号来表示。
-
若版图数据库格式支持数据类型,默认情况下,某一给定图层的所有数据类型都会映射到单个 Calibre 图层。例如,若版图中图层 1 包含数据类型 1 和数据类型 2,在 Calibre 内部,这些数据都会映射到 Calibre 图层 1,且不区分数据类型。
-
通过Layer Map指定语句,可基于数据类型和文本类型处理绘制的几何图形与文本。与所有规则文件元素相同,Layer和Layer Map指定语句的相对顺序不受限制。以之前的示例为例,可在规则文件中按如下方式映射数据类型:
LAYER MAP 1 DATATYPE 1 1 // 将原始图层1的数据类型1映射到Calibre图层1
LAYER MAP 1 DATATYPE 2 2 // 将原始图层1的数据类型2映射到Calibre图层2
LAYER my_layer1 1 // 定义Calibre图层1的名称为my_layer1
LAYER my_layer2 2 // 定义Calibre图层2的名称为my_layer2
在该示例中,原始图层 1 的数据类型 1 被映射到 Calibre 图层 1,原始图层 1 的数据类型 2 被映射到 Calibre 图层 2。
①当Layer Map指定语句中包含DATATYPE关键字时,该语句被称为数据类型映射(datatype map);当包含TEXTTYPE关键字时,被称为文本类型映射(texttype map)。
②通过TEXTTYPE映射处理文本图层的方式,与DATATYPE映射的工作原理类似。
③文本类型映射适用于以下对象上的文本:Layout Property Text(版图属性文本)、Layout Text(版图文本)、Text Layer(文本图层)(在 LVS 中,还适用于Port Layer Text(端口图层文本)、Device TEXT MODEL LAYER(器件文本模型图层)和TEXT PROPERTY LAYER **(文本属性图层)参数),**其作用方式与数据类型映射对 "数据类型" 和 "Layer指定语句中定义的原始图层" 的作用方式一致。
在整个 Calibre 流程中,文本对象的文本类型属性会被保留。因此,若某文本对象的图层在TEXTTYPE映射中被定义,Calibre 会保留其原始文本类型属性;也可通过Layer Map语句将该文本类型映射为其他类型
2.1.2 数据类型映射的具体处理逻辑
当读取 "图层 L 上数据类型为 D 的几何图形 G" 时,版图流读取器会按以下步骤处理:
检查是否存在任何数据类型映射(格式为source_layers(源图层)、source_types(源类型)、target_layer(目标图层))。若图层 L 属于source_layers且数据类型 D 属于source_types,则对于所有满足该条件的数据类型映射,几何图形 G 会被视为位于target_layer上。
若几何图形 G 被如此映射,则它不再被视为位于原始图层 L 上,除非图层 L 是该几何图形 G 所属某一数据类型映射中的target_layer。
若几何图形 G 未包含在任何数据类型映射中,则无论其数据类型如何,都会被视为位于原始图层 L 上。
2.1.3 图层映射的常见问题
使用图层映射时,一个常见问题是:为映射而创建的目标图层编号,实际上可能包含非预期的图形数据。例如:
LAYER metal 100 // 定义Calibre图层100的名称为metal
LAYER MAP 6 DATATYPE 1 100 // 将原始图层6的数据类型1映射到Calibre图层100
上述配置的意图是:将原始图层 6 上数据类型为 1 的所有版图几何图形,映射到 Calibre 图层 100 并命名为 metal。但问题可能出现:若输入版图数据库中的图层 100 本身包含无需使用的图形,根据上述映射逻辑,这些图形也会被归入 Calibre 图层 100 中。
一个简单的解决方案是:将输入版图中图层 100 上的对象映射到一个未使用的图层,如下所示:
// 将输入版图中图层100的所有数据类型,映射到未使用的Calibre图层999
LAYER MAP 100 DATATYPE >= 0 999
LAYER unused 999 // 定义Calibre图层999的名称为unused(未使用)
// 将原始图层6的数据类型1映射到Calibre图层100
LAYER MAP 6 DATATYPE 1 100
LAYER metal 100 // 定义Calibre图层100的名称为metal
2.2 派生多边形层(Derived Polygon Layers)
派生多边形层是指通过各类层操作生成的、经过合并处理的多边形集合,这类层操作包括布尔运算、多边形拓扑运算,以及部分采用多边形输出形式的尺寸检查运算。
层定义中派生多边形层的示例如下:
gate = poly AND oxide
本示例中,gate 层即为一个派生多边形层。
上述层的推导过程既可以写在规则检查语句外部(此时该层为全局派生层 ),也可以写在规则检查语句内部(此时该层为局部派生层)。无论该层被定义为全局层、局部层,还是同时以两种形式存在,数据库构造器都只会对其执行一次计算,并在运行过程中按需调用。对于那些判定为完全相同的派生层,即便它们的层名不同,也仅会被计算和存储一次。
派生多边形的运算结果可以直接输出至结果数据库。当以下层操作以独立形式写在规则检查语句中时,其运算结果将被输出至结果数据库:
contact NOT INTERACT metal
完整的规则检查语句结构如下:
bad_contact { contact NOT INTERACT metal }
2.3 派生边层(Derived Edge Layers)
派生边层是指通过各类层操作生成的、合并后多边形的边或边段集合,这类层操作包括边拓扑运算和边导向的尺寸检查运算。如果派生边层的运算以独立形式存在(即运算结果未通过等号 = 赋值给某个派生层名称),其运算结果也可直接输出至结果数据库。
派生边层的示例如下:
long_metal_edge = LENGTH metal > 5
无论该层被定义为全局层、局部层,还是同时以两种形式存在,数据库构造器都只会对其执行一次计算,并在运行过程中按需调用。对于那些判定为完全相同的派生层,即便它们的层名不同,也仅会被计算和存储一次。
当以下独立层操作写在规则检查语句中时,其运算结果将被输出至结果数据库:
LENGTH metal > 5
派生边拥有内侧 和外侧之分。派生边的内侧是指向多边形内部的一侧,外侧则是指非内侧的另一侧。Calibre 布局数据库会保留派生边的内外侧属性,这一点对于那些需要依据内外侧属性确定测量标准的层操作至关重要。
2.4 派生错误层(Derived Error Layers)
派生错误层是由单个或两个图层中的一至四条边构成的边簇集合。这类图层主要用于承载错误导向型层操作的运算结果,并将结果实例化至 DRC 结果数据库中,同时也支持向其他类型的结果数据库输出内容。
能够生成这类数据的操作包括:包围度检查(Enclosure)、外部间距检查(External)、内部间距检查(Internal)、可制造性设计测量(DFM Measure)、可制造性设计属性分析(DFM Property)、时序驱动型设计规则检查(TDDRC);以及绘制锐角检查(Drawn Acute)、绘制角度检查(Drawn Angled)、绘制栅格偏移检查(Drawn Offgrid)、绘制歪斜检查(Drawn Skew)。
当以下独立层操作写在规则检查语句中时,会生成一个派生错误层,并将结果输出至 DRC 结果数据库:
min_ml_width { INTERNAL m1 < 0.08 }
以下语法会生成一个派生错误层,并将其存储至 x 层中:
x = INTERNAL m1 < 0.08
注意由错误导向型层操作生成的派生层,仅能作为输入层传递给可制造性设计分析(DFM Analyze)、可制造性设计属性分析(DFM Property)或可制造性设计结果数据库导出(DFM RDB)操作,以进行后续处理。其他类型的层操作均不支持将错误导向型运算结果作为输入。
在尺寸检查操作中,可通过在图层参数外添加方括号 [] 或圆括号 () 的方式,使运算结果生成派生边层而非派生错误层。例如,以下语法会生成一个派生边层,该图层可作为输入层参与任意其他类型的层操作:
y = INTERNAL [m1] < 0.08
请注意本语法中对方括号 [] 的使用。
包围度检查(ENClosure)、外部间距检查(EXTernal)和内部间距检查(INTernal)操作,可通过使用以 REGION 开头的关键字,使运算结果生成派生多边形层。有关尺寸检查操作的详细说明,详见第 137 页的《尺寸检查操作》章节。
三、层定义(Layer Definitions)
层定义的作用是为派生层分配名称。当某个派生层通过层定义被命名后,你就可以在规则文件的其他操作中,通过引用这个名称来调用该派生层。
layer_name = layer_operation
其中,"layer_operation" 用于创建derived layer,并将其命名为 "layer_name "。
-
layer definition既可以存在于规则检查语句(规则文件中的 DRC 检查结构)内部,也可以存在于其外部。位于规则检查语句内部的层定义属于该语句的 "局部定义",会覆盖同名的全局层;且该局部定义无法在该规则检查语句外部使用。
-
可以在不同的规则检查语句中重复使用相同的局部层名称,但在同一条规则检查语句内部,不能重复使用同一个局部层名称。在单个规则文件中(或在通过 Include 语句引入的规则文件中),不能对同一个全局层名称进行多次声明。在全局层定义所在的规则检查语句内部,任何与该全局层同名的局部层定义,都会取代(覆盖)该全局层定义。
层定义用于为派生层分配名称,支持显式、隐式、重复定义三种形式,核心规则如下:
3.1 显式定义(Explicit)
直接通过=赋值,生成可复用的派生层(全局 / 局部):
svrf
// 全局定义:全文件可用
n_diff = diffusion NOT p_dope // n+扩散层(diffusion减去p_dope)
p_diff = diffusion AND p_dope // p+扩散层(diffusion与p_dope交集)
// 局部定义:仅在当前DRC规则内有效(覆盖全局同名层)
bad_contact {
temp_layer = contact NOT INTERACT metal // 局部层,规则外不可用
REPORT temp_layer "Contact not covered by metal"
}
3.2 隐式定义(Implicit)
隐式层定义无需为每个派生层都设置显式名称,同时还能为层操作提供表达式级联的能力。隐式层定义的形式是用一对括号包裹单个层操作,该操作的输入层也可以是其他隐式层定义。可以将隐式层定义作为任意层操作的输入层。隐式层定义支持层操作的表达式级联写法,不必再为每一个中间派生层都创建名称。
用()包裹层操作,无需命名中间层,简化复杂运算:
svrf
// 生成tap层:(p_diff与bulk-nwell的交集) 或 (n_diff与nwell的交集)
taps = ( pdiff AND ( bulk NOT nwell ) ) OR ( ndiff AND nwell )
3.3 重复定义(Duplicate)
当层操作和输入层均相同时,这些层定义即为重复层定义。
Calibre 数据库的构建机制具有高效性:对于重复的层定义,其在内部仅会存储为单个图层。因此,示例中,Alias1 和 Alias2 在 Calibre 内部实际上是同一个图层,但您可以通过任意一个名称访问该图层。这种特性会对连通性等场景产生重要影响 ------ 因为针对同一层定义的所有别名,其连通性模型是完全相同的。
不同名称指向相同层操作 + 输入层时,Calibre 内部视为同一层(节省内存):
svrf
Alias1 = metal AND poly // 与Alias2是同一层
Alias2 = metal AND poly
注意:重复层的连通性完全一致,若分别 CONNECT 不同层,会导致意外短路:
svrf
CONNECT Alias1 layerC
CONNECT Alias2 layerD // 错误:layerC和layerD会被短路(Alias1=Alias2)
// 解决方案:给其中一个添加无关运算,打破重复定义
Alias2 = metal AND Alias1 // 此时Alias2与Alias1不再是同一层
四. 图层类型总结
综上所述,派生多边形层和派生边层既可以直接输出至 DRC 结果数据库,也可以写入层定义中,作为后续其他层操作的处理对象。
包围度检查(ENClosure)、外部间距检查(External)、内部间距检查(Internal)、可制造性设计测量(DFM Measure)、可制造性设计属性分析(DFM Property)、时序驱动型设计规则检查(TDDRC)、绘制锐角检查(Drawn Acute)、绘制角度检查(Drawn Angled)、绘制栅格偏移检查(Drawn Offgrid)、绘制歪斜检查(Drawn Skew)操作,均会生成派生错误层。派生错误层通常会被输出至 DRC 结果数据库。
三种派生图层(派生边层、派生多边形层、派生错误层)均可作为 Calibre 纳米级设计规则检查系统(nmDRC)的输出结果,不过只有派生错误层会被明确归类为错误层。
下图 以系统支持的图层类型为维度,展示了数据在 Calibre 系统中的整体流转流程。
