简介《模拟CMOS集成电路设计第二版》课后答案以单个PDF文件打包压缩包大小68.45MB面向模拟IC设计入门者、集成电路方向学生及备战考研或求职面试的工程师也可作为相关课程助教与自学者批改参考。内容对应拉扎维经典教材第二章针对NMOS与PFET在不同栅源电压下的漏电流特性给出W/L50/0.5、|VDS|3V条件下的逐步计算过程包括Cox公式推导、查表代入μn、VT、λ等参数、制表并绘制0~3V范围内的转移特性曲线同时涵盖跨导、输出阻抗及本征增益gmro的推导。答案步骤详细清晰能将抽象的器件公式落到具体数值计算与图形表达有助于读者理解模拟CMOS电路中NFET与PFET的导通机理掌握从手算到特性曲线绘制的完整分析范式。已有9953人浏览学习适合课后复习、考前冲刺以及快速建立器件级设计直觉。1. 模拟CMOS课后答案的正确打开方式它是一份计算流程不是参考答案大多数读者拿到这份资源的第一反应是翻开某道题对数字这其实有点可惜。第2章Problem 1的题干只有一句话——W/L50/0.5|VDS|3V画出NFET和PFET的漏电流随|VGS|变化的曲线——答案却走了九步画原理图、判断关断区、写平方律方程、算Cox、查表代参数、逐点列表、再画曲线。它不是把答案塞给你而是把“从物理参数走到一条曲线”的完整链条拆开。这份资源适合正在啃模拟CMOS教材准备考试的学生也适合刚入行做模拟IC、需要把器件模型重新捡起来的工程师。先算通一道题后面放大器、偏置、失配这些章节才站得住。2. 从器件方程到第一张图三步算出ID并复现整条曲线2.1 手算前必须锁定的参数表从Table 2.1读什么Problem 1给的器件尺寸是W/L50/0.5电压给到|VDS|3VVGS从0扫到3V。题目本身不复杂但答案里NFET和PFET各占九步开头先画原理图再写方程顺序很有讲究先把器件接法固定下来再谈公式。这个习惯对手算特别重要因为PMOS的源漏极区分很容易看反画一遍图能省掉后面一多半的符号混乱。答案里真正反复引用的参数只有四个Cox、μn/μp、VT、λ。Cox由εox/tox算出εox在绝大多数教材里取SiO₂的3.45e-11 F/mtox从表2.1查算出来单位是F/m²。这一步最常见的坑是把tox抄成微米而不是米除出来的Cox直接差三个数量级。我一般会在草稿纸左上角先把单位链写一遍µm→m、cm²→m²、fF→F全部归一成SI再进公式后面代入才会顺。VT方面答案在NFET里取0.7VPFET里取0.8V这两个值都直接列在表2.1里。λ在Problem 1里被当成常数查表使用到Problem 3才显式写出λ∝1/L。做题之前我建议先把这四个参数抄成一张小表贴在草稿旁省得每步翻书也能减少“抄错行”这种低级事故。参数对结果的影响注意点Cox决定电流整体系数由εox/tox算出先统一单位μn/μp决定N/P电流差异表2.1直接给μp通常只有μn的1/3左右VT决定导通拐点位置NFET取0.7VPFET取0.8V绝对值λ决定曲线随VDS的抬升Problem 1当常数Problem 3绑定1/L2.2 三步算出ID区域判断、方程代入、单位统一有了参数表手算顺序其实只有三步。第一步判断工作区。这道题VDS固定为3V所以只要VGS超过VT器件基本就落在饱和区VGS小于VT时漏电流直接写零。很多人跳过这一步VGS给0.2V也往饱和区公式里硬代出来的数完全是玄学。判断区域的核心就一条先比较VDS和VGS-VTH再决定用饱和区还是三极管区。本题里VDS远大于过驱动电压全程饱和所以公式只用饱和区那一条。第二步代入方程。饱和区电流公式为ID(1/2)μnCox(W/L)(VGS-VTH)²(1λVDS)。答案把每一项都拆开写先算Cox再代μn、VT、W、L最后把VGS逐点代入。这里要注意PFET的对称处理μ换成μpVTH取绝对值VGS和VDS全部写成|VGS|、|VDS|算出来的电流是正的方向最后再标。第三步是列表、画图。答案每代一个VGS就得到一组ID攒成数据表再描成抛物线。这个“逐点列表”的机械动作其实在替你验证范围VGS接近VT时电流很小VGS大了曲线变陡如果表格里出现“先大后小”或者“突然跳变”说明前面某一步已经错了。手算的目的不是替代仿真而是建立趋势直觉——W、L、μ这些参数进公式后怎样移动曲线脑子里有了这个印象调器件尺寸时才不会每改一次就重新仿一轮。下面这段Python脚本可以复现答案里的表格和曲线保存为plot_id_vgs.py运行import numpy as np import matplotlib.pyplot as plt # ---------- 参数区先从Table 2.1抄一遍全部换成SI单位 ---------- mu_n 350e-4 # 电子迁移率350cm²/(V·s) → 0.035m²/(V·s) mu_p 100e-4 # 空穴迁移率100cm²/(V·s) → 0.01m²/(V·s) Cox 4.5e-3 # 栅氧电容F/m²由εox/tox算得换单位后使用 W, L 50e-6, 0.5e-6 VTHN, VTHP 0.7, 0.8 lam, VDS 0.08, 3.0 def id_sat(mu, vth_abs, vgs): 饱和区漏电流VGS没到阈值给0到了再算 if vgs vth_abs: return 0.0 return 0.5 * mu * Cox * (W/L) * (vgs - vth_abs)**2 * (1 lam*VDS) vgs_arr np.linspace(0, 3, 601) id_n [id_sat(mu_n, VTHN, v) for v in vgs_arr] id_p [id_sat(mu_p, VTHP, v) for v in vgs_arr] plt.plot(vgs_arr, np.array(id_n)*1e3, labelNFET) plt.plot(vgs_arr, np.array(id_p)*1e3, labelPFET) plt.xlabel(|VGS| (V)) plt.ylabel(|ID| (mA)) plt.title(W/L50/0.5, |VDS|3V) plt.legend() plt.grid(True) plt.savefig(id_vgs_nfet_pfet.png, dpi150)代码的逻辑说明id_sat函数先判断导通VGS没到VT直接返回0防止在关断区出现“负电流”或“小电流”假象到VT之后用平方律公式因为题设VDS3V足够大不需要再判断三极管区。参数说明代码里的μn、μp、Cox、λ只是数量级示意值必须替换成你手上Table 2.1的原值否则曲线和答案对不上W、L直接把50/0.5微米转成米省得在公式里再换算。PFET用同一套逻辑只是迁移率小一号、阈值取绝对值输出后你会看到PFET曲线整体比NFET平缓这就是空穴迁移率低的直接体现。2.3 用Python把Table复现成曲线数值必须逐行对得上答案里的数据表是手算时代的产物我们用脚本把它逐行打出来核对比肉眼描图效率高得多print(VGS(V) | ID_NFET(uA) | ID_PFET(uA)) for v in [0.5, 0.8, 1.0, 1.2, 1.5, 2.0, 2.5, 3.0]: idn id_sat(mu_n, VTHN, v) * 1e6 idp id_sat(mu_p, VTHP, v) * 1e6 print(f{v:4.1f} | {idn:9.2f} | {idp:9.2f})这段代码的逻辑说明把离散采样点喂给同一个id_sat函数输出格式就是答案里表格的样子。我习惯“一个函数对应一个模型”这样换μ、换VT、换λ只需要改参数区函数体不用动。参数说明采样点我取了0.5V到3.0V共8个点如果你手里的答案是0.8、1.0、1.5、2.0、2.5、3.0这一组改一下列表就能精确复现。答案里第一个非零点从VGS0.8V开始因为VT0.7V0.8V正好是过驱动0.1V处的采样点这个细节能帮你确认VT有没有抄错。对账时如果ID不一致按这个顺序排查第一看Cox和μn的单位这是差数量级的重灾区第二看VTNMOS用0.7V、PMOS用0.8V别把同一个数直接复制过去第三看区域判断VGS在VT边缘时算出来的应该是一个很小的值而不是0如果连方向都不对回去检查公式里的VGS代进去的是不是绝对值。提示答案里PFET画的是|ID|-|VGS|曲线图上没有负号这是为了把N/P特性放在同一张图里对比不是答案漏了方向。3. 本征增益gmrO从一条公式链看清单管放大上限3.1 gm、rO和本征增益的公式链从电流反推设计第2章Problem 2把约束换成了电流W/L50/0.5|ID|0.5mA要算跨导gm、输出阻抗rO和本征增益gmrO。这里有个很关键的变化——题目没有给VGS所以不能走(VGS-VTH)²的路线得改用gm√(2μCox(W/L)ID)。这个形式在电路设计里更常用因为设计者手里通常只有电流预算过驱动电压是后面才推出来的。rO1/(λID)也一样先看电流再看阻抗。ID固定0.5mA时输出阻抗完全由λ决定而λ在短沟道里和沟长强相关这正是Problem 3埋的伏笔——第三题会把λ∝1/L这个关系显式写出来。本征增益gmrO是gm和rO的乘积答案算完NMOS又算一遍PMOS得到的量级通常落在几十到一百出头这基本代表了单管共源放大器能拿到的电压增益上限。超过这个上限就得靠cascode或者多级结构这是第3章以后的篇幅。用一段Python同时输出三个指标方便对照def mos_params(mu, vth_abs, w, l, id_target): 以电流为约束返回gm、rO、gmrO gm np.sqrt(2 * mu * Cox * (w/l) * id_target) ro 1 / (lam * id_target) return gm, ro, gm * ro gm_n, ro_n, gain_n mos_params(mu_n, VTHN, 50e-6, 0.5e-6, 0.5e-3) gm_p, ro_p, gain_p mos_params(mu_p, VTHP, 50e-6, 0.5e-6, 0.5e-3) print(fNMOS: gm{gm_n*1e3:.2f} mS, ro{ro_n/1e3:.2f} kOhm, gmrO{gain_n:.1f}) print(fPMOS: gm{gm_p*1e3:.2f} mS, ro{ro_p/1e3:.2f} kOhm, gmrO{gain_p:.1f})逻辑说明mos_params把三个量一次算完gm用根号形式对应“已知电流”的设计输入rO直接用λ·ID的倒数返回值里的gm * ro就是本征增益。参数说明id_target传0.5e-3就是把0.5mA换成SI单位W、L依旧用米打印时把mS、kΩ换成人读单位省得自己数零。手算时答案每一步都在查同一张Table 2.1你会发现NMOS的本征增益高于PMOS因为μn几乎比μp大三倍。这个结论在电路里很直观同一电流下NMOS的gm更大单管增益自然更高所以很多放大器输入级优先选NMOS这是有物理依据的。3.2 λ∝1/L带来的参数扫描技巧每翻一倍L本征增益只涨√2Problem 3开始升级先推导gmrO用ID和W/L的表达式再以L为参数画曲线。答案先写出λ∝1/L把它带进rO最后得到gmrO和√(W·L)成正比。这个结果很反直觉你把L从0.5拉到1µm沟长翻了一倍本征增益只乘以√2约1.41倍而不是2倍。原因是gm只随√(W/L)增长rO虽然随L线性增长但gm那头的√L几乎抵消了一半收益。L (µm)归一化 gmrO0.51.001.01.411.51.732.02.003.02.45这张表是按√(W·L)标度算出来的理论值实际短沟道下速度饱和还会再削掉一部分但趋势不变。所以设计时如果为了增益把L拉到3µm面积和寄生电容的代价很大收益只有2.45倍反过来想提升本征增益不如先动W或者电流。答案里画的曲线族就是这个意思你也可以用脚本扫一遍L_list np.array([0.5, 1.0, 1.5, 2.0, 3.0]) * 1e-6 ID_list np.linspace(0.1e-3, 2e-3, 100) for L in L_list: gain np.sqrt(2 * mu_n * Cox * (50e-6/L)) * (1/(lam*np.sqrt(ID_list))) plt.plot(ID_list*1e3, gain, labelfL{L*1e6:.1f}um) plt.xlabel(ID (mA)) plt.ylabel(gmrO) plt.legend() plt.grid(True) plt.savefig(gmro_vs_id.png, dpi150)逻辑说明外层for循环每扫一个L就画一条曲线正好对应答案里“L作为参数”的画法gmrO公式把√ID留在分母体现“电流越大增益越低”的代价这是偏置点选择的根本矛盾——想要增益就得压低电流想要速度就得拉高电流。参数说明lam这里被当作常数因为λ∝1/L已经通过rOL/(λ·ID)吸收进了比例关系如果你手上的表2.1给的是固定λ要先按L归一化再代入。3.3 手算与SPICE仿真对不上时先查什么第一反应查模型等级。教材的平方律公式默认长沟道这道题W/L50/0.50.5µm已经能感觉到速度饱和的影响gm会比平方律预测的低。不要上来就怀疑手算公式公式以本教材参数为前提仿真模型则是BSIM4这种短沟道模型两者有系统性偏差是正常的。第二查λ。答案里λ是表2.1的常数但仿真模型里没有“λ”这个旋钮rO由CLM沟道长度调制、DIBL漏致势垒降低等多个效应共同决定实际VDS下rO是动态的。如果你用自己PDK跑把VDS挂在1V和3V分别测rO能看到明显差异这是模型自带的沟长效应不是手算错了。第三查迁移率退化。VGS扫到接近3V时栅压的垂直电场会把载流子往界面压μn实际值比表2.1低gm会出现“先涨后平”甚至下弯的趋势。手算不会体现这一点所以当你发现仿真曲线在高VGS区往下弯别急着调阈值电压多半是迁移率模型在工作。排查顺序固定成“模型等级→λ→迁移率”能省掉大量无方向的调试。4. 阈值电压的断点在哪里用VDS和VBS两条扫描看清曲线族4.1 VDS作为参数的曲线族三条线意味着什么Problem 4(a)要画ID-VGSVDS做参数。答案明确区分了三个状态VGS小于VT时器件关闭ID≈0VGS刚过VT进入饱和区VGS继续升高而VDS相对变小时进入三极管区。图上最值得看的是断点——每条曲线从近零抬起变成抛物线上升的那个拐点正卡在VGSVT附近。答案里特意提到用斜率确定阈值电压在拐弯处做切线切线与横轴的交点就是VT的近似值这也是工艺表征里常用的外推阈值法。实际做模拟IC时这个图还有一个用途判断器件是否全程饱和。如果VDS从1V开始加曲线族在VGS较高处出现折返说明器件跌出了饱和区后面设计放大器时就要注意给漏端留足电压余量。断点不是骂人的词它是整条曲线的骨架电路设计里所有工作点判断几乎都围绕着它在转。4.2 VBS改变的是阈值电压而不是迁移率体效应的公式与方向Problem 4(b)把VBS做参数曲线会整体左右平移平移的幅度由体效应系数γ决定。答案里采用γ0.45、PHI0.9这一组典型值体效应公式写作VTHVTH0γ(√(2φFVSB)-√(2φF))。VSB越大VTH越大ID-VGS曲线向右偏移。注意体效应不改μ、不改Cox它只移动VT所以曲线的形状不变只挪位置。这一点在电路里很实用当你发现某个偏置点电流和设计值不符先怀疑源和衬底之间是不是多了一个电压而不是去怀疑宽长比写错。比如源跟随器里源极电位被拉高VSB变大阈值跟着上升电流收缩这是很典型的“跟源走”的现象。PMOS的体效应方向和NMOS相反但结论一致源体电压幅度越大|VT|越大。做题时统一用|VSB|代入根号项最后再标正负。答案画出的曲线族里VBS取0、-0.5V、-1V时曲线间距会逐渐变密因为√(2φFVSB)这个根号项的导数随VSB增大而变小这是根号函数的自然结果不是画图误差。4.3 从断点反推工艺参数课后答案没明说但考试爱考的一步既然答案强调“断点处的斜率等于gm”这个信息反过来用就能反推工艺参数。方法是在ID-VGS曲线的饱和段做线性拟合取斜率再延伸到横轴。这种做法不需要仿真器拿手算表格也能完成# 在线性段做一阶拟合外推阈值电压 idx (vgs_arr 1.0) (vgs_arr 1.8) # 挑饱和区线性段 coef np.polyfit(vgs_arr[idx], np.array(id_n)[idx]*1e6, 1) vth_est -coef[1] / coef[0] print(f线性段斜率{coef[0]:.2f} uA/V外推阈值{vth_est:.2f} V)逻辑说明polyfit做一阶多项式拟合得到的斜率就是该区域的gm量纲延长线与横轴的交点就是阈值电压的近似值。参数说明线性段选区很关键取太靠近VT曲线还是弯的取太靠近3V会被迁移率退化干扰我一般取过驱动电压0.3V到1V这一段。如果你算出来的vth_est和表2.1的VT偏差超过0.1V先检查选区再检查λ是否把曲线抬得太厉害。做完这一步答案表格就变成了工艺表征工具不依赖仿真器也能从一个手算曲线里反推出VT和gm考试和面试遇到这类题都能直接套。5. 避坑模拟CMOS习题里最容易翻车的五个细节下面五条翻车记录几乎都是把答案里的手算步骤变成自己的脚本或仿真时踩过的。每一条对应一个具体的检查动作照着做能挡掉八成低级错误。5.1 现象单位代错结果差6个数量级现象把µA当成A代或者把µm当成m代算出来的ID要么10⁻⁶要么10⁶数值完全没法看。原因教材参数表习惯用混合单位——μn写cm²/(V·s)、Cox写fF/µm²、VT写V混在一起直接进公式必炸。解决代公式前把所有参数统一成SI长度用m、电容用F/m²、迁移率用m²/(V·s)算完再把结果换回mA或µA。自查三步看Cox分母有没有m²、看μn有没有除以10⁴、看最终电流量级是否落在µA到mA区间。我习惯在脚本参数区顶部写一行“# 单位SI”的注释逼自己每次确认后再往下写。5.2 现象饱和区公式用成三极管区公式现象VGS1.2V、VDS1V时用三极管区公式算出一组弯折的电流还以为模型公式抄错了。原因没有先判断工作区直接套了一个“看起来差不多”的公式。解决每次动手前先算VDsatVGS-VTHVDS明显大于VDsat就用饱和区VDS小于VDsat才用三极管区。这个判断写在翻开参数表之后、代入数字之前是个顺序问题不是数学问题。自查三步看VDS和过驱动电压谁大、看VGS有没有超过VT、看算出的曲线有没有在某个电压点出现不自然的折角。5.3 现象体效应系数γ的符号搞反现象计算VSB0和VSB1V两种情况发现阈值电压一个变大一个变小然后一头雾水。原因NMOS的VSB定义为源相对于体的电压正常接法是正的PMOS的源和体接法相反直接照抄NMOS公式容易把方向带反。解决先画一个小电路图确认谁是源、谁是体用|VSB|代入根号项最后统一记“源体电压越大|VT|越大”N和P的公式形式就完全一致了。自查三步确认VSB表达式没有负号、确认根号里2φFVSB大于零、确认曲线右移方向和体效应一致。5.4 现象PFET的漏电流方向处理现象PFET计算时把VGS-1.2V直接代入平方律公式得到负电流绘图时横轴也不知道该怎么标。原因平方律公式里的VGS在推导时假设电压为正PMOS实际工作电压为负直接代符号没有物理意义。解决所有PFET计算统一用|VGS|和|VDS|公式里不出现负号算出电流大小后再回到电路图上标方向。答案里PFET曲线和NFET画在同一张图横轴写|VGS|、纵轴写|ID|就是这个约定。自查三步看公式里有没有负号、看电流数值是否为正、看曲线形状是否比NMOS平缓。5.5 现象书上给的参数是典型值不是定值现象把表2.1的VT0.7V代进手算仿真的DC工作点显示0.65V于是去调模型参数。原因教材的参数表是某个工艺角下的代表性数据不是芯片实测值更不是PDK的精确值。解决把课后答案当标尺不当标准。仿真前用PDK的model文件重新提取VT、μ、λ再更新手算表格。偏差在10%以内是正常的超过10%才回头查公式和区域判断。自查三步确认手算用的是表2.1原值、确认SPICE跑的是同一组W/L和电压、确认偏差是趋势性偏差而不是某个点孤立偏大。6. 把课后答案变成参数复盘表仿真前的第一个验证动作6.1 一张表把课本答案变成自己的设计基线前面几章都在讲怎么算这一章落到怎么用。我建议每个拿到新PDK的模拟IC工程师都先把第2章的题目当成标尺跑一遍产出下面这张复盘表指标手算值表2.1SPICE值新PDK偏差结论ID VGS1.2V, VDS3V按平方律公式DC扫描读工作点10%模型匹配gm√(2μCox(W/L)ID).OP节点读gm10%迁移率一致rO1/(λID).OP读gds取倒数记录常规偏差λ体系不同gmrO两者乘积gm/gds同上增益预期这张表的妙处在于把课后答案从一次性作业变成工艺验证基线。每次换PDK只要把这四个指标跑一遍就知道新工艺的迁移率、沟长调制和教材差多少。gds那一行几乎一定会偏因为BSIM模型没有直接暴露λ你需要接受这个客观事实并记录“常规偏差范围”以后设计时心里有数。6.2 每次都强制走的四步验证流程我的习惯是先清单位、再对答案表格、然后跑DC、最后记录偏差。第一步清单位µm、cm²、fF全部归SI五分钟后就能发现一半的问题参数出在这里。第二步对答案表格把VGS从0.5V到3V的ID逐行打印出来和答案比特别是VT附近那一行能暴露阈值设错的低级问题。第三步跑DC用.OP看ID、gm、gds别只看曲线形状工作点数字才是设计的依据。第四步记录偏差把偏差百分比写成一行注释留在脚本里下次换PDK直接对照。这个流程看起来繁琐但真的能在设计翻车前拦住你。从那以后我每次拿到新工艺库都强制自己先拿这套课后答案当标尺扫一遍确认手算、仿真、教材三者对得上再开始跑电路免得辛苦画完版图才发现模型理解错了。希望帮到你。本文还有配套的精品资源点击获取