ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从物理到SPICE:手写MOSFET模型的全流程指南

从物理到SPICE:手写MOSFET模型的全流程指南 从库里拖出一个NMOS符号设置好宽长比仿真跑通波形出来——这是大多数工程师每天在做的事。但模型库里那一串参数VTO、KP、LAMBDA到底是怎么来的它们如何把一块硅片上的物理过程翻译成仿真器能计算的方程很多人其实没有认真追究过。我以前也一样直到有一次需要为一个特殊结构的定制器件建模厂商不提供模型才被迫从零开始用SPICE的行为源手写了一个能反映MOSFET基本工作原理的模型。这次实践让我把半导体物理和电路仿真之间最后一块拼图补上了。这篇文章就是完整记录——从物理原理到方程从方程到可运行的SPICE代码再到参数提取和验证。适合模拟IC初学者、电力电子工程师以及所有对“模型内部到底发生了什么”好奇的人。1. 动手之前想清楚自建模型到底在解决什么问题1.1 直接用库模型和从零写模型差别在哪先从最实际的问题说起为什么放着现成的模型不用非要自己写一个模型库里那些模型比如LTspice自带的VDMOS、ngspice里的MOS Level 1/3/BSIM都是经过厂家或仿真器开发者反复调校的。它们精确、全面但对使用者来说基本是个黑盒。当仿真结果异常时你能做的只有调参数碰运气。我见过太多人把KP从100u改到10u波形不对再改回来完全没有方向感。从零写模型的第一个好处就是模型里的每一个参数都变得透明。你知道VTO是阈值电压改它直接影响哪一段曲线知道LAMBDA是沟道长度调制系数改它会影响饱和区的斜率。这种“能看到因果”的能力在排查仿真问题时极其重要。第二个好处是自由。库模型是固定的拓扑结构你想加一个温度补偿项、模拟一种特殊的漏电机制或者为一个全新的器件结构建模库模型根本改不了只能自己写。从零实现的能力本质上是一种“模型定制能力”。第三个好处可能是最容易被低估的写模型的过程会强迫你把MOSFET的工作原理从头到尾捋一遍。你不是在背“线性区电流公式是什么”而是真的理解为什么VDS很小时MOSFET像电阻、VDS大了又变成恒流源。这种理解会迁移到你设计电路时的每一个决策上。1.2 一条从物理到方程的完整链路从零建模听起来很“硬核”实际上路径非常清晰只有四步把MOSFET的物理机制翻译成数学方程用SPICE支持的语法把方程写出来把方程封装成一个可调用的子电路模型用仿真曲线验证模型是否符合物理直觉。关键是第1步。本文选择SPICE内置的Level 1模型Shichman-Hodges模型作为蓝本因为它的方程足够简单每一个项都能对应一个具体的物理效应是理解建模思路的最佳起点。等你看懂了Level 1是怎么从物理图像推导出来的后面再接触BSIM那种几百个参数的工业级模型至少不会被吓住。1.3 你能从这篇里带走什么读完这篇文章并亲手实践一遍之后你会得到三样东西一个能跑通的、可自定义的NMOS SPICE模型一套从器件手册或实测曲线里提取模型参数的流程还有最重要的对MOSFET工作原理和SPICE仿真机制的深层理解。我在文中用的工具是ngspice免费、开源、跨平台、支持脚本化非常适合做这种“从零开始”的探索。如果你更习惯LTspice我也会指出对应的操作差异。代码量很少核心部分不超过20行一个晚上足够做完并跑通所有验证。2. 先看MOSFET的物理机制再谈抽象成方程2.1 栅极电容一个电压控制的“水闸”MOSFET一共四个端子栅极G、漏极D、源极S、衬底B。对NMOS而言衬底是P型硅源漏是N型掺杂区。栅极金属或多晶硅和衬底之间隔着一层极薄的二氧化硅绝缘层——这就是一个电容。这个电容是MOSFET的灵魂。栅极上施加正电压电场穿过绝缘层把P型衬底表面的空穴推开吸引电子聚集。当栅压足够高衬底表面从P型翻转为N型形成一层导电的“反型层”也就是沟通源极和漏极的沟道。沟道一旦形成源漏之间再施加电压就会有电流流过。用水闸来类比非常贴切栅极电压是控制闸门的手柄沟道是水道源极是上游水库漏极是下游。手柄抬得越高闸门开得越大流过的水就越多。不同的是MOSFET的“闸门”不是机械结构而是电场控制的电荷层所以它的响应速度可以做到纳秒甚至皮秒级别。2.2 阈值电压沟道形成的临界点沟道不是一加栅压就立刻出现的。栅极电压需要先克服氧化层中的电场、半导体表面的能带弯曲以及制造过程中引入的固定电荷和功函数差才能真正开始吸引电子。这个临界栅压就是阈值电压VTH。在SPICE里这个参数叫VTO含义是“零偏置阈值电压”即源极和衬底之间电压为零时的阈值电压。对标准NMOSVTO通常在0.5V到2V之间。功率MOSFET会高一些比如2N7002典型值在1.5V到2V。VGS低于VTH时沟道没有形成源漏之间理论上没有电流实际存在亚阈值漏电Level 1模型忽略它这个问题后面会专门说。VGS超过VTH之后沟道形成电流才开始流动。所以在模型里VTH像一道门槛判断管子是“关”还是“开”。2.3 线性区和饱和区一根可变电阻如何变成恒流源沟道形成之后源漏之间加电压VDS电子从源极流向漏极形成漏极电流ID。这里的关键在于ID和VDS的关系不是一条直线而要分两个区域来看。当VDS比较小时沟道沿长度方向基本均匀整个沟道像一根电阻电流与VDS近似成正比这个区域叫线性区也叫三极管区。电阻的大小由栅极电压控制——VGS越高沟道内电子越多电阻越小。这正是“电压控制电阻”的本质。当VDS持续增大漏极附近的沟道开始被“夹断”因为漏端和栅端的电压差变小了。这时电流不再随VDS明显上升而是基本恒定管子进入饱和区。不要再把“饱和”理解为电流很大或者管子坏掉了它在MOSFET语境里代表的是“电流达到由VGS决定的极限值不再受VDS控制”。线性区和饱和区的分界点非常清晰VDS VGS - VTH。低于这个值管子在线性区高于这个值管子进入饱和区。这个分界条件等一下会直接写进模型方程里。2.4 体效应与沟道长度调制两个必须知道的不理想因素物理机制里还有两个效应模型如果不处理仿真结果会明显偏离真实器件。第一个是体效应。衬底B的电位并不总是等于源极S的电位。当VSB源极相对衬底的电压增大时衬底表面的耗尽层变宽需要更高的栅压才能形成沟道——也就是说阈值电压会升高。这个现象叫体效应在SPICE里用GAMMA体效应系数和PHI表面势两个参数来描述。在Level 1模型中阈值电压可以修正为VTH VTO GAMMA * (sqrt(PHI VSB) - sqrt(PHI))如果衬底和源极短接VSB为0修正项消失VTH就等于VTO。很多初学者在原理图里直接画三端NMOS衬底内部接源极这时候体效应默认被忽略。第二个是沟道长度调制效应。理想情况下饱和区的电流是一条水平线。实际上VDS增大时漏端的夹断点会向源端移动有效沟道长度变短电流会略微上升。这个效应在模型里用LAMBDA参数表示电流乘以一个因子1 LAMBDA * VDS。LAMBDA通常在0.01到0.1之间尺寸越短的器件这个效应越明显。3. 撑起整个模型的Shichman-Hodges方程3.1 为什么选Level 1而不是BSIM现在已经有足够多的物理基础可以把它写成方程了。SPICE最早的MOSFET模型就是1970年代Shichman和Hodges提出的Level 1模型。它的核心思想是用一个分段函数描述三种工作状态再加上两个修正项处理体效应和沟道长度调制。和BSIM4那种几百个参数的工业级模型相比Level 1简陋得像个玩具。但它有两个不可替代的价值第一每一个参数都有清晰的物理含义适合学习第二方程可以手算方便在仿真前预估结果。对于长沟道器件沟道长度大于约2微米Level 1的精度其实还不差。对于短沟道器件它会明显偏离实际这一点在文章后面会专门讨论。3.2 三个工作区的电流方程与参数表设VGS为栅源电压VDS为漏源电压VTH为阈值电压则Level 1模型的漏极电流ID可以用三个方程描述截止区VGS ≤ VTH ID 0线性区0 VDS ≤ VGS - VTH ID KP * (W/L) * [(VGS - VTH) * VDS - 0.5 * VDS^2] * (1 LAMBDA * VDS)饱和区VDS VGS - VTH ID 0.5 * KP * (W/L) * (VGS - VTH)^2 * (1 LAMBDA * VDS)这里KP是跨导参数等于μCox即载流子迁移率乘以单位面积栅氧化层电容。W/L是沟道宽长比。这个方程组几乎就是上一章物理图像的直接翻译。模型参数汇总如下SPICE参数物理含义2N7002典型等效值说明VTO零偏阈值电压1.6V从ID-VGS转移特性外推KP跨导参数 μCox200uA/V^2工艺相关拟合得到LAMBDA沟道长度调制系数0.02 1/V饱和区曲线斜率决定GAMMA体效应系数0.3 V^0.5衬底偏置影响阈值PHI表面势0.7V一般取0.6~0.8W/L沟道宽长比10/1由设计决定这些参数里VTO、KP、LAMBDA是核心GAMMA和PHI只在考虑体效应时才用。文章第5章会详细说明如何从曲线里提取这些数值。3.3 SPICE仿真器是怎么让这些方程收敛的有了方程还要知道SPICE是怎么用它的。这涉及到仿真器的核心机制牛顿-拉夫逊迭代。SPICE在做直流工作点分析时会把电路中的所有非线性元件MOSFET、二极管、行为源都转换成线性化的小信号等效模型然后用节点电压法求解。关键问题是MOSFET的电流是非线性的线性化只能在某个工作点附近成立。所以SPICE采用迭代策略先猜一个初始电压算出电流和电导解出新的电压再用新电压重新计算反复迭代直到前后两次解的误差小于容差。这也是为什么仿真器需要你提供初始条件或者为什么复杂电路会“不收敛”。模型方程越复杂、导数越不平滑越容易在迭代中发散。Level 1模型的方程相对平滑收敛性通常不错。如果你自己写的B源用了太多阶跃状的if条件可能就会踩到收敛问题的坑——这一点文章第7章会展开讲。了解了这些你已经知道SPICE背后大致发生了什么。接下来进入最激动人心的部分把方程变成能跑的代码。4. 用行为源在SPICE里搭出一个能跑的NMOS4.1 工具选型ngspice、LTspice与QSPICE怎么选我这次实践用的是ngspice。它是经典SPICE的开源延续完全免费跨平台支持脚本化批量仿真。最关键的是它允许你用文本网表做一切事情——和“从零建模”这件事的气质很搭。LTspice也可以做同样的建模但它更偏向图形化操作某些表达式语法也有自己的规则。QSPICE是近年来新出的仿真器界面现代速度很快也支持行为建模但生态还在成长。我的建议是想体验最纯粹的“代码命令行”建模流程用ngspice平时主要用LTspice做电路设计也可以直接按照本文思路在LTspice里建效果是一样的。4.2 第一步用B源实现静态Id-Vgs/Id-Vds特性在SPICE里B源是行为源允许你直接写一个表达式来定义电流或电压。我们要做的就是把Level 1的三段电流方程写进一个B源里。先创建模型子电路文件命名mynmos_level1.sub* mynmos_level1.sub —— 从零实现的NMOS Level 1模型 .subckt MYNMOS D G S .param VTO1.6 KP200u LAMBDA0.02 W10u L1u B1 D S IIF(V(g,s)VTO, 0, IF(V(d,s)V(g,s)-VTO, KP*W/L*((V(g,s)-VTO)*V(d,s)-0.5*V(d,s)**2)*(1LAMBDA*V(d,s)), 0.5*KP*W/L*(V(g,s)-VTO)**2*(1LAMBDA*V(d,s)))) .ends MYNMOS这段代码的核心是B1这一行。IF函数嵌套实现三段判断先判断VGS是否大于VTH小于等于则电流为0再判断VDS是否小于VGS-VTH决定用线性区还是饱和区方程。表达式中的KP*W/L就是前面公式里的KP乘以宽长比我把它放在参数定义中方便调整。在LTspice中这个B源的写法几乎一样。要注意的是LTspice对表达式大小写不敏感但对参数调用方式有区别.param定义的值在引用时用花括号例如{CGS}。ngspice则更宽松。写一个测试网表扫描VGS看转移特性* test_transfer.cir .include mynmos_level1.sub VGS G 0 2 VDS D 0 0.1 XM1 D G 0 MYNMOS .dc VGS 0 5 0.05 .print dc i(vds) .end这里把VDS固定为0.1V让管子始终工作在线性区然后扫描VGS。运行ngspice -b test_transfer.cir就能得到一条ID随VGS变化的曲线。你会在VGS接近VTO1.6V的位置看到电流从0开始爬升这个拐点就是阈值电压。4.3 第二步加上栅电容与体二极管从静态走向动态静态方程只能描述直流特性晶体管工作在开关或放大状态时还必须考虑电容效应。MOSFET栅极和沟道之间存在栅氧化层电容它本质上是分布参数但在Level 1模型中我们把它简化为两个集中电容CGS栅源电容和CGD栅漏电容。它们决定了栅极电压的变化速度也就是晶体管的开关速度上限。同时MOSFET结构里还寄生了体二极管源极到漏极之间天然存在一个PN结。在NMOS里这个二极管是从源极指向漏极方向是S到D。实际电路仿真中如果没有这个二极管当VDS为负漏极电压低于源极时模型会给出0电流但真实器件会通过体二极管导通导致仿真结果和实测不一致。完善后的子电路如下* mynmos_level1_dynamic.sub —— 含电容和体二极管的NMOS模型 .subckt MYNMOS D G S .param VTO1.6 KP200u LAMBDA0.02 W10u L1u CGS1p CGD0.5p B1 D S IIF(V(g,s)VTO, 0, IF(V(d,s)V(g,s)-VTO, KP*W/L*((V(g,s)-VTO)*V(d,s)-0.5*V(d,s)**2)*(1LAMBDA*V(d,s)), 0.5*KP*W/L*(V(g,s)-VTO)**2*(1LAMBDA*V(d,s)))) Cgs G S {CGS} Cgd G D {CGD} Dbody S D MOSBDY .model MOSBDY D(IS1e-14 N1 RS0) .ends MYNMOS在LTspice中电容值用{CGS}和{CGD}引用参数在ngspice中直接写CGS和CGD也可以被识别。Dbody的model里IS是饱和电流N是理想因子这两个值决定了二极管的正向导通特性对大多数仿真场景取默认量级的数值足够。4.4 第三步封装成.subckt子电路并生成符号到了这一步模型已经可以随时被.include调用。但每次写网表都得记引脚顺序难免出错。更工程化的做法是把它封装成子电路定义清晰的引脚名然后在原理图工具里生成符号。ngspice虽然主要是文本操作但子电路本身就是一个封装。使用方式很简单在测试网表中先.include mynmos_level1_dynamic.sub然后通过XM1 D G S MYNMOS实例化模型后面的节点顺序和子电路定义的引脚顺序一一对应。如果你用LTspice步骤更直观把子电路文件放到库目录下在原理图中放置一个通用nmos4符号右键修改为MYNMOSLTspice会自动根据.subckt声明生成对应引脚符号。这个“Auto-generate symbol”功能可以让你不画原理图也能在图形界面里像使用普通器件一样使用自建模型。4.5 快速验证扫描出转移特性与输出特性曲线模型建完先别急着接复杂电路第一时间做两件事转移特性扫描和输出特性扫描。这两个扫描能直观地验证模型是否工作正常。输出特性是固定VGS扫描VDS观察ID的变化曲线族。测试网表如下* test_output.cir .include mynmos_level1_dynamic.sub VGS G 0 2 VDS D 0 3 XM1 D G 0 MYNMOS .dc VDS 0 5 0.1 VGS 1 5 0.5 .plot dc i(vds) .end运行后你应该看到一族曲线VGS固定时ID在VDS较小时近似线性上升到达饱和后趋于平坦。VGS越高饱和电流越大。如果你能看到这个形状说明模型的核心逻辑没有问题。很多第一次写模型的人在这一步会发现电流暴涨或者直接为0大多数情况下是参数单位或者IF条件的边界判断写错了。5. 参数提取与校准让模型贴近真实管子5.1 从Datasheet曲线读出VTO和KP自建模型的参数如果全是拍脑袋定的仿真只有教学意义没有工程价值。要让模型贴近真实器件需要从器件手册的曲线里提取参数。下面用常见的小信号NMOS管2N7002做例子。2N7002的datasheet里通常会给出转移特性曲线ID vs VGS和输出特性曲线ID vs VDS。第一步是提取VTO找一条VDS固定时的ID vs VGS曲线把ID开平方后作图得到一条直线。将这条直线外推到ID0处横轴截距就是阈值电压VTH。对2N7002典型值在1.5V到2V之间。工程上也有更简单的定义比如把ID到达250μA时的VGS记为VTH但建模时用平方根外推法更接近SPICE里的VTO本义。第二步是提取KP。在饱和区ID 0.5 * KP * (W/L) * (VGS - VTH)^2。把ID开平方后对VGS的斜率是sqrt(0.5 * KP * W/L)。如果W/L已知从斜率就能算出KP。对2N7002这类小信号管KP通常在100u到300u A/V^2之间。注意这个值是等效的“拟合参数”不是工艺手册里的物理值因为它已经把迁移率退化、源漏电阻等因素打包进去了。5.2 从输出特性斜率提取LAMBDALAMBDA描述饱和区电流随VDS的上升斜率。提取方法很简单找一条VGS固定时的输出特性曲线在饱和区部分对ID vs VDS做线性拟合得到斜率ΔID/ΔVDS和截距ID0。根据公式ID ID0 * (1 LAMBDA * VDS)LAMBDA就等于斜率除以截距。这里有一个容易踩的坑短沟道器件的输出特性曲线饱和区斜率不是一条直线而是明显弯曲的。用不同VDS范围的拟合结果会差很多。对此我的建议是选实际工作点附近的VDS区间做拟合不要贪心地拟合整个饱和区。Level 1模型本质上就是一条直线近似拟合范围选得不对参数就会失真。5.3 用Python ngspice做一轮自动拟合手工提取参数虽然能理解原理但效率低、精度也不稳定。更好的做法是写一个简单的Python脚本用ngspice批量生成仿真数据和datasheet数据比对再用最小二乘法自动寻参。核心逻辑如下import numpy as np import subprocess # 1. 生成带参数的测试网表 def run_sim(vto, kp, lamb, vgs_fixed3.0): cir f .include mynmos_level1_dynamic.sub VGS G 0 {vgs_fixed} VDS D 0 5 XM1 D G 0 MYNMOS VTO{vto} KP{kp} LAMBDA{lamb} .dc VDS 0 5 0.1 .print dc i(vds) .end with open(tmp.cir, w) as f: f.write(cir) result subprocess.run([ngspice, -b, tmp.cir], capture_outputTrue, textTrue) data parse_ngspice_output(result.stdout) return data[:, 0], data[:, 1] # 2. 定义误差函数用scipy.optimize.least_squares优化 # error target_current - sim_current # 3. 优化完成后回代仿真检查曲线重合度这里只是把框架写出来实际使用时你还需要一个解析ngspice输出的函数或者直接定义误差函数用scipy的优化器迭代。我第一次做的时候三个参数同时优化很容易陷入局部最优后来改成两步走先固定LAMBDA用转移特性拟合VTO和KP再用输出特性拟合LAMBDA效果好很多。6. 模型验证静态、动态与真实器件的对比结果6.1 仿真曲线与理想公式的对账模型建完、参数提取完不能直接拿去用先做一轮验证。最简单的验证是“上帝视角”验证用已知参数仿真看输出是否和用这些参数手算的公式结果一致。比如设定VTO1.6VKP200uW/L10LAMBDA0.02VGS3V。手算饱和区电流0.5 * 200u * 10 * (3 - 1.6)^2 * (1 0.02 * VDS)。在VDS3V时结果约为2.056mA。仿真出来的曲线在这个工作点上应该严格落在公式曲线上。如果对不上说明代码里的IF边界条件或者表达式语法有问题。6.2 共源放大器增益验证静态曲线验证通过后接一个最简单的电路来验证模型在小信号分析中的表现共源放大器。电路是VDD5V漏极电阻RD10kΩ栅极加一个小的正弦信号源极接地。先做直流工作点分析设VGS2V时的静态工作点算出ID和VOUT。计算跨导gm 2 * ID / (VGS - VTH)输出电阻ro 1 / (LAMBDA * ID)电压增益AV -gm * (RD // ro)。然后把理论值和仿真值对比。这种验证不是为了证明电路能否工作而是确认模型的gm、ro这些本质参数和物理公式一致。如果增益偏大或偏小回头检查提取的KP和LAMBDA是否准确。6.3 开关瞬态下的栅电容表现瞬态验证考察电容参数和三极管开关行为。把栅极接一个方波脉冲0V到5V上升沿10ns漏极通过一个1kΩ电阻接到5V观察VDS的下降波形。这时候你会发现栅电容CGS和CGD的值直接决定了开关延迟。Cgs越大栅极电压充到VTH的时间越长开通延迟越大Cgd则通过米勒效应影响上升和下降时间。你可以故意把CGS从1pF改到10pF再仿真一次观察延迟变化这是理解米勒效应最直观的方法之一。6.4 和厂商Level 3/BSIM模型比差在哪最后也是最有教育意义的一步把自建模型和库里的Level 3或BSIM模型放在同一个测试电路下对比。你可能会发现两个明显的差异。第一个差异在亚阈值区。Level 1模型中VGS低于VTH时电流直接是0而BSIM模型在亚阈值区会呈现指数形式的漏电。这导致一些需要精确计算静态功耗或者偏置点很低比如VGS接近VTH的电路用Level 1模型会得出错误的结论。第二个差异在线性区到饱和区的过渡。真实器件由于短沟道效应、迁移率退化、源漏寄生电阻等因素过渡区域是平滑的、非理想的。Level 1模型的分段函数是一个理想化的拐点特性曲线在分界处有导数不连续。这在某些高精度模拟电路里会造成仿真误差。6.5 边界哪些场合适用哪些不适用到这里该给Level 1模型一个明确的定位了。它适合长沟道器件沟道长度大于2到3微米、教学演示、顶层架构验证、电路原理探索。它不适合短沟道先进工艺器件建模、低功耗设计的亚阈值区分析、功率器件的热特性与安全工作区分析、高精度模拟设计。热阻、热效应、噪声、温度特性这些Level 1模型统统没有覆盖。如果涉及这些指标请老老实实用厂商提供的BSIM模型或专用热模型。自建模型的真正价值是作为学习工具和“最小可行模型”帮你建立物理图像和仿真之间的联系。7. 踩坑记录自建模型过程中最折磨人的五个问题7.1 不加体二极管瞬态仿真秒挂第一次建完模型我直接在D和S之间接了个反向电压源做仿真结果电流一直是0。当时还以为是方程写错了排查了半天发现模型里根本没有体二极管。真实NMOS在VDS为负时体二极管会正向导通电流很大而Level 1核心方程只描述了沟道电流这一段完全空白。之后我把Dbody二极管加进去反向工况下的仿真才和实测对上。这个教训告诉我SPICE模型不只是“一个电流方程”它还需要把器件物理结构里的寄生元件都建模进去哪怕它们不是主要工作模式。7.2 单位写错曲线整体偏移SPICE里的单位后缀很反直觉1u是1e-6但如果你在参数定义里写KP200u表达式里又和W/L相乘得到的电流单位是安培。如果某处把u写成了m仿真结果就会差1000倍。更隐蔽的是电容和时间的配合。Cgs1p、栅极驱动电阻10kΩRC时间常数是10ns。如果电容单位写错瞬态波形的边沿速率会完全对不上理论值。排查这类问题的方法很简单算一个工作点的手算值和仿真值对账对不上就检查单位。7.3 收敛失败时该调什么自建模型比库模型更容易出现收敛问题因为你对数值算法的“友好性”没有经过调校。最经典的场景是B源表达式里的IF条件在边界处跳变过于剧烈牛顿-拉夫逊迭代在分界点附近来回震荡最终报“source conductance too small”或者“time step too small”。遇到这种情况先别急着改方程。尝试调节仿真器的收敛参数加.options gmin1e-9 reltol1e-4 abstol1e-12或者对瞬态仿真减小最大步长.tran 1n 5u。如果还不行检查模型本身是否在边界处有导数不连续的地方试着用平滑函数代替硬边界。我在实践中发现把VGS-VTH的判断条件里加一个很小的过渡区间比如用tanh平滑过渡收敛性会改善很多。7.4 亚阈值区一个“0”带来的误差Level 1模型最被人诟病的一点就是亚阈值区电流直接为0。这不仅仅是精度问题有些电路仿真甚至会直接失败。比如一个用二极管连接的MOSFET做电平移位的电路如果工作点正好在阈值附近仿真器可能算出没有直流路径导致无法收敛。如果你需要建模亚阈值漏电可以给B源加上一个指数项ID_sub IS * exp((VGS - VTH) / (n * VT))其中IS是亚阈值饱和电流n是亚阈值斜率因子VT是热电压约26mV。这样模型会在VGS接近VTH时就出现指数上升的电流和真实器件的行为吻合。代价是方程复杂了一点但对理解亚阈值导电机制很有帮助。7.5 什么时候别再用Level 1模型最后一个“坑”其实是我自己心态上的做完自建模型之后有一段时间非常得意什么电路都想用它来搭。直到有一次用来仿一个0.18微米工艺的运放结果增益和噪声全部离谱。这才意识到Level 1模型的应用边界在哪里。如果设计目标是理解原理、验证概念、做长沟道器件的预研自建Level 1模型完全够用。但如果目标是做真正要流片的模拟电路或者要评估功率MOSFET在开关电源里的损耗请使用厂商提供的BSIM模型或者严谨的功率MOSFET模型。自建模型是给你“看清内部”的窗口不是替代工业模型的工具。做完这个模型之后我最大的收获不是那几十行SPICE代码而是再看厂商模型参数时脑子里会自动把VTH还原成反型层的形成过程把LAMBDA还原成夹断点移动的画面把CGS和CGD还原成栅极下方电荷的分布。这种从参数到物理的映射能力只能通过亲手建模获得。如果你也正卡在“会用模型但不懂模型”的阶段抽一个晚上从零写一个最简单的MOSFET模型跑一遍扫描、提一次参数、接一个放大器验证一下。等你能独立做出这件事再回头看那些库模型就完全是两回事了。
返回列表