4. 电阻失配对CMRR的影响:电阻误差分析,蒙特卡洛模拟方法,如何通过版图匹配降低失配

好,咱们接着聊。前面几章我们把电流源、尾电流那些东西都捋了一遍。这一章,我打算聊聊一个让很多工程师头疼的问题——电阻失配。

你想想看,一个差分放大器,如果两边电阻值不一样,会发生什么?说白了,共模信号就会转化成差模信号。CMRR?直接跳水。

4.1 电阻误差分析:理想很丰满,现实很骨感

我们先从最基础的开始。一个典型的差分放大器,负载电阻是 R1 和 R2。理想情况下,R1 = R2。但现实呢?

芯片制造过程中,光刻、刻蚀、掺杂浓度……每一步都有偏差。这些偏差会导致电阻值产生随机变化。我习惯把这个叫做「工艺的脾气」。

电阻失配通常用 标准差 σ(ΔR/R) 来表示。这个值跟电阻的面积、材料、工艺节点都有关系。一般来说,面积越大,失配越小。但面积大了,寄生电容也大了,速度就下来了。这就是 trade-off。

咱们来算一笔账。假设一个差分对,负载电阻 R1 = R2 = 10kΩ,失配 σ(ΔR/R) = 1%。那么,由电阻失配引起的 CMRR 大概是多少?

公式很简单:

CMRR_resistor ≈ (1 + gm * R) / (ΔR / R)

其中 gm 是输入管的跨导,R 是负载电阻。假设 gm * R = 10(也就是增益为20dB),那么:

CMRR_resistor ≈ (1 + 10) / 0.01 = 1100 ≈ 60.8 dB

嗯,60dB 看起来还行?但别忘了,这只是电阻失配一项。还有电流源失配、输入管失配……加起来,总 CMRR 可能连 50dB 都不到。

关键点: 电阻失配对 CMRR 的影响,在高增益下尤其明显。增益越高,电阻失配带来的共模-差模转换就越严重。

4.2 蒙特卡洛模拟方法:让数据说话

光靠公式算,心里总有点不踏实。我在项目中遇到过好几次,理论计算 CMRR 有 70dB,结果流片回来一测,只有 55dB。问题出在哪?就是没做蒙特卡洛模拟。

蒙特卡洛模拟,说白了就是「暴力枚举」。让计算机随机生成成千上万组工艺偏差,然后跑仿真,看看 CMRR 的分布情况。

怎么做?我一般用 Cadence 的 Monte Carlo 工具。步骤如下:

  1. 设置工艺角: 选择包含失配模型的工艺角,比如 `mc` 或 `mis`。
  2. 选择变量: 把 R1、R2 的失配参数设为统计变量。通常用 `rel_variation` 或 `mismatch` 模型。
  3. 设置仿真次数: 我建议至少跑 200 次。次数太少,统计结果不可靠。次数太多,仿真时间太长。200 次是个不错的平衡点。
  4. 提取 CMRR: 跑完仿真后,用计算器提取每个样本的 CMRR 值。
  5. 分析结果: 看直方图,算均值和标准差。重点关注 3σ 或 5σ 的 CMRR 值。

下面是一个简单的 Monte Carlo 仿真脚本示例(Ocean 语言):

; 设置 Monte Carlo 仿真
monteCarlo( ?numRuns 200
            ?startIter 1
            ?nomRun nil
            ?processCorner "mc"
            ?mismatchCorner "mis"
            ?saveFamilyPlot nil
            ?append nil
            ?seed 1 )

; 运行仿真
runMonteCarlo()

; 提取 CMRR
cmrr = dB20( (Vout_diff / Vin_diff) / (Vout_cm / Vin_cm) )

; 输出统计结果
histogram( cmrr 20 )
printf( "Mean CMRR = %f dB\n", mean(cmmr) )
printf( "Std CMRR = %f dB\n", std(cmmr) )

我的小技巧: 跑 Monte Carlo 之前,先跑一次 DC 仿真,确认工作点正确。否则,如果电路本身就没偏对,跑再多 Monte Carlo 也是白费功夫。

4.3 如何通过版图匹配降低失配

好了,仿真做完了,发现 CMRR 不达标。怎么办?改版图。

版图匹配,是降低电阻失配最有效的手段。没有之一。我见过太多工程师,电路设计得漂漂亮亮,结果版图画得一塌糊涂,最后性能惨不忍睹。

这里我总结了几条实战经验:

  • 共质心布局: 把 R1 和 R2 拆成多个小电阻,交叉排列。比如 R1 拆成 A、B 两个,R2 拆成 C、D 两个,然后排成 A-C-B-D 或 C-A-D-B。这样,工艺梯度对两个电阻的影响是平均的。
  • 使用 dummy 电阻: 在电阻阵列的两端,放一些不接电的 dummy 电阻。它们的作用是「挡枪」,让边缘的刻蚀环境跟中间一致。我习惯在每边放 2-3 个 dummy。
  • 保持方向一致: 所有匹配的电阻,必须朝同一个方向。不要有的横着画,有的竖着画。为什么?因为晶圆上的应力是各向异性的,方向不同,电阻变化也不同。
  • 远离大功率器件: 电阻要远离功率管、电感这些发热大户。温度梯度会引起电阻值变化,破坏匹配。我曾经吃过这个亏,后来学乖了,把匹配电阻放在芯片的「冷区」。
  • 使用同一种材料: 不要用多晶硅电阻匹配扩散电阻。不同材料的温度系数、电压系数都不一样,匹配效果很差。

注意: 共质心布局虽然好,但会占用更多面积。而且,连线会变得复杂,寄生电容也会增加。你需要在高精度和高速度之间做取舍。我个人习惯,对于精度要求高的电路(比如仪表放大器),优先保证匹配;对于高速电路(比如比较器),可以适当牺牲匹配。

最后,再分享一个我踩过的坑。有一次,我设计了一个高精度差分放大器,版图匹配做得自认为天衣无缝。结果流片回来,CMRR 还是比仿真差了 10dB。查了半天,发现是电阻的 接触孔 没匹配好。一边用了 4 个接触孔,另一边用了 6 个。接触孔的电阻虽然小,但失配起来,影响也不容忽视。

所以,匹配要匹配到底。从电阻本体,到接触孔,到金属连线,每一个细节都要考虑。只有这样,你的 CMRR 才能「说到做到」。