Silvaco器件仿真入门:从PN结到MOSFET的IV曲线搭建与避坑指南
2026/9/23 16:30:12 网站建设 项目流程

简介:《半导体专业实验补充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结二极管,结面在y=1.0 µm处,两侧各0.5 µm的过渡区都覆盖了加密网格。

go atlas # 1) 网格定义:控制计算精度和耗时 mesh \ x.mesh location=0.0 spacing=0.1 \ x.mesh location=2.0 spacing=0.1 \ y.mesh location=0.0 spacing=0.02 \ y.mesh location=1.0 spacing=0.05 \ y.mesh location=2.0 spacing=0.2 # 2) 区域:整块材料是硅 region num=1 silicon # 3) 电极:顶面阳极,底面阴极 electrode name=anode top electrode name=cathode bottom # 4) 掺杂:上半部分p型,下半部分n型,在y=1.0处形成结 doping uniform conc=1e16 p.type y.max=1.0 doping uniform conc=1e17 n.type y.min=1.0 # 5) 物理模型:迁移率、SRH复合、俄歇复合 models conmob srh auger # 6) 求解方法:迭代上限与回退次数 method itlimit=25 maxtrap=5 # 7) 从零偏初始化,然后正向扫描 solve init log outf=diode.log solve vstep=0.05 vfinal=1.0 name=anode solve vstep=0.2 vfinal=5.0 name=anode # 8) 保存结构并绘图 save outf=diode.str tonyplot diode.str

逻辑说明:不管后面结构多复杂,PN结二极管的仿真框架就这么几段。go atlas进入器件仿真模块;mesh定义二维计算网格,x方向2 µm、间距0.1 µm,y方向在0到1 µm加密到0.02 µm,1到2 µm逐步放宽到0.2 µm。结附近的网格最密,这是为了解析耗尽层的载流子变化。region声明材料类型,这里整块都是硅。electrode把阳极定义在顶面、阴极在底面,电极名字后面solve里要用。doping两行分别定义上1 µm是1e16 cm⁻³的p型、下1 µm是1e17 cm⁻³的n型,两个掺杂区间在y=1.0处自然形成PN结。models选择浓度依赖迁移率、SRH复合和俄歇复合,第4章会展开讲。

参数说明:conc是掺杂浓度,单位cm⁻³,Silvaco内部统一用厘米克秒制;vstep是相邻两步的电压增量,vfinal是本次扫描的终止电压;name指明电压加在哪个电极。这段脚本在0到1 V用0.05 V小步长,是因为PN结开启前后电流指数上升,落点太少曲线会失真;过了1 V电流变化平缓,0.2 V一步足够。想改成反向扫描,把vstepvfinal改成负值即可,但反偏击穿区域的收敛问题要另外处理,后面避坑章会讲。

2.3 仿真卡住先看log:日志思维比跑通更重要

跑完脚本后,工作目录里会多出两个文件:diode.logdiode.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 um,y方向0-1.5 um mesh \ x.mesh location=0.0 spacing=0.2 \ x.mesh location=1.0 spacing=0.1 \ x.mesh location=1.5 spacing=0.05 \ x.mesh location=2.0 spacing=0.02 \ x.mesh location=5.0 spacing=0.02 \ x.mesh location=5.5 spacing=0.05 \ x.mesh location=6.0 spacing=0.1 \ x.mesh location=7.0 spacing=0.2 \ y.mesh location=0.0 spacing=0.01 \ y.mesh location=0.05 spacing=0.01 \ y.mesh location=0.15 spacing=0.02 \ y.mesh location=0.35 spacing=0.04 \ y.mesh location=0.6 spacing=0.06 \ y.mesh location=0.8 spacing=0.1 \ y.mesh location=1.5 spacing=0.15 # 栅氧化层:0-0.05 um region num=1 oxide y.min=0.0 y.max=0.05 # p型衬底:0.05-1.5 um region num=2 silicon y.min=0.05 y.max=1.5 # 电极:栅跨在沟道上方,源漏在两侧,衬底从底部引出 electrode name=gate x.min=2.0 x.max=5.0 top electrode name=source x.min=0.0 x.max=2.0 top electrode name=drain x.min=5.0 x.max=7.0 top electrode name=substrate bottom # 衬底掺杂 doping uniform conc=1e17 p.type y.min=0.05 y.max=1.5 # 源漏注入:峰值浓度1e20,结深0.4um doping gauss conc=1e20 n.type ratio=0.3 junction=0.4 \ x.min=0.0 x.max=2.0 doping gauss conc=1e20 n.type ratio=0.3 junction=0.4 \ x.min=5.0 x.max=7.0 # 先不定偏置,保存结构查看 save outf=mos0.str tonyplot mos0.str

