
最近在系统过一遍 Silvaco 自带的例子库打算把里面经典的 MOSFET 例子逐个跑通、吃透。老实说很多人装完 Silvaco TCAD 之后第一件事就是打开 DeckBuild 随便敲两行等报错以后就不知道怎么往下走了。我个人的建议是与其自己瞎试不如先把自带的 mos1ex02 这个例子完完整整跑一遍再把每一行指令拆开看明白。这个例子短小、完整、覆盖面广非常适合作为 Atlas 器件仿真入门的“第一课”。mos1ex02 是 Silvaco Atlas 例子库里非常经典的一个 MOSFET 仿真示例。它能让你看清一套完整的器件仿真流程到底是什么样的从网格定义、结构构建、掺杂设置、物理模型选择到电学特性扫描和结果提取一步都不缺。如果你刚接触 Silvaco TCAD或者已经能跑通简单 PN 结但还没碰过 MOS 结构这个例子就是最好的中间跳板。这篇内容就把我学习和复跑 mos1ex02 的完整过程写出来。包括例子结构是怎么设计的、代码每一段在干什么、运行中会遇到哪些坑、以及跑完结果后怎么分析。后面还会聊一下大家经常纠结的“Silvaco 和 Sentaurus 到底选哪个”以及从 mos1ex02 延伸到 SiC MOSFET 仿真该怎么走。内容以我实际操作为主线细节比较多适合当参考笔记看。1. mos1ex02 到底是什么为什么要拿它当入门1.1 例子库的位置与 mos1ex02 的角色装好 Silvaco TCAD 之后安装目录下会有一个 examples 文件夹里面有大量按器件类型分类的 .in 文件或者 .deck 文件。mos1ex02 就躺在 MOSFET 相关的子目录里一般和 mos1ex01、mos1ex03 这些例子放在一起。从命名能看出来它是 MOS金属-氧化物-半导体器件的第 2 个示例编号延续了 Silvaco 例子库“从简单到复杂”的组织思路。这里先说一个很多人会忽略的点Silvaco 例子库里的编号不是随便排的。它通常遵循“同一个结构不同扫描方式”或者“同一个器件不同物理模型”的逻辑。mos1ex01 往往是构建一个简单 MOS 结构做一次基本 Id-Vg 扫描mos1ex02 一般会在结构与数值方法上更进一步可能加入更完整的迁移率模型、更合理的网格甚至额外的 Id-Vd 输出。所以学的时候不要只盯着其中一个文件最好把同一组例子放在一起对比这样能看出 Silvaco 官方工程师在设计这些例子时的意图。我自己复跑 mos1ex02 的过程中感受最深的一点是这个例子把“器件结构定义”和“电学仿真设置”两部分分得非常清楚。结构部分包括衬底尺寸、栅氧厚度、源漏结深、栅极材料等仿真设置部分包括物理模型、迭代方法、扫描偏置范围等。这种模块化思路其实和你以后做任何 TCAD 项目都是一样的。换句话说mos1ex02 不是给你一个孤立的小玩具而是给你一套可以复用的“工程模板”。1.2 学习例子库的正确姿势很多初学者打开例子文件以后喜欢直接点 Run看到 TonyPlot 里出现曲线就算完成任务。这样学其实是浪费了例子里最宝贵的部分。我建议拿到一个例子后按下面这几步走第一步先把整个输入文件通读一遍画出每一段代码的功能边界。Atlas 输入文件是有状态机逻辑的不同段落的指令作用完全不同网格定义影响数值求解精度结构定义决定了器件长什么样物理模型直接影响特性仿真结果。第二步逐行查手册搞清楚每个参数的含义。不要觉得麻烦Silvaco 的 Atlas User Manual 其实写得非常详细每个语句的参数表和默认值都有。第一次查手册会慢但第二次、第三次看到类似参数时就会非常快。第三步关掉文件自己重新敲一遍。这一步最关键。复制粘贴会让你漏掉很多细节比如 mesh 语句的 spacing 默认单位、doping 语句的 peak 参数如何与网格对应、solve 语句的 bias 步长设置等。只有自己亲手敲过一遍才会真正理解“为什么要这么写”。第四步做参数扰动实验。把栅氧厚度改一下、把沟道掺杂浓度改一下、把迁移率模型替换一下观测结果的变化。这一步是区分“会跑例子”和“会用 TCAD”的分水岭。我自己当年就是靠这种“破坏性实验”把 MOS 器件物理中的很多概念从抽象变成了具象。2. 拆解 mos1ex02 的物理结构与仿真思路2.1 器件结构与网格划分逻辑mos1ex02 仿真的是一个平面 MOSFET结构上通常包含 P 型衬底、N 源漏区、栅氧化层和多晶硅栅极。虽然结构简单但它已经涵盖了 MOS 器件的全部核心区域沟道区、源漏延伸区、栅下氧化层和多晶硅栅。在 Atlas 里结构是通过 region 语句逐个定义的。每个 region 需要指定材料、坐标范围以及在网格体系中的编号。这里有一个非常容易踩的坑region 的编号必须和后面掺杂、电极、模型等语句的引用一致一旦把区域编号搞错后面的电极定义或者掺杂定义会全部错位仿真结果完全没法看。网格划分是 mos1ex02 里最值得研究的点。TCAD 的数值仿真本质是求解偏微分方程网格越密的地方计算越精确但计算量也越大。官方例子在沟道表面、源漏结附近通常会用较密的网格在衬底深处则稀疏很多。这种“疏密有别”的网格设计思想直接决定了仿真的收敛性和精度。我个人的经验是学这个例子时一定要亲手改一改网格看看会发生什么。比如把沟道处的 y.mesh spacing 从 0.01 微米改成 0.1 微米你会看到 Id-Vg 曲线出现明显畸变。原因很简单沟道反型层只有几个纳米厚网格太粗就捕捉不到完整的载流子分布变化计算出的电流自然不对。2.2 掺杂、电极与材料参数的设定逻辑mos1ex02 在结构定义之后会通过 doping 语句完成掺杂。源漏通常是均匀的 N 掺杂沟道区域则维持衬底浓度。如果是增强型 NMOS衬底是 P 型沟道不额外掺杂阈值电压主要由衬底浓度、栅氧化层厚度和栅材料功函数共同决定。在例子文件里doping 语句通常会用到 analytical 方式即通过指定杂质类型、浓度峰值和特征长度来生成掺杂分布。这种方式做基础仿真完全够用而且比从工艺仿真导入掺杂分布简单很多。如果你之后用 Athena 做工艺仿真再导入 Atlas就会发现掺杂分布变成了一个 profile 文件物理上更真实但调试复杂度也上去了。电极定义同样不能马虎。mos1ex02 里一般会定义 Source、Drain、Gate 和 Substrate 四个电极每个电极必须落在对应的 region 上而且电极的名称后续会在脚本中反复引用比如 solve vgate... namegate。电极名称写错一个字母运行时会直接报错或者即使能跑结果也不符合物理直觉。材料参数的设定也是理解例子的重点。比如栅氧化层用的是 SiO2介电常数默认带隙等参数一般不用手改。但如果你日后仿真 SiC MOSFET就必须手动修改衬底材料的禁带宽度、介电常数、电子亲和能、迁移率等参数。mos1ex02 里没有这些复杂设置但它帮你建立了一个“材料参数在哪里改”的认知框架。2.3 从结构仿真到电学特性扫描的流程设计设备仿真最终输出的是电学特性比如转移特性曲线 Id-Vg 和输出特性曲线 Id-Vd。mos1ex02 的流程设计非常典型先构建结构再电学扫描。整个流程设计逻辑可以概括为三个步骤。第一步是建立初始状态。一般会先给所有电极一个较小的初始偏置让器件处于一个容易收敛的状态。直接硬上高压很容易让 Newton 迭代直接发散。Silvaco 里通常会用 solve init 语句初始化然后逐步把电压加到位。第二步是 Id-Vg 扫描也就是固定漏极电压栅极电压从某个值扫描到另一个值。这个扫描能直接反映器件的阈值电压、亚阈值摆幅和开关特性。第三步是 Id-Vd 扫描固定一组栅极电压漏极电压从 0 扫到较高值用来观察输出特性曲线的线性区和饱和区。mos1ex02 的巧妙之处在于它把这两条特性曲线都串在同一个脚本里先用 log 语句保存一次扫描结果再移动数据文件继续下一次扫描。这种文件管理逻辑非常实用以后你做多组对照实验只要把 log 文件名换成带标签的名字就行根本不用复制整个工程。3. 核心代码逐段拆解与实操要点3.1 网格与结构定义会看这几行Atlas 就算入门了先看一段典型的网格和结构定义片段这里我用的是和 mos1ex02 高度相似的写法来讲解实际使用中以你安装版本自带文件为准go atlas mesh space.mult1.0 x.mesh loc0.0 spac0.5 x.mesh loc1.5 spac0.15 x.mesh loc3.5 spac0.15 x.mesh loc5.0 spac0.5 y.mesh loc0.0 spac0.05 y.mesh loc0.5 spac0.05 y.mesh loc1.0 spac0.2 y.mesh loc3.0 spac0.5 region num1 silicon y.min0.5 y.max3.0 region num2 oxide y.min0.45 y.max0.5 region num3 silicon y.min0.0 y.max0.45 electrode namegate x.min1.5 x.max3.5 y.min0.0 y.max0.0 electrode namesource x.min0.0 x.max1.3 y.min0.45 y.max0.5 electrode namedrain x.min3.7 x.max5.0 y.min0.45 y.max0.5 electrode namesubstrate region1网格定义是这套仿真里最容易出错但又是最重要的一步。x.mesh 和 y.mesh 并不是简单地把坐标轴切分它定义的是数值求解的节点分布。spac 值越小网格越密求解结果越精确但计算量也越大。mos1ex02 这种规模的网格在普通台式机上跑一两分钟就能出结果所以不要为了省时间把网格调得特别粗。region 语句的物理边界需要仔细检查。上面例子里把硅体区放在了 y.min0.5 以下氧化物在 y.min0.45 到 y.max0.5 之间再往上还有一个薄的硅层作为多晶硅栅的替代。当然官方例子的具体坐标可能不同但思路是一样的先分区域再在各区域上定义电极和掺杂。电极定义中的一个关键点是金属电极在 Atlas 坐标系中通常是一条线或者一个点它标示的是接触位置。比如 gate 电极的 y.min 和 y.max 都等于 0.0意思就是栅极接触落在结构顶部边界线上实际接触是由上方硅层和下方氧化层共同决定的。初学者容易把电极理解成一块实体材料其实在器件仿真里电极主要代表“边界条件施加的位置”。3.2 物理模型与数值方法为什么不能随便开几个模型就完事再来看一段常见的模型设置和掺杂设置doping uniform conc1e17 p-type region1 doping uniform conc1e20 n-type x.min0.0 x.max1.3 y.min0.45 y.max0.5 doping uniform conc1e20 n-type x.min3.7 x.max5.0 y.min0.45 y.max0.5 models cvt srh auger bgn print impact selb method gummel newton itlimit25 climit1e-5掺杂这段代码里第一行设置 P 型衬底浓度 1e17也就是沟道所在区域的基础掺杂后面两行分别在源和漏区域加入高浓度 N 掺杂。这里要特别说明Atlas 中的 doping 是累积的不是覆盖式的。也就是说源漏区域的最终掺杂是第一行衬底掺杂和第二行源漏掺杂的叠加。所以如果你想要源漏区的净 N 型浓度是 1e20那么第二行的浓度实际上要设置成略高于 1e20因为衬底的 P 型浓度会先抵消掉一部分施主杂质。实际例子中常见的做法是直接用 1e20 这样的高浓度因为衬底 1e17 对 1e20 的差值影响很小但严格来说这是有偏差的。物理模型的选择更需要带着“为什么”去读。mos1ex02 里通常会打开浓度依赖迁移率模型 cvt这个模型包含了载流子与声子、杂质离子、载流子之间的散射机制对整个 I-V 特性的拟合精度影响很大。srh 和 auger 是复合模型分别描述间接复合和俄歇复合对漏电和击穿特性影响明显。bgn 是带隙变窄模型在高掺杂浓度区域必须打开否则源漏区的载流子浓度会被严重高估或低估。impact selb 打开的是碰撞电离模型在 MOSFET 中主要影响漏端附近的冲击电离效应也就是衬底电流和热载流子注入。如果你只是看简单 Id-Vg这个模型影响不大但如果你想研究器件在高压下的可靠性行为就必须带上。数值方法这里用了 gummel 和 newton 联合迭代。Gummel 方法是解耦迭代适合弱耦合情况Newton 方法适合强耦合情况。TCAD 里很多场景是先用 Gummel 给一个不错的初猜再切到 Newton 收敛到高精度。itlimit25 表示允许的最大迭代次数climit1e-5 是一个收敛判据表示每次迭代解的变化量小于该值即视为收敛。这个参数在实际操作中经常需要调整特别是器件进入强非线性区比如击穿临界点时默认 25 步可能不够可以适当调大一点。3.3 扫描设置与输出控制如何拿到一条干净的 Id-Vg 曲线电学扫描部分的代码一般是这样的逻辑solve init solve vdrain0.05 solve vgate0.0 namegate vfinal2.0 vstep0.05 namegate log off实际 mos1ex02 的具体写法可能略有不同但基本流程相似。先 init 做初始化解再给漏极一个固定小偏压然后从 vgate0 开始以一定步长扫到目标值。注意这里的 vstep 大小决定了曲线的点数。步长太大曲线失去细节阈值电压附近的变化看不清楚步长太小文件变得臃肿计算时间也增加。建议先粗扫一遍看整体趋势再在阈值电压附近加密步长。log off 的作用是停止记录。在 Silvaco 的 TonyPlot 里你在 log on 之后执行的所有 solve 步骤产生的电学数据都会写入当前日志文件直到 log off 才停止。很多人忘了写 log off结果后面的一次扫描数据也不小心被合并到了同一个文件里相当于数据污染。同理你改换了一次扫描条件应该新开一个 log 文件记录文件名最好能体现扫描条件方便后面整理。另外要提一下 save 和 tonyplot 语句。save 会把当前结构的网格、掺杂、能带、载流子分布等信息保存成结构文件这个文件可以供 TonyPlot 查看二维截面图。tonyplot 语句则是直接调用可视化工具打开指定文件。调试结构时应该先把结构图打开确认区域、电极、掺杂分布全部正确再跑电学扫描。结构有问题就盲目跑扫描等于在错误的物理模型上浪费时间。4. 实际操作流程与结果分析4.1 命令行运行与常见日志解读运行 mos1ex02 一般有几种方式。最简单的是在 DeckBuild 里直接打开文件点击 Run 按钮界面下方会实时输出运行日志。另一种方式是在终端里调用 athena 或者 atlas 命令行工具把输入文件作为参数传递。我个人的习惯是先敲命令跑批处理再用 DeckBuild 做交互式调试。跑完以后重点看日志里的几个标志首先是 INITIALIZING MESH 和 REGION DEFINITION 部分确认没有报错其次是物理模型输出部分会列出你启用的模型名称和关键参数再就是每步 solve 之后的收敛状态如果出现“Failed to converge at bias ...”字样说明这一步电压下迭代没有达到收敛判据需要回头调整网格或者模型设置。还有一种常见情况是日志里显示收敛步数很接近 itlimit 上限虽然没有报错但结果可能已经不太可靠。这时候要结合曲线结果判断是否正常。如果曲线在某个偏置点出现不连续的跳变大概率就是那一步没有真正收敛。4.2 TonyPlot 看图Id-Vg 和 Id-Vd 曲线里能读出什么运行成功后log 文件会被打开在 TonyPlot 里。你可以看到漏极电流 Id 随栅压 Vg 变化的曲线。这里有几个操作细节值得注意Y 轴默认可能是线性坐标建议在曲线图上右键把 Y 轴改成对数坐标。对数坐标下你能更清楚地看到亚阈值区电流的指数变化趋势也能量出亚阈值摆幅 SS。这个参数是 MOSFET 开关性能的核心指标之一实际器件里一般在 60 到 80 mV/dec 左右仿真中受温度、界面态模型影响很大。Id-Vg 曲线还能看出阈值电压 Vth。你用对数坐标看曲线在亚阈值区的斜率再结合线性坐标中的跨导峰值位置基本就能估出 Vth 的值。如果觉得手动估算太粗可以在代码里加 extract 语句用输出算法自动提取参数。extract 语句的语法比较繁琐一般格式类似于从输出曲线里查找某条件对应的电压值。具体语法建议直接查 Silvaco 手册对应版本不同版本稍有不同。Id-Vd 输出特性曲线通常在另一个 log 文件里。固定不同的栅极电压扫描漏极电压。你会看到线性区和饱和区两个明显的不同区域。线性区电流随 Vd 近似线性增长饱和区电流趋于平缓沟道发生夹断。如果饱和区电流仍然明显上升说明可能有短沟道效应或者漏致势垒降低DIBL影响这在长沟道器件里应该非常微弱。4.3 参数扰动实验把例子改一改理解就更深了只看默认结果远远不够我会强烈建议你做一组对比实验。比如保持网格和电极不变把栅氧化层厚度从默认值改小一半重新扫描 Id-Vg你会发现阈值电压明显降低跨导变大。这是什么原因栅氧变薄后同样栅压下沟道感应的反型电荷密度更大而且栅对沟道的控制能力更强所以电流更高、Vth 更低。这个现象用公式算起来很抽象但用 TCAD 一改参数就看到了。另一个值得做的实验是把衬底浓度调高十倍你也会看到阈值电压升高。物理原因是耗尽区电荷更多需要更高的栅压才能形成反型层。如果再把沟道长度缩短你会看到阈值电压随漏压变化也就是 DIBL 效应变得明显。这一步比任何教材都更有说服力。还有更进阶的玩法改模型。把 cvt 模型换成简单的 constant mobility 模型电流曲线会明显偏离原结果尤其是在高压、强电场区域。你会发现模型选择决定了仿真的“物理真实性”不同模型不是可选项而是必须根据器件工作条件来选。对 mos1ex02 这种学习例子来说就是帮你建立“任何模型的开启都不是免费的它会改变你的仿真结果”这种意识。5. 常见报错与排查技巧实录5.1 网格、区域和电极不匹配类报错我复跑 mos1ex02 以及后续改参数时遇到最多的一类报错就是“region not found”或“electrode does not intersect region”。这类报错的原因非常直接你的电极坐标没有落在任何 region 里。比如你把 gate 电极的坐标设在了氧化层上方但氧化层上方没有定义硅区域电极就悬空了仿真自然运行不了。排除方法很简单先不要跑电学扫描只跑到结构定义结束然后用 save 输出结构文件再用 TonyPlot 打开二维结构图确认每一个区域和电极的边界是否正确。很多问题在结构图里一眼就能看出来。网格相关的报错往往表现为“negative volume element”或“degenerate mesh element”。这种问题多半是 x.mesh 或 y.mesh 的坐标有重叠或者 spacing 变化太剧烈。TCAD 网格生成器虽能自动处理一些冲突但如果你手动输入了无法相交的节点位置它也只能报错。建议从小到大先画粗网格跑通全流程再逐步加密回原文件的分辨率。5.2 收敛性问题与数值振荡跑 mos1ex02 这种简单结构一般不会出现严重的收敛问题只要你动了模型或偏置就容易遇到。“Failed to converge”几乎是所有 TCAD 使用者绕不过去的坎。排查思路一般按以下顺序进行。第一步看看是不是偏置步长太大。把 vstep 降到原来的四分之一通常会直接解决。第二步检查初始条件是否合理。高压扫描前先做一个零偏或者低偏的初始解再逐步升压。第三步检查模型设置。某些模型在特定网格条件下会产生数值振荡比如碰撞电离模型在网格太粗时容易出现电流突变可以先把 impact 临时关掉再跑一遍排除是否是它引起的。另外可以调整 method 选项比如把 itlimit 调大到 50或者打开阻尼选项让迭代更新幅度变小。但要注意靠放宽收敛判据换来的“收敛”是伪收敛结果可能不符合物理。真正的做法是找到数值不稳定根源而不是一味调参数。5.3 结果异常排查阈值电压、漏电、击穿等跑出来的结果如果偏离理论预期不要立刻怀疑 Silvaco 算错了绝大多数情况是你的输入设置有问题。如果阈值电压明显偏高或偏低先查栅氧化层厚度和衬底掺杂浓度。氧化层厚度在 region 语句里定义衬底浓度在 doping 语句里定义任何一个搞错都会导致 Vth 偏移。其次是栅电极材料的功函数如果不小心把栅电极设成了金属而不是多晶硅或者功函数默认值不对Vth 也会变化。如果亚阈值漏电流异常大查一下少子寿命模型和界面态模型。常规的室温漏电主要靠热激发如果计算结果比理论值大几个数量级可能是复合模型没有打开导致耗尽区产生电流没有被正确模拟。如果高压下出现过早击穿查碰撞电离模型和网格密度。碰撞电离在你设置的漏压过高或网格太粗时经常出现电流不收敛和击穿电压偏移。此时可以把击穿区域附近的网格加密再检查 impact 模型参数是否适合当前材料。需要特别强调的是mos1ex02 默认仿真的是常规硅材料参数不能直接照搬到 SiC MOSFET后面讲扩展时会具体说。6. 从 mos1ex02 延伸Silvaco vs Sentaurus 和 SiC MOSFET 学习路径6.1 Silvaco 和 Sentaurus 到底该选哪个这是被问得最多的问题之一热词里也有“silvaco做工艺仿真sentaurus更好吗”。我直接说结论我不认为存在绝对的“更好”关键看你的使用场景和学习阶段。Silvaco 的优点在于上手快DeckBuild 交互界面友好例子库庞大语句风格相对直白。你拿 mos1ex02 这样的例子跑通、改参数、看结果全流程很顺畅。对学生或者刚进入 TCAD 领域的工程师来说Silvaco 是非常合适的入门选择能让你把精力放在器件物理本身而不是脚本语法上。Sentaurus 在很多先进工艺和复杂物理场景下确实表现更全面比如 3D 结构、应力仿真、先进节点的统计变化等。它背后有更庞大的工具链功能上限更高。但这也意味着学习曲线更陡模块划分更细对初学者的软件工程背景要求更高。真要说选型我的建议是如果课题组或公司已经有成熟的软件资源沿用现成的效率最高如果你是自学入门Silvaco 会更快建立整体认知如果目标是研究最前沿的 GAA、CFET 等结构Sentaurus 的相关案例和多物理场耦合支持会更友好。没必要觉得学了 Silvaco 就白学了。TCAD 的核心方法论是相通的网格、物理模型、偏置扫描、结果提取换一个平台只是换一套命令语法。你把 mos1ex02 逐行吃透以后转 Sentaurus 最多只是重新学语法物理理解不会清零。6.2 下一步怎么进阶SiC MOSFET、工艺仿真等把 mos1ex02 跑通以后下一步通常有两条常见进阶路线。一条是往工艺仿真方向走也就是从 Athena 工艺流程仿真开始把氧化、注入、退火、刻蚀等步骤加进来最后把工艺生成的掺杂分布导入 Atlas 做器件仿真。这和 mos1ex02 直接建结构完全不同它更接近真实器件制造流程对理解工艺与器件耦合非常有帮助。另一条是往新材料器件方向走特别是 SiC MOSFET。热词里有“sicmosfet silvaco”说明关注这个方向的人不少。SiC 材料的特点是禁带宽度大、临界击穿场强高、热导率高所以仿真时不能直接用 Si 的默认材料参数。你需要手动修改衬底材料的带隙、介电常数、电子亲和能、迁移率等参数还需要引入更丰富的缺陷模型来模拟 SiC/SiO2 界面的陷阱效应。这些复杂度在 mos1ex02 里虽然没有体现但正是从这个简单例子延伸出去的最好方向。我自己的建议是先老老实实把 mos1ex02 里每个语句弄懂然后用扰动实验把 MOS 器件物理重新“验证”一遍再决定往工艺还是往新材料走。基础不牢后面每一步都会踩坑。TCAD 这个工具最大的价值不是让你“跑出一条漂亮曲线”而是让你在不断调参和排错中建立对器件物理的直觉。这份直觉才是以后做任何器件设计时真正值钱的东西。