1. 从“复制电流”到“复现误差”:基础电流镜背后的真实约束
在模拟IC设计里,电流镜大概是最容易被低估的电路之一。刚接触时觉得“两个管子对一对,把电流复制过去就行”,直到自己流片回来发现镜像电流和仿真相差超过10%,才开始认真对待这个模块。这篇按我的实战经验,从原理到版图、从手算到测试,把电流镜设计与排错的关键点一次性理清楚。无论你要做偏置网络、有源负载、电流舵DAC还是LDO里的恒流源,下文这套方法论基本都适用。
1.1 理想模型下的镜像原理
一个最基本的NMOS电流镜只需要两只同型号管子:M1接成二极管形式(漏栅短接),通入参考电流Iref;M2的栅极和M1相连,漏端作为输出端。因为两只管的栅源电压完全相等,在理想情况下,它们的工作点完全相同,输出电流Iout就按宽长比复刻输入电流:
Iout / Iref = (W/L)₂ / (W/L)₁
这个公式看起来简单,但背后隐含了一个严格的工作条件:两只管都必须处于饱和区。M1因为漏栅短接天然满足饱和条件,M2是否饱和则完全取决于输出端电压,要求Vds2 ≥ Vgs − Vth。一旦输出端被后级拉低到线性区,Iout会迅速塌陷,这个坑我在后面的问题排查部分会专门展开。
实际项目里,电流镜最常用的场景是给运放提供偏置电流、做有源负载、以及构成DAC的电流舵阵列。每一种应用对电流镜的要求都不一样:偏置电路希望温漂可控,有源负载希望输出阻抗高,电流舵阵列则把失配精度看得比什么都重。如果没有先想清楚应用场景就套公式选尺寸,后面一定返工。
1.2 沟道长度调制:仿真和手算差的第一道坎
实际器件里有一个理想模型不包含的效应,就是沟道长度调制:漏源电压越高,有效沟道长度被夹断区侵蚀得越短,漏电流越大。考虑这个效应后,镜像关系变成:
Iout = Iref × [(W/L)₂ / (W/L)₁] × [(1 + λVds2) / (1 + λVds1)]
注意M1的漏源电压大约是Vth + Vov,在0.5V到0.7V之间;而M2的漏端电压由后级决定,可能是0.3V也可能是2.5V。只要两个Vds不一致,镜像比例就会出现偏差。举一个实际例子:取L=1um工艺下λ≈0.05V⁻¹,M1的Vds=0.6V,M2的Vds=2.5V,误差大约是(1+0.125)/(1+0.03),接近9%。这个量级在很多场景已经不可接受了。
| 场景 | λ取值 | Vds2 | 镜像比例偏差 |
|---|---|---|---|
| L=1um,Vds2=1.0V | 0.05 V⁻¹ | 1.0V | 约2% |
| L=1um,Vds2=2.5V | 0.05 V⁻¹ | 2.5V | 约9% |
| L=4um,Vds2=2.5V | 0.012 V⁻¹ | 2.5V | 约2% |
L加大之后,λ近似按比例下降,输出阻抗提高,误差迅速改善。这也是为什么高精度电流镜的管子一般不用最小沟长,哪怕电流很小也要画到1u甚至几u。代价是面积变大、栅电容变大,给版图布局和高速开关带来压力。在设计DAC电流源阵列时,我通常会在速度和匹配之间取一个折中的L,比如0.18um工艺里用2u或4u,而不是一味加大。
1.3 短沟道效应:平方律公式为什么会失效
还有一个让手算和仿真对不上的原因,是短沟道效应。很多初学者喜欢用教科书里的平方律电流公式去估算偏置,结果发现仿真值总比手算小很多,就怀疑模型文件有问题。其实在0.18um以下工艺,沟道电场已经很高,载流子速度饱和,I与(Vgs−Vth)的关系从平方律逐渐过渡到近似线性关系,这就是常说的α-power law,α在1到2之间。沟道越短、电压越高,α越接近1。
实际项目中我一般这么处理:初步设计用手算确定大致尺寸,比如参考电流10uA、Vov目标0.2V,先估算W/L。等仿真出来后,以仿真结果为准,反推一个“等效Kn”,再用这个等效值去估算其它支路。这样做虽然精度不像教科书那么漂亮,但能在设计迭代时少走几轮弯路。记住一句话:手算用来定方向和量级,仿真用来定最终值,两者差距太大时,优先怀疑模型效应而不是电路接错。
2. 失配、温度与体效应:电流镜“精度失守”的三大源头
如果把基础镜像关系吃透了,下一步就是精度问题。很多人把“电流镜精度”简单等同于版图画得对称,但真正决定精度的因素至少有三个:随机失配、温度漂移和体效应。这三个源头不在一个维度上,处理手段也完全不同,分开理清楚才不会在项目里病急乱投医。
2.1 Pelgrom失配模型:面积、距离与工艺的博弈
如果把两只同尺寸管子画得一模一样,理想情况下电流应该完全相等?答案是否定的。即使版图完全对称,两只管的阈值电压和电流因子也会因为掺杂原子数的随机涨落而产生差异。描述随机失配最常用的就是Pelgrom模型:
σ(ΔVth) = Avth / sqrt(W·L)
Avth是工艺常数,大致在1mV·um到5mV·um之间,工艺越先进氧化层越薄,Avth通常越小。换算成电流误差,在饱和区小信号下有:
σ(ΔI/I) ≈ 2σ(ΔVth) / (Vgs − Vth)
举个例子,工艺Avth=3mV·um,做一对W/L=10u/1u的镜像管,σ(ΔVth)≈0.95mV。如果Vov=0.1V,那么σ(ΔI/I)≈1.9%,3σ就接近5.7%,对很多高精度应用已经不合格。
所以做电流镜选尺寸的时候,不能只看“能不能流过这个电流”,还要看“尺寸能不能满足失配预算”。比如一个12位电流舵DAC,最低位LSB的电流镜失配预算可能要求在0.1%以内,这时候管子的WL面积可能要到平方百微米量级。正确的设计顺序是:先根据失配预算反推WL,再根据这个WL确定Vov和静态工作点,最后才是摆放位置。很多新手把顺序反过来,先定了电流尺寸,等流片回来发现失配超标,就只能靠 calibration 硬抗,成本和风险都上去了。
2.2 温度漂移:先查参考源,再查电流镜
另一个容易误判的是温度漂移。镜像关系本身对温度并不敏感,因为两只管同工艺同温度,Vth和迁移率同时漂移,镜像比例基本保持稳定。实际电路里看到输出电流随温度明显变化,通常问题出在参考电流源,而不是电流镜本身。用与Vth相关的偏置(比如直接由Vgs产生的电流)会呈现CTAT趋势,温度升高电流减小;用ΔVbe/R产生的偏置则是PTAT趋势,温度升高电流增大;用带隙基准配合合适的电阻类型,才能做出零温漂参考。
我记得有一个项目里,运放的偏置电流在高温下从20uA掉到了15uA,团队一开始怀疑电流镜失配,又是查版图又是换尺寸,折腾了很久。后来把参考电流源单独拉出来跑温度扫描,发现漂移全在源头。这个坑提醒我:排查温漂问题,先测参考源,再测镜像对,不要一上来就动版图。
2.3 体效应:源端电压差悄悄改变Vth
还有一个容易漏掉的效应是体效应。标准CMOS工艺里,同一阱内的管子共享衬底电位,但如果两只管的源端电压不同,Vth就会不同。比如输出管M2如果接了源极负反馈电阻,它的源端电压不再是0V,那么它的Vth和输入管M1就不相等,镜像比例被破坏。公式上表示为:
ΔVth = γ(√(2φF + Vsb) − √(2φF))
γ是体效应系数,大致在0.2到0.5√V之间。差100mV的Vsb,Vth可能差20到40mV。对于Vov只有0.1V的高精度电流镜,这相当于20%到40%的等效电流误差。解决思路有两个:一是保证所有镜像管的源端电位相同;二是使用深N阱工艺,把输出管单独放在隔离阱里,让衬底直接接源端。后者会带来额外寄生电容和面积开销,低压高速场景需要权衡。
2.4 源极退化电阻:用电压余量换匹配精度
如果对匹配精度的要求已经到了“随机失配0.1%以下”,纯靠加大WL面积可能不划算,这时候可以上源极退化电阻。原理很简单:在每只管子的源端串联一个电阻,让Vgs−Vth的偏差被电阻上的负反馈吸收一部分。加入退化电阻后,等效跨导变为gm/(1+gmR),电流失配对Vth失配的敏感度也降低同样的倍数。当gmR远大于1时,电流基本由电阻和电压差决定,管子本征参数的影响被压到很低。
代价也很明确:最小工作电压增加了I·R,低功耗低压设计经常承担不起这个开销。另外电阻本身会引入额外热噪声,如果电流镜用在敏感信号路径上,需要评估噪声预算。我一般在精密偏置电路里才用源极退化电阻,比如基准源的运放偏置、高精度ADC的参考驱动,而不是所有电流镜都无脑加。
3. cascode 与 Wilson:高输出阻抗结构的电压余量账
基础电流镜的输出阻抗大约就是ro,典型值从几十kΩ到几MΩ。如果电流镜是给高增益运放当有源负载,这个ro会和负载电阻并联,直接拉低开环增益;如果电流镜是给DAC当电流源阵列,ro不够大会导致输出电流随输出电压明显变化,恶化INL和DNL。这时候就该考虑cascode结构。
3.1 为什么要加共源共栅管
标准NMOS cascode电流镜由主镜像管M1、M2和共栅管M3、M4构成。M4串联在输出管M2的漏端上方,输出电压的变化大部分落在M4头上,M2的Vds被基本锁定,输出电流对输出电压的敏感度大幅下降。小信号分析可以推出输出阻抗约为:
Rout ≈ gm4·ro4·ro2
取典型参数,I=10uA,L=1u,ro≈2MΩ,gm≈200uS,Rout≈800MΩ。相比基础电流镜的2MΩ,提高了约400倍。代价是电压余量,也就是下面要算的Vmin。
从设计思路上看,cascode的本质是“用多一只管的电压空间,换回主输出管稳定的工作点”。在电源电压充裕的3.3V或5V工艺里,cascode几乎是免费的;但在1.8V甚至1.2V工艺里,每一百毫伏电压余量都很珍贵,这就逼着设计者去抠偏置电路。
3.2 cascode的Vmin账单:理论极限与实际裕量
无论哪种cascode结构,输出电压下限的物理约束都不复杂:串联的两只管都必须处于饱和区。假设NMOS管M2的过驱动电压是Vov2,共栅管M4的过驱动电压是Vov4,那么理论上最小输出电圧就是:
Vmin = Vov2 + Vov4
这个式子不包含Vth,是硬底。问题在于偏置电路。传统cascode电流镜的偏置电压通常由一个二极管连接的管子产生,Vbias近似等于Vth+2Vov,会给共栅管M4留出多余的栅压裕量。当输出电压下降时,M4往往率先进入线性区,实际可用的Vmin会比理论极限大不少,在某些工艺角下甚至会接近Vov+ Vth。也就是说,标准cascode在电压余量上并没有做到极致。
大摆幅cascode(也叫低压cascode)的目标,就是把共栅管M4的栅极偏置精确设置在临界值:
Vb ≈ Vth4 + Vov2 + Vov4
这样M4刚好处于饱和区边缘,两个管子同时“贴地飞行”,Vmin可以被压到理论的2Vov。用Vth=0.5V、Vov=0.2V的参数算一下,传统结构可能需要留出0.9V以上的空间,低压cascode只要0.4V,在1.8V供电的场合这0.5V就是能不能做进去的区别。
3.3 低压cascode偏置电路的三种实现方案
关键问题是,这个临界偏置电压要跟着工艺角和温度走,不能用一个固定电压去打死。我常用的实现有三类。
第一种是二极管串联形成偏置。用两只二极管接法管子叠起来,产生约2Vth+2Vov的电压,再通过电平移位砍掉一个Vth。这方案结构简单,但消耗电压大,适合低压要求不极端的场景。
第二种是电阻分压。从某个稳定的偏置点上取电压,用电阻比例分出一个合适的Vb。面积小、设计快,但对工艺角敏感,需要在SS和FF corner下逐一确认M4没有退出饱和区或者过驱动过大。
第三种是用复制管动态跟踪。用与主电流镜同类型的管子和一个工作在线性区的管子组合,实时生成“刚好两个过驱动电压”的偏置点。这个方案面积最大,但能在PVT变化下自动补偿Vth和Vov的漂移,是性能最稳的。
实际项目里,如果对输出摆幅要求很高且工艺角范围宽,我会直接上复制管方案。如果只是给运放做一个尾电流源,电压余量没那么吃紧,电阻分压足够,省下来的面积留给其它电路。
3.4 Wilson电流镜:反馈式高阻抗结构的取舍
如果既想要高输出阻抗,又不想承担标准cascode那么复杂的偏置,Wilson电流镜是另一个选择。经典Wilson电流镜用三只管构成局部反馈:M1和M2形成基本镜像,M3串联在输入支路中,同时把输出节点的电压变化反馈回来,抑制输出电流随输出电压的波动。它的输出阻抗比基础电流镜高,Vmin约等于一个过驱动电压加一个阈值电压,比传统cascode实际需要的最低电压更低一些。
改进型Wilson电流镜在此基础上加第四只管,把串联管M3的漏源电压也锁定,输出阻抗进一步提高。它与低压cascode的输出阻抗量级大致相当,但反馈环路带来了更好的电源抑制特性,代价是环路稳定性需要关注。我在LDO内部电流源里用过Wilson,在DAC电流源阵列里更常用低压cascode。两个结构的选择关键看你要牺牲的是电压余量还是设计复杂度,没有绝对的好坏。
4. layout版图匹配:教科书不教的“最后一公里”
很多电路仿真做得完美,流片回来电流比例却乱套,问题几乎都出在版图。业内常说“电路设计决定性能上限,版图决定能不能达到上限”,电流镜就是这句话最好的注脚。版图引入的失配分两类:随机失配和系统性失配,处理手段完全不同。
4.1 随机失配与系统性失配的版图来源
随机失配源于掺杂原子涨落、多晶硅颗粒边界等微观物理效应,只能通过增大器件面积来摊平,这在Pelgrom模型部分已经讲过。系统性失配则源于版图周围的梯度效应,比如光刻边缘效应、机械应力、温度梯度、金属走线的IR drop,这类失配通过优化布局是可以大幅减小的。
系统性失配的经典例子:一个1:8的电流镜阵列,8个输出单元串在一条地线上,距离输入管最远的那个单元受地线压降影响最大,输出电流比近端单元小百分之几。这根本不用靠统计去猜,直接顺着版图的电流流向就能定位。所以我拿到一块版图,第一件事就是看关键镜像对的电源地线拓扑,而不是先看管子画得对不对称。
4.2 共质心布局与Dummy管落地指南
共质心布局的核心思想是让所有需要匹配的管子在版图空间上围绕同一个中心点对称分布,从而平均掉线性梯度和温度梯度的影响。以最基本的1:1镜像管为例,把两个管子分别拆成两根finger,采用ABBA交叉结构,两个管子各自占据阵列的对角位置。1:4这种非对称比例,则用五个相同unit cell组成阵列,把输入管放在中心,四个输出管放在对称位置,保证每个位置受到的梯度影响平均后一致。
Dummy管是共质心布局的必需品,不是可选件。刻蚀过程中边缘管子与内部管子的环境不同,会在栅氧边缘引入系统性偏差。解决办法是在敏感阵列四周加上不参与电流的dummy管,让所有真实管子的刻蚀环境完全一致。dummy管的D/S/G要接到固定电位,防止漏电和场开启,这个细节很多新手会漏,等流片回来看到边缘管电流异常才想起来。
4.3 金属走线寄生与IR Drop:最容易忽略的系统误差
另一个常被低估的坑是金属走线的寄生电阻。标准CMOS工艺的金属方块电阻大约几十毫欧姆,短距离看不出来,可一旦走线横跨几百微米,累积电阻就能到几十甚至上百欧姆。镜像电流1mA流过50Ω的地线寄生,会在两个管子的源端之间制造50mV的压差,这直接等效于几十毫伏的Vgs失配。别忘了我们前面算过,Vov=0.1V时几十毫伏的Vgs偏差对应的电流误差是以百分之几十计的。
所以电流镜的电源线和地线一定要按电流大小算宽度,不能“看着差不多就行”。输入管与输出管的走线拓扑要严格对称,最好让两路电流流经完全相同的金属层、通孔和拐角。敏感镜像区域周围不要有数字信号线横穿,避免开关噪声通过衬底和耦合电容串进来。
4.4 热梯度与应力:该远离的必须远离
热梯度是高压大电流芯片里最隐蔽的杀手。功率管开关时局部温度比周边高几十度,而Vth和迁移率都有明显的温度系数,位于热源两侧对称位置的两个镜像管会受到完全不同的温度影响。我见过一个电源管理芯片里的电流镜,离功率管近的那一侧电流比另一侧小了8%,整个系统精度指标被这一项拖垮。
处理办法是:第一,在版图上让需要匹配的管子远离功率管和ESD器件;第二,如果无法远离,就把热源放在匹配阵列的对称轴上,让梯度在两侧对称抵消;第三,在关键电流镜两侧加一条接地金属屏蔽环,阻断衬底热耦合和噪声耦合。应力也是一个道理,划片槽附近的应力梯度会在不同方向上引入几毫伏的阈值失配,所以不要把关键镜像管放在芯片边缘。
5. 从仿真相差到流片失效:常见问题的排查链路
最后这部分,我把这些年调试电流镜的排错经验整理成一套可以按顺序执行的排查链路。如果你手里的电流镜出了问题,按这个顺序查,能省掉大量冤枉路。
5.1 现象一:仿真电流与手算偏差大
一个项目里,我需要给VCO做20uA电流源,手算取了W/L=20u/0.5u,仿真出来只有12uA,第一反应是模型文件有问题。后来冷静下来,用扫描方式把Vgs从0扫到1V,画I-V曲线,发现曲线斜率已经明显偏离平方律,确认是短沟道速度饱和效应。换成更长的沟道后,手算和仿真就吻合得多了。
所以遇到手算和仿真对不上,先不要怀疑工具,也不要急着改电路。把器件模型换成level 1或者简单模型对比一下,如果简单模型能和手算吻合,说明是短沟道效应;如果简单模型也对不上,那才需要检查电路连接和器件类型是否选错。
5.2 现象二:输出电压变化时电流漂移严重
排查策略是先对输出端做DC扫描,把Vout从0扫到电源电压,观察Iout曲线。理想电流镜在饱和区应该接近水平。如果曲线有明显斜率,说明输出阻抗不够,优先加cascode或加大L。如果曲线呈阶梯状而非平滑,那就要检查版图寄生,可能是某段金属过窄导致压降,也可能是有源区漏电。
有一块测试芯片,电流随输出电压呈现周期性小台阶,最后定位到数字部分的反相器串扰:信号每翻转一次,衬底就抖一下,电流镜被衬底噪声调制。解决办法是把电流镜周围的衬底接触孔打密,并加了隔离环。噪声耦合这类问题在仿真阶段很难提前发现,只能靠版图经验和测试定位。
5.3 现象三:流片回来电流比例不对
晶圆测试阶段最容易暴露的是失配。如果只有一两颗芯片偏,大概率是测试接触问题;如果几十颗都呈现同一个方向的偏差,那就是系统性失配。这时候回到版图上查三条路:地线电源线的IR drop、接触孔和金属走线是否对称、dummy有没有补齐。如果偏差方向随机且分布很宽,则是随机失配问题,需要增大WL面积或改用共质心布局。
另外要注意,测试电流镜不要用长探针线直接压到pad上测,接触电阻对微安级电流来说是致命的。尽量在片内做电流复制,把镜像电流引到片外电阻上再测电压,这样能减少测试引入的系统误差。测试座的漏电流也是一个常见的“伪失配”来源,测小电流前先用空脚确认漏电底数。
5.4 自查清单
最后是我自己项目里一直在用的检查清单,每次做电流镜设计时逐条过一遍,能减少很大比例的返工:
- 所有镜像管是否都工作在饱和区,尤其是输出端电压摆到极限时
- 两个关键节点的Vds失配是否在预算内
- 沟道长度是否满足输出阻抗要求,而不是只满足电流大小
- 随机失配预算是否反推过WL面积
- 版图是否共质心布局,dummy是否补齐,dummy电位是否接对
- 电源线和地线宽度是否按电流算过,IR drop是否可控
- 关键镜像对是否远离热源和数字噪声源
- 温漂曲线是否主要来自参考源而不是镜像对
- corner扫描下偏置点是否全部正常
- 启动电路是否覆盖到所有可能的简并工作点
- 输出端接大电容时的环路稳定性是否验证过
- 测试方案是否避免了接触电阻和漏电流带来的伪失配
这12条看着基础,但每一条背后都有流片教训。做电流镜尤其要记住:这是一个“看起来简单、实际坑最多”的模块,越早把它当精密电路对待,后面流片和测试就越省心。