先从一个经常被问到的电路小问题聊起为什么模拟集成电路里要做电流源而不是直接用一个大电阻问这个问题的人通常刚接触模拟 IC 或者电路原理。乍一听很合理电阻也能限制电流而且线性好、好计算。但真的放到芯片里一个 10MΩ 的电阻占的面积可能比一块测试焊盘还大而一个两管电流镜只需要几个微米。更关键的是电阻只能“决定电流”不能“维持电流”——当负载电压变化时流过电阻的电流会跟着线性变化。而电流源存在的意义恰恰是让电流尽量不随负载走。这个“尽量”做到什么程度就引出了电流源的进化史也解释了为什么共源共栅Cascode会是模拟电路里绕不开的基本句型。这篇文章不打算只讲定义。我更想从“电流源为什么需要进化”出发拆一下共源共栅到底怎样改善了电流源以及实际设计时会踩到哪些坑。我的核心判断是共源共栅不是为了炫技它是用额外的电压余度和电路复杂度换取电流源输出的高阻抗和更强稳定性。理解这个过程比记住一个公式更重要。1. 单管电流源能用但远远不够稳定1.1 理想电流源到底“理想”在哪里要理解电流源的进化先回到理想电流源的画像。理想电流源有两个特征输出电流恒定输出电阻无穷大。不管负载怎么变化输出电流都保持不变。实际电路里我们当然可以造一个理想电流源吗不行。我们能做的是利用某种器件特性构造出一个“近似恒定”的电流。比如最简单的一颗 MOSFET 工作在饱和区时漏电流主要由栅源电压决定受漏源电压影响较小。于是把栅偏置电压固定源端接地漏端接到需要被充电或供电的节点就得到了一个最原始的电流源。这个描述看起来没有问题真正落地时你会意识到这颗 MOSFET 的漏端电压不是固定的。它连接的负载可能会被拉到很高的电压也可能因为 cascade 结构而接近地。当漏端电压变化时电流真的还能保持恒定吗这就是单管电流源最核心的缺陷。1.2 MOSFET 变成电流源但沟道长度调制是难题一颗长沟道 NMOS在饱和区时一阶模型的漏电流公式是[ I_D \frac{1}{2}\mu_n C_{ox} \frac{W}{L} (V_{GS}-V_{TH})^2 (1\lambda V_{DS}) ]这里的 (\lambda) 是沟道长度调制系数。(V_{DS}) 越大有效沟道长度越短电流也会略微变大。于是你得到的电流曲线并不像理想电流源那样水平而是随着输出电压上升缓慢上升。用参数来感受一下在 0.18μm 工艺里一个最小沟长的器件(r_o 1/(\lambda I_D)) 可能只有 30kΩ 到 50kΩ。如果负载电压变化 1V输出电流变化可能达到几微安到几十微安。对于 100μA 的基准电流来说这可能就是百分之几甚至百分之十的误差。在要求 12 位精度的 ADC 或基准源里这种误差完全不可接受。所以你会听到一个说法电流源的“质量”很大程度上由它的输出电阻决定。输出电阻越大负载电压变化对电流的影响就越小电流源就越“理想”。1.3 输出电阻才是“稳不稳”的度量怎么观察一个电流源稳不稳最直接的方法是做直流扫描。把电流源接到一个理想电压源上把这个理想电压源从 0V 扫到电源电压同时监测输出电流。得到 (I_{out}) 随 (V_{out}) 变化的曲线。单管电流源的曲线会有一个明显的斜坡。这个斜坡的斜率就是电流源的输出导纳取倒数就是输出电阻。真正设计时我不会只看曲线本身而是会在工作点附近取两端电流差估算输出阻抗[ R_{out} \frac{\Delta V_{out}}{\Delta I_{out}} ]比如输出电压从 1V 变到 2V电流从 100μA 变到 101μA那么输出阻抗大约是 100kΩ。这个数值在多数高性能场景下不够用。也是在这里很多人会想到电路原理课里的“回路电流法例题”。如果题目里出现理想电流源我们会特殊处理增加电压变量或者使用超节点因为理想电流源的内阻无穷大回路方程里不能直接用电阻串并联。但实际晶体管电流源是一种“有内阻的电流源”它既不是理想电流源也不能简单等效成一个无穷大电阻。理解这一点是后续理解 cascode 的前提我们构建更好的电流源本质上就是在想方设法把这个“内阻”往无穷大方向推。2. 共源共栅用“两层防线”把电压波动挡住2.1 一个直觉为什么要再叠一层管子单管电流源不稳根源在于漏端电压通过沟道长度调制直接作用到电流上。那有没有办法让下面那颗产生电流的管子漏端电压尽量不受负载端影响这就是共源共栅结构最朴素的思路在原来的电流管上面再叠一个共栅接法的管子。下面那管负责把栅压转成电流上面那管相当于一层“盾牌”它承受了负载端的大电压波动让下方管的漏端电压变化非常小。于是电流几乎不变。我用一个更直观的类比单管电流源像一个没有缓冲的送货通道负载端稍一抖动通道宽度就受影响共源共栅像在通道口加了一个守卫外面的扰动必须先推开守卫才能影响里面真正产生电流的部分。这层守卫不是白干的它需要一个小小的工作条件它自己也必须处于饱和区。也就是说上面那管的栅极要有一个合适的偏置电压漏端电压又要足够高才能让两个管子都正常工作。2.2 输出阻抗为什么可以提升一个量级以上很多人第一次看到 cascode 的输出阻抗公式会有点蒙[ R_{out} \approx (g_{m2}g_{mb2}) r_{o2} r_{o1} ]其中 M1 是下面的电流源管M2 是上面叠加的共栅管。把典型值代入比如 (g_m 1 \text{mS})(r_{o1}100\text{kΩ})(r_{o2}100\text{kΩ})那么输出阻抗可以达到 (10\text{MΩ}) 甚至更高。比单管提高了两个到三个数量级。为什么能提升这么多关键是上下两个管子形成了类似“串联阻抗相乘”的效果。负载端的电压变化全部施加在上面管的漏端但上面管本身也有沟道长度调制会让它的源端电压发生极小扰动这个极小扰动又被下面管的输出电阻再衰减一次。两层衰减叠加起来宏观看到的总输出电阻就是乘积量级。如果你想更直观地验证不需要背公式直接在仿真器里搭一个简单的 NMOS cascode 电流源下面管栅极接固定偏置上面管栅极接一个比源极电压高 (V_{TH}V_{OV}) 的电平把两个管子串联起来漏端接扫描电压。你会看到输出电流曲线的斜率比单管明显平坦得多。2.3 代价电压余度和“浪费”的导通压降不过天下没有免费的午餐。共源共栅最大的代价是输出电压摆幅变差也就是电流源正常工作所需的最小输出电压变高了。单管电流源漏源电压只要大于 (V_{OV}) 就能工作在饱和区比如 (V_{OV}200\text{mV})最小输出电压只要 200mV。cascode 以后呢为了保证两层管子都饱和最小输出电压大概是上面管子的过驱动电压加阈值电压再加上下面管子的过驱动电压。以一个典型强反型偏置为例[ V_{out,min} \approx V_{OV1} V_{TH2} V_{OV2} ]如果是 0.18μm 工艺(V_{TH}) 约 500mV两个过驱动各 200mV最小输出电压就要到 900mV 左右。如果用 1.8V 电源电压剩下给负载做摆幅的空间只有 900mV在一些轨到轨输出或低电压应用中就很紧张。所以cascode 不是盲目叠加的。它还带来一个问题上面管子的漏电压可能很大但它无法提供电流增益也不能改善电流的绝对精度它只是“让电流更稳”。这也是很多初学者设计时容易忽略的点高输出电阻不是免费得到的它拿走了可能更稀缺的电压余度。3. 共源共栅电流源的各种演化怎么省电压怎么闭环3.1 基本 cascode 电流镜高输出阻抗版本实际电路里很少单独给 cascode 电流源配一个外部偏置电压而是用电流镜结构配合 cascode 一起出现。最常见的是基本 cascode 电流镜也叫“叠接电流镜”。它的连接方式很简单参考电流从二极管接法的 NMOS 管流入这个管子的栅压同时驱动另一个管子的栅极但是为了使用 cascode还需要给上面两个管子提供栅极偏置。经典做法是用一个二极管接法的 cascode 偏置链产生偏置电压让上下管都处于饱和区。这样做的优点是电路简单电流复制精度高输出电阻高。缺点也非常明显参考支路的二极管连接会消耗额外的电压导致电流源正常工作的最小输出电压接近 (2V_{TH} 2V_{OV})。在电源电压充裕的模拟设计里这是首选结构因为可靠、稳定、设计容易。我在第一次设计偏置电路时习惯先画一个基本 cascode 电流镜然后用 DC 扫描确认每条支路的工作点确认所有管子都在饱和区再根据应用需要决定是否换成低压版本。3.2 宽摆幅低压cascode让电压不再那么紧张电源电压越来越低但阈值电压并没有像理想情况那样等比例下降。于是人们发明了“低压 cascode”也叫“宽摆幅 cascode”。它的核心思想是不要给上面共栅管施加一个大约 (V_{TH}2V_{OV}) 的偏置而是只施加 (V_{TH}V_{OV}) 级别的偏置让下面管子的漏端电压刚好等于它的过驱动电压 (V_{OV})上面管子也刚好达到饱和。这种结构需要一个额外的偏置电路产生一个“比最低漏端电压高一个阈值”的电压。典型接法如下面示意VDD | M3 (diode-connected) ── 产生偏置电压 Vcas | M1 (diode-connected) | GND用这个偏置电压去驱动 cascade 电流镜的上管栅极可以让输出电压最小只需要 (V_{OV1} V_{OV2})省掉了上面管子的阈值电压。对于 1.8V 的电源电压来说这可能就多出了 500mV 的可用摆幅已经相当可观。代价是低压 cascode 对偏置电压的精度很敏感。如果偏置电压偏高下面管的漏端电压会变得过高白白浪费余度如果偏低上面管可能进入线性区输出阻抗大幅下降。设计时通常需要对偏置点做 corner 仿真确保所有工艺角下都还有一定的裕量。3.3 Wilson 电流镜和调节型 cascode引入闭环单靠堆管子提高输出阻抗总有一个极限。如果想再进一步就不能只靠结构上的“串联衰减”而要引入反馈。Wilson 电流镜就是一个经典例子。它在基本电流镜的基础上增加了一个反馈管当输出电流因为负载电压而变化时反馈管会通过改变中间节点电压来抑制输出电流变化。效果就是输出阻抗进一步升高同时匹配性也不错。缺点是电流复制时参考端与输出端的电压条件不完全对称会引入系统失调但在很多模拟偏置场景下是可以接受的。还有一种更现代的“调节型 cascode”也叫 gain-boosted cascode。它在共源共栅结构外面加了一个辅助放大器用放大器钳位下方管子的漏端电压。下面管子的漏端被放大器看成一个虚地电压几乎不随输出变化那下面管子的沟道长度调制就彻底失效了。这种结构下的输出阻抗可以比基本 cascode 再高一个数量级以上常用于高增益运放和深亚微米电流源。但调节型 cascode 不是免费的午餐。增益放大器会引入额外的功耗、噪声和频率极点如果补偿不好整个电流源环路可能振荡。在低频偏置中还容易处理如果用在高速信号通路里需要仔细分析环路稳定性。3.4 怎么选一个实用判断框架做工程选择时我喜欢用三个维度去对比输出阻抗最小输出电压还有偏置复杂度。下面这个表格可以当作设计初期的快速参考。结构输出阻抗最小输出电压偏置复杂度典型场景单管电流源低几十到几百 kΩ(V_{OV})低对精度要求不高的尾电流基本 cascode 电流镜高几十 MΩ 以上(V_{TH}2V_{OV})中电源电压充足时的偏置和 DAC 电流源低压 cascode高几十 MΩ(2V_{OV})中高低电源电压、需要宽摆幅的场合Wilson 电流镜中高(V_{TH}2V_{OV}) 附近中需要匹配且简单实现的电流复制调节型 cascode极高几百 MΩ 以上接近 (2V_{OV})高高增益运放、高精度基准这里的数值不是绝对标准不同工艺和偏置条件下差异很大。真正的设计流程应该是先明确需要的输出摆幅、输出阻抗精度和功耗预算再选择结构而不是一上来就用最复杂的一版。4. 从仿真到落地设计共源共栅电流源的踩坑清单4.1 第一件事是确认所有管子都在饱和区无论选哪种 cascode最容易犯的错误是看起来连接正确但其中一个管子已经进入线性区。这会导致输出阻抗瞬间下降电流源从“高阻态”退化成“导电沟道”整个设计失去意义。我会在仿真初期做三件事用 DC 工作点查看每个管子的 (V_{GS})、(V_{DS}) 和 (V_{OV})。确认下面管的 (V_{DS} \ge V_{OV})。确认上面管的 (V_{DS} \ge V_{OV})。对应到偏置电压上就是上面管的栅压不能太高也不能太低。太高了下面管被压到线性区太低了上面管无法打开。一个常见做法是把输出节点从低电压扫到高电压同时把每个管子的工作区状态也画出来这样能直观看到在不同输出电压下电流源什么时候开始失效。这个“失效电压”就决定了系统允许的最低输出电压。4.2 偏置电压不是“随便给一个值”很多人搭电路时喜欢手动给一个理想的 (V_{bias})比如接一个理想电压源。这种做法在跑通功能时没问题但实际芯片里不会有一个理想电压源在那里等你。偏置电压必须由一个偏置电路产生而且这个偏置电路要能在电源、温度、工艺角变化时仍然保持正确。实际项目里cascode 电流源的偏置常常由参考电流镜的二极管连接支路产生。比如用两个二极管接法的管子串联从中间抽头得到偏置电压。这样做的好处是偏置电压会跟着电流源的电流自动调整不容易失控。如果你在仿真里发现电流源输出电阻没有达到预期先别怀疑结构去检查偏置电压的来源。如果偏置电压是从一个带隙基准来的你需要确认它的输出驱动能力是否足够如果是从外部引脚输入的那它可能就是一颗定时炸弹——外部噪声和 IR drop 都会耦合进电流源。4.3 版图匹配不匹配时再高的输出阻抗都没用很多仿真结果很漂亮的电路一到芯片回来就变样。原因往往不是电路原理错了而是版图失配。电流镜的本质是复制电流。如果两个管子的尺寸、朝向、周围环境不一致即使栅压完全相同电流也不会完全一致。引入 cascode 后又多了两个管子失配源变多。如果不重视版图输出阻抗再高也换不来精度。基本做法是使用 common-centroid 版图布局把需要匹配的管子交叉摆放并加入 dummy 管保证边缘刻蚀一致。高压管路通常不需要太在意但对于电流镜核心管匹配性决定整个芯片的系统失调。如果是低压 cascode还需要特别关注偏置管的匹配。因为低压工作点更靠近线性区一点点失配就可能让某个管子提前退出饱和整个电流源的精度直接崩掉。4.4 排查链路当电流源表现异常时按这个顺序查我在流片后调试或者帮别人看电路时习惯用下面这个顺序排查问题。这套流程也适用于仿真阶段先看静态工作点。把每个管子的工作状态打出来确认全部在饱和区。只要有一个不在后面所有的“高输出阻抗”假设都是空谈。测输出电阻。对输出节点做 DC 扫描测量工作点附近的 (\Delta V/\Delta I)。如果实际输出电阻只有理论值的十分之一说明某个管子可能在饱和边缘。检查偏置电压的稳定性。把电源电压从低到高扫描观察偏置电压是否跟随。如果偏置电压在某个电源电压下突然跳变电流源会在那附近出现异常。检查版图寄生。如果是后仿真结果不对重点看节点电容和电阻特别是 cascode 中间节点。这个节点的寄生电容会影响环路行为寄生电阻会造成额外的直流压降。最后才考虑噪声和稳定性。如果电路有振荡或者输出噪声比预期大得多再回到偏置环路和增益级的相位裕度分析。这套链路帮我解决过很多“看起来原理没错但指标不达标”的 case也是我建议初学者在仿真阶段就养成的习惯。5. 电流源的进化还没停从 cascode 到系统化 bias5.1 工艺演进没有让 cascode 退役而是改变了玩法进入深亚微米和 FinFET 工艺后电源电压越来越低阈值电压并没有等比例下降输出电阻也因为沟道变短而变得很难看。按说 cascode 会更难用但实际恰恰相反高输出阻抗的需求从来没有消失于是出现了大量“变形 cascode”用低压 cascode 让电流源在 1V 甚至 0.9V 电源下工作。用 regulated cascode 配合放大器进一步提升输出阻抗。用 cascode 与斩波、动态元件匹配结合既保持高阻抗又通过开关电容方式消除失配和低频噪声。所以不能说“cascode 过时了”。更适合的说法是cascode 从一个具体拓扑变成了一种设计思想如果你觉得一个电流源的输出阻抗不够就再加一层“电压/电流缓冲”用额外的代价换取稳定性。5.2 温度、工艺角、失配电流源不只是直流电路很多初学者认为电流源是纯静态电路给个偏置就完了。实际上电流源在系统里的表现会受到温度和工艺角影响。同一个过驱动电压下快工艺角电流可能比慢工艺角大 20%这时如果偏置点的余度不够温度升高后某个管子就可能退出饱和。真正实用的电流源是要能配合带隙基准、偏置网络、启动电路一起工作的。你需要的不是一个“高阻抗理想源”而是一个在 (-40°C) 到 (125°C)五个工艺角甚至加了mismatch蒙特卡洛后仍然能落在指标范围内的偏置源。这也是为什么我建议初学者不要只搭单个电流源仿真而是把它放进一个完整的 bias 网络里比如做一次温度扫描画 (I_{out}) vs (T)。如果电流变化平缓说明 cascode 的偏置点设置合理如果温度到某一个点后电流突然跌掉那就要回过去看是不是某个管子已经离开饱和区。5.3 一点判断把 cascode 当“句型”不要当模板如果要用一句话总结这一段我会说不要背 cascode 的电路图然后认为“只要按图连接就完成任务”。你需要理解的是它为什么能让电流变稳它的输出阻抗从哪里来它牺牲了什么以及在什么场景下该用哪种变形。模拟电路里有很多类似的“句型”差分对、电流镜、共源共栅、折叠结构。真正的高手不是记住了所有结构而是能判断当前设计里哪一项指标是短板然后选择最合适的结构去补那根短板。共源共栅电流源就是这种判断力最典型的一个起步练习。你可以从单管电流源开始在仿真里观察它的输出曲线再叠一层管子看那条曲线变平多少然后换低压版本看它能不能承受更低的输出电压最后尝试 regulating circuit看反馈带来的新问题。走完这一圈你对电流源的理解就不会再停留在“用电流源当尾电流”这种表面套用了。回到最开始的问题为什么不用一个大电阻因为电阻只能约束电流不能稳定电流。而共源共栅用一层“盾牌”把电压波动挡在外面让电流源从“能工作”进化成“值得信任”。如果你正在学习这个结构我的建议是先花一天时间在仿真器里把单管电流源、cascode 电流源、低压 cascode 电流源的输出曲线都扫出来对比一下输出电阻和最小输出电压的区别。当你真正感受到那条曲线变平的那一瞬间你就会明白电流源的进化本质上就是不断往“理想”靠近一点点而共源共栅是这条路上最扎实的一级台阶。
