ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从共源放大器VTC曲线判定MOS管工作区:Virtuoso仿真实战

从共源放大器VTC曲线判定MOS管工作区:Virtuoso仿真实战 干模拟IC的人十有八九都对着Cadence Virtuoso跑过这样一条曲线一个CS放大器DC扫描输入电压得到一条中间陡、上下平的电压传输特性曲线。先别急着说“这就是放大嘛”我问你几个问题曲线从陡变平的那个转折点到底是输入管进了线性区还是负载管进了线性区那个点对应的Vout数值跟你手算的Vov对得上吗如果你卡壳了这篇就是写给你的。我用电流源负载的CS放大器当例子把电路结构、工作区判定公式、Virtuoso仿真设置、曲线判读方法、数值推导到问题排查完整走一遍。目标就一个让你拿到任何一条仿真曲线都能准确说出“此刻哪个管子在哪个工作区、为什么”而不是只会在报告上写一句“该曲线呈现典型放大特性”。1. 为什么选电流源负载结构与设计意图1.1 电阻负载CS放大器的两个先天短板先回顾最原始的共源放大器NMOS输入管M1漏极接一个电阻R_D到VDD输出从M1漏极取出。小信号增益公式是Av -g_m1 * (r_o1 ∥ R_D)看着简单但实际设计时会遇到两个绕不开的矛盾。第一个矛盾是增益和面积的拉扯。要想增益高R_D要大但IC里做高阻值的多晶硅电阻很占面积而且电阻的寄生电容也不小。第二个矛盾更致命R_D上要流过直流电流I_D输出静态点Vout VDD - I_D * R_D。如果R_D取太大Vout直接被拉到接近地管子早进线性区了还谈什么放大。这就导致电阻负载CS的增益往往被限制在十几倍左右再往上要付出巨大代价。所以工程师们很快就想到了用一个MOS管代替电阻来做负载。这就是电流源负载CS放大器的由来。你把负载管M2当成一个“有源电阻”它的直流压降由偏置决定小信号电阻却可以做得很大相当于把一个矛盾拆给了“直流路径”和“交流路径”分别解决。1.2 电流源负载的V-I特性与输出阻抗价值PMOS负载管M2的栅极接固定偏置Vb源极接VDD漏极接输出节点。从输出节点往上看M2的静态电流近似恒定这就是“电流源负载”名字的来历。它在小信号下的关键参数是输出电阻r_o2 1/(λ * I_D)。λ是沟长调制系数工艺越短λ越大r_o越小。但即便如此一个工作在饱和区的MOS管输出电阻通常也有几十千欧到几百千欧远大于同尺寸下做电阻负载能得到的阻值。此时增益变成Av -g_m1 * (r_o1 ∥ r_o2)所以电流源负载CS放大器能轻松做到几十倍增益核心就是它把一个高阻值的“动态电阻”塞进了漏极而不是靠静态压降堆出来的。但天下没有免费的午餐。电流源负载的代价是输出摆幅被两边管子的过驱动电压Vov卡住了。你后面会看到这条VTC曲线的两个平坦区恰恰就是两个管子被“压出”饱和区造成的。1.3 先建立全局观两个管子各自的角色再强调一点这个电路里一共有两个管子它们各自都有工作区变化很多人分析时只顾着看输入管M1把负载管M2当成恒流源就不管了这是会出事的。正常放大状态下两个管子必须同时工作在饱和区。M1的栅极接Vin它的Vgs随输入变化M2的栅极接固定Vb它的Vgs不变但它的Vds VDD - Vout随输出变化。所以当Vout被拉到很低时M2的|Vds|反而很大它更饱和而M1的Vds Vout变小容易进线性区。反过来当Vout被拉到接近VDD时M1的Vds很大很饱和但M2的|Vds|很小容易进线性区。这两个管子在输入扫描过程中会交替“掉线”VTC曲线的形状就是它们工作区状态的实时记录。要读懂曲线先得把这层关系焊死在脑子里。2. 工作区判定的物理底子别只背公式2.1 三个区的电压条件与电流方程MOS管的工作区判定就两个电压比较一个是过驱动电压Vov Vgs - Vth一个是漏源电压Vds。以NMOS为例截止区Vgs Vth电流几乎为0。线性区三极管区Vgs Vth 且 Vds Vov此时电流近似正比于Vds管子像一个小电阻。饱和区恒流区Vgs Vth 且 Vds ≥ Vov电流主要由Vgs决定对Vds不敏感呈高阻特性。PMOS同理只是电压方向相反要把Vgs、Vds、Vth全取绝对值来比较。很多人在这上面栽跟头一看到负电压就晕我建议你统一转成绝对值|Vgs| |Vth| 且 |Vds| |Vov| 就是线性区|Vds| ≥ |Vov| 就是饱和区这样不容易出乱子。电流方程上三个区差别很大。饱和区是平方律关系I_D (1/2)μC_ox(W/L)Vov²(1λVds)所以Vds变化对电流影响很小。线性区是I_D μC_ox(W/L)[Vov*Vds - (1/2)Vds²]此时Vds直接影响电流大小。而亚阈值区则是电流随Vgs指数增长这个区经常被忽略但对理解曲线上下两个“平段”很有帮助。2.2 VTC曲线上三个区的“长相”把DC扫描得到的VTC曲线分成几段看你会发现每段都对应一个明确的工作区组合。当Vin远低于VthM1截止没有电流流过两条管子Vout被M2拉向VDD。这时的Vout不是严格等于VDD而是微微低一点取决于M2的亚阈值漏电和M1的漏电但曲线上看就是一条接近VDD的平线。Vin继续升高超过VthM1导通两管都进入饱和区。此时任何一点点Vin的变化都会通过M1的跨导转换成电流变化再乘上两管并联的大输出电阻变成很大的Vout变化。VTC曲线的中段就是这两管都饱和的高增益区也叫做过渡区斜率最陡。Vin再升高Vout被拉低到接近M1的Vov时M1进入线性区增益骤降曲线变得平坦。此时M2因为VDS VDD - Vout很大还稳稳地饱和所以下半段变平的元凶是M1进线性。反过来在Vin很低的上半段M1截止M2的|Vds|VDD-Vout很小M2更可能先进入线性区这就是VTC曲线平坦区对应管子状态的基本对应关系。2.3 容易被忽略的亚阈值区现代短沟道工艺里亚阈值区一点也不“亚”。Vgs比Vth低几十毫伏时MOS管仍然有可观的泄漏电流而且这个电流和Vgs是指数关系不是线性关系。这对VTC曲线的影响非常现实。比如Vin低于Vth但还没低到0时M1并没有完全关断它和M2的亚阈值电流在做拉锯战所以VTC的“高电平平台”不是一条绝对水平的线而是随Vin升高缓慢下降。你如果仿真的步长够细能看到高电平段有轻微的负斜率这不是bug是亚阈值导通在起作用。所以你在做工作区判定时不能只看“Vgs是否大于Vth”还得结合电流大小。这就是为什么后面我要建议你把电流曲线和region参数一起拉出来看单靠一条VTC曲线分析状态很容易被亚阈值区的模糊边界带偏。3. Cadence Virtuoso实操搭出能说话的testbench3.1 原理图搭建与器件参数设置在Virtuoso Schematic Editor里新建一个cellview从PDK库调出NMOS和PMOS再从analogLib调出vdc电压源和gnd接地符号。这里我以常见的180nm工艺参数做演示不过思路对所有工艺通用。连接关系很简单M1源极接地栅极接输入电压源Vin漏极接输出节点Vout。M2源极接VDD栅极接偏置电压源Vb漏极也接Vout。注意两个管的体端Bulk接法NMOS的体接地PMOS的体接VDD别接反了否则衬偏效应会让仿真结果和手算对不上。器件参数方面给M1设一个明确的宽长比比如W5uL0.18uM2的宽长比需要根据目标电流和过驱动电压反推。我习惯先把所有管子的L统一设成工艺最小值的3到5倍降低沟长调制的影响然后再优化。VDD取1.8VVin扫描范围就设0到1.8VVb的值根据目标电流估算后设定。3.2 DC扫描与Parametric Analysis配置打开ADE L如果版本支持用ADE XL也可以但简单DC扫描用ADE L更方便。在Analyses里选择dcSweep Variable选Design Variable变量名填Vin起始值0停止值1.8步长建议1mV或更细。步长为什么不能太大因为工作区切换点往往发生在一个很小的电压范围内比如Vov可能只有0.2V如果你用10mV步长拐点位置的误差最高可能到10mV画出来的曲线会带有明显的折角。用1mV步长曲线更平滑求导之后更容易读出峰值增益的位置。如果要多角度观察用ADE L菜单里的Tools → Parametric Analysis把Vb设成扫描变量。可以扫0.8V到1.2Vstep 0.05V或0.1V。这样你能看到一组VTC曲线直观理解偏置电压怎么平移工作点。Parametric Analysis跑出来的只是一族曲线配合后面的region输出你还能看到M2进入线性区的边界怎么随Vb移动。3.3 关键输出变量电压、电流、region参数很多人仿真只plot一个v(/OUT)这样信息量太少了。我每次都会同时输出以下几类信号输出内容Virtuoso表达式示例作用输出电压v(/OUT)基础VTC曲线M1漏电流ids(M1)看电流随Vin的变化趋势M1工作区region(M1)直接给出管子状态编码M2工作区region(M2)直接给出管子状态编码电压传输曲线斜率deriv(v(/OUT))定位高增益区范围这里需要说明不同版本、不同PDK里region参数的表达式写法可能有差别有些需要在Results → Direct Plot → Main Form里通过勾选OP参数来输出用的时候先确认一下模型定义。不过绝大多数PDK都遵循同一套编号0表示截止1表示线性2表示饱和3表示亚阈值。我的习惯是先跑一次DC把VTC和两条region曲线叠在一张图里。这样一眼就能看出VTC的哪个线段对应哪个管子的哪个状态。region曲线是台阶状的正好和VTC曲线的转折点形成对应关系这是后续做工作区分析最重要的可视化手段。4. 从仿真曲线反推工作区三步定位法4.1 第一步从VTC斜率读出两个转折点拿到一条干净的VTC曲线后先用Calculator对v(/OUT)做deriv求导得到增益Av随Vin的变化曲线。这条曲线会呈现一个明显的“山包”山包的平台区域就是两管都饱和的高增益区山包两侧的缓坡就是有管子进入线性区或截止区的区域。我用实际例子说。按前面设的器件参数你会看到Av曲线在Vin大约0.5V到1.2V之间维持一个高平台峰值在45倍左右。平台左侧Vin低于约0.5V时M1还没完全导通增益快速下跌平台右侧Vin大于约1.2V后Vout已经被拉到接近0.2VM1进线性区增益也快速下跌。注意这里有个容易误判的点Av曲线的平台边界并不完全等于VTC曲线的转折点因为增益是斜率只要斜率开始变化Av就开始下降而VTC曲线的转折点要等到斜率明显变缓才看得出来。所以我建议判断工作区切换点时以Av曲线的边缘为参考再回到VTC上核对具体的Vout值不要直接拿肉眼去找VTC的拐角。4.2 第二步把电流与电压条件叠在同一张图里明确了转折点的大致位置后再叠加上M1的Ids曲线做交叉验证。在饱和区Ids近似正比于Vov²随Vin平稳上升一旦M1进入线性区Ids的增长变缓曲线头部会出现明显的“低头”趋势。更精确的操作是直接plot两条曲线一条是M1的Vds也就是v(/OUT)另一条是M1的过驱动电压Vov Vin - Vth。你可以用Calculator构造一个表达式vin - 0.5也可以直接plot M1的vdsat参数。当Vds曲线从高于Vov变成低于Vov的那一刻就是M1从饱和切到线性的分界。这个方法的妙处在于不用猜不是靠“看起来拐了”来判断而是直接对比两个电压的数值大小。同样的方法可以用来判断M2plot M2的|Vds| VDD - Vout与|Vov2| |Vgs2 - Vthp|两条曲线的交点就是M2从饱和进入线性区的切换点。VTC上半段的转折点十有八九就是M2的这两个电压相交的地方。4.3 第三步用region参数和OP点信息复核曲线判读可能存在偏差最后一步用Virtuoso的OP点信息来确认。在仿真结束后Results → Annotate → DC Operating Points然后在原理图上点M1和M2会弹出工作点参数里面有一项region直接告诉你当前直流工作点下管子处于哪个区。更系统的方法是直接plot region(M1)和region(M2)这两条曲线会画出随Vin变化的台阶。以M1为例Vin小于Vth时region等于0进入饱和后跳到2Vin再升高进入线性后变成1。你会看到M1的region变化和M2的region变化刚好“互补”——一个从饱和掉到线性时另一个往往还在饱和区待着这就是前面说的角色交替。我特别想强调region曲线是每一步仿真里真正的“实锤”数据它比你自己从VTC上猜要可靠得多。如果VTC曲线判读和region曲线对不上优先信region然后回头检查是不是Vin扫描范围或者Vb设置出了问题。4.4 补充用gm/id辅助判断深入程度再补充一个进阶工具gm/id方法。这个参数本身不是直接的工作区标识但它能告诉你管子工作在强反型还是弱反型弥补“饱和区内部”的信息盲区。在Virtuoso里gm/id就是跨导除以漏电流。强反型饱和区时gm/id约等于2/VovVov越小则gm/id越大当gm/id超过20左右管子通常已经进入弱反型或亚阈值区了。所以你在region曲线中看到管子label为2饱和时还可以通过gm/id判断它是深饱和还是浅饱和这对设计低功耗电路特别重要。实际计算时直接在OP点信息里读gm和id手工算一下gm/id就行。如果连这个数值都懒得手算也可以把gm(M1)和ids(M1)都加到输出里用Calculator做除法plot出来。5. 设计落点与裕量推演一个完整数值实例5.1 目标工作区组合与增益/摆幅计算做设计时不能光顾着“能放大”还得明确静态工作点落在哪个状态组合。对电流源负载CS放大器正常的放大状态必须是M1和M2同时饱和。这时增益公式是Av -g_m1 * (r_o1 ∥ r_o2)输出摆幅的下限是M1刚进线性的临界点约等于Vov1上限是M2刚进线性的临界点约等于VDD - |Vov2|。所以两个Vov直接决定了线性范围设计时Vov不能设太大否则摆幅被压缩但也不能设太小否则管子进入弱反型gm下降增益和速度都会受影响。我设计时会先定电流和后定宽长比逻辑是这样的电流源负载决定了整个电路的直流电流I然后根据目标Vov反推两管的W/L。这个顺序比先定W/L再算I要直观得多因为I是电路里最容易被“看见”的约束。5.2 数值计算流程假设VDD1.8V目标电流I100uAM1的Vov10.2VM2的|Vov2|0.2V。工艺参数取μnCox200uA/V²μpCox80uA/V²Vthn0.5V|Vthp|0.5V。先算M1的宽长比(W/L)_1 2I / (μnCox * Vov1²) 2 * 100 / (200 * 0.04) 25M2的宽长比(W/L)_2 2I / (μpCox * |Vov2|²) 2 * 100 / (80 * 0.04) 62.5再看小信号参数。gm1 2I/Vov1 2 * 100u / 0.2 1mS。假设λn0.1/Vλp0.12/V则ro1 1/(λn * I) 100kΩro2 1/(λp * I) 83kΩ。两管并联电阻约45.5kΩ所以增益Av ≈ -1mS * 45.5kΩ -45.5倍约33dB。输出摆幅的下限约等于Vov10.2V上限约等于VDD - |Vov2| 1.6V。静态工作点取0.9V位于摆幅中间距离上下边界各0.7V裕量充足。如果Vb的设置让静态点偏离这个区间VTC的对称性就会被破坏。5.3 把静态工作点映射回Vb现在的问题变成要给M2的栅极加多少Vb才能让静态电流恰好是100uA。这需要根据PMOS的饱和电流公式反推|Vgs2| |Vthp| |Vov2| 0.5 0.2 0.7V所以Vb VDD - |Vgs2| 1.8 - 0.7 1.1V。如果你在Virtuoso里给Vb设成1.1V再跑DC扫描静态点处测到的M2电流会非常接近100uA实际因沟长调制会略高一点。若想把静态Vout精确调整到0.9V可以微调Vb或调M2的W/L。这里也解释了一个常见现象为什么Vb增大或减小会让VTC曲线整体上下移动。Vb减小PMOS的|Vgs|增大电流增大Vout被拉低曲线整体下移Vb增大PMOS电流减小Vout抬高曲线整体上移。你用Parametric Analysis扫一下Vb看到的就是这种移动。5.4 偏置或负载变化时工作区如何迁移如果Vb偏离设计值太远静态工作点就会离开“两管都饱和”的窗口。比如Vb设成0.8VPMOS电流远大于M1设计电流静态Vout会被压到接近地此时M1可能已经在线性区增益大幅下降。反之Vb设成1.3VPMOS电流很小静态Vout被拉到接近VDDM2可能已经进线性区。同样如果M1的宽长比取得过大或过小Vov1会跟着变转折点位置也会偏移。我建议你在做Parametric Analysis时把Vb和W/L都扫一遍然后用region曲线检查每种组合下两个管子的状态窗口这样可以快速找到“窗口最大”的设计点。别看这个过程简单实际项目中很多良率问题都是因为工作区窗口太窄工艺一波动就退出饱和区。6. 常见问题与排查实录6.1 曲线转折点不明显怎么判断切换位置有时候VTC曲线看起来没有明显的“折角”整个过渡区很平滑这不是电路坏了多半是增益不够高导致高增益区和线性区的过渡被拉长。常见原因是M1的gm偏小或者λ太大导致ro太小。处理办法是先看增益数量级。如果Av只有几倍说明两管并联电阻不够大优先检查M1的W/L是否太小、电流是否太小。我在实践中发现很多新手为了省功耗把电流压到几十微安以下结果ro虽然大了但gm下降得更快增益反而上不去。这时最好的做法是用gm/id曲线找最优偏置点而不是盲目加大W/L。还有一种情况是扫描范围根本没覆盖到两个平坦区。比如Vin只扫了0.3V到0.7V那你看到的自然就只有中间一小段陡峭曲线没有完整的“S形”这时候把扫描范围扩展到0到VDD即可。6.2 region参数显示的数字看不懂不同PDK对region的编码约定略有差异但最常见的是0截止1线性2饱和3亚阈值。如果你没注意看模型文档直接把数字当成“1就是饱和”那是会看反的。我建议在第一次用某个PDK时先做一个最最简单的仿真单独给一个NMOS接成二极管形式栅漏短接肯定工作在饱和区看OP点region显示几。这个实验一分钟就能做完却能让你建立“这个工艺库的region编码到底怎么定义”的参照系。另外region参数的取值是逐点计算出来的如果你用的扫描步长太粗可能刚好跨过切换点导致某个状态被完全跳过曲线看起来像“跳变”而不是“渐变”。把步长改细到1mV后台阶位置会稳定下来。6.3 高电平平台不是平的而是缓慢下降这个现象前面提过通常是亚阈值电流在起作用。Vin升高到接近Vth但未超过时M1已经开始导通微弱电流这些电流需要M2提供而M2在高电平处|Vds|很小接近线性区边缘无法完全恒流于是Vout随Vin缓慢下降。如果你希望高电平平台更平可以减小两个管子的泄漏比如加大L或者让Vth更高一些。但在实际电路里这个“缓慢下降”未必是坏事因为亚阈值区的微弱导通恰恰决定了逻辑门在关断状态下的漏电和噪声容限。仿真时不要觉得它是错误学会识别它就好。6.4 仿真不收敛或曲线震荡DC扫描不收敛首先查电路里有没有悬空节点。最典型的错误是M2的栅极只接了vdc但vdc的DC值没填或者填了个完全离谱的电压导致M2始终截止输出节点相当于浮空。检查方法很简单DC operating point把每个节点的电压print出来看到某个节点电压被推到VDD或GND基本就是偏置不对。还有一种情况是扫描中出现剧烈的增益峰值曲线像振荡一样毛刺很多。这通常是两个管子同时工作在极高增益区数值误差被放大不是电路真的振荡。把扫描步长从1mV改成0.5mV或0.2mV毛刺会减少如果还有检查输入电压源有没有设定串联电阻加入一个很小的串联电阻往往能改善收敛性。6.5 常见现象速查表现象可能原因处理方式VTC高电平接近VDD但带下坡M1亚阈值导通减小扫描范围到高亮区观察VTC低电平压不下去M1线性区电阻不够小或M2电流太大增大M1宽长比或减小偏置电流增益峰值远小于手算M1或M2某端未饱和检查region曲线确认状态VTC整体上移M2偏置电流偏小减小Vb增大PMOS电流VTC整体下移M2偏置电流偏大增大Vb减小PMOS电流region曲线全是0管子没导通或模型region编码不同检查偏置和模型文档高增益区宽度为0M1的Vov设计过大增大W/L减小Vov1结尾用曲线训练电路直觉我自己用这套方法是这么操作的拿到一个新工艺PDK第一件事不是去搭复杂的运放而是先搭一个最小CS单元跑一条VTC把VTC、Ids、region三条线叠在一起看。这个“三线合一”的看图习惯让我避开了很多纸上谈兵的设计失误。尤其是region那条台阶曲线几秒钟就能告诉你整个输入范围内每个管子的实时状态比对着几十行OP点数据猜来猜去直观太多了。最后再分享一个小技巧不要只满足于“看出”工作区切换点你可以主动把设计参数改成极端值比如把负载管宽长比调大一倍再跑一次看VTC曲线怎么变。多做几次这样的“破坏性实验”你对工作区迁移规律的把握会比看十篇理论文章都扎实。等你哪一天看到一条VTC曲线不需要打开region曲线也能准确说出每个管子的状态窗口你就算真正入门了。
返回列表