代工厂的制造能力有限。光刻分辨率、蚀刻精度、CMP均匀性都有物理极限。设计规则是代工厂制定的几何约束,确保版图可正确制造。
| 违例类型 | 后果 | 严重程度 | 可waive? |
|---|---|---|---|
| 线宽过小 | 线条断裂,开路 | 🔴 致命 | 否 |
| 间距过小 | 短路,漏电 | 🔴 致命 | 否 |
| 包围不足 | 通孔脱落 | 🔴 致命 | 否 |
| 延伸不足 | 器件不完整 | 🔴 致命 | 否 |
| 密度不均 | CMP问题 | 🟡 警告 | 可能 |
| 天线效应 | 栅极击穿 | 🟡 警告 | 需加diode |
DRC错误的代价:掩膜版$10K-$100K/块,晶圆$5K-$50K/片,重新流片3-6个月。
Width < min → 线条断裂
┌──┐ ┌────────┐
│窄│ │ 合规 │
└──┘ └────────┘
M1 min = 0.22μm (180nm)
Spacing < min → 短路
┌──┐┌──┐ ┌──┐ ┌──┐
│ ││ │ │ │ │ │
└──┘└──┘ └──┘ └──┘
太近 合规
Enc < min → 通孔脱落
┌─────┐ ┌─────────┐
│VIA │ │ VIA │
└─────┘ └─────────┘
不足 合规
Ext < min → 栅极不完整
┌──Poly──┐ ┌────Poly────┐
┌─Active─┐ ┌───Active───┐
不足 合规
| 规则 | 层 | 类型 | 最小值(μm) |
|---|---|---|---|
| R1 | N-Well | 宽度 | 0.84 |
| R2 | N-Well | 间距 | 0.84 |
| R3 | Active | 宽度 | 0.24 |
| R4 | Active | 间距 | 0.24 |
| R5 | Active→NW | 间距 | 0.12 |
| R6 | Poly | 宽度 | 0.18 |
| R7 | Poly | 间距 | 0.24 |
| R8 | Poly→Active | 延伸 | 0.12 |
| R9 | Contact | 尺寸 | 0.22 |
| R10 | Contact→Poly | 间距 | 0.14 |
| R11 | M1 | 宽度 | 0.22 |
| R12 | M1 | 间距 | 0.22 |
| R13 | Via1 | 尺寸 | 0.22 |
| R14 | M1→Via1 | 包围 | 0.04 |
| R15 | M2→Via1 | 包围 | 0.04 |
| 命令 | 说明 |
|---|---|
| drc check | 检查当前视窗 |
| drc count | 统计错误数 |
| drc find | 跳转到下一错误 |
| drc list | 列出所有错误 |
| drc why | 解释错误原因 |
magic -dnull -noconsole <<'EOF'
load inverter
drc check
puts "Errors: [drc count]"
quit -noprompt
EOF
预期:Errors: 0
magic -dnull -noconsole <<'EOF'
# 错误1: M1宽度不足
box 0 0 1 10; paint metal1
# 错误2: M1间距不足
box 5 0 15 10; paint metal1
box 16 0 26 10; paint metal1
# 错误3: Poly未延伸出Active
box 30 5 40 15; paint ndiff
box 34 8 36 12; paint poly
save drc_violations
quit -noprompt
EOF
magic -dnull -noconsole <<'EOF'
load drc_violations
box 0 0 3 10; paint metal1 # 修复1: 加宽
box 16 0 26 10; erase metal1 # 修复2: 移开
box 19 0 29 10; paint metal1
box 34 3 36 17; paint poly # 修复3: 延伸
drc check
puts "After fix: [drc count]"
save drc_fixed
quit -noprompt
EOF
修复后DRC错误=0
#!/bin/bash
DESIGNS="nmos_w2_l018 inverter"
mkdir -p drc_reports
for d in $DESIGNS; do
magic -dnull -noconsole <<EOF
load $d; drc check
set c [drc count]
set fid [open "drc_reports/${d}.txt" w]
puts \$fid "Errors: \$c"
close \$fid; quit -noprompt
EOF
done现代工艺DRC不是固定值:
# 宽度相关间距
# M1 < 0.5μm → 间距 ≥ 0.22μm
# M1 0.5-1.0μm → 间距 ≥ 0.28μm
# M1 > 1.0μm → 间距 ≥ 0.34μm查看tech文件DRC规则,记录5条。
创建5个不同类型DRC错误并逐一修复。
每条DRC规则都有其物理基础。理解这些基础,你就知道为什么规则是这样的,以及何时可以灵活处理:
光刻机使用193nm ArF激光(深紫外)或13.5nm EUV。最小可分辨线宽由瑞利判据决定:CD = k1 × λ / NA
间距不足会导致:
通孔/接触孔的位置有对准误差(overlay error),通常±10-50nm。如果包围不够,对准偏差会导致通孔偏移到错误层。
多晶硅蚀刻时,边缘效应导致线端变短(线端缩短效应,line end shortening)。延伸量必须大于最大可能的缩短量。
| 规则 | 物理原因 | 如果违反 |
|---|---|---|
| 宽度≥0.18μm | 光刻分辨率限制 | 线断裂/消失 |
| 间距≥0.24μm | 蚀刻/CMP限制 | 粘连/短路 |
| 包围≥0.04μm | 对准偏差 | 通孔偏移 |
| 延伸≥0.12μm | 蚀刻线端缩短 | 沟道不完整 |
完成以下综合项目,将本课所学知识融会贯通:
提交内容:版图截图、DRC报告、LVS报告、寄生参数分析。
在基础版图上进行以下优化尝试:
记录每次优化前后的指标变化,总结最优方案。
在实际项目中,DRC修复是日常工作中最耗时的环节之一。以下是系统化的修复流程:
# fix_drc.tcl - 常见DRC错误自动修复
proc fix_metal_spacing {} {
# 查找间距不足的metal1
# 向外扩展2 lambda确保最小间距
select area metal1
set bbox [bbox]
# ... 扩展逻辑
}
proc fix_poly_extension {} {
# 修复poly延伸不足
# 找到所有poly-active交叉区域
# 确保poly延伸>= 2 lambda
}
proc fix_enclosure {} {
# 修复包围不足
# 扩展metal1/metal2以确保包围via
}
典型的Calibre DRC报告格式:
**************************************************
* Calibre DRC Report
* Cell: top_chip
* Date: 2024-01-15
**************************************************
TOTAL DRC Violations: 47
Rule Count Severity
---- ----- --------
M1.W.1 12 FATAL (M1 min width)
M1.S.1 8 FATAL (M1 min spacing)
PO.E.1 5 FATAL (Poly extension)
CO.E.1 3 FATAL (Contact enclosure)
M1.D.1 15 WARNING (M1 density)
AN.1 4 WARNING (Antenna)
Cell: top_chip / X1 / INV_0
(12.34, 56.78) - (13.00, 57.50) M1.W.1: Metal1 width=0.20um < 0.22um
...
🏆 设计规则(DRC)专家
✅ 理解四大DRC规则类型
✅ 使用Magic进行DRC检查与修复
✅ 创建并修复DRC错误
✅ 掌握DRC自动化脚本
✅ 了解条件DRC规则