
1. 项目概述与设计目标拆解做模拟IC设计这些年运放是绕不开的基本盘。我刚入行那会儿mentor丢给我的第一个正经任务就是在Cadence Virtuoso里搭一个折叠式共源共栅放大器Folded Cascode OTA工艺是0.18μm电源电压1.8V要求不高但要把设计、仿真、调偏置、看裕度这套流程完整走通。这活儿看着基础却把模拟设计里最核心的东西全串起来了——电流分配、尺寸计算、偏置网络、小信号分析、稳定性判断后面做高速ADC的采样保持电路、流水线运放、LDO误差放大器全都在复用这套底子。这篇文章适合两类人一类是刚开始用Virtuoso的学生另一类是工作了一两年但只跑过简单反相器、D触发器还没正经做过一个运放的工程师。我会以0.18μm工艺、1.8V电源为背景从头梳理折叠式共源共栅的拓扑选型、手算过程、Virtuoso实操步骤以及前仿真阶段最常见的坑。读完你可以照着我这个方法自己搭一个能过GBW、增益、相位裕度指标的运放出来而不是对着论文里的公式发愣。先说清楚一件事折叠式共源共栅不是最先进的结构但它是在“低压”和“高增益”之间做权衡时最经典的选择。0.18μm工艺下阈值电压大约0.45V到0.55V过驱动电压通常只能给到100mV到200mV叠三层管子就能把输出摆幅吃光大半。这时候如果硬上套筒式共源共栅Telescopic Cascode输出摆幅会被压得很惨而折叠式结构正好把输入对和cascode管“折”开让输出节点不需要叠那么多管子摆幅和增益就能兼顾。下面我先把设计目标定下来再一步一步带你把这个运放做出来。1.1 为什么选折叠式共源共栅很多人第一次接触cascode结构时都会先看到套筒式共源共栅。套筒式的优点很直接极点少、速度快、电流利用率高同样的功耗下能拿到更高的GBW。但它的致命伤在低压工艺里特别明显——输入管、 cascode管、尾电流源得一路叠上去为了保证每个管子都工作在饱和区输出摆幅几乎被压缩到只剩电源电压的一半左右。0.18μm工艺用1.8V电源如果设计目标比较激进套筒式的输出摆幅可能只有0.9V这在很多信号链场景里是不够的。折叠式共源共栅把输入差分对的漏电流“折叠”到另一条支路上让输入对和输出级在电源方向上不用层层堆叠。代价是多了一条折叠支路静态电流会多一些功耗比套筒式高噪声性能也会略打折扣同时折叠节点引入的寄生电容会带来一个次极点给相位裕度增加压力。但换来的收益很实在输出摆幅大了、输入共模范围和输出共模范围可以独立设计了而且对电源电压的适应性强很多。在0.18μm这种“模拟工艺最后的黄金节点”上折叠式运放几乎是通用模块级的默认答案。还有个常被忽视的点折叠式结构对输入共模电平的约束更宽松。PMOS输入对可以接受比较低的输入共模NMOS输入对可以接受比较高的输入共模这在片内信号链里特别有用。你前端是NMOS源跟随器输出的信号基本上就直接丢给PMOS输入的折叠式运放不用额外做电平搬移。后面我们会用PMOS输入型来搭建。1.2 0.18μm工艺下的关键约束做0.18μm工艺不能照搬深亚微米的思维。这个工艺节点下标准电源是1.8V但阈值电压并没有等比下降这就导致“电压余量”变得异常珍贵。你分配给每个管子的过驱动电压不能太大否则叠上两三个管子之后输出摆幅就没了但过驱动电压也不能太小因为gm会跟着电流一起受限制GBW就上不去。设计之前先算一笔账设VDD1.8VNMOS阈值Vthn大概0.5VPMOS阈值|Vthp|大概0.5V你要在输出端叠一个PMOS cascode和一个NMOS cascode。假设每个管子需要的最小Vds是0.15V光这4个管子就要吃掉0.6V剩下大约1.2V给输出摆幅。如果再算上偏置余量实际能做到的输出摆幅大约在1V到1.2V之间。这就是折叠式结构的生存空间。另外还要注意0.18μm工艺的晶体管本征增益并不高通常单个共源管只有20到30dB的增益。想要拿到60dB甚至更高的直流增益必须靠cascode结构或两级放大。折叠式共源共栅在单级内把增益翻到60dB以上关键就靠“共源”加“共栅”串联提高输出阻抗。这部分在Virtuoso的DC工作点检查里能看得很清楚后面我会演示怎么看rout和gm。1.3 设计指标怎么定写代码要先定功能做电路要先定指标。我这套实战流程里用的指标如下负载电容CL2pF单位增益带宽GBW50MHz直流增益Av大于60dB相位裕度PM大于60度静态功耗小于1mW输出差分摆幅大于1Vpp。工艺环境就是0.18μm、1.8V电源仿真温度按25℃起步后面再扫工艺角。指标不是拍脑袋定的。GBW50MHz、CL2pF这两个值一确定输入跨导gm就基本锁死了。因为单级运放近似有GBWgm/(2πCL)代入计算gm 2π × 50MHz × 2pF ≈ 6.28 × 50×10^6 × 2×10^-12 ≈ 628μS也就是说输入管需要提供至少628μS的跨导才能喂饱2pF负载电容。这个数值会直接决定输入管的偏置电流和宽长比。功耗预算1mW在1.8V电源下对应总电流约555μA这对一个折叠式运放来说不算宽裕所以电流分配必须精打细算。这里也顺便回答一个很多人问过的问题为什么折叠式运放要先定GBW再算gm因为GBW是整个运放在反馈闭环里最重要的频率指标它决定了你能把信号处理到多快而CL是应用给的这两者一结合输入级必须提供的跨导就是物理定律跑不掉。2. 电路拓扑分析与第一轮手算拓扑选型决定性能上限尺寸调整只是在这个上限里折腾。折叠式共源共栅的电路结构看起来比套筒式多几条支路但它的设计逻辑更接近“流水线”一条支路负责把输入电压变成电流一条支路负责把电流搬走一条支路负责把电流变成输出电压。调好每条支路的直流电流和过驱动电压整个电路的工作点就稳了。2.1 PMOS输入型的完整结构拆解我这里选PMOS作为输入差分对原因有两点一是PMOS输入对的输入共模范围可以下探到接近地电位适合接来自前级NMOS漏极或源极的信号二是PMOS管的闪烁噪声在多数0.18μm工艺里比NMOS要小对低频信号有利。代价是PMOS的迁移率低同样的电流下gm比NMOS小一些所以为了达到同样的GBW尺寸可能要稍微调大一点。整体结构可以拆成四块来看。第一块是尾电流源用PMOS电流镜实现提供输入差分对的偏置电流。第二块是输入差分对也就是两个PMOS管M1和M2它们的源极接尾电流源栅极接输入信号漏极接到折叠节点。第三块是折叠电流源用NMOS电流镜把折叠节点往下拉承担M1和M2漏极的大部分直流电流这样真正流入cascode管的交流电流才能被“选频”出来。第四块是输出级包括NMOS共栅管M3和M4以及PMOS负载电流镜通常也会用cascode负载来提高输出阻抗。交流信号路径是这样的输入小信号电压被M1和M2变成小信号电流从漏极流出进入折叠节点。折叠电流源虽然直流阻抗高但它的交流阻抗也相对有限一部分电流会分流到NMOS电流源里另一部分电流进入M3和M4的源端再经过共栅管放大到输出节点。输出节点上有PMOS负载电流镜提供高阻抗最终把小信号电流变回电压。这样M1/M2是共源放大M3/M4是共栅放大两者串联形成共源共栅输出阻抗大幅度提升。2.2 电流分配与功耗规划电流分配是我个人觉得整个设计里最值得花心思的一步。设输入差分对每条支路的电流为I0尾电流源就是2×I0。折叠电流源每条支路设计的电流为I_bias它必须比I0大让M3和M4里流过的电流是I0? 不对仔细想清楚折叠节点上同时挂着PMOS输入管漏极流出I0和NMOS折叠电流源灌入I_bias那么流入cascode管源端的电流就是I_bias? 我重新理一下。PMOS输入管的源接在VDD方向的尾电流源上漏极作为电流输出端是“拉电流”的也就是从折叠节点往外抽取I0。NMOS折叠电流源接在折叠节点到地向折叠节点灌入电流I_bias。电路要满足KCL折叠节点上的净电流必须有地方去。剩下的路径就是M3或M4的源端所以流入NMOS共栅管源端的电流为I_bias - I0记为I_casc。所以折叠电流源I_bias必须大于I0否则共栅管电流会倒灌工作点完全乱掉。实际设计中我习惯把I_bias设置成I0的2倍左右也就是I_cascI0。这样还有一个额外好处折叠电流源的功耗跟输入对电流处于同一水平不会因为电流失衡引发严重的失调。用功耗预算反推一遍。假设I050μA那么尾电流2×I0100μA两条折叠电流源每条I_bias100μA总共2×100200μA共栅管和负载管的电流每条大约I_casc50μA两条输出支路又100μA。全部加起来大约400μA在1.8V电源下功耗0.72mW满足1mW预算。这个比例是经验值实际可以按需微调。2.3 从GBW反推输入管尺寸现在做尺寸初算。GBW50MHzCL2pF前面算过gm≈628μS。因为是差分输入对M1和M2各自提供一半的等效跨导这里要说清楚对于差分对整体差分跨导Gm等于单边管的gm假设完全对称所以gm每管需要大约628μS。工作点假设输入管过驱动电压Vov150mV。MOS管饱和区跨导公式gm2×I_D/Vov可以反推每管直流电流I_D gm × Vov / 2 628μS × 0.15V / 2 47.1μA这正好和前面假设的I050μA接近说明电流分配是自洽的。如果差异较大就需要回来调整Vov或I0。再看宽长比。MOS管饱和电流公式0.18μm工艺的PMOS电流因子KP约100μA/V²典型值具体看工艺库I_D0.5×KP×(W/L)×Vov²所以W/L 2×I_D / (KP×Vov²) 2×50μA / (100μA/V² × 0.0225V²) ≈ 44.4取个整W/L可以按45到50来做。如果取L0.36μm两倍最小沟道长度用来提高输出阻抗和匹配性那W就在16μm到18μm左右。这个尺寸在版图里并不夸张后续还可以通过multiple finger来拆分。2.4 偏置电压怎么给偏置网络很多新手会偷懒直接用理想电压源给cascode管的栅极灌一个固定电位。前仿真阶段这么做没什么大问题但一旦你换工艺角固定电压很容易让管子掉出饱和区。更稳妥的做法是用电流镜结构自偏置也就是从基准电流出发复制出尾电流源、折叠电流源、cascode偏置电压。具体到偏置电平关键约束是保证每个管子Vds大于Vov。对于NMOS共栅管M3/M4源端是折叠节点栅极偏置Vb1决定了折叠节点的电压。折叠节点的电压要足够高让NMOS折叠电流源处于饱和区同时又不能太高否则PMOS输入管的Vds太小会进入线性区。这个平衡需要反复看DC工作点来确认。给一个经验起点偏置电压可以这样估算。折叠节点电压V_fold约等于Vb1减去NMOS共栅管的Vgs。如果Vb11.0VVgs_n约0.8V则V_fold约0.2V这对NMOS折叠电流源Vds约0.2V来说太低了可能不饱和。所以Vb1需要更高一点比如1.2V让V_fold约0.4V。具体值要结合仿真调整后面我详细演示怎么在Virtuoso里看工作点。3. Cadence Virtuoso实现全流程理论算完下面进Virtuoso实操。整个过程我会按“建库、画原理图、设参数、跑DC、跑AC、扫描工艺角”这个顺序走。可能比你平时看到的一些零散教程要全一些因为每一段我都会说明这么设置的原因而不只是告诉你点哪个按钮。3.1 建库、建Cell、加载模型库打开Cadence Virtuoso后第一步是在CIW窗口里建library。选择File → New → Library名字可以叫folded_cascode_test注意勾选attach to an existing technology library然后选你手上0.18μm工艺对应的techfile。如果不attach后面画版图或者跑LVS都会很痛苦。建好库之后File → New → CellviewCell填schematicView默认就是schematic工具选Composer-Schematic。进入原理图编辑器后先把库里的模型文件加载这件事做了在ADE仿真窗口里打开Setup → Model Libraries用浏览按钮找到工艺库提供的模型文件通常是.scs或.lib格式。这里有个常见坑如果文件名带空格或路径里有中文spectre可能加载失败所以我习惯把所有PDK文件先拷到一个纯英文路径下。用哪个模型名也要注意。0.18μm工艺库里NMOS和PMOS的模型名可能是nch/pch也可能是n33/p33这类带具体阈值类型前缀的名字。你可以在模型文件里用grep搜一下定义的模型名或者在PDK文档里查。原理图里管子的Model name参数必须跟这个严格一致否则仿真器会直接报找不到器件模型。3.2 原理图搭建与器件参数设置原理图里从analogLib库调出器件。输入差分对和负载管用pmos4折叠电流源和cascode管用nmos4。每个管子都要设置Model name、Width、Length、Fingers、Multiplier这几个参数。我这里给出一个初始尺寸对照表你可以直接抄作业再看仿真结果调器件ModelW (μm)L (μm)FingersMultiplier说明M1/M2 输入PMOSpch180.3641提供628μS跨导M3/M4 共栅NMOSnch120.3641共栅级提高输出阻抗M5/M6 折叠电流源nch100.3641灌入约100μA电流M7/M8 负载PMOSpch200.3641高阻抗电流镜负载尾电流源PMOSpch200.3641提供2×I0100μA连线的时候我习惯先给每个节点起个有意义的名字比如vp、vn、fold_p、fold_n、out方便后面在仿真器里看波形。用快捷键p给输入、输出、电源、地打上pin。模拟输入激励用analogLib里的vdc或vsin设置AC幅度时给两个输入一个设acmag0.5V、相位0另一个设acmag0.5V、相位180这样差模激励就是1V后面测增益直接看输出电压就是增益倍数。3.3 DC分析与工作点检查加好激励后打开ADE L选择Analysis → dc勾选Save DC Operating Point。跑完后最关键的一步不是看输出电压而是要逐个检查每个管子的工作区。选择Results → Print → DC Operating Point在列表里把M1到M8、还有尾电流源和偏置管全部选上。DC工作点要看几个参数region1代表饱和2代表线性3代表截止vds、vgs、vth、vdsat。判断一个MOS管是否饱和的标准就是vds vdsat并且在0.18μm工艺里通常希望vds至少比vdsat大50mV以上留有余量。如果哪个管子在线性区就要追溯到它的偏置电压或者电流分配是不是出了问题。实际调的时候最容易出问题的是折叠节点电压。你如果发现输入PMOS管的vds很小线性区了大概率是折叠节点电压太高如果发现折叠电流源不饱和那是折叠节点电压太低。我一般会专门把折叠节点电压打出来看一下理想情况下应该落在VDD的1/3到1/2之间。你可以在原理图上直接点击net走线按一下键盘上的E就能显示直流电压这个操作很实用。3.4 AC仿真与增益、相位裕度测量DC工作点调好之后开始跑AC。选择Analysis → ac扫频范围设1Hz到1GHz扫描方式选对数、每十倍频程10到20个点就行。跑完之后在ADE L的结果窗口里打开Calculator输入表达式Vf(/out) / (Vf(/vp) - Vf(/vn))这里vp和vn是差分输入正负端算出来的就是正差分输入到单端输出的传输函数。用dB20函数看幅频特性用phase函数看相频特性。在幅频曲线上找到增益下降为0dB的频率点这个就是实际的GBW。再在该频率下看相移用180度减去相移得到相位裕度。如果我在这个结构里看到GBW在50MHz左右、相位裕度60度以上基本就说明手算是准的。如果GBW不足先检查输入管gm是不是不够这通常意味着需要加大电流或加大W/L如果相位裕度不够问题往往出在折叠节点的寄生电容或镜像极点后面专门讲。这里有个很重要的细节AC仿真的增益曲线在高频处不应该出现奇怪的鼓包或尖峰如果有说明存在谐振或负阻特性通常是偏置电流太大、管子进入了弱反型区以外的异常区域需要回头查工作点。3.5 工艺角与温度扫描单点仿真通过只代表“图纸上好看”真正的设计要看PVT。在ADE L里可以手动修改模型文件来切换工艺角也可以直接跑多个corner然后再对比结果。更规范的做法是用corners工具或写一个corner.scs文件但新手阶段我建议先手动跑一遍Standard corner流程。具体操作把模型库切换成tttypical电压设在1.8V温度25℃然后再分别跑ss工艺角、1.62V电源、125℃高温以及ff工艺角、1.98V电源、-40℃低温一共大概6个组合。每跑完一组记录下GBW、增益、相位裕度这三个指标。你会发现折叠式共源共栅在ss角落下增益偏低、GBW降低这是正常的关键是每个角落都不能翻车。如果某个corner下cascode管掉出饱和区通常不是管子的尺寸问题而是偏置电压没有跟着corner自适应。这时候就要检查偏置网络尽量用电流镜复制电流来生成偏置电压而不是用固定理想电压源。这也是我一直强调自偏置的原因。4. 后仿真与版图设计要点前仿真通过以后工作还没结束。折叠式共源共栅的性能上限由版图决定尤其是折叠节点的寄生电容和差分对的匹配程度。很多人第一次跑后仿真发现GBW掉了、相位裕度崩了原因基本都出在这两个地方。4.1 匹配性设计与dummy器件版图里最重要的原则就是匹配。输入差分对M1和M2必须做成common centroid结构也就是交叉摆放让工艺梯度效应在两边平均分配。每个管子拆成4个fingerM1的finger按ABBA顺序摆M2按BAAB顺序摆形成中心对称。上下左右还要加dummy管dummy的栅和源漏都短接或接固定电位保证有源区边缘的刻蚀环境一致。电流镜管也一样M5/M6和负载PMOS镜都要尽量靠近、同向、温度环境一致。电源走线和地走线要注意IR drop0.18μm工艺金属层多电源和地尽量各用一层覆盖整个模块区域别把高电流走线挤到一根细线上。4.2 折叠节点的寄生控制折叠节点是这条电路里最敏感的地方没有之一。它同时接了输入管漏极、折叠电流源漏极、共栅管源极。这个节点的寄生电容会直接形成高频极点寄生电容越大极点频率越低相位裕度就越差。所以要尽量缩小折叠节点的金属面积连线短、接触孔少、避免大块金属在折叠节点上横向铺开。还有一点可能很多人没意识到dummy管不要随便放在折叠节点旁边否则会引入额外寄生。我见过一个后仿真翻车的案例就是因为dummy管距离折叠节点太近多出来的寄生电容硬生生把PM从65度压到了45度。dummy可以放但跟敏感节点要隔开一段距离。4.3 后仿真结果差怎么调后仿真比前仿真差了先不要急着改晶体管尺寸。第一步先对比前仿/后仿的节点寄生参数找到寄生电容最大的net是哪一个用寄生参数报告或者直接看版图。如果确实是折叠节点的问题优先手段是调整版图布局缩短该节点的走线而不是把管子尺寸变小——因为尺寸变小会连累gm和增益。如果寄生优化完还是不够那就用电路手段补。常见方法是在输出端适当增加负载电容把主极点压低让次极点相对远离GBW或者加大折叠电流源电流降低折叠节点的阻抗把次极点往高频推。这两种做法一个是降速度换稳定一个是加功耗换稳定具体怎么选取决于你的功耗预算。5. 常见问题与调试手记这部分全是实战里踩过的坑。我以前带过好几个实习生发现折叠式共源共栅的报错和异常现象来来去去就那几种整理成一张速查表很实用。5.1 典型问题速查表现象可能原因排查与解决办法DC仿真不收敛有节点浮空或初始值不合理检查所有节点是否都有DC通路给可疑节点加初始条件或用.ic语句把仿真器的gmin适当调大输入管线性区折叠节点电压太高PMOS的Vds过小降低共栅管偏置电压Vb1或增大折叠电流源电流让折叠节点电压降下来折叠电流源线性区折叠节点电压太低NMOS电流源Vds过小提高共栅管偏置电压或减小折叠电流源电流让折叠节点电压升上去输出增益远低于60dB某只cascode管没饱和逐个检查输出支路上所有管子的region把Vds调到Vdsat以上GBW偏小输入管gm不够增加输入管电流I0或增大W/L或减小L但L不能太小影响增益相位裕度不足折叠节点或镜像极点离GBW太近减小折叠节点寄生增大折叠电流源电流或适当增加输出负载电容输出共模不在预期负载电流和cascode电流不平衡检查电流镜复制精度确认I_D与I_bias的比例必要时加共模反馈电路5.2 相位裕度不足的解决思路相位裕度不足是我见到最多的问题。很多人的第一反应是加补偿电容但在折叠式共源共栅单级运放里输出负载电容本身就是主极点电容再额外加补偿电容会直接牺牲GBW属于“治标不治本”。更合理的思路是找次极点。这个结构里的次极点通常有两个来源一是折叠节点上输入管漏极、折叠电流源漏极、共栅管源极形成的RC极点二是电流镜负载的镜像极点。如果折叠节点是瓶颈减小该节点寄生电容、增大折叠电流源电流、把折叠电流源管子的尺寸调小都能把极点往高频推。如果是镜像极点可以考虑用更简单的负载电流镜减少一个镜像路径或者给镜像节点也加一点电流来降低阻抗。我实际调过的一个案例初始PM只有42度排查下来就是折叠电流源的电流设得偏小导致折叠节点阻抗过大。把I_bias从80μA提高到120μA之后PM直接回到了64度GBW只下降了不到2MHz。我自己的经验是先把折叠节点阻抗这件事解决掉再考虑要不要动电容。5.3 DC工作点不对的排查顺序DC工作点不对的时候千万别瞎猜。我一般按三步走。第一步看电源和地电压是否正确是否每个模块都供电到位第二步看电流镜的参考电流是不是正确复现到了所有支路这一步可以用DC仿真直接量每条支路的电流第三步看关键节点电压依次检查输入对源级、折叠节点、输出节点是否在合理范围内。这里分享一个实用小技巧在原理图上按快捷键E显示DC电压时红色或绿色不代表绝对好坏你的眼睛要被训练成直接看数值。输入差分对源的电压大约应该是VDD减去尾电流源管的Vdsat和输入管的Vgs折叠节点的电压应该在0.4V到0.8V左右输出节点应该在0.9V附近。如果输出节点偏了大概率是输出端的上拉电流和下拉电流不匹配先看负载电流镜再说。5.4 两个压箱底的经验最后说两个我压箱底的经验。第一个是关于电流余量的。手算的时候折叠电流源I_bias最好至少比输入支路电流I0大50%以上最好做到2倍。有些人为了省功耗把I_bias压到只比I0大10%结果温度一升高电流镜失配一上来cascode管直接进入线性区整个运放性能崩掉。功耗省了50μA稳定性损失一大截非常不划算。第二个是关于corner仿真的。很多人嫌弃手动跑corner麻烦但我建议新手阶段一定要手动跑。手动跑的过程中你会被迫去看每个corner下每个管子的工作点慢慢就形成了“什么电压下应该是什么状态”的直觉。等你以后到了项目后期再用自动化工具批量跑corner那时候你对结果的判断力是完全不一样的。折叠式共源共栅这个结构我前前后后可能画了几十次每次画依然能从工作点调整里学到点新东西。Virtuoso这个工具说白了不会帮你做选择但只要你把原理吃透它就能成为你验证想法最好的实验台。如果你也在做类似的结构建议按照上面的流程先把DC工作点逐管检查清楚再谈其他优化这一步做好了后面基本都能走通。