1. 从一颗MOS管开始:为什么OTA值得你花时间啃下来
模拟电路里有一类电路,你平时可能不太注意它,但一旦缺了它,整个信号链就瘫了——运算跨导放大器(OTA,Operational Transconductance Amplifier)就是这样的角色。它跟咱们熟悉的运放(Op-Amp)是近亲,但输出的是电流而不是电压,增益用跨导gm来衡量,单位是A/V或者S(西门子)。这个区别听起来很小,实际用起来差别巨大:OTA天然适合驱动容性负载、功耗可以压得很低、在开关电容电路和连续时间滤波器里几乎是标配。
我带过几个刚入行的朋友做模拟设计,发现一个普遍现象:很多人能画CMOS反相器、能搭三极管开关电路、能照着教程跑一个两级运放的AC仿真,但一旦让他们从零设计一个OTA,就卡住了。卡在哪?不是不会用仿真工具,而是脑子里没有一条清晰的路径——从最底层的MOS开关行为,到差分对的小信号建模,再到偏置电路、共模反馈、版图匹配,每一步之间的逻辑链条断了。
这篇内容就是来补这条链的。我会从CMOS开关电路讲起,因为开关是理解MOS管工作区间最直观的入口;然后一步步推到差分放大器、电流镜负载、共源共栅结构,最后拼出一个完整的、可以跑仿真的OTA。过程中我会解释每个设计决策背后的“为什么”,分享我在实际项目中踩过的坑,以及那些教科书上不会写但流片时能救命的细节。不管你是微电子专业的学生、刚转模拟方向的工程师,还是想复习基础的老手,这篇都能让你拿到一条可复现的设计路径。
2. CMOS开关电路:理解MOS管三个工作区的活教材
2.1 一个NMOS开关的完整状态分析
先看最简单的NMOS开关。源极接地,漏极接负载电容,栅极加控制信号。当栅压Vg远大于阈值电压Vth时,沟道形成,MOS管导通,漏极电压被拉到接近0V;当Vg低于Vth时,沟道消失,漏极通过负载电阻或电容保持在高电平。这个行为看起来简单,但里面藏着三个工作区的完整切换过程。
截止区:Vgs < Vth,沟道没形成,只有亚阈值漏电流,通常在nA级别。线性区:Vgs > Vth且Vds < Vgs - Vth,沟道像一个压控电阻,Ron = 1/(μnCox(W/L)(Vgs-Vth))。饱和区:Vgs > Vth且Vds > Vgs - Vth,沟道在漏端夹断,电流基本由Vgs决定,Id = 0.5μnCox(W/L)(Vgs-Vth)^2(1+λVds)。
做开关设计时,你希望MOS管在线性区工作,因为此时Ron最小、压降最低。但实际电路中,开关关断时漏极电压可能被拉到很高,如果Vds超过击穿电压,器件就废了。所以选开关管时,击穿电压BVdss必须留够余量,一般至少是最大漏源电压的1.5倍。
2.2 PMOS开关为什么经常和NMOS配对出现
PMOS开关的导通条件是Vgs < Vth(Vth为负),也就是说栅极电压要比源极低。当PMOS源极接高电平、漏极接负载时,栅极拉低导通,拉高关断。单独用PMOS做高边开关有个问题:当漏极电压接近源极电压时,Vgs接近0,管子进入亚阈值区,Ron急剧上升。
这就是为什么传输门(Transmission Gate)要把NMOS和PMOS并联。NMOS擅长传低电平,PMOS擅长传高电平,两者互补,整个输入范围内的Ron都比较平坦。我实测过一个0.18μm工艺下的传输门,W/L分别取10μm/0.18μm,在1.8V电源下,Ron在整个0到1.8V范围内波动不超过15%。如果只用单个NMOS,在输入接近1.8V时Ron会翻好几倍。
注意:做开关电路仿真时,一定要跑DC扫描看Ron vs Vin曲线,而不是只看一个点的Ron值。很多新手只仿一个输入电平,结果流片后发现高电平传不过去。
2.3 从开关到放大器的思维跳跃
开关电路和放大器之间隔着一道认知门槛:开关关心的是导通和关断两个状态,放大器关心的是在饱和区里对微小信号的线性放大。但两者的底层物理是同一个——都是通过栅极电压控制沟道电荷,进而控制漏极电流。
理解这个连续性的关键在于:把MOS管看成一个压控电流源。在饱和区,Id对Vgs的导数就是跨导gm = μnCox(W/L)(Vgs-Vth) = 2Id/(Vgs-Vth)。这个gm就是OTA的核心参数。你设计OTA时做的所有事情——选W/L、定偏置电流、加共源共栅——本质上都是在调gm、调输出阻抗、调带宽。
我习惯在教新人时让他们先做一个简单的共源放大器:NMOS源极接地,漏极通过电阻Rd接VDD,栅极加偏置。输入小信号从栅极进,输出从漏极出。这个电路的增益是-gm×Rd。然后问他们:如果我把Rd换成一个电流源,增益会变成什么?答案是-gm×ro,因为电流源的输出阻抗是ro。这就是从共源放大器到OTA的第一步跳跃。
3. 差分对与电流镜:OTA的两块基石
3.1 为什么差分结构是OTA的默认选择
单端共源放大器有个致命问题:它对电源噪声和共模干扰毫无抵抗力。电源上任何一个纹波都会直接耦合到输出。差分结构通过两个完全对称的支路,让共模干扰在输出端相互抵消。这是OTA几乎全部采用差分输入的根本原因。
基本差分对由两个匹配的NMOS管M1、M2组成,源极相连并接一个尾电流源Iss。当Vin+和Vin-相等时,Iss平均分配,Id1 = Id2 = Iss/2。当有差模输入Vid时,Id1 = Iss/2 + gm×Vid/2,Id2 = Iss/2 - gm×Vid/2。差模电流ΔId = gm×Vid。
这里有个设计要点:尾电流源Iss不能太小,否则差分对的线性输入范围会变窄。线性范围大约为±√(2Iss/(μnCox(W/L)))。如果你需要处理较大的输入信号,要么增大Iss,要么增大W/L。但增大Iss意味着功耗上升,增大W/L意味着寄生电容变大、速度下降。这就是模拟设计里典型的折中。
3.2 电流镜负载如何把差分电流转成单端电压
差分对的输出是两条支路上的电流,但大多数应用需要单端输出。电流镜负载就是干这个的。把M3、M4做成PMOS电流镜,M3的漏极和栅极短接(二极管连接),M4的栅极接M3的栅极。M1的漏极电流流过M3,被镜像到M4,而M4的漏极接M2的漏极。这样,M2的电流和M4镜像过来的电流在输出节点相减,差值就是gm×Vid。
这个结构的输出阻抗是ro2 || ro4,增益为gm1×(ro2 || ro4)。在0.18μm工艺下,如果Iss = 100μA,gm1大约在1mS量级,ro大约在几十kΩ量级,单级增益大概在20到40倍(26到32dB)。这个增益对于很多应用来说不够,所以需要第二级或者共源共栅结构。
3.3 电流镜匹配:版图阶段才暴露的坑
电流镜的精度直接决定OTA的失调电压。理论上M3和M4完全匹配,但实际流片时,工艺梯度、应力、边缘效应都会导致失配。我在一个项目里遇到过电流镜失配导致输入失调电压达到15mV的情况,远超规格要求的5mV。
解决办法有几个层面。电路层面:增大M3、M4的沟道面积(W×L),失配与面积成反比。版图层面:采用共质心(Common Centroid)布局,把M3和M4拆成多个指条交叉排列。比如M3拆成A1、A2,M4拆成B1、B2,按A1-B1-B2-A2排列。这样任何线性梯度的影响都会在平均后抵消。
提示:做电流镜时,在M3和M4的源极各串一个小电阻(几十欧姆),可以改善匹配。这个技巧在低压工艺里特别有用,因为电阻的匹配精度通常比MOS管好。
还有一个容易被忽略的点:电流镜的栅极走线要尽量短且等长。如果M3和M4的栅极走线长度差很多,走线电阻会导致有效Vgs不同,引入额外失配。我在一次流片复盘中发现,仅仅因为栅极走线差了20μm,就贡献了2mV的失调。
4. 从单级到完整OTA:增益、带宽与相位的三角博弈
4.1 套筒式共源共栅:用堆叠换增益
单级差分放大器的增益不够,最直接的思路是提高输出阻抗。共源共栅(Cascode)结构通过在输出端堆叠一个MOS管,把输出阻抗从ro提高到gm×ro×ro。套筒式(Telescopic)共源共栅就是把差分对、共源共栅管、电流镜全部堆在一起,形成一条从VDD到GND的“套筒”。
套筒式OTA的增益可以做到60dB以上,带宽也不错,但代价是输出摆幅受限。因为输出端堆了至少三个管子(尾电流源、输入管、共源共栅管),每个管子需要一定的Vdsat才能工作在饱和区,留给输出的摆幅可能只有VDD减去三到四个Vdsat。在1.8V电源下,输出摆幅可能只有0.8V左右。
我一般会先算摆幅预算:VDD - Vdsat_tail - Vdsat_input - Vdsat_cascode - Vdsat_load。如果这个值小于应用需要的输出摆幅,套筒式就不能用,得换折叠式(Folded Cascode)。
4.2 折叠式共源共栅:用电流换摆幅
折叠式共源共栅的核心思想是把输入管的电流“折叠”到另一条支路上,这样输出端的堆叠管子少一个,摆幅可以多出至少一个Vdsat。代价是功耗增加,因为折叠支路需要额外的电流,而且噪声也会变大。
具体来说,输入差分对的电流Iss被分成两路:一路直接流向输出端的共源共栅管,另一路通过折叠节点流向另一组共源共栅管。折叠节点的寄生电容是限制带宽的主要因素。设计时要仔细权衡Iss的分配比例,一般让输入管电流占总电流的60%到70%,剩下的给折叠支路。
折叠式OTA的增益和套筒式差不多,但摆幅更好,适合低电源电压应用。缺点是噪声系数比套筒式差3dB左右,因为折叠支路引入了额外的噪声源。
4.3 两级OTA:增益和摆幅都要
如果套筒式和折叠式都满足不了增益要求(比如需要80dB以上),那就得上两级。第一级用套筒式或折叠式提供高增益,第二级用共源放大器提供大摆幅。两级之间需要频率补偿,否则闭环时会振荡。
最常用的补偿方式是米勒补偿(Miller Compensation):在第一级输出和第二级输出之间跨接一个电容Cc。这个电容利用米勒效应,在第一级输出端等效为Cc×(1+A2)的电容,把主极点推向低频,同时让次极点往高频移动,实现极点分裂。
米勒补偿会引入一个右半平面零点,位置在gm2/Cc。这个零点会恶化相位裕度。解决办法是串一个调零电阻Rz,让零点移到左半平面或者无穷远。Rz的取值一般是1/gm2。我实测过,不加Rz时相位裕度只有35度,加了之后能到65度以上。
注意:调零电阻不能用理想电阻,得用工作在线性区的MOS管实现。这个MOS管的栅极偏置要仔细设计,确保在所有工艺角下都能提供合适的电阻值。
5. 偏置电路:OTA的“心脏起搏器”
5.1 为什么不能用理想电流源做偏置
仿真时用理想电流源当然方便,但实际芯片上你得自己产生偏置电流。最常用的结构是β乘法器(Beta Multiplier)或者恒跨导偏置(Constant-gm Bias)。β乘法器利用两个不同W/L的MOS管和一個电阻,产生一个与电源电压无关的电流。
具体电路:M1二极管连接,M2的栅极接M1的栅极但W/L是M1的K倍,M2的源极通过电阻R接地。由于M1和M2的Vgs相同但电流不同,电阻R上的压降就是ΔVgs。这个ΔVgs等于√(2Id/(μnCox(W/L)))×(1-1/√K)。解出Id后可以发现,Id与电源电压无关,只与R和器件参数有关。
这个结构的启动是个问题。因为Id=0也是一个简并解,电路可能停在零电流状态。所以需要加启动电路:一个弱上拉的PMOS或者一个电容耦合的脉冲,在电源上电时注入初始电流,把电路推离零态。
5.2 偏置电流的分配与走线
一个完整的OTA里,偏置电流要分配给差分对、共源共栅管、输出级、共模反馈电路。分配比例直接影响噪声、带宽和功耗。我的经验是:输入差分对分到的电流最多,因为gm与Id成正比,输入管的gm决定了整个OTA的增益和噪声。一般输入对占40%到50%,共源共栅管占20%到30%,输出级占20%左右。
偏置走线要用宽金属,减少IR drop。如果偏置电流是10μA,走线电阻是100Ω,压降就是1mV。这个压降会导致不同位置的管子Vgs不同,引入系统性失配。我一般会把偏置走线画成树状结构,从偏置产生电路出发,等长分支到各个子电路。
5.3 共模反馈:全差分OTA的必备模块
全差分OTA的输出共模电压是不确定的,因为差分路径对共模信号没有反馈。如果不加共模反馈(CMFB),输出共模可能漂到VDD或者GND,导致管子退出饱和区。
共模反馈的基本原理是:检测输出共模电压,与参考共模电压比较,把误差放大后反馈到尾电流源或者负载电流源的栅极,调节电流使输出共模稳定在目标值。
检测共模电压的方法有两种:电阻分压和电容分压。电阻分压简单但会降低输出阻抗,电容分压不降低阻抗但需要周期性刷新。我一般用电阻分压,因为OTA通常不需要太高的输出阻抗精度。分压电阻的取值要远大于OTA的输出阻抗,否则会显著降低增益。比如输出阻抗是100kΩ,分压电阻至少取1MΩ以上。
共模反馈环路的稳定性也要注意。CMFB环路的带宽不能太高,否则会和差模环路耦合产生振荡。一般让CMFB环路的单位增益带宽是差模环路的1/3到1/2。
6. 仿真验证:从DC到AC再到瞬态的完整检查清单
6.1 DC仿真:工作点对不对
第一步永远是DC工作点仿真。检查每个管子的Vds、Vgs、Vth、Vdsat,确保所有管子都在饱和区。饱和区的判据是Vds > Vdsat,且Vgs > Vth(NMOS)或Vgs < Vth(PMOS)。
我习惯把每个管子的region信息打印出来,用仿真器的annotate功能直接在原理图上标注。如果发现某个管子在线性区,先检查偏置电压对不对,再检查W/L是否合理。常见问题是共源共栅管的栅极偏置不够,导致它进入线性区。
还要检查DC增益。用DC扫描输入差模电压,看输出变化。增益就是输出斜率。如果增益远低于预期,多半是某个管子不在饱和区,或者输出阻抗被意外降低了。
6.2 AC仿真:增益、带宽、相位裕度
AC仿真看三个东西:低频增益、单位增益带宽(UGB)、相位裕度(PM)。低频增益决定了精度,UGB决定了速度,PM决定了稳定性。
对于两级OTA,PM至少要60度,最好65度以上。如果PM不够,先检查米勒补偿电容和调零电阻。增大Cc可以改善PM但会降低UGB,减小Rz会让零点往高频移动但可能不够左。
我一般会跑一个参数扫描:Cc从0.5pF扫到3pF,Rz从0扫到2/gm2,看PM和UGB的trade-off曲线。找到PM刚好65度、UGB最大的那个点。
提示:AC仿真时要在输出端加一个负载电容CL,模拟实际应用中的负载。CL的大小直接影响次极点位置。如果忽略CL,仿真结果会过于乐观。
6.3 瞬态仿真:建立时间和压摆率
瞬态仿真看阶跃响应。给一个小的输入阶跃(比如10mV),看输出建立到0.1%精度需要多长时间。这个时间由线性建立时间决定,与UGB和PM有关。
再给一个大阶跃(比如500mV),看压摆率(Slew Rate)。压摆率由尾电流Iss和补偿电容Cc决定:SR = Iss/Cc。如果压摆率不够,要么增大Iss,要么减小Cc。但增大Iss会增加功耗,减小Cc会降低PM。
我遇到过一个问题:小信号建立时间达标,但大信号建立时间超标。原因是压摆率不够,输出在达到最终值之前先以SR线性上升,然后再进入线性建立阶段。解决办法是加一个动态偏置电路,在大信号时临时增大Iss。
6.4 工艺角与温度仿真:别只跑TT
只跑典型工艺角(TT)是不够的。必须跑SS(慢NMOS慢PMOS)、FF(快NMOS快PMOS)、SF、FS,以及温度从-40°C到125°C。SS角下增益可能下降、UGB可能降低;FF角下PM可能变差。
我一般会跑一个PVT矩阵:5个工艺角×3个温度×3个电源电压,共45个仿真点。用仿真器的corners工具自动跑,然后看最差情况是否满足规格。如果SS角下增益不够,可以适当增大W/L或者增大Iss。如果FF角下PM不够,可以增大Cc。
7. 版图阶段:那些仿真发现不了的坑
7.1 匹配与对称性:差分对的版图艺术
差分对的版图必须对称。M1和M2要拆成相同的指条数,交叉排列。比如M1拆成A1、A2,M2拆成B1、B2,按A1-B1-B2-A2排列。这样任何线性梯度的影响都会在平均后抵消。
输入管的走线要等长。如果M1的栅极走线比M2长10μm,走线电阻和电容的差异会导致失配。我一般会用蛇形走线来匹配长度,但蛇形走线会增加寄生电容,所以要权衡。
源极的共用节点要用宽金属,减少IR drop。如果源极走线电阻太大,两个输入管的Vgs会不同,引入失调。
7.2 寄生电容与电阻:提取后的后仿真
原理图仿真用的是理想器件,没有寄生参数。版图画完后要提取寄生参数(PEX),跑后仿真。后仿真里会看到UGB下降、PM变差,因为寄生电容增加了。
我遇到过后仿真UGB从100MHz掉到60MHz的情况,原因是输出节点的金属走线太长,寄生电容达到200fF。解决办法是缩短输出走线,或者增大驱动能力。
寄生电阻也会影响性能。电源和地的走线电阻会导致IR drop,降低有效VDD。我一般会把电源和地走线画得很宽,至少是信号线的3到5倍。
7.3 噪声与串扰:敏感节点的保护
OTA的输入节点是高阻节点,容易受到噪声耦合。输入走线要尽量短,远离时钟线和数字信号线。如果必须交叉,用垂直交叉而不是平行走线。
电源和地要加去耦电容。我一般会在OTA的电源和地之间加一个几pF的MOS电容,滤掉高频噪声。但要注意MOS电容的栅极要接电源,源漏短接接地,否则会引入非线性。
衬底噪声也是一个问题。在混合信号芯片里,数字电路的衬底噪声会通过衬底耦合到OTA。解决办法是在OTA周围加保护环(Guard Ring),把衬底噪声引导到地。
8. 实测调试:流片回来之后做什么
8.1 上电第一件事:测静态工作点
芯片回来之后,先别急着加信号。上电,测每个管子的静态电压。用万用表或者示波器测关键节点的DC电压,和仿真值对比。如果偏差超过10%,说明有问题。
常见问题:偏置电流不对。可能是β乘法器的启动电路没工作,或者电阻值偏差太大。我遇到过一次,偏置电流只有设计值的1/3,原因是启动电路的上拉PMOS太弱,电路停在了一个中间态。
8.2 增益和带宽的实测方法
测增益可以用网络分析仪或者频谱分析仪。给一个小的正弦输入,扫频率,看输出幅度。低频时的输出/输入就是增益。增益下降3dB的频率就是带宽。
如果没有网络分析仪,可以用示波器测阶跃响应,然后估算带宽。上升时间tr和带宽BW的关系是BW ≈ 0.35/tr。这个方法精度不高,但够用。
8.3 失调电压的测量与修调
失调电压的测量方法是:把输入短接,测输出电压,然后除以增益。如果失调太大,可以用修调电路。修调的方法有几种:调整电流镜的W/L、调整输入管的负载、或者用数字电位器调整偏置。
我一般会在设计时预留修调端口,用熔丝或者EEPROM存储修调值。修调范围一般是±20mV,步进1mV左右。
9. 一些零散但重要的经验
做OTA设计这些年,有些经验是教科书上不会写的,但实际项目中能救命。
第一,仿真收敛问题。OTA电路里有很多高阻节点,仿真器可能不收敛。解决办法是在高阻节点加一个很大的电阻(比如1GΩ)到地,或者用仿真器的.nodeset语句给一个初始电压。
第二,模型文件的选择。不同工艺角的模型文件不一样,别用错了。我见过有人用TT的模型跑SS的仿真,结果完全不对。模型文件里还有温度参数,跑温度仿真时要确认模型支持的温度范围。
第三,单位问题。仿真器里默认单位是米,但画原理图时用的是微米。W/L填10u/0.18u,仿真器会自动转成10e-6/0.18e-6。但如果填10/0.18,仿真器会认为是10米/0.18米,结果完全不对。这个坑我踩过不止一次。
第四,保存仿真状态。跑长仿真时,保存状态文件,下次可以从断点继续。不然每次都要从头跑,浪费时间。
第五,版本管理。原理图和版图都要用版本管理工具,比如Git。我见过有人改了原理图没保存,结果版图和原理图不一致,流片回来才发现。
第六,和工艺厂沟通。遇到模型不准或者工艺偏差大的情况,直接找工艺厂要数据。别自己瞎猜。我遇到过一次,SS角的模型和实际芯片偏差很大,后来工艺厂给了修正模型,问题才解决。
最后说一个心态问题。OTA设计是迭代的过程,第一版流片一次成功的概率很低。我做了这么多年,一次成功的也就两三次。大部分情况是第二版或者第三版才达标。所以别怕失败,每次流片都是学习的机会。把每次的问题记录下来,下次设计时避开,这就是经验积累的过程。