1. 课程导入与容差仿真认知

在理想电路教材里,电阻就是 10 kΩ,电容就是 100 nF,运放的增益就是 100 dB。但真实世界不是这样:你从料盘里取出的每一颗 10 kΩ 电阻,阻值都可能落在 9.9 kΩ 到 10.1 kΩ 之间;每一片 PCB 上的走线宽度、介质厚度、蚀刻速率都有波动;每一个晶体管在晶圆上的位置不同,阈值电压就会漂移;甚至同一块板子在 -40 ℃ 和 85 ℃ 下的表现也完全不同。这些偏差叠加起来,可能让一个"设计正确"的电路在量产时出现 3% 的良率损失,或者让一个滤波器在高温下从通带变成阻带。

容差仿真要回答的核心问题只有一个:当所有元件都偏离标称值时,我的电路还能不能正常工作?而蒙特卡洛方法,就是回答这个问题最通用、最直观的数值工具。

1.1 容差从哪里来

电路容差不是单一来源,而是多条误差链的叠加。理解这些来源,才能决定仿真时给哪些参数加分布、加多大的分布。

  • 元件制造公差:电阻的 ±1%、±5%,电容的 ±5%、±10%、±20%,电感的 ±10%,都是数据手册明确给出的。注意,标称值本身也是统计量,一批货的均值可能偏离标称 0.3%。
  • 温度系数:电阻的 TCR 可能是 ±100 ppm/℃,X7R 电容的容量随温度变化可达 ±15%,基准源的温漂是 ppm 级。温度不是"一个工况",而是一个连续变量。
  • 老化与漂移:电解电容的容量随寿命衰减,电阻在高温高湿下阻值缓慢变化,这些属于长期漂移,通常用寿命末期的极限值来界定。
  • 工艺与寄生:PCB 走线的寄生电感约 1 nH/mm,过孔约 1 nH/个,焊盘对地电容约 0.1~0.5 pF。这些寄生量随叠层、线宽、频率变化,在高速或高精度电路里不可忽略。
  • 电源与负载波动:供电电压 ±5%、负载电流从 10 mA 到 500 mA 变化,会通过电源抑制比和输出阻抗耦合到输出。
  • 器件模型的不确定性:晶体管 β 的批次分散、运放失调电压的分布、比较器阈值的离散,这些在 SPICE 模型里往往只给典型值,实际需要按分布抽样。

把这些来源分类,可以分成两类:随机性偏差(制造公差、失配、噪声,服从某种统计分布)和系统性偏差(温度、老化、电源电压,是确定性的但范围已知)。蒙特卡洛擅长处理前者,而后者通常用参数扫描或角点分析(Corner Analysis)覆盖。实际工程中两者往往同时存在,需要组合使用。

1.2 蒙特卡洛在电路仿真中的定位

蒙特卡洛不是一种"仿真器",而是一种驱动仿真器反复运行的统计方法。它的基本逻辑是:给每个有容差的参数指定一个概率分布(正态、均匀、三角等),然后随机抽取一组参数值,代入电路跑一次确定性仿真(DC、AC、TRAN),记录输出指标;重复 N 次,得到输出指标的统计分布,进而估计良率、均值和标准差。

它和另外两种常见方法的关系值得说清楚:

方法输入输出适用场景
最坏情况分析(WCA)每个参数的极值输出上下界保守设计、安全裕度验证
角点分析(Corner)工艺/温度/电压组合离散工况点结果数字电路、PVT 签核
蒙特卡洛(MC)参数的概率分布输出分布、良率模拟电路、高精度设计、良率预估

WCA 给出的是"最坏能坏到什么程度",但它假设所有参数同时取极值,实际发生概率极低,容易过度设计。角点分析覆盖的是工艺角,不给出概率。蒙特卡洛给出的是"有多大比例的产品会落在规格之外",这正是量产最关心的数字。三者不是替代关系,而是互补:先用 WCA 定边界,再用 MC 估良率,最后用角点确认极端工况。

蒙特卡洛的收敛速度约为 1/√N。要把良率估计的标准误差从 1% 降到 0.1%,采样次数需要从约 100 次增加到约 10000 次。所以 MC 不是"跑得越多越好",而是要在精度和仿真时间之间做权衡。

