做模拟IC设计这行,Cadence Virtuoso里的AC仿真基本上是天天都要碰的东西。可越是基础的操作,越容易在细节上翻车。前阵子一个师弟把单管放大器频响曲线截图发我,看上去挺正常的一条曲线,增益只有6个dB,相位一路掉到接近-300度,他问我是不是管子接错了。我打开他的仿真环境扫了一眼,问题其实很典型:AC激励源压根没设置对,直流偏置点让他把管子推到了线性区,输出端还忘了接负载电容,频率轴也被设成了线性扫描。这一套组合拳下来,曲线能不怪吗。
AC仿真本身不复杂,但"能跑"和"跑对"完全是两码事。尤其单管放大器这种最基础的电路,恰恰是检验你是否真正理解AC仿真原理的最佳试金石。这篇东西我打算把单管放大器频响仿真从头到尾掰开揉碎讲一遍,从激励源设置、直流工作点检查、输出负载的接法,到频响曲线到底该怎么读、每个拐点背后对应什么物理机制,再到我自己踩过的一些坑,一次性说清楚。不管你是刚上手Virtuoso的学生,还是带项目的新人,照着这个思路走,至少不会再把一条错误的曲线当成宝。
1. 单管放大器AC仿真总出问题的根源在哪里
1.1 先搞清楚AC仿真到底在算什么
AC仿真本质上是对电路做小信号线性分析。仿真器会先在设定的直流工作点上,把每个管子、每个无源器件都线性化成小信号模型,然后给电路叠加一个正弦小信号,在某个频率范围内扫描,算出每个频点上的小信号响应。
这里有个关键点很容易被忽略:AC仿真的结果完全取决于直流工作点。工作点不对,后面所有频响曲线都没有意义。比如你把NMOS偏到了线性区,仿真器照常会给你输出一条"增益曲线",只不过这条曲线对应的已经不是放大器正常的放大状态,而是像一个可变电阻那样衰减信号,你看到的结果自然就是错的。
所以,AC仿真能不能跑出正确结果,第一步不是看曲线,而是先把直流工作点检查明白。我个人在检查别人仿真问题的顺序永远是:先看工作点,再看激励源,然后看负载,最后才轮到看曲线。
1.2 我用来做示例的共源级放大器参数
为了让后面的讨论有具体抓手,我设定一个非常经典的共源级放大器(CS放大器)作为参考电路,参数如下表:
| 参数 | 数值 | 说明 |
|---|---|---|
| 工艺 | 180nm CMOS | 也可以换成其他工艺,规律不变 |
| 增益管 | NMOS,W/L = 20µm / 0.18µm | 单管共源级 |
| 电源电压 VDD | 1.8V | 标准180nm工艺电压 |
| 电阻负载 R_load | 20kΩ | 漏极到VDD的电阻 |
| 输入直流偏置 VG | 约0.55V~0.65V | 需结合工作点微调,让输出在中间电平 |
| 输出负载电容 CL | 1pF | 模拟后级负载 |
| 输入源阻抗 Rs | 0Ω到10kΩ可调 | 这个参数对带宽的影响后面会专门讲 |
这个电路的预期低频增益大致在20dB上下,具体数值会根据实际偏置电流略有浮动。带宽方面,在CL=1pF、输出电阻约16kΩ左右的情况下,主极点应该在10MHz附近。记住"增益约20dB、带宽约10MHz"这个预期值,后面就是围绕它来排查各种异常。
1.3 第一步永远是直流工作点:先让电路"活对"
在Virtuoso里跑AC仿真之前,我会先做一次DC仿真,然后打开原理图的"Annotate → DC Operating Point"把每个节点的电压、每个管子的工作状态都显示出来。
对于共源级放大器,检查三件事:
- 增益管必须工作在饱和区,条件就是VDS > VGS - VTH。如果VDS只有零点几伏,基本可以断定管子进了线性区,AC仿真的结果直接废掉。
- 输出节点直流电平最好在电源电压的一半附近,这样信号才有足够的上下摆幅空间,小信号线性化也才算合理。
- 记录一下gm和rds的具体数值,后面手算验证频响曲线时要用。
如果偏置不对,比如输出节点被电阻下拉到了0.2V,那你首先应该去调输入直流偏置或者电阻值,而不是急着跑AC。偏置没捋顺之前跑AC,得到的每一条曲线都只是在浪费时间,这一点再怎么强调都不过分。
2. 从原理图到仿真台:把激励源和负载一次配到位
2.1 激励源的设置:AC小信号与直流偏置要同时给
在analogLib库里面选电压源时,刚入门的人经常搞混几种源的区别。平常常用的有vdc、vsin、vsource和port这几种。对于单管放大器的AC仿真,最稳妥的做法是用一个支持同时输出直流偏置和交流小信号的电压源,在里面同时设置DC voltage和AC magnitude。
关键就在这个AC magnitude上。很多人跑完仿真发现曲线是一条接近负无穷的直线,原因十有八九是忘记填这一项,或者填成了0。我在实际测试中发现,AC magnitude统一填1V是最省心的做法。
为什么填1V方便?因为AC仿真本身是线性小信号分析,输入1V的信号,输出端的电压值就直接等于电路的电压增益。比如你在输出端看到的幅度是31.6,那增益就是31.6倍,折合成dB的话约等于30dB。这样省去了再拿输出除输入这一步换算,读曲线的时候脑子不容易绕晕。
同时注意,这个1V是小信号的幅度设置,不是直流偏置。直流偏置照样要单独设置到管子需要的栅极电压上,二者是并行不冲突的。
2.2 输出探针、负载电容和源阻抗怎么接
探针接法看似小事,其实也会坑人。正确的做法是在输出节点上挂一个探针,同时把输入端的探针也挂上,在波形计算器里直接用VF("/OUT")/VF("/IN")做比值,这样算出来的才是真正的电压增益传输函数。如果只挂输出探针,默认显示的是输出节点的绝对电压,这个数值在频响图上也可以当增益看,但前提是AC幅度必须恰好是1V。为了保险起见,我习惯直接把输入输出两个探针都加上,用比值方式出图,这样无论AC幅度设置成多少都不会读错。
负载电容CL的接法同样重要。很多初学者画原理图时只画了放大管和电阻,没有加任何负载电容,跑出来的带宽曲线会显得特别宽,可能到好几个GHz都没有明显滚降。这不是你的放大器真的那么快,而是你根本没有给放大器一个真实的负载环境。实际电路后级总有栅极电容、走线电容、下一级的输入电容,所以一定要在输出节点和地之间接一个合理的CL值。
源阻抗这块更隐蔽。如果输入端直接接理想电压源,源阻抗为零,输入节点的极点会被推到无穷远,你在曲线上完全看不到输入极点的贡献。但真实信号源是有内阻的,前一级的输出阻抗通常也有几千到几万欧姆。所以仿真时如果只有Rs=0的曲线,你对带宽的判断很可能是过度乐观的。
2.3 AC扫描参数里的频段、点数和刻度
AC仿真面板里需要设置扫描类型、起始频率和停止频率。扫描类型建议用Logarithmic,也就是对数扫描,起始频率取1Hz或10Hz,停止频率取1GHz或10GHz。频率轴用对数刻度的原因后面第4节会详细展开,这里先记住:频响曲线的极点和零点在频谱上通常跨越好几个数量级,只有对数轴才能把整条曲线在屏幕上完整、均匀地展现出来。
扫描点数默认每个十倍频程给100个点就够用,太少了曲线会有锯齿感,尤其是相位曲线在极点附近变化很快,点数太少会看到折线而不是平滑曲线;太多了仿真时间变长,还会因为数值噪声在曲线上留下细小的毛刺。我一般用每十倍频程100点,个别想看得更细的关键频段会单独用线性扫描再补一段。
3. 频响曲线的正确读法:幅度、带宽与相位
3.1 dB标度和线性标度,先想清楚你要看什么
Virtuoso的波形窗口里可以同时用dB、线性幅度、相位等多种方式显示曲线。新手最容易犯的错,是选择了线性标度,盯着曲线从100倍往下掉,然后自己算半天"怎么没看到-3dB点"。
我的习惯是主图用增益dB20显示,也就是20×log10(输出电压/输入电压)。这种标度下,低频平台段的读数就是放大器的小信号增益,比如20dB就对应10倍,40dB就对应100倍。遇到需要精确比较曲线形状的场合,我才会临时切到线性标度。
补充一个小知识点:dB20和dB10只在测功率时才用dB10,电压增益一律用dB20。我看过有人把电压增益的dB数直接除以10去算倍数,结果对不上号还以为是电路问题,这种低级错误也算高频翻车现场了。
3.2 -3dB带宽到底从哪里量
频响曲线上低频段有一段接近水平的区域,那就是中频增益平台。从高频端往下,曲线开始向下弯,当增益从平台值下降了3dB的位置,对应的频率就是-3dB带宽,也就是放大器的上限频率。
实际操作中我会在波形窗口里打两个Marker:一个放在平台区域比较高的位置,比如10kHz处的增益值;另一个沿曲线往后挪,当增益比平台低3dB时停下来,读到的X轴频率就是带宽。注意一定要先确定平台在哪。有些人看到曲线从几十Hz就开始缓慢下降,就以为带宽只有几百Hz,其实那可能是输出耦合电容或者扫描源的低频限制导致的问题,不是放大器本身的真实频率响应。
单管共源级放大器的频响曲线一般只有中频平台加高频滚降,低频端不会有明显的零点。如果你的曲线在低频端还有额外下降,那通常是你输入端的偏置网络引入了高通效应,需要单独分析。
3.3 相位曲线:共源级从-180度起步是正常的
很多人第一次看到共源级放大器的相位曲线,发现低频段相位是-180度左右,心里就犯嘀咕"是不是仿真器把正负搞反了"。这种担心完全多余。
共源级放大器天生就是反相结构,栅极输入电压上升时,漏极输出电压下降,所以它的小信号增益本身就带一个负号。频响的相位曲线在低频段显示-180度(相当于+180度,两者等价),这才是正确结果,不是反转。随着频率升高,每过一个极点,相位会再滞后90度。一个单极点系统最终会向-270度方向收敛;如果还有第二个、第三个极点,相位会继续往下掉。
所以当你看到相位一路从-180度降到-270度,说明这个放大器在带宽之后至少有一个主极点在起作用;如果继续降到-360度甚至更多,那说明高频部分还有次极点和零点在作祟。
3.4 用Marker和波形计算器把重要频点标出来
仿真跑完不要急着截图,先在波形窗口里把关键信息标注清楚。我的固定动作是:
- 在增益曲线上找到中频平台,放一个Marker,记下增益值。
- 移动第二个Marker到增益下降3dB的位置,记下带宽频率。
- 切到相位曲线,读出带宽频率点上的相位余量是多少。
- 把输入输出电压比值函数存在Output Setup里,方便下次重新仿真后直接调用。
这些标注看起来是小事,但在写报告或者和同事对方案时,能省掉大量来回确认的时间和口舌。
4. 曲线是怎么来的:单管放大器的极点物理
4.1 输出节点的主极点,决定了带宽的量级
单管共源级放大器的频响之所以会有滚降,根本原因是电路里存在各种寄生电容和负载电容,它们与等效输出电阻一起形成了RC极点。
输出节点上的等效电阻包括漏极负载电阻R_load和增益管的输出电阻ro的并联值,记作R_out。输出节点上的电容包括负载电容CL、管子本身的Cdb、还有栅漏电容Cgd的一部分。输出极点频率大致可以写成:
fp_out ≈ 1 / (2 × π × R_out × (CL + Cdb + Cgd相关项))
以我前面给的示例参数来算:R_load=20kΩ,假设NMOS的ro有80kΩ左右,那么R_out≈16kΩ,CL=1pF,这样fp_out≈1/(2×π×16k×1p)≈10MHz。这条曲线的主极点就在10MHz附近,超过这个频率,增益以每十倍频程-20dB的速度滚降。
4.2 密勒效应会把输入电容放大得很夸张
共源级放大器的另外一个重要极点来自输入端。栅源电容Cgs和栅漏电容Cgd都对输入极点有贡献,其中Cgd的影响还会被密勒效应放大。
密勒效应的说法是:跨接在反相放大器的输入和输出端的阻抗,等效到输入端时,数值要乘以(1+增益倍数)。Cgd跨在栅极和漏极之间,而漏极相对栅极的增益是-Av,所以等效到栅极的电容变成了Cgd×(1+Av)。比如Cgd本身只有0.5pF,Av是10倍,等效出来就是5.5pF,如果Av是40dB(100倍),那就变成50pF左右,非常可观。
输入极点频率大约等于:
fp_in ≈ 1 / (2 × π × Rs × (Cgs + Cgd×(1+Av)))
如果信号源内阻Rs很小,比如0Ω,这个极点频率会非常高,对带宽几乎没影响,此时起作用的主要是输出极点。但如果Rs有10kΩ甚至更高,输入极点就会移动到很低的频率,变成整个放大器的主极点,带宽跟着大幅缩水。这也是为什么同一块电路在不同驱动源条件下测出来的带宽会差很多,不是电路变了,是源阻抗变了。
4.3 为什么频率轴必须是对数的
前面铺垫了这么多,其实都在为这里做说明。单个RC极点只在十倍频程范围内就完成从平坦到-20dB/dec的过渡,如果把频率轴设成线性刻度,可能在屏幕最左边挤了1000倍的频率范围,而真正的极点区域只有几个像素宽,曲线看起来像一条从高处垂直摔下来的直线,什么都看不出来。
对数轴的含义是把频率的倍数关系等距化,每十倍频程占同样的屏幕宽度。这样低频、中频、高频的细节都能均匀展开,极点的转折位置一眼就能看到。这是读频响曲线的基本素养。
5. 五个高频翻车现场,每个都能直接照着排查
5.1 翻车一:跑完了,曲线是一条平线,或者完全没有信号
症状是增益曲线全程在-200dB附近趴着,或者输出波形是水平直线。这通常不是放大器本身的问题,而是激励源没设置对。
排查链是这样走的:先双击输入电压源,看AC magnitude是不是0,AC magnitude是不是没填或者填成0。再看输出探针是不是接对了节点。然后看输入直流通路,是不是输入源和MOS管栅极之间断开了。我自己遇到过最离谱的一次,是原理图里输入源连到了地而不是栅极,结果仿真器很"诚实"地给出了0增益的结果。
5.2 翻车二:低频增益只有2倍,和手算差了几十倍
这种情况十有八九是直流工作点不对。如果管子被偏置到了线性区,增益会变得非常低;如果偏置电流太大导致过驱动电压过大,跨导gm会异常,增益同样对不上。
排查方法是先把DC工作点面板调出来,看管子工作在哪个区,看gm和ID是多少,然后用Av≈gm×(ro∥R_load)这个公式手算一遍。如果手算和仿真对不上,说明你手算用的参数和仿真工作点不是同一套数据;如果工作点本身就错了,那就先调整偏置,比如改输入直流电平,把输出拉到接近VDD的一半。
另一个容易被忽略的原因是你把输出探针接到了输入节点上,比例算出来自然接近1。这种错误虽然低级,但我真的见过不止一次。
5.3 翻车三:带宽只有几十kHz,换个源电阻又好几十MHz了
这个问题在找bug阶段最让人困惑。同一个放大器,平台增益都一样,唯一区别就是输出带宽差了几十倍。
比如用理想电压源直接驱动时带宽10MHz,看起来很正常;但加上一个10kΩ的源阻抗之后,带宽掉到200kHz。如果不太理解密勒效应,第一反应肯定是"仿真器坏了"。
其实这正是密勒电容放大的效果。低频增益约20dB(10倍),Cgd如果有1pF,等效到输入就有10pF左右,再算上Cgs,输入总电容可能到15pF,和10kΩ源电阻一结合,输入极点大约就在1MHz附近。如果源阻抗20kΩ,那这个值还会更低。所以遇到"换源阻抗带宽突变"的情况不要慌,先在计算器里分别看输入节点的阻抗和电容,确认主极点位置,再回来对照公式。
5.4 翻车四:相位曲线高频段掉到-360度以下
相位曲线往-360度方向一路走,看起来好像很吓人,其实只要极点数够多就正常。单管放大器在很高的频率下,除了主极点,还有次极点以及晶体管的寄生极点,三个极点叠加起来相位就能到达-450度甚至更往下。这是物理事实,不是错误。
但反过来,如果相位曲线高频段出现了往上翘的拐弯,那就要格外留意了,这通常说明电路里存在零点。零点可能来自栅漏电容Cgd的前馈通路,也可能来自某些寄生路径。零点在频响曲线上表现为相位回升和增益下降速度变缓,严重时会让增益曲线在高频出现一个平台甚至反翘。如果是在做反馈系统的稳定性分析,这种高频零点的存在感会变得至关重要,绝不能忽略。
5.5 翻车五:波形上长满毛刺,曲线一点也不光滑
曲线出现明显毛刺,第一反应不要怀疑仿真器坏了,先检查扫描设置。每十倍频程只给十几个点,曲线在高频段转折区域就会因为采样密度不够而出现锯齿。把点数增加到100点甚至200点,毛刺一般就没了。
还有一种毛刺来源是数值噪声,尤其是输出阻抗非常高、电流非常小的电路中更容易出现。这时候可以试试把仿真精度等级调高,或者把扫描频段的起始频率稍微提高一点,避开数值异常的低频区域。
6. 让频响曲线真正可靠的交叉验证方法
6.1 用DC工作点参数手算反推,曲线不是孤证
仿真跑完,不要急着存档。我在确认一条频响曲线可信之前,一定会用DC工作点里读出来的gm和ro手算一遍低频增益,再用R_out和CL估算一遍主极点频率。把所有数对上了,这条曲线才算真正钉死。
以示例电路为例:假设仿真显示ID=60µA,VOV=0.15V,那么gm≈2×ID/VOV≈0.8mA/V。如果工作点显示ro=80kΩ,R_load=20kΩ,那么R_out≈16kΩ,低频增益Av≈0.8m×16k≈12.8倍,也就是约22dB。带宽估算fp≈1/(2×π×16k×1p)≈10MHz。拿着这两个数字去看仿真曲线,如果平台在22dB附近、-3dB点在10MHz附近,基本可以确认仿真环境正确。
6.2 瞬态仿真交叉验证频域结果
频域结果最好再用瞬态仿真验证一下。做法很简单:把输入源换成vsin,频率放在带宽的百分之一左右,比如100kHz,幅度设成一个小信号,比如10mV,跑一个足够长度的瞬态仿真。测量输出正弦波的峰峰值,与输入的峰峰值相除,得到的倍数应该和AC曲线上100kHz处的增益对应上。
这个方法特别适合排查"AC曲线看着对但其实仿真架设有问题"的情况。因为你用完全不同的两类仿真方式,得到的却是同一个物理量的两种表达,如果它们对不上,肯定有一边出了问题。
6.3 参数扫描看极点移动规律:改变CL验证主极点位置
还有一个很实用的验证手段是参数扫描。在ADE里把负载电容CL设成变量,分别扫描1pF、2pF、5pF三组,看带宽是怎么变化的。
如果主极点确实由输出节点决定,那么CL从1pF增加到5pF,带宽应该近似反比例下降,也就是从10MHz左右降到2MHz左右。如果扫描结果明显不符合这个规律,那就说明主极点另在他处,需要重新审视输入极点或者寄生效应对带宽的主导地位。
这种"让元件参数动起来观察曲线变化规律"的手段,比死盯单条曲线更能暴露问题。很多低频电路的陷阱就是在这种情况下暴露出来的。
最后再分享一个我自己的习惯:每次跑AC仿真之前,先在心里问自己三句话——直流工作点对不对,激励源设置对不对,负载环境合不合理。这三个问题答不上来,跑出来的曲线再漂亮我也不信它。配合上面这套读图和验证方法,单管放大器的频响曲线基本就不会看不明白了。