第二章 设计规则检查(DRC)基础:DRC的概念、DRC检查的内容(宽度、间距、密度等)、DRC规则文件格式(SVRF/TVF)

各位好,欢迎来到第二章。今天我们来聊聊DRC——设计规则检查。

说实话,我刚入行那会儿,觉得DRC就是个“找茬”的工具。后来吃过亏才明白,它其实是保护我们不被流片失败的“守门员”。

2.1 DRC到底是什么?

DRC,全称Design Rule Check,设计规则检查。说白了,就是检查你的版图有没有违反工艺厂定下的“规矩”。

你想想看,芯片制造是一个物理过程。光刻、刻蚀、沉积……每一步都有物理极限。如果两条金属线靠得太近,光刻时可能连在一起,造成短路。如果一根线太细,电流一大会烧断。这些“规矩”就是设计规则。

DRC就是自动检查这些规则的工具。它读入你的版图,一条一条规则去比对,最后告诉你:哪里有问题,哪里需要改。

核心要点:DRC不是可做可不做的步骤。它是流片前的“必过项”。规则没跑通,工厂根本不会接你的单子。

2.2 DRC检查哪些内容?

DRC检查的内容很多,但归纳起来,主要就这几大类。我按项目里最常见的顺序来讲。

2.2.1 宽度检查(Width)

宽度检查,就是看你的走线、有源区、多晶硅等图形,宽度是否满足最小要求。

举个例子,某工艺要求金属1最小宽度0.18μm。你画了一根0.15μm的线,DRC就会报错。

我在项目中遇到过一件事:有个同事为了省面积,把电源线画窄了。DRC报了错,他觉得“就一点点,应该没事”。结果流片回来,那根线在高压下直接熔断了。嗯,从那以后,我再也不敢在宽度上“讨价还价”。

2.2.2 间距检查(Spacing)

间距检查,就是看两个图形之间的距离够不够。这是DRC里最常报错的项目之一。

为什么间距这么重要?因为光刻时,靠得太近的图形会互相干扰。轻则影响良率,重则直接短路。

间距检查分很多种:

  • 同层间距:比如金属1到金属1的距离
  • 异层间距:比如金属1到金属2的垂直距离
  • 阱间距:不同电位阱之间的距离

我的小技巧:画版图时,我习惯把间距留得比规则要求多10%-20%。这样即使工艺有波动,也能保证良率。这叫“设计余量”,老工程师都懂。

2.2.3 密度检查(Density)

密度检查,很多人容易忽略。但它其实很关键。

什么叫密度?就是单位面积内,某种材料的覆盖率。比如金属密度,要求30%-70%。

为什么会这样?因为化学机械抛光(CMP)时,密度不均匀会导致表面不平整。密度太低的地方,会被磨掉太多;密度太高的地方,又磨不掉。

我曾经有个项目,金属密度只有25%。DRC报了密度违规。我加了几个“虚拟填充”(dummy fill)图形,把密度提到40%,才通过。

2.2.4 其他常见检查项

除了上面三个,还有不少检查项:

检查项 说明 常见违规原因
包围检查(Enclosure) 一层图形必须被另一层完全包围 接触孔没被金属完全覆盖
面积检查(Area) 图形面积不能小于最小值 过孔面积太小,电流密度过大
天线效应检查(Antenna) 长走线在刻蚀时积累电荷 栅极连接的长金属线
孔阵列检查(Array) 过孔阵列的间距和数量 大电流区域孔数不够

2.3 DRC规则文件格式:SVRF和TVF

规则文件,就是DRC工具用来检查的“规则书”。目前主流的有两种格式:SVRF和TVF。

2.3.1 SVRF(Standard Verification Rule Format)

SVRF是Calibre工具使用的规则格式。也是目前最通用的格式。

它的语法很直观。我写个例子给你看:

// 金属1最小宽度检查
M1_WIDTH {
  @ 金属1宽度必须大于等于0.18μm
  WIDTH M1 < 0.18
}

// 金属1到金属1最小间距检查
M1_SPACING {
  @ 金属1间距必须大于等于0.20μm
  EXTERNAL M1 < 0.20
}

// 金属密度检查
M1_DENSITY {
  @ 金属1密度必须在30%到70%之间
  DENSITY M1 < 0.30
  DENSITY M1 > 0.70
}

你看,SVRF的规则由三部分组成:规则名、注释、检查语句。规则名可以自己起,注释用@开头,检查语句就是具体的条件。

注意:SVRF对大小写敏感。M1和m1是两个不同的层。我见过有人因为大小写写错,跑了一晚上DRC,结果全是假错。白白浪费一晚上。

2.3.2 TVF(TCL Verification Format)

TVF是另一种规则格式,基于TCL语言。ICV工具(比如Synopsys的ICV)常用这种格式。

TVF的语法更灵活,因为它可以用TCL的变量、循环、条件判断。举个例子:

# 定义最小宽度
set min_width 0.18

# 金属1宽度检查
rule M1_WIDTH {
  condition: width(M1) < $min_width
  message: "金属1宽度小于$min_width μm"
}

# 金属1间距检查
rule M1_SPACING {
  condition: space(M1) < 0.20
  message: "金属1间距小于0.20 μm"
}

TVF的好处是可以用变量。如果工艺变了,改一个变量就行,不用改所有规则。

2.3.3 SVRF vs TVF:怎么选?

这个问题,我经常被问到。我的建议是:

  • 用SVRF:如果你的工具是Calibre,或者团队习惯用Calibre。SVRF生态成熟,资料多,遇到问题好查。
  • 用TVF:如果你的工具是ICV,或者你需要写复杂的规则逻辑。TVF的TCL能力让它更灵活。

我个人习惯是:简单项目用SVRF,复杂项目用TVF。但说实话,两种格式都能完成工作,关键看团队统一。

2.4 跑DRC的流程

最后,我简单说一下跑DRC的流程。你心里有个数:

  1. 准备版图:GDS或OASIS格式
  2. 准备规则文件:SVRF或TVF文件
  3. 运行DRC:工具读入版图和规则,开始检查
  4. 查看结果:DRC会生成一个报告,列出所有违规
  5. 修改版图:根据报告修改,然后重新跑DRC
  6. 反复迭代:直到所有违规清零

嗯,这里要注意:第一次跑DRC,报错几百上千个很正常。别慌,大部分是重复报错。先修大问题,再修小问题。

避坑指南:我曾经遇到一个项目,DRC报了5000多个错。我一看,全是同一个问题——电源线间距不够。改了一根线,5000个错全消了。所以,先分析错误类型,别一个一个改。

2.5 小结

这一章我们讲了DRC的基础。你记住三点:

  • DRC是检查版图是否违反工艺规则的步骤
  • 主要检查宽度、间距、密度等
  • 规则文件有SVRF和TVF两种格式

下一章,我们会深入讲DRC的常见错误和修复技巧。到时候我会分享更多实战经验。

好,今天就到这里。有问题随时交流。


公众号:蓝海资料掘金营,微信deep3321