1.3 一个直观的例子

假设一个分压电路:VIN = 5 V,R1 = 10 kΩ ±1%,R2 = 10 kΩ ±1%,输出 VOUT = VIN × R2/(R1+R2)。标称输出是 2.5 V。如果两个电阻独立且都服从正态分布,标准差为标称值的 1%/3(即把 ±1% 当作 ±3σ),那么 VOUT 的分布会是什么样?

解析上,VOUT 对 R1、R2 的灵敏度分别是 ∂VOUT/∂R1 = -VIN·R2/(R1+R2)² ≈ -0.125 V/kΩ,∂VOUT/∂R2 = VIN·R1/(R1+R2)² ≈ +0.125 V/kΩ。两个灵敏度大小相等、符号相反,所以 R1 和 R2 的偏差会部分抵消——这正是分压电路对电阻比值的依赖。用 1000 次蒙特卡洛抽样,VOUT 的标准差约为 2.5 V × 0.01/3 × √2/2 ≈ 5.9 mV,即 ±3σ 约 ±17.7 mV,相对误差约 0.7%。这个数字比单个电阻的 1% 小,因为比值抵消了一部分共模偏差。

这个例子说明:容差不是简单相加,而是通过电路的传递函数重新组合。蒙特卡洛的价值就在于,它不需要你手推灵敏度,只要把分布喂进去,就能得到真实的输出分布。

容差来源 → 蒙特卡洛抽样 → 输出分布 → 良率判断 容差来源 元件制造公差 温度系数 老化与漂移 寄生与工艺 电源/负载波动 器件模型分散 蒙特卡洛引擎 指定概率分布 正态 / 均匀 / 三角 随机抽样参数组 第 k 次:R1ₖ, R2ₖ, … 确定性仿真 DC / AC / TRAN 记录输出指标 Vout, BW, 增益… 重复 N 次 输出指标分布 Vout (V) 频次 下限 上限 均值 2.5 V 良率 = 规格内样本 / N

1.4 本课程要解决的问题与学习路径

本课程不是泛泛介绍"蒙特卡洛是什么",而是围绕一个完整的工程闭环展开:识别容差来源 → 建立参数分布 → 配置仿真 → 运行抽样 → 分析输出分布 → 判断良率 → 优化设计。每一章都会落到具体的电路对象、具体的参数、具体的操作和具体的判断依据上。

学习路径大致分四个阶段。第一阶段建立认知:容差从哪来、蒙特卡洛解决什么问题、和 WCA/角点分析怎么配合。第二阶段掌握工具:在 SPICE 类仿真器里如何声明参数分布、如何设置抽样次数、如何用 .MEAS 提取输出指标、如何用直方图和分位数看结果。第三阶段深入方法:正态/均匀/三角分布的选择依据、相关参数的处理、拉丁超立方抽样、收敛判据、良率与 σ 的换算。第四阶段面向实战:分压与基准电路、滤波器带宽容差、运放失调与增益误差、ADC/DAC 的 INL/DNL 分布、电源纹波的蒙特卡洛评估,以及如何根据仿真结果反推元件精度要求。

学完本课程,你应该能够独立完成这样一件事:拿到一个模拟电路,列出它的关键容差参数,为每个参数指定合理的分布,跑一次 1000 点的蒙特卡洛,从输出直方图中读出均值和 ±3σ 范围,判断当前设计在给定规格下的良率,并指出哪个参数对输出分散贡献最大、需要优先收紧。

需要提醒的是,蒙特卡洛的结果依赖两个前提:分布假设是否合理,以及抽样次数是否足够。分布假设错了,再多的抽样也只是在错误的模型上精确计算;抽样次数不够,良率估计的置信区间会很宽。这两点会在后续章节反复出现,也是实际工程中最容易出问题的地方。

最后强调一个观念:容差仿真不是为了证明"我的电路没问题",而是为了量化风险。一个良率 99.9% 的设计和一个良率 85% 的设计,在原理图上可能完全一样,但在量产成本上差别巨大。蒙特卡洛给你的,就是这个数字。