3. 统计模型与工艺波动来源
在Virtuoso的Monte Carlo分析中,真正决定仿真结果是否可信的,不是采样次数,而是统计模型是否写对、写全。很多初学者把 mc 语句当成“加个随机数”的开关,结果跑出来的良率要么过于乐观,要么与硅片实测严重不符。根本原因在于:全局工艺波动(process)与局部失配(mismatch)是两类物理来源完全不同的随机性,必须用不同的模型分别描述。本节围绕 statistics 块中的 process、mismatch、mis 等语句,讲清语法、物理含义以及它们对电路性能的差异化影响。
一、两类波动的物理来源与建模边界
全局波动来自晶圆制造中跨批次、跨晶圆、跨芯片的系统性偏差。例如氧化层厚度、光刻线宽、掺杂浓度在整片晶圆上存在缓慢的空间梯度,同一批次内不同芯片的NMOS阈值电压可能整体偏高或偏低。这类波动对同一芯片上的所有同类型器件同向、近似同比例地作用,因此建模时用一个全局随机变量驱动所有相关器件。
局部失配则来自同一芯片内相邻器件之间的随机差异,典型来源包括掺杂原子数涨落、栅氧厚度局部起伏、边缘粗糙度等。它只作用于“本应相同”的器件对,例如差分对的两只管子、电流镜的参考管与镜像管。失配随器件面积增大而减小,近似满足 Pelgrom 关系:σ(ΔVth) = A_VT / sqrt(W·L)。这意味着失配模型必须与器件的 W、L 绑定,而不能像全局波动那样只给一个固定 sigma。
二、Virtuoso 统计模型语法与含义
在 ADE XL 或 Assembler 中,统计模型通常写在模型文件的 statistics 块内,或通过 monteCarlo 设置引用。核心语句形式如下:
statistics {
process {
vary vth0 dist=gauss std=0.02
vary tox dist=gauss std=0.03
}
mismatch {
vary dvth0 dist=gauss std=0.005
}
mis {
vary dw dist=gauss std=0.01
vary dl dist=gauss std=0.01
}
}
逐项解释:process 块定义全局变量,每次 Monte Carlo 抽样时,所有引用该模型的器件共享同一组抽样值;mismatch 块定义局部失配变量,每个器件实例独立抽样,因此差分对两只管子会得到不同的 dvth0;mis 是 mismatch 的简写别名,在部分 PDK 中两者等价,但有些工艺库用 mis 专门表示几何尺寸失配(ΔW、ΔL),用 mismatch 表示电学参数失配(ΔVth、Δβ),此时不能混用。
dist 指定分布类型,常用 gauss(正态)、lognormal(对数正态,适合电阻、电流等正值量)、uniform(均匀)。std 是标准差,单位与所修饰参数一致:vth0 用 V,tox 用 m,dw 用 m。若 PDK 提供的是相对标准差,则用 std=0.02 表示 2% 的 1σ 波动。
三、模型如何影响电路性能:一个差分对示例
假设一个 NMOS 差分对,尾电流 100 μA,负载电阻 10 kΩ,输入对管 W/L = 10 μm/0.18 μm。若只开 process,两只管子的 Vth 同时升高 20 mV,差分输出几乎不变,因为共模漂移被差分结构抑制;此时测得的失调电压很小,容易让人误以为电路“良率很高”。一旦加入 mismatch,两只管子 Vth 各自独立抽样,差值 ΔVth 的 1σ 约为 A_VT / sqrt(W·L)。取典型 A_VT = 5 mV·μm,则 σ(ΔVth) ≈ 5 / sqrt(10×0.18) ≈ 3.7 mV,对应输入失调电压 1σ 约 3.7 mV。若系统要求失调小于 5 mV,则良率大约只有 82% 左右(按正态分布估算),这才是真实的设计约束。
由此可见:process 决定电路的绝对工作点是否落在规格内,mismatch 决定匹配精度和失调类指标。两者必须同时开启,且采样次数要足够——通常至少 200~500 次才能稳定估计 3σ 附近的良率,100 次以下的结果波动很大,不宜作为签核依据。
四、实操要点与常见错误
第一,确认 PDK 中 mismatch 与 mis 是否等价。打开模型文件搜索 statistics 块,若同时存在两个块且参数不同,说明它们分工不同,仿真设置里必须分别引用。第二,检查 std 单位。Virtuoso 不会自动换算,若把 0.02 V 写成 0.02 mV,失配会被低估 1000 倍,良率虚高。第三,注意 process 变量的作用域:它应作用于所有同类型器件,而不是只作用于被选中的实例,否则全局波动被人为削弱。第四,采样次数与收敛判断:先跑 100 次看均值与标准差是否稳定,再增加到 500 次;若 3σ 良率在两次运行间跳变超过 2%,说明次数不足。
最后给出一个可复用的检查清单,用于每次 Monte Carlo 设置后快速核对:
| 检查项 | 正确做法 | 错误后果 |
|---|---|---|
| process 是否开启 | 所有全局变量在 process 块中定义 | 绝对工作点无波动,良率虚高 |
| mismatch/mis 是否开启 | 失配变量按器件实例独立抽样 | 失调为零,匹配类指标失真 |
| std 单位 | 与参数单位一致(V、m、A) | 波动量级错误,结果不可信 |
| 分布类型 | Vth 用 gauss,电阻/电流用 lognormal | 出现负电阻等非物理值 |
| 采样次数 | ≥200 次,3σ 良率稳定 | 良率估计随机跳动 |
| W·L 与 σ 关系 | 失配 std 随面积缩小而增大 | 小尺寸器件失配被低估 |