第四节:极值分析法

极值分析法,说白了就是找最坏情况。

我刚开始做模拟IC设计那会儿,总觉得这玩意儿太保守。后来有个项目,产品在高温下批量失效,我才意识到——嗯,极值分析不是用来吓唬人的,它是用来保命的。

一、极值分析原理

极值分析的核心思想很简单:

把每个工艺参数、温度、电压都推到最极端,然后看电路还能不能正常工作。

举个例子。你设计一个带隙基准,输出1.2V。正常情况下,它确实输出1.2V。但你要问自己几个问题:

  • 如果NMOS和PMOS的阈值电压都往最差方向漂移,输出会变成多少?
  • 如果电阻的方块阻值偏差到±20%,输出还能稳住吗?
  • 如果温度从-40℃跑到125℃,电压从4.5V跑到5.5V,输出变化多少?

极值分析就是把这些「如果」全部变成「必须」。我个人习惯把极值分析分成三个层次:

  1. 器件级极值:每个MOS管的Vth、μ、tox都取最差边界
  2. 环境级极值:温度、电源电压、负载条件同时取极端
  3. 系统级极值:多个模块的极值组合在一起,看整体表现

核心原则:极值分析不是找「最可能发生的情况」,而是找「最坏可能发生的情况」。你设计的电路,必须能在所有极值组合下正常工作。

二、极值组合的数学方法

极值组合听起来简单,做起来头疼。为什么?因为变量太多了。

一个0.18μm工艺的MOS管模型,光工艺角就有5个(TT、FF、SS、FS、SF),再加上温度3个(-40、27、125),电压3个(4.5、5.0、5.5)。你算算,光一个管子就有5×3×3=45种组合。

一个运放里至少20个管子,全组合?那是天文数字。

所以,实际工程中我们不会穷举。我常用的方法有三种:

1. 边界扫描法

这是最直接的方法。把每个参数单独推到极端,看哪个对电路影响最大。

// 伪代码示例
for each parameter P:
    P = P_min
    simulate()
    record result_min
    
    P = P_max
    simulate()
    record result_max
    
    sensitivity = |result_max - result_min|
    
    if sensitivity > threshold:
        mark P as "关键参数"

我在项目中遇到过,一个LDO的负载调整率,温度系数影响最大,工艺角反而影响小。那后面做极值分析时,我就重点盯着温度跑,工艺角只跑TT和SS两个角。

2. 最坏情况组合法

找到关键参数后,把它们同时推到最坏方向。

举个例子。一个比较器的失调电压,受Vth mismatch和W/L mismatch影响最大。那我会这样组合:

参数 最坏方向 组合1 组合2
Vth_NMOS +3σ +3σ -3σ
Vth_PMOS +3σ -3σ +3σ
W/L偏差 +3σ +3σ +3σ

注意,这里不是随便组合。你要理解电路的工作原理,知道哪些参数是「同向叠加」,哪些是「反向抵消」。

我的经验:最坏情况组合通常不超过4个参数。超过4个,概率就太低了,而且仿真结果往往过于悲观。我一般选2-3个最敏感的参数做极值组合。

3. 蒙特卡洛辅助法

这个方法我最近几年用得越来越多。先跑200次蒙特卡洛仿真,看哪些参数组合导致了最坏结果。然后针对这些组合做定向分析。

// 蒙特卡洛辅助极值分析流程
1. 跑200次MC仿真,记录所有结果
2. 找出性能最差的5个样本
3. 提取这5个样本的参数值
4. 分析这些参数值的共同特征
5. 构造极值组合,做验证仿真

这样做的好处是:你不会漏掉那些「看似不可能,但实际会发生」的组合。

三、极值分析的局限性

极值分析不是万能的。我吃过亏,所以想跟你聊聊它的几个硬伤。

1. 过于保守

这是最大的问题。把所有参数都推到3σ边界,然后组合在一起——这种事件发生的概率是多少?

我算过,如果5个独立参数都取3σ,组合概率大约是10的负10次方。这比芯片在生命周期内被雷劈的概率还低。

但设计规范要求你这么做。怎么办?

避坑指南:我曾经在一个项目中,因为极值分析结果太差,被迫把芯片面积增加了30%。后来流片回来,实际测试结果比极值分析好得多。从那以后,我学会了「极值分析+蒙特卡洛」双轨验证——极值分析用来找问题,蒙特卡洛用来评估实际良率。

2. 忽略相关性

极值分析假设所有参数都是独立的。但现实中不是这样。

比如,同一个芯片上的MOS管,Vth的漂移方向往往是相关的。如果所有NMOS的Vth都偏大,那它们之间的匹配性反而可能更好。

但极值分析不会考虑这个。它只会把所有NMOS的Vth都推到+3σ,然后告诉你——电路失调电压超标了。

嗯,这里要注意:如果你发现极值分析结果太差,先别急着改设计。看看是不是参数相关性导致的假问题。

3. 无法处理非线性

有些电路,参数变化和性能变化不是线性关系。比如一个振荡器的频率,受电容和电流的影响,可能是二次函数关系。

极值分析只取参数的端点,但最坏情况可能发生在中间某个点。

我遇到过这种情况:一个PLL的锁定时间,在TT工艺角下是10μs,在SS工艺角下是15μs,但在某个中间工艺角下,反而变成了20μs。

为什么?因为中间工艺角下,某个寄生参数刚好谐振了。

这种问题,极值分析是抓不到的。你需要配合参数扫描或者蒙特卡洛才能发现。

4. 组合爆炸

前面说了,参数一多,组合数就爆炸。实际工程中,我们只能选几个关键参数做极值组合。

但问题来了:你怎么知道哪些是关键参数?

如果你选错了,漏掉了某个「平时不起眼、极端情况下要命」的参数,那极值分析就白做了。

我的建议:做极值分析前,先做一轮灵敏度分析。把所有参数都扫一遍,找出前5个最敏感的参数。然后只对这5个参数做极值组合。这样既控制了组合数,又不会漏掉关键因素。

小结

极值分析是模拟IC设计的必修课。它简单、直接、有效,但也保守、片面、容易漏掉问题。

我个人习惯的做法是:

  • 先用极值分析快速定位问题
  • 再用蒙特卡洛评估实际风险
  • 最后用参数扫描验证非线性区域

三者结合,才能把最坏情况真正抓住。

下一节,我会讲蒙特卡洛分析的具体方法。到时候咱们再聊聊,怎么用统计方法弥补极值分析的不足。