Calibre :SVRF rule file example

目录

一、示例规则文件

二、宽度检查

[2.1 最小宽度检查](#2.1 最小宽度检查)

[2.2 最小栅极宽度检查](#2.2 最小栅极宽度检查)

[2.3 长图形宽度检查](#2.3 长图形宽度检查)

[2.4 细金属多边形检查](#2.4 细金属多边形检查)

[2.5 栅极宽度检查(含弯折栅极)](#2.5 栅极宽度检查(含弯折栅极))

[2.6 关联长度的宽度检查](#2.6 关联长度的宽度检查)

[2.7 最小栅极长度检查](#2.7 最小栅极长度检查)

[2.8 宽金属 1 区域提取](#2.8 宽金属 1 区域提取)

[2.9 关联第二层重叠的宽度检查](#2.9 关联第二层重叠的宽度检查)

三、间距检查

[3.1 同层金属最小间距检查](#3.1 同层金属最小间距检查)

[3.2 不同宽度图形的间距检查](#3.2 不同宽度图形的间距检查)

[3.3 栅极到阱抽头的最小间距检查](#3.3 栅极到阱抽头的最小间距检查)

[3.4 同层任意边缘间距检查](#3.4 同层任意边缘间距检查)

[3.5 同多边形边缘间距检查(凹槽检查)](#3.5 同多边形边缘间距检查(凹槽检查))

[3.6 阱抽头到源漏区的间距检查](#3.6 阱抽头到源漏区的间距检查)

[3.7 同层不同多边形间距检查](#3.7 同层不同多边形间距检查)

[3.8 金属与宽金属的间距检查](#3.8 金属与宽金属的间距检查)

[3.9 多晶硅 - 扩散区间距检查](#3.9 多晶硅 - 扩散区间距检查)

[3.10 关联宽长比的间距检查](#3.10 关联宽长比的间距检查)

[3.11 拐角效应间距检查](#3.11 拐角效应间距检查)

[3.12 简单光晕效应间距检查](#3.12 简单光晕效应间距检查)

[3.13 斜角边缘间距检查](#3.13 斜角边缘间距检查)

[3.14 同层拐角 - 拐角 / 拐角 - 边缘间距检查](#3.14 同层拐角 - 拐角 / 拐角 - 边缘间距检查)

[3.15 两层拐角 - 拐角间距检查](#3.15 两层拐角 - 拐角间距检查)

[3.16 单层指定角度范围间距检查](#3.16 单层指定角度范围间距检查)

[3.17 两层指定角度范围间距检查](#3.17 两层指定角度范围间距检查)

[3.18 关联第三层的间距检查](#3.18 关联第三层的间距检查)

[3.19 多晶硅 - 扩散区拐角间距检查](#3.19 多晶硅 - 扩散区拐角间距检查)

[3.20 栅极弯折处多晶硅 - 扩散区间距检查](#3.20 栅极弯折处多晶硅 - 扩散区间距检查)

[3.21 凹槽间距检查](#3.21 凹槽间距检查)

四、包围与延伸检查

[4.1 利用多边形导向输出减少错误](#4.1 利用多边形导向输出减少错误)

[4.2 第一层金属上多晶硅延伸量检查](#4.2 第一层金属上多晶硅延伸量检查)

[4.3 抽头包围检查](#4.3 抽头包围检查)

[4.4 多晶硅 - 扩散区延伸量检查](#4.4 多晶硅 - 扩散区延伸量检查)

[4.5 含包围条件的延伸量检查](#4.5 含包围条件的延伸量检查)

五、接触孔检查

[5.1 接触孔精确尺寸检查](#5.1 接触孔精确尺寸检查)

[5.2 通孔最小间距检查](#5.2 通孔最小间距检查)

[5.3 孤立接触孔间距检查](#5.3 孤立接触孔间距检查)

[5.4 与金属边缘重合的接触孔检查](#5.4 与金属边缘重合的接触孔检查)

[5.5 金属对接触孔的最小重叠量检查](#5.5 金属对接触孔的最小重叠量检查)

[5.6 接触孔面积范围检查](#5.6 接触孔面积范围检查)

[5.7 重叠不完整的接触孔检查](#5.7 重叠不完整的接触孔检查)

[5.8 关联电流流向的间距检查](#5.8 关联电流流向的间距检查)

[5.9 接触孔 - 通孔间距检查](#5.9 接触孔 - 通孔间距检查)

[5.10 阱连接接触孔规则检查](#5.10 阱连接接触孔规则检查)

[5.1 接触孔上金属的 XY 方向约束检查](#5.1 接触孔上金属的 XY 方向约束检查)

六、图层推导

[6.1 单层多边形交集检查](#6.1 单层多边形交集检查)

[6.2 合并重叠多边形生成新图层](#6.2 合并重叠多边形生成新图层)

[6.3 推导顶点数受限的图层](#6.3 推导顶点数受限的图层)

[6.4 平移源图层生成新图层](#6.4 平移源图层生成新图层)

[6.5 推导晶体管区域图层](#6.5 推导晶体管区域图层)

[6.6 两层多边形交集推导图层](#6.6 两层多边形交集推导图层)

[6.7 分离源漏区的图层推导](#6.7 分离源漏区的图层推导)

[6.8 推导宽图形图层](#6.8 推导宽图形图层)

[6.9 缩放图层生成新图层](#6.9 缩放图层生成新图层)

[6.10 推导沿多晶硅的栅极边缘图层](#6.10 推导沿多晶硅的栅极边缘图层)

七、其他规则检查

[7.1 未完全跨越扩散区的栅极检查](#7.1 未完全跨越扩散区的栅极检查)

[7.2 锐角、离格顶点与非正交边缘检查](#7.2 锐角、离格顶点与非正交边缘检查)

[7.3 含超长边缘的多边形检查](#7.3 含超长边缘的多边形检查)

[7.4 位于另一图层孔洞内的图形检查](#7.4 位于另一图层孔洞内的图形检查)

[7.5 图层内环形结构检查](#7.5 图层内环形结构检查)

[7.6 非电源 / 地宽金属检查](#7.6 非电源 / 地宽金属检查)

[7.7 子单元周长超出顶层单元检查](#7.7 子单元周长超出顶层单元检查)

[7.8 栅极对齐检查](#7.8 栅极对齐检查)

[7.9 芯片宽长比检查](#7.9 芯片宽长比检查)

[7.10 焊盘金属与非关联扩散区间距检查](#7.10 焊盘金属与非关联扩散区间距检查)

[7.11 缺失与冲突标记检查](#7.11 缺失与冲突标记检查)

[7.12 利用标记查找浮空栅极](#7.12 利用标记查找浮空栅极)

八、器件属性计算示例

[8.1 正八边形器件属性计算](#8.1 正八边形器件属性计算)

[8.2 器件属性定义](#8.2 器件属性定义)

[8.3 电阻属性计算示例](#8.3 电阻属性计算示例)

[示例 1](#示例 1)

[示例 2](#示例 2)

[九、ICverify 应用](#九、ICverify 应用)

[构建 ICtrace 规则文件](#构建 ICtrace 规则文件)

[示例 1](#示例 1)

注意事项

[示例 2](#示例 2)

标准器件属性说明


本文详细介绍了纳米级设计规则检查(nmDRC)的关键技术与实现方法。主要内容包括:

1)标准验证规则格式(SVRF)示例文件;

2)宽度检查(最小宽度、栅极宽度、长图形宽度等);

3)间距检查(同层间距、拐角间距、关联间距等);

4)包围与延伸检查;

5)接触孔检查(尺寸、间距、重叠等);

6)图层推导方法;

7)特殊规则检查(栅极对齐、环形结构等);

8)器件属性计算。

通过具体代码示例展示了各类检查规则的实现逻辑,为IC设计验证提供了实用参考。

一、示例规则文件

本节包含一个 ** 标准验证规则格式(SVRF)** 的示例规则文件。

复制代码
////////////////////////////////////////////////////////////
// DRAWN LAYERS
////////////////////////////////////////////////////////////
layer substrate 0
layer pwell 1
layer oxide 2
layer res 3
layer poly 4
layer nplus 5
layer pplus 6
layer contact 7
layer metal1 8
layer via 9
layer metal2 10
layer ccl 35
layer dfr 38
////////////////////////////////////////////////////////////
// DEFINE BOOLEAN LAYERS
////////////////////////////////////////////////////////////
nsub = substrate NOT pwell
// diffused resistor layers
dfcnt = contact INSIDE dfr
dfcnto = SIZE dfcnt BY 3
dfrs = dfr NOT dfcnto
dpres = dfrs AND pplus
dnres = dfrs AND nplus
// poly resistor AND interconnect poly layers
resist = SIZE res BY -1
trespl = poly CUT resist
unused = trespl OUTSIDE contact
tmpoly = trespl NOT unused
gresist = resist AND tmpoly
rpoly = gresist AND poly
ipoly = poly NOT rpoly
// p-diffusion layers
oxsub = oxide AND nsub
narea = oxsub NOT ccl
pgate = narea AND poly
pox = oxide AND pplus
psdt = pox NOT poly
psd = psdt NOT dfrs // p-diffusion
// n-diffusion layers
oxwell = oxide AND pwell
parea = oxwell NOT ccl
ngate = parea AND poly
nox = oxide AND nplus
nsdt = nox NOT poly
nsd = nsdt NOT dfrs // n-diffusion
shtcnt = AREA contact > 6.1 < 6.2
////////////////////////////////////////////////////////////
// SIMPLE nmDRC CHECKS
////////////////////////////////////////////////////////////
GROUP mask_check // all the DRC checks for mask-level data
poly_width poly_spacing dr2w dr2s dr3 dr5
dr6w dr7 dr11pp dr11np dr12 dr13 dr14 dr17np
dr17pp minimum_contact dr20 dr21 dr23 dr26
dr28 dr29 dr30
poly_width {
@Poly width must be 0.25
INTERNAL poly < 0.25 ABUT < 90 SINGULAR
}
poly_spacing {
@Poly spacing must be 0.25
EXTERNAL poly < 0.25 ABUT < 90 SINGULAR
}
dr2w { INTERNAL oxide < 0.35 ABUT < 90 SINGULAR}
dr2s { EXTERNAL oxide < 0.35 ABUT < 90 SINGULAR}
dr3 { EXTERNAL pwell < 1.0 ABUT < 90 SINGULAR SPACE}
dr5 { EXTERNAL poly oxide < 0.25 ABUT < 90 SINGULAR}
dr6w { INTERNAL metal1 < 0.25 ABUT < 90 SINGULAR}
dr7 { EXTERNAL metal2 < 0.25 ABUT < 90 SINGULAR}
dr11pp { EXTERNAL pplus contact < 0.25 ABUT < 90 SINGULAR}
dr11np { EXTERNAL nplus contact < 0.25 ABUT < 90 SINGULAR}
dr12 {
shtcnt = AREA contact > 6.1 < 6.2
EXTERNAL shtcnt poly < 1.675 ABUT < 90 SINGULAR
}
dr13 { EXTERNAL oxide poly < 0.25 ABUT < 90 SINGULAR}
dr14 { ENCLOSURE oxide poly < 0.25 ABUT < 90 SINGULAR}
dr17np { ENCLOSURE oxide nplus < 0.25 ABUT < 90 SINGULAR}
dr17pp { ENCLOSURE oxide pplus < 0.25 ABUT < 90 SINGULAR}
minimum_contact {
x = NOT RECTANGLE contact == 0.25 BY == 0.25
@contacts must be either exactly 0.25 by 0.25 or
@they must be exactly 0.25 by 1.0
NOT RECTANGLE x == 0.25 BY == 1.0
}
dr20 { EXTERNAL contact oxide < 0.25 ABUT < 90 SINGULAR}
dr21 {
pgate = poly AND oxide
EXTERNAL contact pgate < 0.25 ABUT < 90 SINGULAR
}
dr23 { ENCLOSURE contact metal1 < 0.1 ABUT == 0 OVERLAP}
dr26 { EXTERNAL via oxide < 0.25 ABUT < 90 SINGULAR}
dr28 {
ENCLOSURE via metal1 < 0.1 ABUT == 0 OVERLAP
ENCLOSURE via metal2 < 0.1 ABUT == 0 OVERLAP
}
dr29 { NOT RECTANGLE via == 0.05 BY == 0.05}
dr30 { INTERNAL metal2 < 0.25 ABUT < 90 SINGULAR}
////////////////////////////////////////////////////////////
// CONNECT OPERATIONS
////////////////////////////////////////////////////////////
CONNECT psd pwell
// note that pseudo-contacts are not needed for tie-downs
CONNECT nsd nsub
CONNECT metal1 ipoly nsd psd by contact
// connects metal1 to the first of ipoly nsd psd
CONNECT metal2 metal1 by via MASK
////////////////////////////////////////////////////////////
// Intentional Device Definitions for Mask LVS
////////////////////////////////////////////////////////////
DEVICE mn ngate ipoly nsd nsd pwell [0] // nmos transistors
DEVICE mp pgate ipoly psd psd nsub [0] // pmos transistors
DEVICE r(pl) rpoly ipoly ipoly [ 20000 ] // poly resistors
DEVICE r(dp) dpres psd psd [170] // diffused p-type resistors
DEVICE r(dn) dnres nsd nsd [65] // diffused n-type resistors

二、宽度检查

本节包含纳米级设计规则检查(nmDRC)中宽度检查的示例。

2.1 最小宽度检查

复制代码
METAL_WIDTH {
// 金属层宽度必须大于等于3微米
INTERNAL metal < 3 ABUT < 90 SINGULAR
// 检查结果输出至结果数据库
}

2.2 最小栅极宽度检查

复制代码
Gate_Width { @ 最小值:^gate_width 微米
N = NGate COINCIDENT EDGE Poly    // N型栅极与多晶硅的重合边
P = PGate COINCIDENT EDGE Poly    // P型栅极与多晶硅的重合边
LENGTH N < gate_width             // N型栅极长度小于阈值则报错
LENGTH P < gate_width             // P型栅极长度小于阈值则报错
}

2.3 长图形宽度检查

复制代码
METAL_WIDTH {
// 金属层宽度通常需≥3微米
// 但金属长度超过5微米时,宽度需≥4微米
INTERNAL metal < 3  // 常规宽度不足报错
long_metal = metal LENGTH > 5  // 定义长度>5微米的金属层
INTERNAL metal long_metal < 4  // 长金属宽度不足报错
}

2.4 细金属多边形检查

复制代码
// 查找所有存在局部宽度小于3微米的金属多边形
x = internal [metal] < 3
thin_metal_polygons { metal with edge x}
// 输出完整的多边形(而非仅报错的局部区域)

2.5 栅极宽度检查(含弯折栅极)

复制代码
narrow_gate {
@ 栅极宽度(含弯折栅极)必须至少为4微米
@ 标记栅极本体,而非栅极边缘
gate_edge = gate coincident edge poly  // 栅极与多晶硅的重合边
short_edge = length gate_edge < 4      // 长度不足4微米的边缘
gate with edge short_edge              // 含短边的栅极报错
}

2.6 关联长度的宽度检查

复制代码
// 金属层宽度规则检查示例
// 注意:第二个内部检查的两个输入图层需同源
METAL_WIDTH_CHECK {
@ 金属层宽度通常需≥3微米
@ 当金属边缘长度≥20微米时,宽度需≥4微米
internal metal < 3  // 基础宽度不足报错
x = length metal >= 20  // 定义边缘长度≥20微米的图层
internal metal x < 4  // 长边缘金属宽度不足报错
}

2.7 最小栅极长度检查

复制代码
gate_dimension_rule {
@ 晶体管栅极在多晶硅边缘间的长度需≥3微米
X = poly inside edge diff  // 生成多晶硅在扩散区内的边缘图层X
internal X < 3  // 长度不足报错
}

2.8 宽金属 1 区域提取

复制代码
// 提取宽度大于4微米的金属1区域
wide_metal1{
fat_metal1a = SIZE metal1 BY -2  // 金属1向内收缩2微米,宽度≤4微米的部分被消除
fat_metal1 = SIZE fat_metal1a BY 2  // 再向外扩展2微米,恢复剩余区域
copy fat_metal1  // 复制提取的宽金属区域
}

2.9 关联第二层重叠的宽度检查

复制代码
// 金属层与多晶硅重叠区域宽度检查
METAL004 {
@ 金属层宽度通常需≥3微米
@ 当多晶硅与金属重叠超过1微米时,金属宽度需≥4微米
internal metal < 3  // 常规宽度不足报错
metal_in = metal inside edge poly  // 金属与多晶硅的重叠边缘
X = internal (metal_in) poly <= 1  // 重叠量≤1微米的区域
internal metal X < 4  // 重叠量≤1微米时宽度不足报错
}

三、间距检查

本节包含纳米级设计规则检查(nmDRC)中间距检查的示例。

3.1 同层金属最小间距检查

复制代码
Metal_Spacing { @ 最小间距:^metal_spacing 微米
EXTERNAL metal < metal_spacing ABUT < 90 SINGULAR SQUARE
}

3.2 不同宽度图形的间距检查

复制代码
Shrunk_Metal1 = SIZE Metal1 BY metal1_shrink  // 金属1按收缩量收缩
Wide_Metal1 = SIZE Shrunk_Metal1 BY metal1_enlarge  // 收缩后的金属1再扩展,得到宽金属区域
Wide_M1_Edges = Metal1 COINCIDENT EDGE Wide_Metal1  // 金属1与宽金属区域的重合边(宽边)
Thin_M1_Edges = Metal1 NOT COINCIDENT EDGE Wide_Metal1  // 金属1的非重合边(窄边)

// 宽金属边缘间距检查
Wide_M1_Spacing {
@ (宽度≥^wide_metal1_width 微米)的间距要求:^wide_metal1_spacing 微米
EXTERNAL Wide_M1_Edges < wide_metal1_spacing
}

// 宽金属与窄金属边缘间距检查
Wide_to_Thin_M1_Spacing {
@ 长度超过^wide_metal1_length 微米区域的间距要求:^wide_metal1_spacing 微米
EXTERNAL Wide_M1_Edges Thin_M1_Edges < wide_metal1_spacing
PARALLEL PROJECTING > wide_metal1_length
}

3.3 栅极到阱抽头的最小间距检查

复制代码
// 分多次扩展抽头CT1,而非一次性扩展至规则要求值
// 避免检查跨越阱区时误检到另一侧的阱连接
tap_size_increment = 1/5 tap_gate_spacing  // 每次扩展量为栅极-抽头间距的1/5

NTap_PGate_Spacing { @ 最大间距:^tap_gate_spacing 微米
X1 = SIZE Tap_CT1 BY tap_size_increment
X2 = X1 AND NWell
X3 = SIZE X2 BY tap_size_increment
X4 = X3 AND NWell
X5 = SIZE X4 BY tap_size_increment
X6 = X5 AND NWell
X7 = SIZE X6 BY tap_size_increment
X8 = X7 AND NWell
X9 = SIZE X8 BY tap_size_increment
gate NOT X9  // 栅极未被扩展后的抽头覆盖则报错
}

3.4 同层任意边缘间距检查

复制代码
METAL_SPACING { EXTERNAL metal < 5 ABUT < 90 SINGULAR }

3.5 同多边形边缘间距检查(凹槽检查)

复制代码
METAL_NOTCH { metal external < 3.5 notch abut < 90 singular
// 检查同一多边形内的边缘间距(凹槽)
}

3.6 阱抽头到源漏区的间距检查

复制代码
Tap_to_Act_Spacing {
@ 等电位最小间距:0微米
@ 不同电位最小间距:^tap_spacing 微米
Good = EXTERNAL Tap Active == 0 ABUT == 0 CONNECTED REGION  // 等电位连通区域
Bad = EXTERNAL Tap Active < tap_spacing ABUT == 0 REGION    // 间距不足区域
Bad NOT Good  // 排除等电位区域,仅输出不同电位间距不足的错误
}

3.7 同层不同多边形间距检查

复制代码
METAL_SPACING { metal external < 4 space abut < 90 singular
// 检查同层不同多边形之间的间距
}

3.8 金属与宽金属的间距检查

复制代码
METAL_TO_FAT_METAL_SPACING {
@ 金属与宽金属的间距必须为4微米
@ 不检查凹槽
@ 宽金属定义:宽度大于5微米的金属
x = SIZE metal BY -2.5  // 金属向内收缩2.5微米
y = SIZE x BY 2.5      // 再向外扩展2.5微米,得到宽金属核心区域
// Z图层提取原始金属层中属于宽金属的边缘
// 剔除扩展过程中产生的非原始边缘,避免误报
z = metal COINCIDENT EDGE y  // 金属与宽金属核心区域的重合边
EXT z metal < 4 SPACE  // 仅检查间距,不检查凹槽
}

3.9 多晶硅 - 扩散区间距检查

复制代码
// 多晶硅与扩散区分离规则检查
POLY_DIFF_SEP {
@ 多晶硅与扩散区间距通常需≥3微米
@ 当多晶硅和扩散区宽度均<3微米时,间距需≥4微米
X = internal [poly] < 3  // 宽度<3微米的多晶硅
Y = internal [diff] < 3  // 宽度<3微米的扩散区
external poly diff < 3   // 常规间距不足报错
external X Y < 4         // 两者均为细图形时间距不足报错
}

3.10 关联宽长比的间距检查

复制代码
METAL_SPACING {
@ 金属与金属间距通常需≥4微米
@ 当(1)金属边缘长度>10微米 且 (2)宽度<3微米时,间距需≥5微米
external metal < 4  // 常规间距不足报错
X = metal length > 10  // 边缘长度>10微米的金属
Y = internal metal [X] < 3  // 长度>10微米且宽度<3微米的金属
external metal Y < 5  // 满足条件的金属间距不足报错
}

3.11 拐角效应间距检查

复制代码
BC_CORNER_ERROR {
@ B与C的间距通常需≥3微米
@ 当A位于B内部且与B间距<2微米时,B与C在该位置的间距需增至4微米
@ 且该间距要求需延伸至A的拐角外2微米
external B C < 3 opposite  // 常规间距不足报错
X = enclosure A [B] < 2 square  // A在B内且间距<2微米的区域
external X C < 4 opposite  // 拐角效应区域间距不足报错
}

3.12 简单光晕效应间距检查

复制代码
Metal_Halation {
// 含简单光晕效应例外的金属间距规则
@ 金属间距通常需3微米
@ 当平行边缘的投影长度≥20微米时,间距需4微米
EXT metal < 3 ABUT < 90 SINGULAR  // 常规间距不足报错
// 光晕效应例外规则
// 使用opposite度量提升精度,通过区间约束避免与常规规则重复报错
EXT metal >= 3 < 4 PARALLEL ONLY OPPOSITE PROJECTING >= 20
}

3.13 斜角边缘间距检查

复制代码
// 仅当两条边缘均为斜角时检查间距
Poly_Spacing_both_angled {
EXT poly < 3 ANGLED == 2
}

// 当至少一条边缘为斜角时检查间距
Poly_Spacing_oneplus_angled {
EXT poly < 3 ANGLED
}

// 仅当恰好一条边缘为斜角时检查间距
Poly_Spacing_oneonly_angled {
EXT poly < 3 ANGLED == 1
}

// 仅当两条边缘均非斜角时检查间距
Poly_Spacing_neither_angled {
EXT poly < 3 ANGLED == 0
}

3.14 同层拐角 - 拐角 / 拐角 - 边缘间距检查

复制代码
poly_spacing {
@ 多晶硅间距要求:拐角-边缘、拐角-拐角间距均为2微米
@ 拐角间距采用平方度量
EXT poly < 2 NOT CORNER  // 非拐角边缘间距检查
EXT poly < 2 CORNER SQUARE  // 拐角间距检查(平方度量)
}

poly_spacing {
@ 多晶硅间距要求:拐角-拐角间距2微米(平方度量),拐角-边缘间距2.5微米
EXT poly < 2 NOT CORNER  // 非拐角边缘间距检查
EXT poly < 2 CORNER TO CORNER SQUARE  // 拐角-拐角间距检查
EXT poly < 2.5 CORNER TO EDGE  // 拐角-边缘间距检查
}

3.15 两层拐角 - 拐角间距检查

复制代码
poly_spacing {
@ 多晶硅与扩散区间距要求:拐角-边缘、拐角-拐角间距均为2微米
@ 拐角间距采用平方度量
EXT poly diff < 2 NOT CORNER  // 非拐角边缘间距检查
EXT poly diff < 2 CORNER SQUARE  // 拐角间距检查(平方度量)
}

3.16 单层指定角度范围间距检查

复制代码
"ACUTE ANGLE LENGTH CHECK" {
@ 检查单层锐角边的长度,长度>3微米时触发检查
INTERNAL layer1 < 3 ABUT < 90  // 内部边缘长度检查
EXTERNAL layer1 < 3 ABUT < 90  // 外部边缘长度检查
}

3.17 两层指定角度范围间距检查

复制代码
// 检查不同层多边形之间的锐角,排除重合边缘
ACUTE_TWO_LAY1 {
@ 在两层外部检查中捕获不同层多边形间的锐角
external metal poly < 3 abut > 0 < 90
// 排除重合边缘,避免重复输出错误
}

// 检查锐角,同时输出重合边缘
ACUTE_TWO_LAY2 {
@ 除锐角外,额外输出重合的外部边缘
external metal poly < 3 abut < 90
}

// 仅输出重合的外部边缘
ACUTE_TWO_LAY3 {
@ 仅输出重合的外部边缘
external metal poly < 3 abut == 0
}

3.18 关联第三层的间距检查

复制代码
POLY_DIFF_SPACING {
@ 多晶硅与扩散区间距通常为1微米
@ 当两条金属线垂直穿过多晶硅-扩散区间隙、且间距<3微米时
@ 金属线之间的多晶硅-扩散区间距需增至2微米
// 常规间距规则
EXTERNAL poly diff < 1 REGION OPPOSITE
// 定义多晶硅-扩散区间距在1~2微米的区域(间隙区)
gap = EXTERNAL poly diff >= 1 < 2 REGION OPPOSITE
// 筛选垂直穿过间隙区的金属边缘(需完全跨越间隙)
mgap = metal INSIDE EDGE gap  // 位于间隙区内的金属边缘
X = EXTERNAL [mgap] poly < 2 ABUT == 90 INTERSECTING ONLY  // 与多晶硅垂直的金属边缘
Y = EXTERNAL [X] diff < 2 ABUT == 90 INTERSECTING ONLY  // 同时与扩散区垂直的金属边缘
// 检查符合条件的金属边缘之间的间距
EXTERNAL Y < 3 REGION OPPOSITE
}

3.19 多晶硅 - 扩散区拐角间距检查

复制代码
Rule7.4 {
@ 当多晶硅栅极长度<1.6微米、且多晶硅超出栅极的延伸量<1.4微米时
@ 多晶硅到源漏区拐角的间距需为1.2微米
x = ENC diff poly < 1.4 REGION OPPOSITE  // 多晶硅延伸量<1.4微米的区域
y = x NOT COINCIDENT EDGE diff  // 排除栅极边缘
z = INT [y] < 1.6 OPPOSITE  // 栅极长度<1.6微米的区域
EXT z diff < 1.2 OPPOSITE  // 间距不足报错
}

3.20 栅极弯折处多晶硅 - 扩散区间距检查

复制代码
poly_to_diff1 {
@ 多晶硅与扩散区间通常无间距要求
@ 但当多晶硅或扩散区形成栅极后发生弯折时,间距需为0.2微米且不允许接触
// 定义潜在错误区域
x = EXT poly diffusion < 0.2 ABUT == 0 REGION OPPOSITE  // 间距<0.2微米的区域
y = EXT [ x ] gate < 0.1 ABUT == 0 SINGULAR  // 栅极附近的区域(0.1为经验值)
x WITH EDGE y  // 输出真实错误区域
}

poly_to_diff2 {
@ 多晶硅与扩散区间通常无间距要求
@ 但当多晶硅或扩散区形成栅极后发生弯折时,间距需为0.2微米且不允许接触
@ 使用垂直约束和角度选项
EXT gate diffusion < 0.2 PERPENDICULAR ONLY ABUT == 90
EXT gate poly < 0.2 PERPENDICULAR ONLY ABUT == 90
}

3.21 凹槽间距检查

复制代码
NARROW_NOTCH {
@ 若掩模B中凹槽宽度<4微米,则该凹槽与掩模A重合区域的面积需≥12平方微米
narrow_notches = external B < 4 region notch  // 宽度<4微米的凹槽
X = narrow_notches and A  // 凹槽与掩模A的重合区域
area X < 12  // 面积不足报错
}

四、包围与延伸检查

本节包含纳米级设计规则检查(nmDRC)中的包围检查延伸检查 示例,这两类检查通常通过ENCLOSURE操作实现。

4.1 利用多边形导向输出减少错误

复制代码
// 常规包围检查,输出边缘错误
Rule_53a {
ENCLOSURE cont met < 2 ABUT == 0 SINGULAR OUTSIDE ALSO
}

// 多边形导向输出,输出多边形错误
Rule_53b { 
ENCLOSURE cont met < 2 ABUT == 0 SINGULAR OUTSIDE ALSO REGION 
}

4.2 第一层金属上多晶硅延伸量检查

复制代码
PEM { @ 多晶硅在第一层金属上的延伸量检查
@ 当存在第二层金属时,多晶硅在第一层金属上的延伸量需为2.4微米
@ 第二层金属存在的判定条件:第二层金属与多晶硅间距<1微米
X = external [poly] metal2 < 1 abut  // 多晶硅与金属2间距<1微米的区域
enclosure metal1 X < 2.4  // 金属1对多晶硅的包围量(延伸量)不足报错
}

4.3 抽头包围检查

复制代码
Rule_987 {
@ N型抽头被N阱包围的尺寸通常需5微米
@ 当被包围的N型抽头位于N阱90°内拐角10微米范围内时,包围尺寸需6微米
@ 不允许内部接触
// 常规包围不足错误检查
ENC ntap nwell < 5 ABUT == 0 SINGULAR
// 提取N阱90°内拐角10微米范围内的边缘
// 使用intersecting only过滤器,避免误选偶然宽度<10微米的N阱边缘
x = INT [nwell] < 10 ABUT == 90 INTERSECTING ONLY
// 拐角区域例外规则检查
// 使用opposite度量确保抽头确实位于10微米范围内
ENC ntap x >= 5 < 6 OPPOSITE
}

4.4 多晶硅 - 扩散区延伸量检查

复制代码
// 晶体管栅极上多晶硅延伸量规则
// 多晶硅在晶体管栅极上的延伸量通常需2微米
// 当被包围的扩散区边缘长度>8微米时,延伸量需3微米
POLY_EXTENSION_ERROR {
temp1 = diff inside edge poly  // 扩散区在多晶硅内的边缘
temp2 = length temp1 > 8  // 边缘长度>8微米的区域
enclosure diff poly < 2  // 常规延伸量不足报错
enclosure temp2 poly < 3  // 长边缘扩散区延伸量不足报错
}

4.5 含包围条件的延伸量检查

复制代码
ABC {
@ 与A重叠的B多边形,需超出A边缘2微米
@ 除非C包围该延伸区域且C超出A边缘4微米,此时B仅需超出A边缘1微米
@ C需与A接触或重叠,B与A接触不计入有效延伸
W = A not outside edge C  // A未被C覆盖的边缘
X = A outside edge C  // A被C覆盖的边缘
Y = enclosure [W] C < 4 MEASURE COIN  // C对W的包围量<4微米的区域(重合度量)
Z = enclosure (W) C < 4 MEASURE COIN  // C对W的包围量<4微米的区域(另一度量方式)
enclosure X B < 2  // X区域B延伸量不足报错
enclosure Y B < 2  // Y区域B延伸量不足报错
enclosure Z B < 1  // Z区域B延伸量不足报错
}

五、接触孔检查

本节包含纳米级设计规则检查(nmDRC)中接触孔图层的检查示例。

5.1 接触孔精确尺寸检查

复制代码
Contact_Size { @ 精确尺寸要求:2×3微米
NOT RECTANGLE contact == 2 BY == 3  // 接触孔非2×3微米则报错
}

5.2 通孔最小间距检查

复制代码
bad_via { @ 通孔间距小于最小值检查
x = SIZE via BY min_via_space OVERLAP ONLY  // 通孔按最小间距扩展
via cut x  // 通孔与扩展区域重叠则报错(间距不足)
}

5.3 孤立接触孔间距检查

复制代码
iso_contact { @ 查找超出最大间距的孤立接触孔
NOT WITH NEIGHBOR cont >= 1 SPACE <= max_cont_space
// 无满足间距要求的相邻接触孔则报错
}

5.4 与金属边缘重合的接触孔检查

复制代码
// 筛选位于金属内部且与金属边缘重合的接触孔
contact_touch_inner_metal {
x = contact inside metal  // 金属内部的接触孔
y = x coincident inside edge metal  // 与金属内边缘重合的接触孔
x interact y  // 输出符合条件的接触孔
}

5.5 金属对接触孔的最小重叠量检查

复制代码
Metal_Overlap_CT { @ 最小重叠量:^metal_overlap_ct 微米
ENCLOSURE contact metal < metal_overlap_ct
ABUT == 0 SINGULAR OUTSIDE ALSO REGION
// 以多边形形式输出错误,OUTSIDE ALSO用于标记完全悬空的接触孔
}
// 通常需要标记完全悬空的接触孔,因此添加OUTSIDE ALSO选项

5.6 接触孔面积范围检查

复制代码
// 检查接触孔面积是否在3.2~5.6平方微米之间
contact_area_check { not area contact > 3.2 <= 5.6 }

5.7 重叠不完整的接触孔检查

复制代码
// 显示重叠不完整的接触孔
NON_OVLP_CNT {
x = metal INSIDE EDGE contact  // 金属在接触孔内的边缘
contact interact x  // 输出接触孔与金属边缘的交集(重叠不完整区域)
}

5.8 关联电流流向的间距检查

复制代码
I_DIR_SPACING {
@ 金属接触孔在电流流向方向上被多晶硅包围的尺寸需≥3微米
@ 其他方向包围尺寸需≥2微米
@ 电流流向定义:金属包围接触孔超过3微米的方向
// X = 非电流流向的边缘
// Y = 电流流向的边缘
X = ENCLOSURE [ contact ] <= 3 metal OPPOSITE
Y = ENCLOSURE ( contact ) <= 3 metal OPPOSITE
ENCLOSURE X poly < 2 OPPOSITE  // 非电流流向包围不足报错
ENCLOSURE Y poly < 3 OPPOSITE  // 电流流向包围不足报错
}

5.9 接触孔 - 通孔间距检查

复制代码
// 接触孔与通孔间距需3微米,不允许堆叠或接触
// 不使用INSIDE ALSO选项时,需两个操作才能确保检查精度
cont_via1{
EXTERNAL contact via < 3 ABUT == 0 SINGULAR  // 间距和接触检查
AND contact via  // 堆叠区域检查(交集)
}

// 使用INSIDE ALSO选项可简化为单个操作
cont_via2{
EXTERNAL contact via < 3 ABUT == 0 SINGULAR INSIDE ALSO
}

5.10 阱连接接触孔规则检查

复制代码
WTDC { @ 阱连接接触孔规则
@ 阱内的P+接触孔,若P+扩散区覆盖接触孔到阱边缘的区域,间距无限制
@ 否则,所有接触孔需距离阱边缘6微米
// 前四条语句生成目标区域
// contact_in_well:阱内的接触孔;pp_in_well:阱内的P+扩散区
// c_in:阱内位于P+扩散区的接触孔;c_not_in:阱内不位于P+扩散区的接触孔
contact_in_well = contact inside well
pp_in_well = pp inside well
c_in = contact_in_well and pp_in_well
c_not_in = contact_in_well not pp_in_well

// 直接检查两类接触孔的包围量
enclosure c_not_in well < 6 abut == 0 opposite  // c_not_in需被阱包围6微米
enclosure c_in well < 4 abut == 0 opposite  // c_in需被阱包围4微米

// 提取c_in被阱包围4~6微米的边缘,分别存入C1和Y图层
C1 = enclosure [ c_in ] well >= 4 < 6 opposite
Y = enclosure c_in [ well ] >= 4 < 6 opposite

// 判断P+扩散区是否覆盖C1边缘到阱边缘的区域
// 先从P+扩散区中剔除Y边缘,再检查C1与剩余P+边缘的包围量
Z = pp_in_well not coincident edge Y
enclosure [ C1 ] Z < 6 abut == 0 opposite
}

5.1 接触孔上金属的 XY 方向约束检查

复制代码
metal_over_contact {
@ 金属对接触孔的包围量需为1微米
@ 但不允许在接触孔相邻的两个边上同时实现1微米包围
@ 此时至少有一个边的包围量需增至2微米
// 常规包围规则
ENC contact metal < 1 ABUT == 0 OUTSIDE ALSO SINGULAR REGION
// 潜在错误区域
x = ENC contact metal >= 1 < 2 REGION OPPOSITE  // 包围量1~2微米的区域
y = EXT [ x ] < 1 SINGULAR INTERSECTING ONLY  // 局部间距<1微米的区域
// 真实错误区域
x WITH EDGE y
}

六、图层推导

本节包含图层推导的示例。

6.1 单层多边形交集检查

复制代码
// 检查金属阻挡层的交集
metal_blockage_error { and metal_blockage }

// 检查子单元周长的交集(注意排除顶层单元周长)
perimeter_error { and metal_perimeter > 2 }

6.2 合并重叠多边形生成新图层

复制代码
merge_layer = OR layerx  // 合并layerx中的重叠多边形,生成merge_layer

6.3 推导顶点数受限的图层

复制代码
// 生成金属层的副本,仅保留顶点数<1024的多边形
not_lots_of_metal_vertices = vertex <= 1024 metal

6.4 平移源图层生成新图层

复制代码
// 创建met_shift图层,为金属层向右平移2个单位、向下平移1.5个单位的副本
met_shift = SHIFT metal BY 2 -1.5

6.5 推导晶体管区域图层

复制代码
n_diff = diffusion NOT p_dope  // N+扩散区(扩散区减去P型掺杂)
p_diff = diffusion AND p_dope  // P+扩散区(扩散区与P型掺杂的交集)

n_tap = n_diff NOT OUTSIDE n_well  // N型抽头区(N+扩散区未超出N阱的部分)
not_n_tap = n_diff OUTSIDE n_well  // 非N型抽头区(N+扩散区超出N阱的部分)

p_tap = p_diff OUTSIDE n_well  // P型抽头区(P+扩散区超出N阱的部分)
not_p_tap = p_diff NOT OUTSIDE n_well  // 非P型抽头区(P+扩散区未超出N阱的部分)

n_gate = poly AND not_n_tap  // N型晶体管栅极(多晶硅与非N型抽头区的交集)
p_gate = poly AND not_p_tap  // P型晶体管栅极(多晶硅与非P型抽头区的交集)

nsd = not_n_tap NOT n_gate  // N型源漏区(非N型抽头区减去N型栅极)
psd = not_p_tap NOT p_gate  // P型源漏区(非P型抽头区减去P型栅极)

6.6 两层多边形交集推导图层

复制代码
// (示例对应图11-34:通过两层多边形交集推导新图层)

6.7 分离源漏区的图层推导

复制代码
n_gate = and poly n_diffusion  // N型栅极(多晶硅与N型扩散区的交集)
n_source_drain = n_diffusion not n_gate  // N型源漏区(N型扩散区减去N型栅极)

6.8 推导宽图形图层

复制代码
// 提取宽度>4微米的金属1区域
fat_metal1a = SIZE metal1 BY -2  // 金属1向内收缩2微米,宽度≤4微米的部分被消除
fat_metal1 = SIZE fat_metal1a BY 2  // 再向外扩展2微米,恢复剩余宽金属区域

6.9 缩放图层生成新图层

复制代码
// 创建met_mag图层,为金属层放大2倍的副本(XY坐标均乘以2)
met_mag = MAGNIFY metal BY 2

// 创建met_shrink图层,为金属层缩小0.5倍的副本(XY坐标均乘以0.5)
met_shrink = MAGNIFY metal BY 0.5

6.10 推导沿多晶硅的栅极边缘图层

复制代码
// 提取沿多晶硅分布的栅极边缘
// 注:栅极图层无需显式生成
poly_gate_edges = poly INSIDE EDGE diff

七、其他规则检查

本节包含各类杂项规则检查的示例。

7.1 未完全跨越扩散区的栅极检查

复制代码
bad_gates {
@ 检查多晶硅未完全跨越扩散区的"伪栅极"
gate = poly AND diff  // 栅极区域(多晶硅与扩散区的交集)
srcdrn = diff NOT poly  // 源漏区(扩散区减去多晶硅)
gate NOT TOUCH srcdrn == 2  // 栅极未接触两个源漏区则报错
}

7.2 锐角、离格顶点与非正交边缘检查

复制代码
flag_check {
@ 查找锐角、离格顶点以及非正交/非45°的边缘
DRAWN ACUTE  // 锐角检查
DRAWN OFFGRID  // 离格顶点检查
DRAWN SKEW  // 非正交/非45°边缘检查
}

7.3 含超长边缘的多边形检查

复制代码
// 查找至少有一条边缘长度>100微米的金属多边形
long_metal {
x = metal length > 100  // 长度>100微米的金属边缘
long_metal_polygons = metal interact x  // 含超长边缘的金属多边形
}

7.4 位于另一图层孔洞内的图形检查

复制代码
contacts_in_holes {
@ 筛选恰好位于扩散区孔洞内的接触孔
X = holes diff  // 提取扩散区的孔洞
Y = X inside contact  // 与接触孔重合的孔洞区域
contact inside Y  // 输出位于孔洞内的接触孔
}

7.5 图层内环形结构检查

复制代码
closed_metal {
@ 金属层不允许存在环形(甜甜圈状)结构
metal donut  // 环形结构检查
}

7.6 非电源 / 地宽金属检查

复制代码
CONNECT metal  // 定义金属层连通性
FAT_METAL_NOT_POWER {
vdd_metal = metal net vdd  // 电源(VDD)金属
vss_metal = metal net vss  // 地(VSS)金属
power = vdd_metal OR vss_metal  // 电源/地金属合集
wide_met = SIZE metal BY -2  // 金属向内收缩2微米,宽度≤4微米的部分被消除
fat_metal = SIZE wide_met BY 2  // 恢复宽金属区域
fat_metal NOT power  // 宽金属非电源/地则报错
}

7.7 子单元周长超出顶层单元检查

复制代码
// 仅适用于ICrules规则集
// 检查子单元周长是否超出顶层单元周长
perim_check {
// 单元周长存储在特殊的perimeter图层,包含内部和外部属性
X = TOPEX perimeter  // 提取顶层单元模板的周长
perimeter NOT X  // 子单元周长超出顶层单元则报错
}

7.8 栅极对齐检查

复制代码
non_aligned_gate {
@ 栅极在多晶硅内的边缘需水平,在扩散区内的边缘需垂直
@ 标记栅极本体而非栅极边缘
gate = poly and diff  // 栅极区域
gate_edge_in_poly = gate coincident edge diff  // 栅极在多晶硅内的边缘(与扩散区重合)
gate_edge_in_diff = gate not coincident edge diff  // 栅极在扩散区内的边缘(与多晶硅重合)
bad_angle_1 = gate_edge_in_poly not angle == 0  // 非水平边缘
bad_angle_2 = gate_edge_in_diff not angle == 90  // 非垂直边缘
bad_gate_1 = gate with edge bad_angle_1  // 含非水平边缘的栅极
bad_gate_2 = gate with edge bad_angle_2  // 含非垂直边缘的栅极
bad_gate_1 or bad_gate_2  // 合并错误,剔除重复项
}

7.9 芯片宽长比检查

复制代码
// 检查芯片的长度与宽度比例
chip_too_long_or_wide {
chip = EXTENT  // 提取芯片外框
NOT RECTANGLE chip > min < max ASPECT 1  // 芯片需为正方形(宽长比为1)
}

7.10 焊盘金属与非关联扩散区间距检查

复制代码
// 检查焊盘金属与非关联扩散区的间距
// 关联扩散区:与焊盘金属相连的扩散区;非关联扩散区:其余扩散区
// diff:待检查的所有扩散区
// 复制现有金属层和通孔层,避免破坏原始连通性
cm1 = COPY met1
cm2 = COPY met2
cv = COPY via

// 定义连通性:cm2与焊盘连通,cm2通过通孔与cm1连通
CONNECT cm2 pad
CONNECT cm2 cm1 by cv

// 提取与焊盘同网络的金属区域
m2x = NET AREA RATIO cm2 pad > 0  // 与焊盘同网络的cm2区域
m1x = NET AREA RATIO cm1 pad > 0  // 与焊盘同网络的cm1区域
cx = cont INSIDE m1x  // 位于m1x内的接触孔

// 定义非关联扩散区(未被接触孔覆盖的扩散区)
checkd = diff OUTSIDE cx

// 间距检查规则
pad2unrelated_diff_rule {
EXTERNAL checkd m2x < 5  // 非关联扩散区与m2x间距<5微米报错
EXTERNAL checkd m1x < 5  // 非关联扩散区与m1x间距<5微米报错
}

7.11 缺失与冲突标记检查

缺失连接标记(missing connections Stamp):指未被 naa 或 paa 标记的多边形,是否为问题需结合多边形类型判断。冲突连接标记(conflicting connection Stamp):指 N 阱或 P 阱未被分配节点编号,原因是不同节点尝试标记同一对象,此情况通常为严重问题,需排查根因。

复制代码
ywelln = nwell NOT cwelln  // 未被标记的N阱
miss_n_conn { ywelln OUTSIDE nq }  // 缺失N型连接检查
conflict_n_conn { ywelln NOT OUTSIDE nq }  // N型连接冲突检查

ywellp = pwell NOT cwellp  // 未被标记的P阱
miss_p_conn { ywellp OUTSIDE pr }  // 缺失P型连接检查
conflict_p_conn { ywellp NOT OUTSIDE pr }  // P型连接冲突检查

7.12 利用标记查找浮空栅极

复制代码
// 本规则通过STAMP操作查找浮空栅极(未连接到其他晶体管输出的栅极)
// 需先为版图建立连通性(可通过Pyxis Layout中的$extract_cell_connectivity实现)
layer poly 1  // 多晶硅层
layer diff 2  // 扩散层
layer metal 3  // 金属层
layer cont 4  // 接触孔层

connect diff metal by cont  // 扩散区通过接触孔与金属层连通

floating_gate {
gate = poly AND diff  // 栅极区域(含多晶硅连通性信息)
metalcont = metal AND cont  // 金属接触孔区域
// 建立多晶硅与金属接触孔的重合标记,仅保留有意连接
connected_poly = STAMP poly by metalcont
gate NOT connected_poly  // 未被标记的栅极即为浮空栅极
}

八、器件属性计算示例

本节包含器件属性计算的示例。

8.1 正八边形器件属性计算

以下为正八边形器件的顶部结构示意图及属性计算过程:

K 为 A、B、C 的边长;R 为 A、B、C 的半径

(示意图省略,核心参数如下)

  • 角度计算:ANGLE = 360/16 = 22.5°
  • 基础公式:K/R = tan (ANGLE);R = K/tan (ANGLE);周长 P = 16K
  • 半径关系:Ra = Rb + L;Rc = Rb + L/3
  • 最终宽度公式:W = 16×[(Pb/(16×tan (ANGLE)) + L/3)×tan (ANGLE)]

8.2 器件属性定义

复制代码
DEVICE M...........
[
PROPERTY W L  // 定义属性:宽度W、长度L
Pb = (Use your derived layer of "B" to obtain perimeter here)  // 从B图层提取周长Pb
L = (Use your calculation to obtain length)  // 计算长度L
W = 16(Pb/(16*(tangent_ANGLE)+L/3)*tangent_ANGLE  // 代入公式计算宽度W
]
// 注:tan(ANGLE)的值需用户自行提供

8.3 电阻属性计算示例

示例 1

复制代码
// 电阻属性计算
DEVICE R(P) ABCDE QPOLYZ QPOLYZ
[
property R  // 定义属性:电阻值R
// 宽度W计算:重合周长与内部周长的平均值
W=(perimeter_coincide(ABCDE,QPOLYZ) +
perimeter_inside(ABCDE,QPOLYZ))/2
W = W - (0.2E-6)  // 修正实际宽度与绘制宽度的偏差
// 长度L计算:外部周长的一半
L=perimeter_outside(ABCDE,QPOLYZ)/2
R = L/W*100  // 计算电阻值(方阻100Ω/□)
]

示例 2

复制代码
// 另一种电阻属性计算
DEVICE r(res_ABm) ABbody2m ABtipm(pos) ABtipm(neg)
[
property res  // 定义属性:电阻值res
// 栅极宽度gw计算:重合周长与内部周长的平均值
gw = (perim_co(ABbody2m,ABtipm) +
perim_in(ABbody2m,ABtipm)) / 2
// 栅极长度gl计算:外部周长的一半加5
gl = (perim_out(ABbody2m,ABtipm) / 2) + 5
// 弯折修正系数
rbend = bends(ABbody2m) * -100
// 电阻值计算
res = (gl*200 + rbend*gw)/gw
]

九、ICverify 应用

本节示例说明如何为ICtrace开发规则文件。

构建 ICtrace 规则文件

示例 1

以下是使用 ICtrace 执行 版图与电路图一致性检查(LVS) 所需内容的示例。该示例展示了一个仅包含两种器件类型的简单 CMOS 工艺 :NMOS 管(MN)和 PMOS 管(MP)。此示例假设你是在 Pyxis 版图工具 中,对照 EDDM 数据库(由 Design Architect 工具生成)执行 LVS 检查。

  1. 创建 Design Architect(DA)器件符号若你使用的是 Mentor 官方提供的库,则可能已包含所需的 DA 器件符号。否则,你可以按照以下步骤自行创建器件符号。

    a. 在 DA 工具中绘制 MN 器件符号

    • 器件名称:mn(或其他自定义名称)
    • 属性配置:ELEMENT = MN
    • 引脚名称:PIN = D(漏极)、G(栅极)、S(源极)、B(衬底,可选)

    b. 在 DA 工具中绘制 MP 器件符号

    • 器件名称:mp(或其他自定义名称)
    • 属性配置:ELEMENT = MP
    • 引脚名称:PIN = D(漏极)、G(栅极)、S(源极)、B(衬底,可选)
  2. 录入 DA 电路图在 DA 工具中,使用上述创建的 mn 和 mp 器件符号绘制你的电路原理图。

  3. 创建 EDDM 视图文件 以下是一段 DVE 脚本示例 ,用于为名为 zinv 的 DA 器件创建 ICtrace 视图文件。

    复制代码
    > dve
    open design viewpoint "zinv" "default"
    add primitive "element"
    check design
    save design viewpoint
    close design viewpoint
    close session
  4. 编写规则文件下文为适用于基础 CMOS 工艺的简易 ICtrace 规则文件示例。

    layer poly 1
    layer diff 2
    layer well 3
    layer metal 4
    layer nplus 5
    layer contact 7
    layer subc 11 // 衬底接触
    text layer poly metal
    connect metal poly sd by contact
    connect metal well by subc
    connect metal nplus by subc
    sd = diff not poly
    tran = diff and poly
    ptran = tran not nplus
    ntran = tran and nplus
    device mp ptran poly sd sd well
    device mn ntran poly sd sd nplus
    // 规则文件示例结束。

  5. 在 Pyxis 中录入版图完成版图设计后,不要退出软件,继续执行步骤 6。

  6. 执行 LVS 检查 在 Pyxis 中,打开 ICtrace(M) 功能面板,并执行以下操作:

    1. ICtrace(M) > Load Rules
    2. ICtrace(M) > LVS

    以下是一个命令行执行示例:

    plaintext

    复制代码
    $load_rules("rules_file");
    $lvs_mask(@true, @true, "zinv/default", "TEST", @eddm, "lvs.rep",
    "maskdb", @true, @true);

注意事项

  • 无需从 DA 提取网表:ICtrace 可直接使用 DA 数据库(EDDM)进行比对,无需预先提取原理图网表。

  • 无需从版图提取网表 :可直接在 Pyxis 中对版图执行 LVS 检查。若需为 HSPICE 或 LSIM 等工具提取网表,可使用 WRITE MASK NETLIST 命令,该命令位于功能面板:ICtrace(M) > Netlist。示例:

    plaintext

    复制代码
    $write_mask_netlist(@true, @true, @false, "", "", @eddm, "lvs.rep",
    "maskdb", @true, @true, "test.net", @hspice, @simple, @layout);

示例 2

以下是一个适用于简单 CMOS 工艺的 ICtrace 规则文件示例。此工艺并非真实工艺,但可作为入门参考。

plaintext

复制代码
// 简易 CMOS 规则文件示例。
layer poly 1
layer diff 2
layer well 3
layer metal 4
layer nplus 5
layer contact 7
layer subc 11 // 衬底接触
text layer poly metal
connect metal poly sd by contact
connect metal well by subc
connect metal nplus by subc
sd = diff not poly
tran = diff and poly
ptran = tran not nplus
ntran = tran and nplus
device mp ptran poly sd sd well
device mn ntran poly sd sd nplus
// 规则文件示例结束。

标准器件属性说明

若 LVS 检查基于 EDDM(Design Architect 数据库),以下为 ICtrace 内置器件的标准原理图属性。ICtrace 同时支持用户自定义器件。

器件类型 属性配置
CMOS N 型晶体管 ELEMENT = MNPIN = D, G, S, B (可选)
CMOS P 型晶体管 ELEMENT = MPPIN = D, G, S, B (可选)
NMOS 增强型晶体管 ELEMENT = MEPIN = D, G, S, B (可选)
NMOS 耗尽型晶体管 ELEMENT = MDPIN = D, G, S, B (可选)
电阻器 ELEMENT = RPIN = POS, NEG
电容器 ELEMENT = CPIN = POS, NEG
双极型晶体管 ELEMENT = QPIN = C, B, E, S (可选)
二极管 ELEMENT = DPIN = POS, NEG

若上述属性已被占用或定义不同,可使用以下推荐属性替代:

  • PHY_COMP :覆盖 ELEMENT 属性
  • PHY_PIN :覆盖 PIN 属性
相关推荐
码农水水2 小时前
大疆Java面试被问:使用Async-profiler进行CPU热点分析和火焰图解读
java·开发语言·jvm·数据结构·后端·面试·职场和发展
JSU_曾是此间年少2 小时前
ubuntu安装2026最新版Mysql(截止到1月底)
数据库·mysql
m0_561359672 小时前
嵌入式C++调试技术
开发语言·c++·算法
Yang-Never2 小时前
Open GL ES -> 应用前后台、Recent切换,SurfaceView纹理贴图闪烁问题分析解决
android·开发语言·kotlin·android studio·贴图
Howrun7772 小时前
UE C++ 开发全生命周期 + 全场景的知识点清单
开发语言·c++
2301_763472462 小时前
C++中的享元模式高级应用
开发语言·c++·算法
我真的是大笨蛋2 小时前
MVCC解析
java·数据库·spring boot·sql·mysql·设计模式·设计规范
hcnaisd22 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
不会代码的小测试2 小时前
UI自动化-针对验证码登录的系统,通过首次手动登录存储cookie的方式后续访问免登录方法
开发语言·python·selenium