YAOTU INSIGHTS

Cascode电流源:提升输出阻抗的经典模拟IC结构

Cascode电流源:提升输出阻抗的经典模拟IC结构
开头这次我们来看一个模拟集成电路设计里的经典结构——共源共栅电流源也就是常说的 Cascode 电流源。它不只是一个教科书概念而是在电流镜、差分对负载、高增益放大器、带隙基准、ADC/DAC 电流舵等真实电路里到处都在用的基础模块。简单来说普通的单管电流源容易受沟道长度调制效应影响输出电流随电压抖动Cascode 结构在原有电流源管上再叠一层共栅管把输出电阻抬高几个数量级让电流更“稳”。这个结构的核心价值可以概括成四点输出阻抗大幅提升电流源更接近理想恒流源。输出电流对电压变化的敏感度下降电源抑制能力更强。在高增益放大器中用 Cascode 电流源做负载可以显著提升电压增益。配合低压 Cascode 电流镜设计可以在低电源电压下仍然保持高输出阻抗。本文会围绕这个主题做一次工程向的拆解内容包括Cascode 电流源为什么比单管电流源更接近理想电流源、输出阻抗如何计算、低压 Cascode 电流镜怎么偏置、如何在 Cadence/Spectre 或开源工具中搭建仿真验证、需要观察哪些指标、常见的设计误区又在哪里。如果你正在学习模拟 IC 设计或者工作中需要设计高精度电流镜和高增益放大器这篇文章可以直接收藏。1. 核心能力速览能力项说明结构类型模拟集成电路基础结构属于电流源/电流镜族核心作用提高输出阻抗抑制沟道长度调制效应提升电流源精度常见应用电流镜、差分放大器负载、高增益放大器、带隙基准、ADC/DAC 电流舵主要变体标准 Cascode 电流镜、低压 Cascode 电流镜、折叠 Cascode 结构设计难点偏置电压设置、电压余度Voltage Headroom、宽长比选择、版图匹配仿真验证Cadence Spectre、HSPICE、Ngspice 均可是否需要 GPU不需要纯电路仿真CPU 即可批量分析能力支持参数扫描、PVT Corner 分析、蒙特卡洛分析API/脚本集成可通过 Ocean/SKILL、Spectre 命令行或 Spice 网表批量跑仿真适合人群模拟 IC 设计工程师、研究生、集成电路课程学习者这里的“批量任务”和“接口能力”对应到电路仿真场景就是指用脚本批量跑不同工艺角、不同温度、不同尺寸组合的仿真自动收集输出阻抗、电流精度、增益等数据。2. 适用场景与使用边界2.1 这个结构适合解决什么问题先看一个最基本的事实普通单管电流源在理想情况下漏极电流只由栅源电压和宽长比决定。但实际 MOSFET 存在沟道长度调制效应漏极电压变化时有效沟道长度会变输出电流跟着变。结果就是电流源不够“恒”电压稍微抖一下电流就偏了。Cascode 结构就是用来压制这个问题的。它在电流源管 M1 上面再堆一个共栅管 M2让 M1 的漏极电压被 M2 钳位在一个近似固定的电位上。这样一来输出端电压的变化大部分落在 M2 上M1 的 Vds 几乎不动M1 输出的电流自然就稳了。从阻抗角度看Cascode 结构把输出电阻从 rds1 提升到大约 gm2 * rds2 * rds1 的量级这是它最核心的工程价值。2.2 什么场景不适合Cascode 不是万能的。它最大的代价是电压余度。多叠一个管子输出端至少多损失一个 Vdsat低压应用中可能让输出摆幅变小。在电源电压只有 1.2V 甚至 1.0V 的工艺里标准 Cascode 结构很容易遇到“电压不够分”的问题。这时候一般要改用低压 Cascode 电流镜通过额外偏置电路把 M2 的栅压设到 Vbias使得 M1 和 M2 都恰好工作在饱和区同时把输出端所需的最小电压压到 2Vdsat 附近。2.3 版权、隐私与使用边界电流源结构本身属于公开的电路设计知识不涉及版权或隐私问题。但在实际工程中如果你使用的是工艺厂提供的 PDK要注意授权范围PDK 文件、工艺参数、器件模型不能随意传播导出到非授权环境需要遵守工艺厂协议。本文所有仿真思路都基于通用 MOSFET 模型不绑定具体工艺读者用自己的环境验证即可。3. 环境准备与前置条件3.1 仿真工具选择Cascode 电流源的设计验证不需要特殊硬件纯 CPU 就能跑。常用工具分三类商业环境Cadence Virtuoso 搭配 Spectre 或 Spectre APS适合完整的前仿真、后仿真和版图设计流程。开源/教学环境Ngspice、LTspice适合快速验证电路原理和参数关系。脚本批量分析Ocean、Spectre 命令行、Python 解析仿真结果。从工程落地角度看Cadence 环境里最常用的是 ADE L 或 ADE Explorer可以方便地做 DC 扫描、AC 分析和 Corner 仿真。如果只是验证原理LTspice 和 Ngspice 完全够用关键是先把网表和测试思路理清楚。3.2 仿真模型准备需要准备以下内容MOSFET 模型可以是工艺 PDK 的模型库也可以是教科书级别的理想 MOS 模型Level 1/2/3。用 PDK 仿真结果更接近流片但初学验证用理想模型更可控。电源电压根据工艺选择例如 1.8V、3.3V、5V。若是低电压设计用 1.0V 或 1.2V 更能体现低压 Cascode 的价值。NMOS/PMOS 宽长比初值可以先按 W/L 10u/1u 这类常规值起步后续做参数扫描看趋势。3.3 通用检查清单检查项说明操作系统Windows / Linux 均可Cadence 一般跑在 Linux 服务器仿真器Spectre / HSPICE / Ngspice / LTspice 任一模型文件确认模型名、MOS 类型、工艺角声明直流工作点先检查 M1、M2 是否都处于饱和区输出端电压范围确认最小输出电压判断是否满足 headroom 要求端口占用使用 Spectre 命令行批量跑多个仿真时注意并行任务数量和临时文件目录隔离4. 安装部署与启动方式这里的“安装部署”对应到电路仿真就是“搭建电路网表”和“准备仿真环境”。下面分别给出 Cadence 环境操作步骤和 Spice 网表验证流程。4.1 Cadence Virtuoso 环境搭建在 Virtuoso 中新建 Cellview类型选择 schematic然后在原理图中放置两个 NMOS 和一个理想电流源或偏置电压源连接成标准 Cascode 电流镜。具体连接方式M1 是电流源管栅极接偏置电压 Vb1。M2 是共栅管源极接 M1 漏极栅极接偏置电压 Vb2漏极作为电流源输出端。M1 源极接地或接负电源。输出端接一个电压源 Vout 做 DC 扫描。启动仿真时在 ADE L 中选择Analysis 选择dc对 Vout 做 0 到 VDD 的扫描。需要查看输出电流 I(Vout) 随 Vout 的变化曲线。计算输出电阻可对 I(Vout) 求导或直接用print deriv查看斜率。如果需要观察小信号输出阻抗添加ac分析在输出端加 1A 理想交流激励测量该节点的交流电压数值上就等于输出阻抗。4.2 Ngspice 网表验证如果你不想打开大型 EDA 环境也可以直接用 Ngspice 验证 Cascode 的原理。下面是一个通用模板器件参数和模型名需要按实际工艺文件替换。* Cascode Current Source Testbench .option savecurrents * MOSFET model placeholder .model nmos1 nmos (level1 vto0.7 kp200u lambda0.02) .model pmos1 pmos (level1 vto-0.7 kp80u lambda0.02) * Current source transistor M1 d1 g1 0 0 nmos1 W10u L1u * Cascode transistor M2 out vb2 d1 0 nmos1 W10u L1u * Bias voltages Vb1 g1 0 DC 1.0V Vb2 vb2 0 DC 1.6V * Output voltage sweep Vout out 0 DC 0V * DC sweep from 0 to 3.3V .dc Vout 0 3.3 0.01 * Measure output current .print dc I(Vout) .end这个网表里vto、kp、lambda都是 Level 1 模型参数。实际 PDK 模型不会这么简单但思路一致通过 DC 扫描看输出电流随输出电压的平坦度越平坦代表输出阻抗越高。5. 功能测试与效果验证5.1 测试一单管电流源与 Cascode 电流源对比测试目的直观看到 Cascode 结构对电流源精度的改善。操作步骤搭一个单管电流源栅极接固定偏置漏极接扫描电压源 Vout。记录 Iout 随 Vout 变化的曲线。再搭一个 Cascode 电流源同样扫描 Vout。对比两条曲线的平坦程度。预期结果单管电流源的 Iout 曲线有比较明显的上升斜率也就是输出电阻小电流随电压漂移明显。Cascode 电流源的 Iout 曲线在饱和区几乎水平变化输出电流更稳定。判断标准输出电阻至少提升两个数量级即从几十 kΩ 级别提升到几 MΩ 甚至更高才算体现了 Cascode 的收益。常见失败原因M2 没有工作在饱和区。这时候输出电阻提升不明显需要检查 Vb2 是否设置合理。M1 进入线性区。可能是输出端最小电压设置太低或者 M1 的 Vds 被压得太小。5.2 测试二Cascode 电流镜精度测试测试目的验证复制电流的精度即输入参考电流和输出电流之间的偏差。操作步骤搭标准 Cascode 电流镜输入侧用理想电流源 Iref 注入。输出侧接一个固定电压例如 VDD/2。在不同 Vout 下测量输出电流 Iout。改变输出端电压观察 Iout 的偏移量。预期结果在较宽的输出电压范围内Iout 和 Iref 的偏差很小。当 Vout 接近最小输出电压阈值时电流开始明显下跌。判断标准输出电压从 0.5V 变化到 2.5VIout 偏差小于 1%说明电流镜精度合格。5.3 测试三输出阻抗 AC 分析测试目的用小信号分析直接读取输出阻抗值。操作步骤在 Cascode 电流源输出端加 1A 交流电流源激励。在输出节点测交流电压。用计算器或脚本算Vout_ac / 1A结果就是输出阻抗。预期结果低频下输出阻抗很高呈现gm2 * rds2 * rds1的乘积关系。随频率升高电容效应开始显现输出阻抗逐渐下降。判断标准如果模型参数合理Cascode 输出阻抗应在数十 MΩ 级别或更高。具体数值取决于器件尺寸和工艺。5.4 测试四低电压余度验证测试目的确认低压 Cascode 电流镜在低电源电压下能否正常工作。操作步骤把电源电压设到 1.2V。使用低压 Cascode 偏置电路把偏置电压设置到让每个管子刚好 Vdsat 导通。扫描输出端电压观察电流平坦区间。预期结果最小输出电压约等于Vdsat(M1) Vdsat(M2)远小于标准 Cascode 的最小输出电压。电流稳定区间明显变宽。判断标准如果输出端在 0.3V 左右就进入平坦区说明低压设计有效。如果平坦区很窄或者根本没有说明偏置电路设置不对。6. 参数扫描与批量仿真Cascode 电流源的性能受很多参数影响W/L、Vb1、Vb2、温度、工艺角。在工程里不会只跑一组参数通常要批量扫描。6.1 Spectre 参数扫描在 Cadence ADE L 中可以直接把 Vb2 设为设计变量然后做参数扫描设置 Vb2 从 1.2V 到 1.8V步长 0.1V。观察不同偏置下的输出电流曲线。选择一个让输出阻抗最高、电流精度最好的 Vb2。如果需要把自动化流程写成脚本可以用 Ocean。下面是一个简化模板; Ocean script example simulator( spectre ) design( cascode_test ) analysis(dc ?param Vout ?start 0 ?stop 3.3 ?step 0.01) analysis(ac ?param freq ?start 1 ?stop 1G ?dec 10) desVar( vb2 1.4 ) temp( 27 ) run() selectResult( dc ) plot( getData(I.Vout) )6.2 Ngspice 批量扫描Ngspice 中可以用.step直接扫描多个参数.step param vb2 1.2 1.8 0.1 .dc Vout 0 3.3 0.01跑完后可以导出数据再用 Python 或 MATLAB 做后处理。6.3 批量跑 Corner 与 Monte Carlo如果使用 PDK工程中通常会跑这些批次FF、SS、TT、FS、SF 工艺角。温度-40、27、85。电源电压标称值的 ±10%。蒙特卡洛匹配性分析。注意事项每次批量仿真生成独立的输出目录避免临时文件互相覆盖。保存每个 Corner 的输出电流曲线和输出阻抗数据。如果跑蒙特卡洛重点关注输出电流的均值和标准差这决定电流镜的匹配精度。可以用以下伪代码思路组织批量任务# 批量仿真目录模板实际脚本需要按项目环境调整 mkdir -p results/tt results/ss results/ff spectre cascode.scs log results/tt/tt.log spectre cascode.scs param cornerss log results/ss/ss.log spectre cascode.scs param cornerff log results/ff/ff.log7. 资源占用与性能观察电路仿真的“资源占用”和 AI 推理不一样它主要消耗 CPU 和内存显存完全不需要。下面从几个维度给出观察方法。7.1 仿真时间在不同操作下电路仿真的耗时有明显差异我们用表格梳理一下仿真任务计算量预估主要时间消耗DC 扫描单管电流源低数秒到数十秒模型求值扫描点数DC 扫描 Cascode 电流源低数秒到数十秒模型求值扫描点数AC 分析输出阻抗低数秒级工作点计算 频点计算PVT Corner 组合仿真中取决于 Corner 数量每个 Corner 都要重新算工作点Monte Carlo 分析高通常需要几百次迭代每次迭代都重新算工作点后仿真含寄生高取决于寄生网络规模寄生 RC 提取 仿真这里强调一下Cascode 电流源本身只有两个 MOS仿真速度非常快。真正慢的是 Monte Carlo 和 PVT 组合因为它们把同一电路重复跑了成百上千次。7.2 如何观察资源占用在 Linux 服务器上可以用top或htop观察 Spectre 进程的 CPU 和内存占用。如果跑多个并行仿真用以下命令查看htop如果发现 CPU 使用率不满可能不是单核瓶颈而是并行度设置问题。Spectre 多线程需要设置mt参数例如spectre cascode.scs mt87.3 显存占用说明这个主题和 GPU 完全不沾边。Cascode 电流源是 SPICE 电路仿真CPU 和内存即可完成。不需要纠结显存。8. 常见问题与排查方法问题现象可能原因排查方式解决方案输出电流曲线不平稳斜率明显沟道长度调制效应补偿不足Cascode 管不在饱和区检查 M2 的 Vds 是否大于 Vdsat提高 Vb2或加大 M2 的宽长比输出阻抗提升不明显M2 偏置过低进入线性区跑 DC 工作点查看 M2 工作区域重新设置 Vb2使用低压 Cascode 偏置输出端最小电压过高标准 Cascode 结构 headroom 大测量输出电流开始下降的电压点改用低压 Cascode 电流镜仿真不收敛初始工作点不合适环路偏置不稳定检查模型参数改用gmin步进增加初始条件或改用 Spectre 的cmin设置电流镜复制电流偏差大输入输出管尺寸不匹配或 Vds 不等查看输入管和输出管的工作点调整版图匹配设计或使用 Cascode 结构低压下电流源失效电源电压低于 M1M2 所需的最小电压和计算 M1、M2 的 Vdsat 之和使用低阈值器件或采用折叠结构Monte Carlo 仿真时间过长迭代次数过多电路规模大查看仿真日志确认单次仿真耗时减少迭代次数先跑 100 次观察趋势批量仿真日志互相覆盖多个任务共用同一个输出目录检查输出文件命名每个任务独立目录8.1 偏置电压的设置技巧Cascode 电流源最关键的设计点就是 M2 的栅极电压 Vb2 怎么设。如果 Vb2 太高M2 的 Vds 变大输出端最小电压变大压缩了输出摆幅。如果 Vb2 太低M2 进入线性区输出阻抗提升效果消失。更麻烦的是Vb2 的“合适范围”会随 Corner 和温度变化。工程上的做法是给 Vb2 提供一个跟随 PVT 变化的偏置不直接用固定电压。常见方案是低压 Cascode 偏置电路它产生一个恰好让 M1、M2 都工作在饱和区边界的电压。这样一个偏置电路通常包含一个二极管连接的 MOS 和一个偏置电流源通过比例复制得到合适的 Vb2。在仿真中可以先手工扫 Vb2确认最优值然后设计偏置电路替代固定电压源。8.2 最小输出电压的计算对于标准 Cascode 电流源输出端最小电压约等于Vdsat(M1) Vdsat(M2) 可能多余的过驱动。如果每个管的 Vdsat 是 0.2V那么最小输出电压大概在 0.4V 到 0.5V 左右。对于低压 Cascode 电流镜理想情况下可以压到约Vdsat(M1) Vdsat(M2)实际还要留一些余量。在小电源电压工艺中这个数字直接决定输出摆幅非常重要。9. 最佳实践与设计建议9.1 设计流程建议第一次搭 Cascode 电流源时不要一上来就调版图和偏置先按下面流程走搭建基础的 Cascode 电流镜。固定参考电流设置初始偏置电压。DC 扫描输出端电压观察电流变化。确认输出阻抗满足要求。再引入低压 Cascode 偏置电路压 headroom。最后做 PVT Corner 和蒙特卡洛分析。如果用于实际流片再做版图匹配设计。9.2 版图匹配建议模拟电路流片时电流镜的匹配性极其重要。常见的版图建议输入管和输出管保持相同的方向。使用 Common Centroid 布局或交错布局。在器件周围加 Dummy 管减少刻蚀不均的影响。保持连线电阻对称。对要求高的场景可以把一个大管拆成多个并联单位管。从工程角度看Cascode 电流源的版图匹配比单管电流镜更复杂因为多了叠管结构需要同时保证上下两层管的匹配。9.3 参数选择建议参数选择需要结合设计目标这里给出通用的设计思路如果目标是高输出阻抗适当增加 M2 的 gm 比增加 rds 更有效因为输出阻抗正比于gm2 * rds2 * rds1。如果目标是低电压工作需要让每个管的 Vdsat 尽可能小比如使用较大的 W/L但要权衡寄生电容。如果目标是高精度电流复制输入输出管的 W/L 比例必须严格一致最好使用单位管并联方式。如果目标是宽带需要注意 Cascode 结构带来的极点输出节点的寄生电容会影响高频性能。10. 总结与下一步Cascode 电流源是模拟 IC 设计里最值得掌握的基础结构之一。它的本质就是用“叠一个共栅管”的方式把单管的沟道长度调制效应隔离掉换来更高的输出阻抗和更稳定的输出电流。和你熟悉的普通电流源相比Cascode 的代价是输出电压余度但通过低压 Cascode 偏置电路可以把这个代价压到接近两个 Vdsat 的理论极限。如果准备自己动手验证建议先做三件事搭一个最简单的单管电流源跑 DC 扫描记住它的输出电流曲线形状。再搭一个 Cascode 电流源对比同一个输出端电压扫描下的电流变化。用 AC 分析读出输出阻抗确认它是否达到gm2 * rds2 * rds1量级。这里最容易踩的坑是 Vb2 设置不合理导致 M2 进入线性区输出阻抗没有明显提升。先手工扫描 Vb2 找到合适区间再考虑设计偏置电路整体效率会高很多。下一步可以继续扩展的方向有三个用低压 Cascode 电流镜替换标准结构观察低电源电压下的 headroom 改善。把 Cascode 电流源作为差分放大器的有源负载测量电压增益的提升。做一次完整的 Corner 和蒙特卡洛分析看工艺偏差对复制电流精度的影响。Cascode 电流源看起来只有两个 MOS但它几乎串联了模拟设计中所有的核心问题偏置、阻抗、headroom、匹配、PVT 变化。把这一关过掉后面再学折叠 Cascode 运放、带隙基准和高精度 DAC 电流舵思路会顺很多。