
1. 先搞清楚gm/id 方法到底是什么为什么大家都在用如果你混过几年模拟 IC 设计圈大概率听过 gm/id 这个名字。它不是什么新发明的玄学而是一套把 MOS 管从“过驱动电压设计法”切换到“效率设计法”的完整流程。早年间做 0.18um、0.13um 工艺时我们习惯用 Vov过驱动电压和平方律公式手算尺寸先定尾电流再根据增益和带宽要求反推 W/L整个过程还算顺手。可工艺走到 65nm 以下之后很多老经验开始失灵——短沟道效应、速度饱和、沟道长度调制把平方律公式打得七零八落。这时候再拿 Vov 做设计经常出现仿真结果和手算对不上、调 W/L 调到头秃的情况。gm/id 方法的核心思路很简单把设计变量从 Vov 换成 gm/id 这个比值。gm/id 在物理上代表“跨导效率”也就是每消耗 1mA 电流能换到多少 transconductance。它的好处在于gm/id 和 MOS 管的偏置状态之间有一一对应关系而且这个关系在绝大多数工艺下都能通过查找表Look-Up Table精确获取。只要你有管子的 DC 仿真模型就能先把 gm/id 和归一化电流、本征增益、电容密度这些参数的关系拉出来后续所有尺寸计算都基于这张表做精度和速度都能兼顾。我把话说明白一点传统设计法的核心问题是我们用 Vov 去做设计假设比如“共源极增益等于 gm 乘 ro”可 ro 其实是个随 VDS 变化很大的量Vov 本身又和 W/L 强耦合所以手算误差越到后面越大。gm/id 方法直接把“指标需求 → 电流效率 → 尺寸”这条链路打通了每个管子都能拿到可解释、可追溯的设计依据查表效率和可复现性都非常高。这篇文章要讲的折叠式共源共栅放大器Folded Cascode OTA就是 gm/id 方法最经典、也最适合练手的应用场景之一。这篇文章适合谁看已经会跑 Cadence Virtuoso、会用 spectre 或 hspice 做基本 DC/AC 仿真的模拟 IC 工程师尤其是刚入门放大器设计、正卡在“不知道怎么从 spec 一路定到 W/L”这个坎上的同学。如果你还没跑过任何仿真建议先去把反相器和简单共源极调通再来看这篇文章否则可能跟不上节奏。我自己在设计这个折叠式共源共栅放大器时踩过不少坑也积累了整套可复现的流程下面逐步拆开讲。2. 折叠式共源共栅的电路架构与设计目标拆分2.1 为什么选折叠式共源共栅它到底解决了什么问题共源共栅Cascode拓扑是老牌技术了基本思想就是用一个共栅管叠在共源管上面用共栅管的低输入阻抗去“锁住”共源管的 VDS。这样共源管的输出电阻被大幅提升直接带来的好处就是放大器本征增益 Av gm * Rout 变大。拉扎维那本《Design of Analog CMOS Integrated Circuits》里反复强调的“高输出阻抗结构”指的就是这个。但普通套筒式共源共栅Telescopic Cascode有个致命问题输入共模范围和输出摆幅相互挤压得厉害。你想让所有管子都待在饱和区输入共模电压、输出摆幅、电源电压三者之间经常只能选两个。折叠式共源共栅就是在这个背景下出现的——它把输入对管和 cascode 管“折叠”开来输入共模可以做得比较低输出摆幅也相对宽松代价是多了一条折叠支路静态电流多了一份功耗略涨。在做这个设计之前我建议你先问自己三个问题第一这级 OTA 是驱动电容负载还是电阻负载第二闭环工作时的反馈系数大概是多少这会直接决定我要把单位增益带宽UGB做到多少、相位裕度留多少余量。第三噪声指标容不容易满足输入管的 gm 够不够大。这些问题在选拓扑和定偏置电流时就已经在起作用了千万别等到画完版图再去想。2.2 设计规格从“大概”到“可落地”的指标清单我这次做的设计参考指标如下你也可以按自己项目需求拉指标目标值备注电源电压 VDD1.8V典型 0.18um 工艺偏中低电压开环直流增益 Av≥ 60dB用于 10-bit 级别 ADC 的 S/H 或开关电容电路单位增益带宽 UGB≥ 100MHz驱动 1pF 电容负载无电阻负载相位裕度 PM≥ 60°保证闭环稳定性输入共模范围 ICMR0.6V ~ 1.2V匹配后续开关电容的共模电平输出摆幅≥ 1Vpp差分输出单端摆幅 0.5V 以上功耗≤ 2mW总电流约 1.1mA 1.8V负载电容 CL1pF差分两端各 0.5pF纯容性负载模拟开关电容场景工艺0.18um 1P6M标准 RF/混合信号工艺模型齐全这里的手法值得多说一句拿到指标不要直接往管子尺寸上冲先看看哪些指标是耦合的。比如 UGB 和 gm 是直接挂钩的UGB gm_input / (2π * CL)这里 CL 在两级 Miller 补偿场景下常取Cc但这个电路是单级 OTA主极点在输出节点所以直接用输出端总电容来算。功耗和噪声也是走同一个 gm 决定所以第一步是定总电流第二步才是分配每个支路的电流第三步才是定每个管子的 gm/id。这个顺序不要反过来否则后面会反复返工。2.3 偏置电流分配先把“钱”分好再谈“怎么花”折叠式共源共栅的电流路径看起来像个 H 形左边 P 管输入对中间折叠点右边 N 管输入对不是我这里采用 P 管输入、N 管负载的标准结构下面把每条支路拆开看。主尾电流源 I_tail 从 VDD 流下来进入输入差分对P 管 M1/M2然后差分对的漏端电流一部分直接流入共栅管N 管 M3/M4另一部分顺着折叠支路流入电流镜负载N 管 M5/M6 镜像到 P 管 M7/M8。所以输入差分对漏端看进去的电流是两部分之和通常设计时让折叠支路电流和 cascode 支路电流相等也就是 I_tail 的一半分给 M3/M4一半分给 M5/M6。我实际定的分配是总电流 1mA输入差分对尾电流 0.4mA每边 0.2mA折叠支路每边 0.2mA共栅管支路每边 0.2mA电流镜负载每边 0.2mA。再加上偏置产生电路里还有一些静态电流总量控制在 1.1mA 左右功耗约 2mW。这个分配的核心理由是输入管的 gm 决定带宽而输入管电流只占到总电流的 36% 左右剩下的都是为输出阻抗和输出摆幅服务。如果功耗预算更紧可以减少尾电流占比但代价是输入管的 gm 上不去UGB 会掉需要你重新权衡。3. 关键设计工具与仿真环境的搭建细节3.1 建立 gm/id 查找表从零搭一套属于自己的“晶体管数据库”用 gm/id 方法之前必须先确定工艺库里管子的“性格参数”。这个表建一次能管整个项目甚至能用到下一个项目里前提是工艺不变。具体做法是在 Cadence 里搭一个简单的 DC 扫描测试台把 NMOS 和 PMOS 分别接成二极管形式扫描栅压 VG固定 VDS记录漏电流 ID、跨导 gm、输出电导 gds、各端电容 Cgg、Cgd、Cgs。然后导出数据用计算器算出 gm/id、gm/gds、ft特征频率等衍生量存成 CSV。之后在 MATLAB 或 Python 里插值成查找表横轴是 gm/id 值纵轴是归一化电流 ID/W、本征增益 gm/gds、特征频率 ft 等。这里有个关键细节扫描 VDS 时不能只固定一个值因为折叠式共源共栅里不同管子的 VDS 工作点差异很大输入管 VDS 接近 Vov负载管 VDS 可能接近 VDD。所以我建议做两组表一组是 VDS 0.3V用于低压摆幅管子另一组是 VDS 0.6V用于输出级和共栅管。如果你嫌麻烦至少硅验证过的折中值是 VDS 0.4V~0.5V。我自己在做 0.18um 工艺时实测不同 VDS 下的 gm/id 曲线大约有 10%-15% 的偏差所以表建得细一点后面每一步计算都不会翻车。有了查找表设计过程就变成“查表旅行”根据指标确定每个管子需要的 gm/id → 查表得到归一化电流 ID/W → 结合电流 ID 算出 W → 根据本征增益需求微调 L。整个过程不依赖平方律公式完全以仿真数据为基准准确性比你手算高得多。3.2 工具链Cadence 环境下的操作顺序与文件管理我在这个项目里用的是 Cadence IC6.1.8 spectre 仿真器工艺库是某家 0.18um 混合信号工艺。整体流程是先在 Library Manager 里建一个专用库把 testbench cell 和主放大器 cell 分开别混在一起。主放大器只用 schematic、symbol、layouttestbench 里放激励源、负载、偏置电路这样后期 LVS 和寄生提取时清爽得多。仿真文件的组织也有讲究每轮参数扫描dc、ac、stb、noise都单独建一个 config 和 corner 组合常用 corner 用 text 文件存好千万别直接在 ADE L 里手动改。我现在习惯把工艺角、温度、电源电压组合提前配好tt/27°C/1.8V 作为典型ss/85°C/1.62V 作为最差ff/-40°C/1.98V 作为最快三组跑一遍。gm/id 查表本身只基于典型角但最终设计验证要靠这三个 corner 来兜底否则流片出来就是个定时炸弹。另外初学阶段强烈建议开一个“计算器”窗口随时用 Cadence Calculator 里的 value() 函数提取 dc 工作点数据再写进 Excel 做记录。你嫌麻烦也可以直接导出 csv 用 Python 做后续处理。数据记录这一步不可省调参时你要能随时回答“我改了哪个管子的 W导致增益掉了 5dB”没有记录只能从头再试。3.3 为什么我不建议纯靠手算平方律公式一个简单的反例很多教材把 MOS 管电流公式写成 ID 0.5μnCox*(W/L)(Vgs-Vth)^2看起来很美但现实中这个公式在 0.18um 工艺下误差已经能到 20%-30%到 65nm 以下直接误差翻倍。原因有三短沟道效应导致载流子速度饱和实际电流比平方律预测的小沟道长度调制让 ID-VDS 曲线明显上扬输出电阻不再是一个稳定的“1/λID”还有漏致势垒降低DIBL会让 Vth 随 VDS 漂移Vov 本身都定义不精准了。你需要理解的不是平方律公式本身而是它在长沟道、低压、小尺寸条件下才近似成立。gm/id 方法之所以能成为业界主流核心就是它把设计参考系从“公式”切换到了“工艺真值表”用查找表绕开了所有模型误差。4. 核心设计与仿真验证实操4.1 输入对管设计带宽和噪声的“发动机”输入对管用的是 PMOSM1/M2因为 PMOS 的 flicker 噪声通常比 NMOS 小一个量级而且在这个工艺下 PMOS 的 gm/id 曲线更“慷慨”可以用较小电流获得可观的跨导。设计过程中我先根据总电流分配定下每边电流 ID200uA然后查 PMOS 的查找表目标 gm/id 取 15 左右。为什么取 15因为在这个工艺下gm/id15 对应的 Vov 大约在 130mV 左右这是一个经典平衡点跨导效率够高但管子也不会退化成弱反型导致速度太差、匹配变差。查表得到 ID/W 大约是 15uA/um不同工艺差异较大以你的表为准那么 W 200uA / 15uA/um ≈ 13.3um我取整成 14um。沟道长度 L 先取工艺最小值的 3 到 5 倍也就是 0.5um 上下因为输入管不需要太长的 L长度太大会拖累寄生电容影响 UGB。然后用 L0.5um、W14um 放到 testbench 里去仿真看看实际 gm 和带宽是否达标。注意一件事gm/id 方法给出的尺寸只是“初值”不是“终值”。仿真之后还要根据增益、带宽的实测结果微调。但微调的效率远高于盲调因为你已经知道往哪个方向动。比如如果 UGB 偏低 10%你需要的是提高输入管 gm 10%那按 gm ≈ 2*ID/(Vov) 来看可以把 W 调大 20% 左右或者微调尾电流。这种“带着方向去调参”就是 gm/id 方法最大的优势。4.2 共源共栅管与折叠支路输出阻抗的“承重墙”共源共栅管M3/M4的作用是提升输出阻抗所以它本身的 gm 不需要特别大但 ro 要足够大。设计目标是让 M3/M4 的本征增益 gm/gds 大于 20 以上这样它不会成为输出阻抗的瓶颈。我在查找表里查 N 管在 gm/id10 左右时的 gm/gds这个工作点下 Vov 大约 200mV本征增益约 30够用。每边电流 0.2mA查到的 ID/W 约为 40uA/um所以 W 0.2mA / 40uA/um 5um。L 取长一点我用了 0.6um因为长沟道能显著提高 ro代价是寄生电容略增但对输出节点影响可控。折叠支路的设计重点是控制共模电平。折叠支路电流如果和共栅管电流不匹配折叠点电压会漂移进而让输入管 VDS 偏离预期甚至进入线性区。所以我让折叠支路电流严格等于共栅管电流电流镜负载 M7/M8 复制 M5/M6 的电流形成高阻抗输出。这里需要注意镜像管 M5/M6 的尺寸一定要一致M7/M8 也一致L 可以比最小值大一些因为镜像精度直接决定输出共模稳定性和 CMRR。我实际取了 L0.5umW4um失配控制在 0.1% 以内基本满足要求。还有一个容易忽略的点折叠点的寄生电容。折叠点是对地寄生电容比较大的节点它和输入管的 gm 会形成一个非主极点搞不好就吃掉一大截相位裕度。所以 M3/M4 的 W 不能一味取大L 也要适度。这个经验我在后面“常见问题”里还会展开讲这里先留个印象。4.3 电流镜负载与偏置电路决定共模电平和 PSRR 的基底电流镜负载由 M5/M6 和 M7/M8 构成M5、M6 是二极管连接的 N 管M7、M8 是共源极 P 管。它为输出节点提供高阻抗负载同时建立输出共模电平。电流镜的镜像精度取决于两只管的 VDS 是否一致、尺寸是否匹配。如果 M5 和 M7 的 VDS 差得远镜像电流就有系统性误差输出共模会偏离目标遇到这种情况就要适当加长 L降低沟道长度调制的影响。偏置电路我给的是最简单的“一个基准电流源 一组 cascode 偏置”的结构外部基准电流 50uA 流入二极管连接的管子然后通过电流镜复制到尾电流源、折叠支路、共栅管栅极。这里要特别留意偏置管自身的 gm/id 也要查表设计不能随便给尺寸。偏置电路的静态电流虽然占比小但它不稳会带动整个放大器的偏置点漂移所以我在偏置管上同样走了查表流程L 取大一点以保证匹配功耗多花几十微安也值得。如果项目对 PSRR 要求高可以把偏置电路改成 cascode 电流镜代价是额外消耗一些电压裕度。我这次设计 1.8V 电源下还有 0.2V 左右的裕量所以还是用简单结构把面积和复杂度省下来。你要是在 1.2V 电源下做折叠式共源共栅的电压裕度会非常紧张建议提前算清楚每只管子的最小 VDS否则 DC 仿真直接报一堆管子进入线性区。4.4 开环 AC 仿真与稳定性验证带着方向去看波特图尺寸和偏置都定好后进入仿真验证环节。第一步先跑 DC打开“DC Operating Point”检查所有管子是否在饱和区。具体检查项包括输入管 VDS 是否大于 Vov共栅管 VDS 是否足够电流镜管 VDS 是否匹配。这里你能体验到 gm/id 设计的另一个好处因为所有 Vov 都是明确设计的所以工作点是否异常一目了然。如果某只管子的 Vov 和预期差太多一定是尺寸或偏置出了问题查起来很快。第二步跑开环 AC。testbench 搭法是在放大器差分输入端加一个交流小信号源比如 1V 的 ac 幅度实际是差模输入输出端接 1pF 电容到地。开环时要注意 DC 工作点OTA 输出必须通过某种方式稳定在共模点才行常见做法是加一个很大电阻的负反馈比如 1GΩ把输出 DC 拉到共模电压或者使用 ideal CMFB。用 large resistor feedback 会引入一个极低频零极点但它和主极点隔得很远不会影响 100MHz 附近的带宽判断所以工程上完全可用。跑完之后看增益和相位曲线。我的目标是 DC 增益 ≥ 60dB、UGB ≥ 100MHz、相位裕度 ≥ 60°。第一次仿真结果往往是增益够但相位裕度不够或者 UGB 偏高但增益差一点这些后面都有对应调整方法不要慌。4.5 噪声仿真与小信号参数提取确认“发动机”真的安静放大器用于开关电容电路时噪声指标通常用“输入等效噪声”来评估。通过对输出噪声谱除以信号增益的平方就能换算成输入参考噪声。设计阶段关注两个数低频段1kHz 左右的 flicker 噪声谱密度以及高频段比如 1MHz 以上的白噪声本底。输入管若是 PMOS 且面积够大flicker 噪声会显著降低。若噪声超标改进方向有加大输入管面积W*L 乘积、增大输入管 gm、降低负载管噪声贡献。这些调整都会和带宽、功耗互相拉扯需要反复权衡。小信号参数提取也要做。AC 仿真后可以在“Results → Direct Plot → Main Form”里看 gm、gds、Cgs、Cgd 这些寄生参数。把它们和查表值对比如果偏差超过 20%说明某些管子的工作点偏得比较离谱优先级最高的是检查 VDS。我实际遇到过一次输入管 VDS 只有 80mV、而设计值 130mV 的情况后来发现是共栅管 W 取太小、VDS 被挤掉了把 M3/M4 的 W 增大 40% 后 VDS 恢复到 120mV整套指标才拉回来。4.6 尺寸微调与 PVT 复核从“仿真能跑”到“流片靠谱”尺寸微调阶段我的操作策略是“一次只改一个变量”。如果 UGB 不够先调整输入管 W观察带宽变化趋势记录下来如果相位裕度不够优先调整共栅管尺寸或补偿方式而不是去动输入管。改完之后一定要跑一遍 tt、ss、ff 三个 corner 的 AC 仿真看看增益、UGB、PM 是否都满足要求。在 ss/85°C/1.62V 这种最差条件下通常 UGB 会掉 20% 左右PM 也会恶化所以设计初就要留足余量。我的经验是把典型角的 UGB 做到指标的 1.2 到 1.3 倍PM 至少做到 65° 以上才能在全部 PVT 范围内稳住。5. 常见问题与排查技巧实录5.1 相位裕度不够怎么定位是哪个管子拖了后腿这是做单级 OTA 最常见的坑。相位裕度不够的根源通常是在 UGB 附近存在一个“隐藏极点”或者一个“右半平面零点”。折叠式共源共栅里最容易出问题的是三点输入管的 Cgs 和输入共模点电阻构成的极点、折叠点寄生电容和该点等效电阻构成的极点、以及 cascode 管自身引入的高频零点。排查方法是扫一遍温度与工艺角看 PM 在哪个 corner 恶化了。如果 ss corner 恶化严重大概率是因为折叠点极点被拉到了主极点附近此时应减小共栅管的 W或者减小输入管 W 以降低 Cgs。还有一个实践技巧在 AC 仿真里把主极点、第一非主极点的位置直接读出来如果第一非主极点与 UGB 的比值小于 3PM 基本保不住。此时可以考虑加零点补偿电容也可以重调尺寸拉开极距。记住不要在 PM 不够时先检查负载电容——负载电容已经定死你真正能动的是管子尺寸和寄生。5.2 增益总是差 5~6dB可能不是管子问题而是偏置点偏移有一次我的 DC 增益无论如何都卡在 54dB 上不去查了半天发现是折叠点电压偏了 200mV导致共栅管的 VDS 进入线性区边缘ro 大幅缩水。这种问题只看 DC 工作点表不一定能一眼抓出来要打开管子状态检查看每个管子 region 是否饱和。如果共栅管处于饱和区边缘问题多半出在电流镜复制电流不准上。这时候我会把镜像管 M5 和 M7 的 VDS 调成一致——方法是在 M7 的漏端增加一个 cascode 管或者用低电压 cascode 电流镜来改善匹配。加了之后增益一下能拉回 6dB 以上。另一种增益不足是负载管本征增益不够。输出阻抗由 gds 并联决定要是 P 管负载的 ro 只有 30kΩ那无论输入管 gm 多大增益都上不去。这时查表里看 P 管负载管的 gm/gds如果小于 20就应该加长 L 或降低 gm/id 取值让它的工作点进入强反型区以换取更大的 ro。虽然代价是功耗或摆幅但收益相当明显。5.3 单位增益带宽差一点到 100MHz该动谁不该动谁UGB 不够时大部分人会去调输入管 W 往上加但有时候 W 加到很大带宽反而下降。原因是 W 增大后Cgs 和 Cgd 也线性增大这些电容会加重输入节点的寄生导致第一非主极点被压低最终 UGB 受限。此时更合理的做法是在输入管电流允许范围内提高输入管 gm/id或者把尾电流略微加大从源头提高 gm。电流预算还有余量的话把尾电流从 0.4mA 提到 0.5mA输入管 gm 能直接提升 25%带宽问题迎刃而解。还有一种情况是折叠点寄生电容太大导致 UGB 附近出现次级点衰减。这时候减小共栅管 W、降低折叠点寄生比加大输入管 gm 更有效。所以定位问题时要先分清是“gm 不够”还是“极点距离太近”通过 AC 仿真读极点位置就能判断别盲目改 W。5.4 常见问题速查表建议直接截图保存现象可能原因快速排查方向推荐处理DC 增益低于预期共栅管进入线性区查看折叠点 VDS调整电流分配/电流镜结构PM 只有 40°~50°第一非主极点过近AC 仿真读极点位置缩小共栅管 W/加零点补偿UGB 上不去输入管 gm 不足查 DC 工作点 gm增加尾电流或调整 gm/idUGB 随 W 增大反而下降寄生电容拖累比较 Cgs 变化量改用长 L 或减小 W输出共模漂移电流镜失配比较 M5/M7 VDS加 cascode 电流镜/调整 L白噪声本底偏高负载管噪声贡献大查噪声仿真贡献占比降低负载管 gm / 增大输入管 gm低温 corner 性能崩短沟道效应加剧检查各管 VDS整体加大 L留电压裕量6. 设计复盘与个人经验补充这个项目从定指标到 PVT 全部跑完前后大概花了两周其中调尺寸和跑 corner 占了将近一半时间。事后复盘最大的收获不是那一版能跑的电路而是对“每个管子为什么用这个 gm/id”有了系统性的判断力。以前拿到一个 OTA我只能凭经验给尺寸出了问题不知道从何下手。现在只要扫一遍所有管子的 Vov 和 gm/id就能快速定位到“哪个管子的工作点不合理”再针对性去改效率完全不一样。最后分享一个小技巧每做完一个模块设计都把每个管子的最终 gm/id、Vov、ID/W、L、W 做成一张表存档。下次做类似模块时直接沿用这套数据作为初值能省掉大量重复劳动。半个小时内出第一版尺寸在项目排期紧张的时候这个习惯救过我很多次。如果你也在用 gm/id 方法做运放建议重点体会两个环节一个是“电流分配怎么定”一个是“查表尺寸怎么落”。这两个环节吃透了任何单级运放套筒式、折叠式、甚至是轨到轨输入你都能三天内从零推到可用尺寸剩下的时间留给 PVT 验证和版图设计。这就是 gm/id 方法给我的最大价值把设计从玄学变成工程。