
做模拟IC设计这几年我见过太多人用“先凭经验定过驱动电压再反复凑尺寸”的方式来设计运放。gm/id设计方法不同它把管子尺寸与功耗、速度、增益、噪声这些指标直接建立联系设计一开始就能算出W/L而不是靠仿真一轮轮试。这篇文章写的就是我用gm/id方法设计一款折叠式共源共栅放大器的全过程从指标分解到逐管定尺寸再到仿真验证所有参数选择都会讲清楚依据。如果你是刚接触模拟IC设计的研究生或者工作中想换一套更高效的设计流程这篇应该对你有用。1. 为什么我改用gm/id方法设计运放1.1 传统手工计算为什么越来越不好用刚学模拟IC那会儿学校的教材里全是平方律模型gm 2·ID / Vov输出电阻就是 rds 1 / (λ·ID)带宽估算就用 gm / (2π·CL)。说实话在0.5μm以上工艺、沟长很长的时候这套公式还挺能打误差不至于离谱。可到了0.18μm以下短沟道效应全面上来了载流子速度饱和、阈值电压随沟长和漏源电压变化、沟道长度调制不再是一个简单的λ能描述干净。你再拿平方律公式去算gm算出来可能跟仿真结果差30%以上甚至翻倍。这种误差在低频场合还能忍一旦做高速、低功耗、高增益的设计浪费的就是版图面积和功耗裕量。还有一个更实际的问题传统方法里Vov这个量很飘。你定了一个Vov 200mV可不同工艺、不同沟长、不同温度下同样Vov对应的反型程度完全不一样。老师傅可以靠经验修正新手就只能一遍遍改W/L、跑仿真、再看结果效率很低。真正让我下决心换方法的是一次GHz级TIA的设计经历。当时用平方律手推了一个输入管尺寸仿真一看增益和带宽全部偏了调了三天没调明白。后来借了师兄的gm/id查找表十分钟查出合理尺寸半小时把核心指标拉回规格。那种“原来可以这样设计”的冲击感直到现在都记得。1.2 gm/id的物理含义一个比值看清管子状态gm/id的字面意思是跨导除以漏极电流单位是S/A也就是每安培电流能换多少跨导。你把它理解成“电流转换成放大能力的效率”就行。同样的漏电流下gm/id越大管子给的跨导越大也就是更省电地实现带宽和增益。在长沟道平方律模型里gm 2ID/Vov所以gm/id 2/Vov。一个250mV过驱动电压对应的gm/id就是8一个100mV过驱动对应的是20。但到了短沟道工艺这个简单关系不再成立gm/id开始跟反型程度、沟长、漏源电压都有关系。好在它仍然是一个非常直观的“区域指示器”gm/id在20以上时管子明显工作在弱反型区也就是亚阈值区gm/id在10到20之间是中等反型区gm/id低于10就是强反型区过驱动电压越来越大。这个比值为什么比Vov好用因为它是从真实器件特性里直接测出来的不是用模型近似推出来的。你不需要知道“这个工艺下Vov到底是多少才对应中等反型”只需要查表看gm/id就知道管子处于哪个工作区。而且gm/id和电流密度ID/W有直接关系给定沟长和VDS一个gm/id值就对应一个ID/W值而ID/W乘以电流ID就能算出需要的W。这样一来“定工作点”和“算尺寸”两件事就合并成了一件事。1.3 gm/id方法的设计范式gm/id方法的核心套路是把工艺特性提前“囤”成一张张查找表。你先用仿真器对标准管做直流扫描把不同VGS、VDS、L下的ID、gm、gds、Cgs、Cgd全部存下来然后整理成几条关键曲线gm/id 对 log(ID/W) 曲线用来确定反型区和电流密度ft 对 gm/id 曲线用来估算速度极限gm/gds 对 gm/id 曲线用来估算本征增益和输出电阻。拿到这三条曲线设计就变成查表游戏了。比如我需要输入管的跨导是600μS、静态电流是60μA那gm/id必须等于10。查表得到gm/id10对应的电流密度是25μA/μm于是W就是60/252.4μm。再查同一行的ft和gm/gds确认速度和增益够不够。不够就调整gm/id取值重新计算W和电流。这套方法跟传统方法最大的区别在于传统方法是“先定Vov再靠公式算W”而gm/id是“先定效率再反查密度”。前者在短沟道工艺里误差大后者直接把仿真器里的真实器件特性当设计依据天然就更准。2. 折叠式共源共栅放大器的架构选择与指标分配2.1 为什么选折叠式共源共栅而不是套筒式单级放大器想要高增益最经典的办法就是用共源共栅结构让输出节点看到两层甚至三层管子的输出阻抗等效Rout一下子能推到兆欧级别。增益Av gm_in · Routgm_in给几百μSRout给两三兆欧轻松拿到60dB以上。但套筒式共源共栅有个老毛病输出摆幅太挤。NMOS和PMOS各叠两层Cascode再加上尾电流源电源电压稍微低一点每一层管子分到的VDS余量都不够输出摆幅经常被压缩到0.3V以下。这在1.8V、甚至1.2V供电的设计里非常难受。折叠式共源共栅就灵活多了。它把输入差分对产生的电流先“折叠”到另一条支路再通过共源共栅负载形成高阻输出。这样输入管和输出管不用共用垂直通道输入共模范围、输出摆幅、电源电压之间的约束被解耦了一部分设计起来舒服很多。代价就是功耗稍大、噪声稍差但换来的设计裕量是值得的。2.2 设计指标与电路结构这次设计的目标比较典型做一个中等速度、中等增益、低功耗的全差分OTA规格如下参数目标值工艺0.18μm CMOS电源电压 VDD1.8V负载电容 CL2pF每端开环直流增益 Av≥ 60dB单位增益带宽 GBW≥ 30MHz相位裕度 PM≥ 60°压摆率 SR≥ 50V/μs输出摆幅≥ 1.2Vpp差分静态功耗≤ 1mW电路结构上我采用NMOS输入差分对 PMOS共源共栅输出 NMOS电流镜负载全差分输出输出共模由连续时间CMFB稳定在0.9V左右。选择NMOS做输入管是因为NMOS的μn大约是μp的三倍同样的电流下gm更高GBW更容易达标。2.3 电流分配怎么算才算“有依据”指标分解的第一步就是从压摆率估出总电流下限。全差分OTA的压摆率近似等于尾电流除以单端负载电容SR I_tail / CL。CL是2pF要求SR≥50V/μs于是I_tail≥100μA。我留了一点裕量取I_tail120μA。输入管每边电流就是I_tail的一半60μA。折叠电流源的电流IF呢它决定了两件事折叠节点的直流电位、以及输入管的电流变化有多少能“折叠”到输出支路。一般IF取输入管电流的1.2到1.5倍比较合适取太小了折叠节点电压容易被顶到电源轨取太大了输出支路静态电流增加、功耗白费。这里我取IF80μA。于是输出支路的静态电流就是输入管电流加折叠电流源6080140μA。总静态功耗估算VDD×(I_tail2×IF2×60)需要修正一下实际供电电流主要是I_tail120μA和两个折叠电流源160μA加起来约280μA对应功耗约504μW离1mW的预算还有不少余量。偏置电路大约还要吃掉20到30μA整体也控制在600μA以内功耗完全没问题。这样分配下来每条支路的电流都有了明确出处后续所有管子的W/L都围绕这些电流来展开。电流分配没有唯一答案不同架构、不同目标会给出不同比例但“先定SR、再定输入管电流、再定折叠电流、最后退输出支路电流”这个顺序是通用的。3. 搭建gm/id查找表三分仿真七分整理3.1 测试电路搭建和DC扫描脚本正式开始定W/L之前得先把工艺的gm/id数据采出来。我一般在Cadence Virtuoso里搭一个最简单的测试电路一个NMOS管栅极接直流电压源vgs漏极接直流电压源vds源极和衬底接地。对栅极电压做DC扫描从0到VDD步长5mV同时在几个典型VDS点各跑一遍比如0.6V、0.9V、1.2V。如果嫌手动搭电路费事也可以用Spectre的命令行直接扫。核心是保存每一扫描点的工作点参数。用Ocean脚本大致是这样simulator(spectre) analysis(dc ?param vgs ?start 0 ?step 0.005 ?stop 1.8) desVar(vgs 0.9) desVar(vds 0.9) temp(27) run() selectResult(dc) plot(getData(M0:id)) plot(getData(M0:gm))真正要导出的量包括ID、gm、gds、cgs、cgg、cgd、vth、vdsat。有了这些后续所有曲线都能算出来。我的做法是把数据用print到CSV然后丢进Python里批量处理再用Excel做可视化。Cadence自带的Calculator也能画但处理量大时不如Python灵活。3.2 三条关键曲线怎么看数据整理完之后第一件事是画gm/id对ID/W的对数坐标曲线。这条曲线的特征非常鲜明在弱反型区gm/id基本在20到30之间曲线趋于平缓随着电流密度增大曲线开始一路下滑到了强反型区gm/id掉到10以下。对固定沟长管子的这一族曲线最大的用处是让你反过来查电流密度我给定gm/id12就能查到对应的ID/W。第二件事是画ft对gm/id的曲线。ft是器件的单位增益频率约等于gm/(2π(CgsCgd))它衡量“这个尺寸在这个偏置下最快能跑到多快”。通常gm/id越高ft越低因为弱反型区电流效率高但寄生电容也相对复杂速度上不去。设计时要确认我选的工作点其ft至少是目标GBW的5到10倍否则输入管的寄生会让实际带宽很难做到位。第三件事是画gm/gds对gm/id的曲线。gm/gds就是本征增益它直接决定了你可以用单级管子获得多少增益。在长沟道工艺里本征增益可以到几百甚至上千短沟道工艺往往只有30到80。折叠共源共栅之所以能用单级实现60dB增益就是靠输出端两层Cascode叠加等效Rout被抬升同时输入管的gm/gds仍然贡献一部分有效增益。3.3 数据整理里的几个小技巧第一一定要分L扫描。不能只扫一个沟长然后所有管子都用同一张表。输入管可能用0.5μm电流镜负载管想用2μm改善匹配不同沟长的gm/id曲线差别很大后期使用时混着查表容易出错。我一般把0.18、0.35、0.5、1、2、4μm都扫一遍按文件名区分。第二注意衬底偏置。输入对管源极电压和衬底电压往往不相等体效应会影响阈值和gm/id曲线。管子工作在什么衬底条件下就按什么条件扫表。否则设计时看到的gm/id和实际电路里的差一截还要返工。第三保存的VDS扫描档位要多。折叠节点、输出节点、Cascode中间节点的电压在电路工作时会偏离你最初的估计如果查表时只有一个VDS数据遇到电压偏差就只能重新扫描。多存几个VDS档设计时按实际工作点就近取值效率高得多。4. 逐管设计从查表到W/L落地4.1 输入差分对管M1/M2输入管是整个放大器性能的核心它的gm决定了GBW。目标GBW30MHzCL2pF那么输入管跨导gm_in至少是2π×30MHz×2pF≈377μS。我留出余量取设计值gm_in600μS。电流每边60μAgm_in/ID 10。这个值落在中等反型区对我来说是功耗、速度和失配的合理折中。查0.5μm沟长NMOS的gm/id表gm/id10附近对应ID/W大约在25μA/μm于是每边宽度W 60μA / 25μA/μm ≈ 2.4μm。版图上为了让匹配好一点这个管子我会拆成两指并联单指1.2μm。再验证ft这个工作点的ft大约6GHz远高于30MHz的GBW说明寄生电容不会吃掉太多带宽。输入管选L0.5μm不是最小沟长0.18μm。原因有两个一是稍微加沟长能提高本征增益gm/gds输出电阻更可观二是0.18μm最小沟长在低压下Vth失配和沟道长度调制的效应都更强作为输入对管并不讨喜。0.5μm是个比较均衡的选择。4.2 折叠电流源管MF1/MF2折叠电流源的作用是把输入对管电流“接走”静态时让折叠节点没有净电流流向输出Cascode。我设计它的电流为80μA管子是PMOS。PMOS的电流密度比NMOS低一些。查PMOS的gm/id表在gm/id10附近ID/W大约20μA/μm。W80/204μm。沟长取1μm主要是为了降低折叠电流源的沟道调制让折叠节点电压变化时电流扰动更小。这个管子对噪声也有贡献尤其是它的gm会直接叠加到输入端等效噪声里所以gm/id不宜取得太高10左右已经是兼顾噪声和摆幅的选择了。折叠电流源还有个容易被忽略的点它的尺寸需要和输入管尺寸在同一条“设计杆”上。如果MF的电流噪声和失配太大输入等效失调电压就会变差。所以我们看到很多高性能折叠Cascode里折叠电流源会做得比最小面积大很多就是为了降失配。4.3 输出共源共栅管与负载管输出支路电流是140μA由PMOS共源管M3/M4和PMOS共栅管M5/M6串联。共源管在这里承担一定的跨导作用但更重要的是提供良好的Cascode电流传输特性。它的gm/id可以取7左右稍微靠强反型区这样Vdsat相对大一点输出摆幅不会被这条支路吃掉太多。查PMOS表gm/id7对应的ID/W大约50μA/μmW140/502.8μmL取0.5μm。共栅管M5/M6主要是把共源管的漏极电流“抬”到输出节点并且靠它自身的低栅极电容和低输入阻抗来保证Cascode节点的时间常数不拖累速度。它的gm/id取8W按3μm设计L取0.5μm。这个管子的Vdsat要留足因为输出摆幅最高端的限制就落在它身上。负载管M7/M8用NMOS电流镜电流140μA。这个管子的Vdsat也不要太大且因为负载管噪声和输入管一样会被折算到等效输入gm/id取10左右是常识选择。沟长我用了2μm让电流镜的失配和沟道调制都小一些整体换来的失调电压改善非常明显。查NMOS表后W取12μm。四个管子的尺寸汇总如下管子类型电流(μA)gm/idW(μm)L(μm)M1/M2 输入对NMOS60102.40.5MF1/MF2 折叠源PMOS801041M3/M4 共源管PMOS14072.80.5M5/M6 共栅管PMOS140830.5M7/M8 负载管NMOS14010122到这里所有核心器件的W/L都从表里查出来了没有一轮“手调”。接下来要做的就是把它们放进原理图把偏置电压配好跑仿真验证。4.4 偏置电路与CMFB偏置电路我用一个简单的自偏置电流镜产生全部偏置电压。参考电流取20μA通过一组宽长比比例精确的电流镜复制到尾电流源、折叠电流源和Cascode偏置支路。Cascode管的栅极偏置电压很关键太高输出摆幅上端吃亏太低共源共栅管可能掉出饱和区。标准做法是“低压Cascode偏置”即用二极管连接管加一组Cascode生成的Vbias让M5/M6的VDS刚好压在饱和区边缘。全差分输出必须配CMFB。我用了连续时间CMFB基本思路是把输出共模和参考电压VCM0.9V作差放大调节负载电流镜的偏置电压把输出共模钉在0.9V。CMFB环路对相位裕度的影响不能小看后续仿真的重点之一就是验证CMFB环路稳定整体拓扑才真正可用。5. 仿真验证从原理图到指标闭环5.1 DC工作点检查先看每个管子是否“活对”了设计完打开Cadence的DC仿真第一件事不是看增益而是看每个管子是否工作在饱和区。用Virtuoso的OP信息逐管查看region参数正常NMOS管region2PMOS管region2。如果你看到region1说明管子截止了region3说明进了线性区输出电阻会掉得很明显。然后看每个管子的VDS和VDSAT的差值。经验上VDS至少比VDSAT大50mV到100mV才算稳妥不然PVT变化时管子很容易掉出饱和区。折叠节点电压也很值得盯在IDLE状态输入管漏极电压和折叠电流源输出之间的净电流为零折叠节点电压应该稳定在某个中间电平不能贴近VDD或GND。否则说明电流分配有误要么输入管电流和折叠电流源不匹配要么偏置给错了。5.2 AC仿真与GBW/PM调优跑AC仿真输入方式用标准的差模小信号。设置一个输入端口给AC幅度1V从1Hz扫到1GHz看输出端dB20幅度曲线和相位曲线。我实际跑出来的结果是开环增益Av≈60.5dBGBW≈35MHz相位裕度约58°。增益勉强达标但相位裕度不够。这说明输出节点的次主极点离主极点太近了。原因通常是Cascode中间节点的寄生电容或输出节点本身的等效电容偏大。下一步是调整Cascode偏置让它工作在更平衡的电流密度附近必要时把共栅管的gm调高一点减小它所看到的源极节点阻抗把次极点推远。我试了一个方案把共栅管M5/M6的W从3μm改为4μmgm增加约30%相位裕度就从58°升到了67°GBW基本不变。代价是Cascode节点的寄生电容略增但在这个指标下完全可接受。5.3 瞬态仿真压摆率与建立时间AC仿真只能证明小信号稳定大信号行为还要靠瞬态仿真验证。我把OTA接成单位增益缓冲器输入端加一个0.4V阶跃观察输出端压摆率。仿真显示上升沿压摆率约52V/μs下降沿约50V/μs和设计估算的I_tail/CL120μA/2pF60V/μs基本吻合略低的原因是寄生电容和Cascode分流了一部分电流。这个结果达标。建立到0.1%精度的时间大约45ns作为30MHz级别的OTA来说中规中矩。瞬态仿真还有一个好处能直观看到输出是否出现振铃或过度阻尼。相位裕度不足时阶跃响应会有一到两次大振幅振铃调试时肉眼比看AC相位曲线更敏感。5.4 PVT角与蒙特卡洛别在TT角自我感动只跑TT/27℃单个工况没有任何说服力。我分别跑了SS、FF、SF、FS四个工艺角温度覆盖-40℃、27℃、85℃电源电压取1.62V、1.8V、1.98V。检查关键指标变化范围条件增益(dB)GBW(MHz)PM(°)SR(V/μs)TT/27℃/1.8V60.5356752SS/85℃/1.62V57.826.56341FF/-40℃/1.98V64.2457063SS角下增益掉了接近3dBGBW也跌到26.5MHz低于30MHz的指标下限。这个问题的根源是SS角下NMOS和PMOS的gm都下降输入管跨导缩水GBW自然往下走。解决办法有两个思路一是加一点尾电流把I_tail从120μA提高到140μA抬高输入管gm二是把输入管W增大一点多付出的面积换PMOS下的裕量。我选了前者重新仿真后SS角GBW回到31MHz。代价是功耗增加约20μA仍然在预算内。蒙特卡洛主要看失配。仿真500次后输入失调电压3σ约为6.2mV在0.18μm工艺下算正常水平。失调的主要来源是输入对管的Vth失配和负载电流镜的电流失配。如果对失调要求更严就需要继续加大输入管和负载管的面积这会占用更多版图面积性能与面积的取舍就在这里体现。6. 调试中的常见问题与踩过的坑6.1 相位裕度不足别急着怀疑管子尺寸相位裕度不足时我第一个查的是Cascode中间节点的寄生电容。折叠式共源共栅里面共源管漏极和共栅管源极之间的节点是高频次极点的主要来源。这个节点上的寄生电容主要包括共栅管的Cgs和Cgd以及共源管的Cgd。想推远次极点就把共栅管的gm加大让它的源极阻抗降低这比加补偿电容更干净。第二种可能性是输出节点电容太大。输出端除了加载的CL还要考虑电流镜管子的Cgd和下一级的输入电容。如果负载电容本身是2pF而输出寄生又额外叠了0.5pF主极点频率就会偏低GBW被压低次极点的相对位置就显得近了。这种情况可以在版图阶段优化连线或者在原理图中把输出管尺寸降一点平衡寄生电容。6.2 gm/id选得太极端教训很深刻有一版试验里为了追求某工艺下的低功耗我把输入管gm/id定在了22也就是弱反型区。仿真看功耗确实低但有两个问题立刻冒出来一是输入管的工作电流密度很低导致W巨大版图面积失控二是弱反型区管子对失配非常敏感失调电压翻了一倍多。后来我强制把gm/id压回12附近失调立刻好看了。这算是我“以身试法”换来的体会弱反型只适合低频、低功耗、对匹配不敏感的场合做中高速OTA一定不要在弱反型区过于激进。反过来gm/id取太小也不行比如输入管取6。那时候Vov得有近300到400mV输入共模范围和输出摆幅被压缩而且本征增益gm/gds明显下降单级很难拿到60dB增益。综合来看对于0.18μm工艺的折叠Cascode输入对标定在8到12之间是最“甜”的区间。6.3 输出共模漂移CMFB环路不可掉以轻心第一次把全差分OTA接进闭环时输出共模老是漂到VDD附近现象就是波形整体顶到电源轨。查了半天发现不是主放大器的问题是CMFB环路增益太低。CMFB放大器如果用的尾电流源太小输出共模误差被放大的倍数不够环路就没有足够的校正能力。把CMFB输入管的电流从10μA提升到25μA之后共模校正能力立刻恢复了。CMFB的带宽也值得单独关注。CMFB环路的GBW如果远低于差模环路的GBW那么在瞬态大信号时共模可能短暂失控带来共模振铃。我的经验是CMFB环路GBW至少做到差模环路的一半否则就把相位裕度吃得很紧甚至造成共模不稳定。6.4 一个容易被忽略的仿真陷阱AC源的地参考很多新手跑AC仿真时用单端AC源从正输入端直接灌信号负输入端接AC地。这在差分OTA上没错但如果你忘了给输入共模一个合适的DC电平AC扫描结果会非常诡异甚至出现增益为0。标准做法是给输入端一个dc电压0.9V用差分AC源分别给正端和负端加0.5V和-0.5V的AC幅度仿真结果才是差模增益。还有一个常见坑跑交流仿真时CMFB是闭环工作的AC扫描时如果CMFB环路也被AC激励扫到输出共模可能被调制导致你看不到正确的主极点。解决手段是在AC仿真中用理想CMFB模型先隔离变量确认主环路指标后再把真实CMFB接回去。很多仿真奇怪的根源都是这个地方。6.5 版图阶段的那些“回头债”仿真阶段一切达标后不代表版图阶段就万事大吉。折叠Cascode对版图的对称性要求很高输入对管必须采用共质心结构并且周围放一圈dummy管不然失配指标会全面恶化。折叠电流源和负载电流镜也尽量使用相同的电流镜阵列保持单位器件尺寸一致电流复制比例才能精确。还有一条很实际Cascode中间节点的寄生电容很难在原理图阶段完全估准。版图完成后务必做一次后仿看GBW和相位裕度是否有明显下降。如果下降过多一条实用处理方式是在版图上把这层节点的走线缩短加宽减小RC延迟实在不行就在原理图里把共栅管再调大一点。写在后面这套gm/id方法我用了几年最大的感受是它把设计从“玄学调参”变成了“有据可查”。每次拿到不熟悉的工艺PDK我第一件事就是花半天把NMOS和PMOS的gm/id表建出来之后所有运算放大器的设计都在这张表上推。可能有人觉得查表很繁琐但比起一轮轮仿真凑尺寸这个前期投入的回报高得多。最后分享一个我自己的小习惯每个设计结束时会把最终管子的实际VDS、VDSAT、gm/id、ft、gm/gds整理成一张清单留档到设计报告里。下次做同工艺新设计时这张清单比任何公式都有参考价值。模拟IC设计没有银弹但gm/id方法绝对是斜率最高的一条学习路径。