流片前的两个问题
到这一步,你的模块已经历经千辛万苦。你先做了 布图规划,摆好了 标准单元(布局),搭起了 时钟树,把每一条网络都 布通了线,抽取了 寄生参数,最后收敛了 时序。这版版图*能跑*——在模型里。但能跑的模型不等于一颗芯片。在把设计交给晶圆厂之前,你必须回答两个不留情面、彼此独立的问题,而且两个都得给出肯定的答案。
第一个问题是:晶圆厂在物理上造得出来吗? 你的版图是几十层 金属层和硅层上数以百万计的多边形。晶圆厂靠 光刻把它们变成现实——透过掩模把每一层印到晶圆上——而这个工艺有着硬性的物理极限。导线不能画得比光与化学反应所能稳定复现的还细;两个图形挨得太近,就会在印制时糊成一团。[[design-rule-check|设计规则检查(DRC)]] 回答的就是这个「可制造性」问题。
第二个问题是:这版版图真的对应着我设计的那张电路吗? 在更上游的某个环节,你有一份 综合出来的网表——它是一份权威清单,列出了每一颗晶体管,以及每一条本应把它们连起来的导线。布局布线造出的物理版图*本应*实现这份网表,但一处接错的连接、一个漏掉的过孔、或是一次手工改动,都可能悄无声息地破坏这种对应关系。[[layout-versus-schematic|版图与原理图比对(LVS)]] 回答的就是这个「正确性」问题。DRC 与 LVS 合在一起,就是 物理验证的核心。
晶圆厂的规则集
每一家晶圆厂、每一个工艺节点都会随附一份规则集(rule deck)(常被叫作 DRC runset 或工艺规则)——一份冗长而精确的文档,逐条写明这条产线能制造出怎样的几何图形。把它想成那套工艺的建筑规范。建筑规范不管你的房子漂不漂亮、房间布置得对不对;它规定的是:立柱间距不得超过 16 英寸、楼梯至少要这么宽、横梁至少要这么厚。晶圆厂的规则集对硅做的是同样的事,只不过单位是纳米。
规则成族成类。宽度(width)规则:本层上的导线不能比 X 还窄——再细,光刻就印不清楚了。间距(spacing)规则:同一层上的两个图形至少要隔开 Y,否则它们会桥连成一个。包覆(enclosure)规则:过孔必须被上下两层金属完整地包住、并留出一定余量,这样即便掩模稍有错位,孔也仍然落在金属上。密度(density)规则:每一层都既不能太空、也不能太满,因为铜分布得越均匀,化学机械抛光(CMP)这一步就平坦化得越好。这样的规则有成百上千条,全是数字,全都没得商量。
# Foundry rule deck — illustrative entries (units = nm) M1.W.1 : min_width(metal1) >= 32 # thinner won't print M1.S.1 : min_spacing(metal1) >= 32 # closer shapes bridge VIA1.EN.1: enclosure(metal1, via1) >= 5 # metal must wrap the via M1.DN.1 : 0.20 <= density(metal1) <= 0.80 # for uniform CMP polish
DRC:它守不守规则?
DRC 就是那位建筑验收员,手里拿着规范手册,在你完工的版图里一寸寸地走。它不在乎你的芯片*能做什么*;它只在乎每一层上的每一个图形,是不是满足规则集里的每一条。工具会扫遍整张版图——数以十亿计的多边形——并把每一处量出来不达标的地方都标出来:这条线宽 30 纳米,而最小值是 32;这两块金属相隔 28 纳米,可它们必须隔 32;这个过孔戳出了本该把它包住的金属之外。
设想同一层上有两条平行导线,漂得太近——这是一处间距违例。在屏幕上它只是一条细如发丝的缝;可在晶圆上,光刻会把它们印成糊在一起的一团,把两条本不该相碰的网络短路了。或者设想一条线为了挤过一个障碍而收窄成一根细丝——这是一处宽度违例;晶圆厂没法稳定地复现这么细的东西,于是它可能印成一条断开的、开路的线。DRC 在这些问题*还没变成硅片之前*就把它们抓出来,此时修起来不过是动一动布线,而不是一次烧掉数百万美元的重新流片。
输出是一张违例清单,每一条都关联着一个规则名和精确坐标,让你能径直跳到那块出问题的几何图形上去。大多数违例靠挪一挪、重新走一走线就能修好——往往只是一处小小的 布线或 ECO改动。这个循环简单而不讲情面:跑 DRC、读违例、修掉它们、再跑一遍。你一遍遍重复,直到违例数收敛到唯一的一个数字。
# Run design-rule check against the foundry deck
drc -layout block.gds \
-ruleset foundryN_drc.rules \
-report block.drc.rpt
# Goal: this number is ZERO
Violations found: 0LVS:它和网表对得上吗?
DRC 证明版图*造得出来*,却完全没说你造的是不是对的东西。那是 LVS 的活儿。打个比方,它是一次竣工图对照施工蓝图的实地巡检:验收员拿着建筑师的蓝图和盖好的房子,一个器件一个器件、一根线一根线地核对——每个房间是不是都在图纸说的位置上,每根管子是不是都接到了正确的卫浴器具上?一栋房子可以盖得无可挑剔,却把厨房的水槽接到了卫生间的管路上。DRC 永远不会察觉;而 LVS 存在的意义,正是为此。
从机制上看,LVS 做两件事。它先从版图里抽取一份网表——读入那些多边形,仅凭几何图形本身推断出存在哪些晶体管、谁和谁连在一起。然后它把这份抽取出来的网表与参考网表(原理图/综合网表)相比对,后者正是这版设计本应实现的那一份。它把两者一个器件一个器件、一个节点一个节点地配对起来。如果连接关系完全一致,LVS 就报告比对干净通过。若不一致,你就会拿到一堆不匹配项。
那些经典的失败,读起来就像一场出了岔子的管路验收。一处短路(short):本应彼此分开的两条网络,在版图里却连到了一起——像两根管子被误接成一根。一处开路(open):本应是一整条的网络,被断成了两截——像一根没接到器具上的管子。一处器件不匹配(device mismatch):版图里的晶体管,尺寸或数量和原理图对不上。每一项都按网络名或器件名报出来,让你能一路追溯到版图究竟在哪一处偏离了设计意图。
天线效应与 ERC
DRC 和 LVS 还有两个关系很近的同胞兄弟,凑齐了物理验证的整套。头一个是天线效应检查(antenna check)。在制造过程中,晶圆厂是一层 金属层一层金属层地把你的芯片造出来的,每一层都要用等离子体去刻蚀。一段很长的金属,若已经连到了某个晶体管的栅极、却*还没*连到任何能把电荷泄走的地方,就会像一根小小的天线:它从等离子体里收集电荷,而这些电荷可能越积越多,多到足以击穿、损坏那层薄薄的栅氧化层。造好的芯片在电学上也许完美无缺,可*造它的那道工序本身*,已经毁掉了一颗晶体管。
所以天线效应检查本质上是一条关于制造顺序的、DRC 式的几何规则:它限定了在一条网络接上安全通路之前,最多能有多少裸露的金属(也就是「天线比」——收集面积与栅极面积之比)挂在某个栅极上。修法很机械——加一个小小的天线二极管(antenna diode)把电荷泄到地,或者把这根线提早「跳线(jog)」到更高一层 金属层上去,让那根危险的天线被拆成几小段、在不同的时刻分别被制造出来。
# Antenna rule (illustrative): exposed-metal area vs gate-oxide area antenna_ratio = metal_area_on_gate_net / gate_oxide_area # Violation when the accumulated ratio exceeds the foundry limit antenna_ratio <= ANT_MAX # else add an antenna diode, or jog to a higher layer
第二个兄弟是 ERC——电气规则检查(Electrical Rule Check)。如果说 LVS 问的是「这些连接和网表对得上吗?」,那么 ERC 问的就是「这些连接在电学上*说得通吗*?」它要揪出那些结构上合法、电学上却错了的东西:一个悬空的栅极输入(什么都没连,于是它的取值无从确定)、一对被误接短路的 电源与地网络、一个被两个东西同时驱动的输出引脚。把它想成水管工和建筑验收员都签字放行之后,电工再来走一遍的安全巡检。
「干净」——以及为什么它没得商量
在大多数工程里,「够好了」是一把可以滑动的尺子——99% 的测试覆盖率很棒,差 0.1% 的性能也无所谓。物理验证不是这么玩的。对 DRC、LVS、天线效应和 ERC 来说,唯一可接受的结果就是干净:零违例、零不匹配,每一项检查、覆盖整颗芯片。不是「差不多干净」。也不是「有三个已知的豁免项,回头再看」——除非晶圆厂已经为每一项豁免正式签了字。就是干净。
原因是冷酷的经济账。一旦你 流片——把最终的 GDSII 交付给晶圆厂——先进节点的一套掩模版动辄数百万美元,而晶圆要数周到数月才回得来。哪怕只有一处真实的 DRC 违例,都可能意味着某个图形印不出来,整颗裸片就此报废。哪怕只有一处 LVS 短路,都可能意味着芯片实现的是错误的电路——硅片在通电的那一刻就功能性死亡了。无论哪一种,修法都不是重新编译一下;而是一次重新流片(respin):重画、重新验证、重做掩模、重新制造。数月光阴、数百万美元,就这么没了。
- 拿晶圆厂的规则集跑一遍 DRC;把每一处宽度、间距、包覆和密度违例都修掉,直到违例数为零。
- 跑 LVS:从版图抽出一份网表,与参考网表比对;把每一处短路、开路和器件不匹配都解决掉,直到它报告比对干净通过。
- 跑天线效应检查;加天线二极管或把导线跳到更高层,直到每一个栅极都落在晶圆厂给的天线上限之内。
- 跑 ERC,揪出 LVS 不会标记的悬空节点、电源/地短路和驱动冲突。
- 确认四项都在整颗芯片范围内干净通过——到那时,也唯有到那时,才把 GDSII 放出去流片。