逻辑说明:这个例子特意把栅氧化层单独建region,而多晶硅栅没有单独建region,只用electrode name=gate top定义。这是初学阶段最不容易翻车的写法:栅电极是边界条件,不是被求解的材料区域;氧化层是绝缘体,在器件方程里作为带隙和介电常数的载体;真正的半导体求解域是衬底。等你后面需要仿真栅耗尽效应时,再把poly区域建出来、给它掺杂、和电极关联。我的建议是第一个能跑的版本,结构越简单越好。

参数说明:junction=0.4指结深,单位µm,对应源漏注入的垂直方向特征长度;ratio=0.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 conc=1e20,电极仍定义在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 region=2 taun=1e-6 taup=1e-6

逻辑说明:region=2对应第3章MOS脚本里的衬底硅区域,tauntaup是电子空穴少子寿命,单位秒。少子寿命直接决定SRH复合速率,算反向漏电时最敏感。把少子寿命从默认值调到1e-6量级,反向漏电会明显抬升,下一章的避坑案例5.4会再提到。

4.2 solve初值、步长与method:把不收敛的曲线救回来

solve语句在Silvaco里的地位,相当于电路仿真里的DC扫描和初始条件。它最容易被忽略,也是收敛问题的重灾区。三句经典开场:

solve init solve vstep=0.05 vfinal=1.0 name=anode solve vstep=0.1 vfinal=5.0 name=anode

逻辑说明: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 vdrain=0.1 name=drain log outf=idvg.log solve vgate=0.0 vstep=0.1 vfinal=3.0 name=gate save outf=idvg.str tonyplot idvg.log

逻辑说明:solve vdrain=0.1 name=drain先把漏极固定在小偏置,此时栅压仍为零,然后log记录从0 V扫到3 V的栅压。这样得到的Id-Vg曲线可以提取阈值电压Vth和亚阈值摆幅SS。漏压0.1 V是线性区的典型取值;想看饱和区特性,把drain设为2 V或3 V再扫。

参数说明:solve vdrain=0.1这个名字要和电极定义一致,这里的drain就是第3章脚本里的electrode name=drain。沟道掺杂浓度越低,阈值电压越低,把体掺杂从1e17改成1e16,Id-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 name="von" xintercept(maxslope(curve(v."anode", i."anode")))

逻辑说明:对IV曲线求斜率,找到斜率最大的点,也就是电流上升最陡的位置,沿该点的切线外推到电流为0,这个电压就是开启电压。对MOSFET提取阈值电压,把v."anode"换成v."gate"i."anode"换成i."drain",同样适用。不同教材对Vth定义有差异,报告里注明用的是最大斜率外推法就好。

6.2 可信度三问

我拿到一组仿真曲线,写进实验报告前会问自己三个问题。第一,曲线单调吗?有锯齿和跳变就先解决网格和步长,不要硬挑数据点。第二,数量级对吗?PN结正向开启电压在0.6到0.9 V量级,反向漏电在pA到nA量级,具体和面积强相关;MOS阈值电压和衬底掺杂浓度的关系,随手用平方根关系推算一下,差30%可以接受,差3倍一定有问题。第三,关键参数确认了吗?温度、器件宽度、少子寿命、接触类型,这四个里有一个没确认,曲线再好看也不能当结论用。

提取目标典型数值量级出错时先查什么
开启电压0.6~0.9 V模型是否开了srh,步长是否跨过开启区
阈值电压0.5~1.0 V衬底掺杂浓度,栅氧化层厚度,poly掺杂
反向漏电pA~nA量级少子寿命,接触类型,器件面积

我现在做仿真,从不在第一次出图就直接保存覆盖,而是存成带参数的版本名,比如idvg_vth_sample2.log。这个习惯救过不少次翻车:后面重新调整某个参数时,还能回到旧版本对比,找出是哪一步改变造成了影响。希望这个思路能帮到你,至少在报告截止前,少一点返工。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询