Silvaco器件仿真入门:从PN结到MOSFET的IV曲线搭建与避坑指南
简介《半导体专业实验补充Silvaco器件仿真》是一份面向微电子与集成电路专业学生、实验课程学习者及初学者的PDF资料聚焦Silvaco器件仿真工具的实际操作。文档以PN结穿通二极管为对象详细交代器件宽度、长度、耐压层厚度及两端高掺杂浓度等结构参数并给出Athena工艺仿真与Atlas器件仿真的求解命令涵盖正向导通I-V特性、反向雪崩击穿特性以及反向恢复特性的完整仿真流程同时延伸到场限环、场板等终端技术解释耐压层厚度与浓度对击穿电压的影响。资源为单个PDF文件共4.43MB内容紧凑清晰既有原理讲解又包含可对照执行的仿真代码与曲线结果便于实验预习和复现。该资料已有1269人学习下载适合需要完成半导体器件课程实验或入门功率器件仿真的读者。1. Silvaco器件仿真在专业实验里补什么从半导体物理到能看的IV曲线补做这个实验的同学最容易卡住的位置不是工艺是那句“把器件结构仿出来”背后的黑匣子教材上的PN结和MOSFET怎么变成一条能写进实验报告的IV曲线Silvaco器件仿真解决的就是这件事用TCAD的方式把半导体物理与器件课上的结构建出来解泊松方程和载流子输运方程得到电流电压特性、电场分布、能带结构。实验室发的那份《半导体专业实验补充Silvaco器件仿真.pdf》核心任务也就是把前几章学的器件搬进仿真器算出能交的数据。这篇笔记面向三类人要交实验报告的学生、刚转TCAD的工程师、想给实验课加仿真环节的教师。我先把结论放在这里Silvaco最难的其实不是命令语法是你不清楚每条语句到底在给器件做一次什么物理设定。把这句话理解透后面所有参数都好说。2. 从最小脚本到第一条IV用Silvaco搭PN结的最短路径2.1 为什么实验课用Silvaco而不是Cadence把工具定位摆正很多刚接触的人会问机房里既有Silvaco也有Cadence为什么实验指导偏偏用Silvaco要回答这个得先分清仿真层次。Cadence里的Spectre是电路级仿真它算的是“用模型代表器件”的电路行为SPICE模型参数来自PDK或者工艺厂提取。你如果直接把手写器件结构丢进去最常见的结果就是“器件未定义”这种报错——因为电路仿真器不认识你定义的网格和掺杂也不负责解半导体方程。Silvaco里的Atlas则属于TCAD器件级仿真它把掺杂分布、网格、物理模型输进去直接在网格上解泊松方程和电子空穴输运方程输出电流电压、电场、能带这些物理量。实验课要验证器件原理必须用后者。Silvaco在实验课里还有一个很现实的好处DeckBuild把网格、区域、掺杂、模型、求解整合在同一个输入脚本里不需要手工准备第三方网格文件。对第一次接触TCAD的人能少踩一层环境配置的坑。机房预装的版本通常是教学版功能上有裁剪但跑PN结和MOSFET这类基础结构完全够用。2.2 最小PN结脚本逐行拆解半小时内看到第一条IV直接给一个能跑通的最小脚本这个脚本对应的是一个上表面p型、下表面n型的垂直PN结二极管结面在y1.0 µm处两侧各0.5 µm的过渡区都覆盖了加密网格。go atlas # 1) 网格定义控制计算精度和耗时 mesh \ x.mesh location0.0 spacing0.1 \ x.mesh location2.0 spacing0.1 \ y.mesh location0.0 spacing0.02 \ y.mesh location1.0 spacing0.05 \ y.mesh location2.0 spacing0.2 # 2) 区域整块材料是硅 region num1 silicon # 3) 电极顶面阳极底面阴极 electrode nameanode top electrode namecathode bottom # 4) 掺杂上半部分p型下半部分n型在y1.0处形成结 doping uniform conc1e16 p.type y.max1.0 doping uniform conc1e17 n.type y.min1.0 # 5) 物理模型迁移率、SRH复合、俄歇复合 models conmob srh auger # 6) 求解方法迭代上限与回退次数 method itlimit25 maxtrap5 # 7) 从零偏初始化然后正向扫描 solve init log outfdiode.log solve vstep0.05 vfinal1.0 nameanode solve vstep0.2 vfinal5.0 nameanode # 8) 保存结构并绘图 save outfdiode.str tonyplot diode.str逻辑说明不管后面结构多复杂PN结二极管的仿真框架就这么几段。go atlas进入器件仿真模块mesh定义二维计算网格x方向2 µm、间距0.1 µmy方向在0到1 µm加密到0.02 µm1到2 µm逐步放宽到0.2 µm。结附近的网格最密这是为了解析耗尽层的载流子变化。region声明材料类型这里整块都是硅。electrode把阳极定义在顶面、阴极在底面电极名字后面solve里要用。doping两行分别定义上1 µm是1e16 cm⁻³的p型、下1 µm是1e17 cm⁻³的n型两个掺杂区间在y1.0处自然形成PN结。models选择浓度依赖迁移率、SRH复合和俄歇复合第4章会展开讲。参数说明conc是掺杂浓度单位cm⁻³Silvaco内部统一用厘米克秒制vstep是相邻两步的电压增量vfinal是本次扫描的终止电压name指明电压加在哪个电极。这段脚本在0到1 V用0.05 V小步长是因为PN结开启前后电流指数上升落点太少曲线会失真过了1 V电流变化平缓0.2 V一步足够。想改成反向扫描把vstep和vfinal改成负值即可但反偏击穿区域的收敛问题要另外处理后面避坑章会讲。2.3 仿真卡住先看log日志思维比跑通更重要跑完脚本后工作目录里会多出两个文件diode.log和diode.str。log是按扫描顺序记录每个偏置点对应的电极电流电压str是最后一个偏置点也就是5 V正向偏置时的结构快照里面有掺杂分布、能带、电场、载流子浓度等全部场量。用tonyplot可以把log画成IV曲线把str画成结构图再在显示菜单里切换contour或vector看不同物理量。我的习惯是第一反应永远先看log不是看报错。报错只告诉你哪一行语法出了问题log能告诉你物理上哪里出了问题。比如电流曲线在某一小段开始剧烈振荡那大概率是步长跨过了收敛半径而不是脚本写错。养成先开log日志的习惯后面所有排错都会省一半力气。这个习惯在MOSFET仿真里更明显我们往下看。3. 区域、网格、掺杂、电极把器件结构写进Silvaco的四张映射表3.1 从教材结构到region先画图再写代码习惯做法是拿到实验需求先手绘一张纵向剖面图把各层材料、厚度、掺杂类型和浓度、电极位置标清楚然后才开始写region。教材里“P型衬底上做N阱上面长栅氧化层再淀积多晶硅栅”这句话到了TCAD里就是三个region加电极定义。region的语义是把计算域按材料划分硅、氧化硅、多晶硅、氮化硅各占一个编号。Silvaco用region边界处的网格点做材料属性赋值所以region边界必须和网格线重合否则要么报“region not aligned to mesh”要么把边界插值到一个四不像位置。最怕的是后一种表面结构图看不出问题一算电学特性就全错。下面这个MOS结构是实验课最常见的入门案例我把结构和掺杂写完整。go atlas # 计算域x方向0-7 umy方向0-1.5 um mesh \ x.mesh location0.0 spacing0.2 \ x.mesh location1.0 spacing0.1 \ x.mesh location1.5 spacing0.05 \ x.mesh location2.0 spacing0.02 \ x.mesh location5.0 spacing0.02 \ x.mesh location5.5 spacing0.05 \ x.mesh location6.0 spacing0.1 \ x.mesh location7.0 spacing0.2 \ y.mesh location0.0 spacing0.01 \ y.mesh location0.05 spacing0.01 \ y.mesh location0.15 spacing0.02 \ y.mesh location0.35 spacing0.04 \ y.mesh location0.6 spacing0.06 \ y.mesh location0.8 spacing0.1 \ y.mesh location1.5 spacing0.15 # 栅氧化层0-0.05 um region num1 oxide y.min0.0 y.max0.05 # p型衬底0.05-1.5 um region num2 silicon y.min0.05 y.max1.5 # 电极栅跨在沟道上方源漏在两侧衬底从底部引出 electrode namegate x.min2.0 x.max5.0 top electrode namesource x.min0.0 x.max2.0 top electrode namedrain x.min5.0 x.max7.0 top electrode namesubstrate bottom # 衬底掺杂 doping uniform conc1e17 p.type y.min0.05 y.max1.5 # 源漏注入峰值浓度1e20结深0.4um doping gauss conc1e20 n.type ratio0.3 junction0.4 \ x.min0.0 x.max2.0 doping gauss conc1e20 n.type ratio0.3 junction0.4 \ x.min5.0 x.max7.0 # 先不定偏置保存结构查看 save outfmos0.str tonyplot mos0.str逻辑说明这个例子特意把栅氧化层单独建region而多晶硅栅没有单独建region只用electrode namegate top定义。这是初学阶段最不容易翻车的写法栅电极是边界条件不是被求解的材料区域氧化层是绝缘体在器件方程里作为带隙和介电常数的载体真正的半导体求解域是衬底。等你后面需要仿真栅耗尽效应时再把poly区域建出来、给它掺杂、和电极关联。我的建议是第一个能跑的版本结构越简单越好。参数说明junction0.4指结深单位µm对应源漏注入的垂直方向特征长度ratio0.3是高斯掺杂里峰值浓度向衬底浓度过渡的形状参数比值越小纵向梯度越陡。这两个参数和工艺里的注入能量、剂量直接相关实验课里用默认值就行。需要注意的是衬底浓度1e17、源漏峰值1e20单位是cm⁻³写错一个零后面阈值电压就会偏出几百毫伏第5章会重点讲。提示如果第一遍跑通了马上把源漏掺杂浓度改一个数量级再跑一次。你会更快理解TCAD里“收敛”和“物理正确”并不是同一件事。3.2 网格为什么是最“玄学”的输入密度和过渡比网格是整个TCAD仿真里最像玄学的部分。网格不是越密越好密网格让求解矩阵变大内存和迭代次数都上升更关键的是过密的网格在强反型区会让收敛半径变小反而更难收敛。网格密度要跟着物理量梯度走PN结耗尽层、MOS反型层、源漏结曲率区这些地方载流子浓度变化快必须加密衬底深处和中性区物理量平坦网格可以放得很粗。两个经验值可以背下来第一相邻网格线的间距比不要超过1.5从0.01 µm过渡到0.1 µm中间至少要有两三层0.02到0.05 µm的缓冲第二器件里最小的物理特征尺寸至少要有两个网格点去分辨结深0.1 µm结附近网格间距不能比0.05 µm粗。检查网格不要凭感觉。常见做法是打开str文件在TonyPlot里把mesh显示打开网格疏密一眼就看出来再把掺杂剖面切一条一维线看掺杂曲线在结附近有没有锯齿或台阶。有锯齿就是网格不够细或者过渡太急。这两个动作加起来不到一分钟能省掉后面几小时的排错。3.3 掺杂参数选型uniform、gauss、analytic与poly栅掺杂掺杂是Silvaco里最容易“差不多就行”的地方也是实验结果差一个数量级最常见的原因。三类掺杂物各有用途uniform整片均匀掺杂适合衬底背景浓度gauss高斯分布适合离子注入形成的源漏区参数是峰值浓度、结深、退火后的分布形状analytic解析分布适合逼近外延或扩散后的缓变剖面。再说多晶硅栅。栅极掺杂浓度决定了栅耗尽效应是否明显poly掺杂浓度低栅压加高时多晶硅靠近氧化层一侧会先耗尽等效栅氧化层变厚阈值电压变大。如果只是做基础MOS实验电极边界条件近似够用要研究栅耗尽就把poly区域建出来区域材料用polysilicon再给poly整体做一次doping uniform conc1e20电极仍定义在poly顶部。这一步做完再去对比Id-Vg曲线你会看到阈值电压和饱和电流的细微变化这是半导体poly掺杂对器件特性最直接的体现。注意浓度单位是cm⁻³不是剂量单位cm⁻²。如果手头只有注入剂量粗略估算峰值浓度约等于剂量除以结深量级判断够用但不能直接把剂量数字填进conc。4. models和solve参数怎么设让Silvaco从跑通到收敛4.1 models一行背后的器件物理迁移率、SRH、Auger选不选Silvaco的models语句把物理模型选择都放在一行。初学最常见的错误是“看到资料里写什么就全堆上”。模型多了计算量大参数取不准还会得到比少开模型更离谱的结果。按实验课需求我建议至少开这三个conmob是浓度依赖迁移率重掺杂区迁移率明显低于轻掺杂不开它MOS饱和电流会偏高srh是Shockley-Read-Hall复合反向漏电、正向小电流区域都受它控制想得到像样的正向开启特性必须开auger是俄歇复合高注入下才重要仿真功率二极管或正向大电流时要开小信号仿真影响很小。要不要加fldmob平行电场依赖迁移率如果实验报告要画MOS输出特性曲线就加因为沟道横向电场导致速度饱和没有它NMOS饱和电流会被明显高估。如果只做PN结正向特性不加也行。模型参数默认值能不能直接用Silvaco的默认值来自常见工艺条件做“看物理规律”的实验足够一旦要和具体工艺线对比就要去查手册里的少子寿命、表面复合速度用material语句覆盖默认值例如material region2 taun1e-6 taup1e-6逻辑说明region2对应第3章MOS脚本里的衬底硅区域taun和taup是电子空穴少子寿命单位秒。少子寿命直接决定SRH复合速率算反向漏电时最敏感。把少子寿命从默认值调到1e-6量级反向漏电会明显抬升下一章的避坑案例5.4会再提到。4.2 solve初值、步长与method把不收敛的曲线救回来solve语句在Silvaco里的地位相当于电路仿真里的DC扫描和初始条件。它最容易被忽略也是收敛问题的重灾区。三句经典开场solve init solve vstep0.05 vfinal1.0 nameanode solve vstep0.1 vfinal5.0 nameanode逻辑说明solve init解决的是“从什么状态开始算”。TCAD求解是非线性的必须从零偏热平衡开始让程序先得到一个自洽解再逐步加偏置。直接给一个1 V起始电压多数情况下不收敛。扫描步长的原则是特性变化剧烈的地方步长要小0.01到0.05 V变化平缓的地方可以放到0.1到0.2 V。PN结在0.5到0.8 V区间电流指数上升这一段用0.05 V过了1 V每0.2 V一步完全够。MOS转移特性在阈值附近要加密饱和区可以放宽。method行里最值得调的是itlimit迭代上限和maxtrap最大回退次数。默认值对简单器件够用。如果你在仿真功率器件或者击穿区把itlimit从默认值提到40把maxtrap降到3到5让每次迭代失败时程序自动回退到上一个偏置点重新尝试而不是硬撑。还有一个习惯如果某一步失败减少电压步长重新从solve init开始跑而不是直接改初值接着算。叠加了错误中间状态的解后面很难再拉回来。4.3 扫Id-Vg的顺序先定漏压再扫栅压MOS实验里另一个常见问题是把所有电压一口气写进solve同时扫。Silvaco确实允许一条solve同时扫多个电极但多数实验不需要。标准做法是先固定漏压扫描栅压得到转移特性Id-Vg反过来先固定栅压、扫描漏压得到输出特性Id-Vd。转移特性更常用因为阈值电压和亚阈值摆幅都从它提取。solve init solve vdrain0.1 namedrain log outfidvg.log solve vgate0.0 vstep0.1 vfinal3.0 namegate save outfidvg.str tonyplot idvg.log逻辑说明solve vdrain0.1 namedrain先把漏极固定在小偏置此时栅压仍为零然后log记录从0 V扫到3 V的栅压。这样得到的Id-Vg曲线可以提取阈值电压Vth和亚阈值摆幅SS。漏压0.1 V是线性区的典型取值想看饱和区特性把drain设为2 V或3 V再扫。参数说明solve vdrain0.1这个名字要和电极定义一致这里的drain就是第3章脚本里的electrode namedrain。沟道掺杂浓度越低阈值电压越低把体掺杂从1e17改成1e16Id-Vg曲线会整体左移。这是验证阈值电压公式最直观的练习也是我课上一定让学生亲手改一遍的参数。5. Silvaco器件仿真5个典型坑现象、根因、解决办法这一章是血泪经验合集。每一条我都遇到过也帮别人排查过按“现象 → 原因 → 解决”的顺序写方便你直接对号入座。5.1 结构改了一小块整条扫描突然不收敛现象昨天还能跑通的MOS结构今天把源漏结深从0.4 µm改成0.2 µm结果solve跑到某个电压点直接报“cannot find solution”前面所有点都白算。原因结深变化后源漏结附近的网格没有跟着加密。原来0.4 µm结深配0.05 µm网格结区还有几个点撑着改成0.2 µm后结的曲率半径比网格间距还小耗尽层边界在网格之间跳来跳去牛顿迭代找不到自洽解。这类问题不是模型错误是数值问题改几何尺寸时同步改网格就能解决。解决先tonyplot看一眼新结构的网格确认结深方向至少跨两三个网格点再做电压扫描。重跑前先怀疑网格而不是怀疑物理模型。5.2 掺杂浓度少写一个零阈值电压偏出几百毫伏现象教材算出来Vth是0.7 V自己仿真得到1.2 V怎么调都回不来。原因把1e17 cm⁻³写成了1e16或者反过来。MOS阈值电压和体掺杂浓度的平方根近似成正比浓度差一个数量级Vth差几百毫伏是正常的。另一个容易错的是把剂量(cm⁻²)直接当体浓度(cm⁻³)源漏区掺杂会高出几个数量级。解决先提取净掺杂剖面用TonyPlot打开str文件画一条从硅表面往下的掺杂曲线和设计值对照。这一步30秒能省掉后面半天调模型的功夫。我自己每次新建结构第一步都是看掺杂剖面而不是直接跑solve。5.3 I-V曲线出现锯齿、毛刺偏置点跳变现象Id-Vg曲线在阈值附近出现尖峰或锯齿怎么看都不像物理曲线。原因电压步长跨过了特性剧烈变化的区间。PN结开启、MOS反型都发生在一个很窄的电压范围内步长0.5 V会直接跳过整个过渡区相邻两个点强行连线就是锯齿。还有一种情况solve失败后又重新init曲线是前后两段不同初始状态拼出来的。解决缩短步长把变化剧烈的区间设成0.02 V平缓区再放大。跑完后确认log文件里的数据量0到3 V、步长0.1 V应该有30个点左右如果只有6个点说明步长太大。重新跑之前先solve init从头开始不要接着上次的解续算。5.4 反向漏电几乎不变加多少电压都是平的现象反向电流从-1 V扫到-30 V几乎是一条水平线数值在1e-16 A量级看起来非常理想但和实测器件对不上。原因现实器件的反向漏电主要来自耗尽区产生电流和表面漏电。TCAD如果没开SRH复合或者少子寿命设得很大复合中心几乎不存在反向电流就会趋近于零变成一条接近理想值的平线。这个结果看似好看但实验报告里反而是错的。解决打开srh模型通过material语句把衬底少子寿命调到1e-6到1e-7 s量级反向电流会明显抬升到接近实际器件。要验证是否合理再把反向电流随温度的变化扫一遍漏电随温度升高而增大才是产生电流主导的行为。温度不变漏电不变那一定是模型没设对。5.5 mask bias和器件宽度两个容易被忽略的尺寸数现象同一份版图尺寸别人仿真饱和电流是2.1 mA自己做出来是0.45 mA比例刚好约等于4.5比1。原因第一光刻中的mask bias也就是掩膜偏差没算进去。版图上沟道长度画的是4.5 µm光刻显影后实际多晶硅栅只剩3.6 µm沟道长度短了饱和电流应该变大仿真如果还按4.5 µm建沟道电阻偏大电流自然偏小。第二是面积单位。Silvaco默认是二维仿真TonyPlot里显示的电流默认按1 µm宽度折算。实际器件宽度如果是10 µm就要把仿真电流乘10。解决严格按照实际工艺里的光刻偏差修正沟道长度TCAD不认版图只认几何。电流总量计算前先确认当前仿真宽度是多少。这是仿真结果和实测数据对比时最常出现的系统性误差毛病不在模型在几何。6. 从仿真曲线到报告结论用extract提取参数和可信度三问6.1 用extract一键提取开启电压仿真跑通了总不能在TonyPlot里用鼠标点一个“看起来像”的电压写进报告。给一条最常用的extract语句extract namevon xintercept(maxslope(curve(v.anode, i.anode)))逻辑说明对IV曲线求斜率找到斜率最大的点也就是电流上升最陡的位置沿该点的切线外推到电流为0这个电压就是开启电压。对MOSFET提取阈值电压把v.anode换成v.gatei.anode换成i.drain同样适用。不同教材对Vth定义有差异报告里注明用的是最大斜率外推法就好。6.2 可信度三问我拿到一组仿真曲线写进实验报告前会问自己三个问题。第一曲线单调吗有锯齿和跳变就先解决网格和步长不要硬挑数据点。第二数量级对吗PN结正向开启电压在0.6到0.9 V量级反向漏电在pA到nA量级具体和面积强相关MOS阈值电压和衬底掺杂浓度的关系随手用平方根关系推算一下差30%可以接受差3倍一定有问题。第三关键参数确认了吗温度、器件宽度、少子寿命、接触类型这四个里有一个没确认曲线再好看也不能当结论用。提取目标典型数值量级出错时先查什么开启电压0.60.9 V模型是否开了srh步长是否跨过开启区阈值电压0.51.0 V衬底掺杂浓度栅氧化层厚度poly掺杂反向漏电pAnA量级少子寿命接触类型器件面积我现在做仿真从不在第一次出图就直接保存覆盖而是存成带参数的版本名比如idvg_vth_sample2.log。这个习惯救过不少次翻车后面重新调整某个参数时还能回到旧版本对比找出是哪一步改变造成了影响。希望这个思路能帮到你至少在报告截止前少一点返工。本文还有配套的精品资源点击获取