目录
[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 检查。
-
创建 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(衬底,可选)
-
录入 DA 电路图在 DA 工具中,使用上述创建的 mn 和 mp 器件符号绘制你的电路原理图。
-
创建 EDDM 视图文件 以下是一段 DVE 脚本示例 ,用于为名为
zinv的 DA 器件创建 ICtrace 视图文件。> dve open design viewpoint "zinv" "default" add primitive "element" check design save design viewpoint close design viewpoint close session -
编写规则文件下文为适用于基础 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
// 规则文件示例结束。 -
在 Pyxis 中录入版图完成版图设计后,不要退出软件,继续执行步骤 6。
-
执行 LVS 检查 在 Pyxis 中,打开 ICtrace(M) 功能面板,并执行以下操作:
ICtrace(M) > Load RulesICtrace(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 = MN,PIN = D, G, S, B (可选) |
| CMOS P 型晶体管 | ELEMENT = MP,PIN = D, G, S, B (可选) |
| NMOS 增强型晶体管 | ELEMENT = ME,PIN = D, G, S, B (可选) |
| NMOS 耗尽型晶体管 | ELEMENT = MD,PIN = D, G, S, B (可选) |
| 电阻器 | ELEMENT = R,PIN = POS, NEG |
| 电容器 | ELEMENT = C,PIN = POS, NEG |
| 双极型晶体管 | ELEMENT = Q,PIN = C, B, E, S (可选) |
| 二极管 | ELEMENT = D,PIN = POS, NEG |
若上述属性已被占用或定义不同,可使用以下推荐属性替代:
- PHY_COMP :覆盖
ELEMENT属性 - PHY_PIN :覆盖
PIN属性