ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Silvaco Atlas 半导体仿真入门:从环境配置到 PN 结二极管完整案例

Silvaco Atlas 半导体仿真入门:从环境配置到 PN 结二极管完整案例 半导体仿真这个领域刚入行的时候最容易卡住的地方往往不是物理模型本身而是工具链的搭建和第一个能跑通的案例。Silvaco Atlas 作为业界老牌的 TCAD 仿真工具功能覆盖从工艺到器件的全流程但它的学习曲线也确实不友好——命令行式的操作逻辑、分散的组件、动辄几百行的输入文件让不少新手在装完软件之后就不知道该干什么了。这篇内容就是针对这个痛点来的从环境配置到 DeckBuild 的基本操作再到一个完整的 PN 结二极管仿真案例把每一步为什么这么做、参数怎么来的、结果怎么看都讲清楚。不管你是微电子专业的学生还是刚转行做器件仿真的工程师跟着走一遍应该能建立起基本的仿真流程认知。1. 先把工具链理清楚Atlas 在整个仿真体系里扮演什么角色1.1 Silvaco 全家桶的分工逻辑很多人第一次打开 Silvaco 的安装目录会懵——DeckBuild、Atlas、Athena、TonyPlot、MaskViews、Utmost 一堆组件到底该用哪个这里先把关系理清楚。Atlas 是核心的器件仿真引擎它负责求解半导体方程——泊松方程、连续性方程、漂移扩散模型这些。你给它一个器件结构定义和偏压条件它算出电流、电场、载流子浓度分布这些物理量。但 Atlas 本身不是一个能直接双击运行的图形化程序它需要通过 DeckBuild 来驱动。DeckBuild 是仿真流程的调度器你可以把它理解成一个专门为 TCAD 设计的脚本编辑器和运行环境。你在 DeckBuild 里写输入文件也就是常说的 deck然后它调用 Atlas 去执行执行完再调用 TonyPlot 来可视化结果。这个设计的好处是仿真流程可以完全脚本化方便批量跑参数扫描和自动化。Athena 是工艺仿真模块负责模拟氧化、扩散、离子注入、刻蚀这些工艺步骤输出的是器件的结构文件。Atlas 可以直接读取 Athena 生成的工艺结构也可以自己通过区域定义来构建结构。对于新手来说建议先从 Atlas 直接定义结构入手因为工艺仿真的参数更多、收敛更困难容易在还没理解器件物理之前就被工艺参数搞晕。TonyPlot 是结果可视化工具一维的浓度-深度曲线、二维的电场分布云图、三维的结构渲染都靠它。它支持导出数据到文本文件方便后续用 Python 或 MATLAB 做二次处理。提示安装的时候建议把 DeckBuild 和 TonyPlot 的快捷方式放到桌面Atlas 没有独立的 GUI 入口必须通过 DeckBuild 调用。1.2 为什么选择 PN 结二极管作为第一个案例PN 结是半导体器件的Hello World这个说法一点不夸张。原因有三第一物理图像清晰。PN 结的工作原理——耗尽区形成、内建电势、正向注入、反向击穿——这些概念在教科书里讲得很透仿真结果可以和理论计算直接对照方便验证仿真设置是否正确。第二结构简单但覆盖核心操作。一个 PN 结的仿真涉及了 Atlas 最常用的几个模块网格定义Mesh、区域定义Region、电极定义Electrode、掺杂定义Doping、物理模型选择Models、求解方法设置Method、偏压扫描Solve。这些操作在后续做 MOSFET、BJT、HEMT 的时候都会反复用到只是复杂度不同。第三收敛性好。PN 结的仿真在默认参数下基本都能收敛不像一些异质结器件或者击穿仿真那样需要反复调 Method 和参数。对新手来说先跑通一个能出结果的案例比卡在收敛问题上反复试错要友好得多。1.3 安装环节最容易忽略的几个细节Silvaco 的安装在 Windows 和 Linux 下略有不同这里以 Windows 环境为例说几个容易踩坑的地方。许可证配置。Silvaco 用的是 FlexLM 许可证管理安装完成后需要设置环境变量指向 license 文件。常见的问题是环境变量SILVACO_LICENSE_FILE或者LM_LICENSE_FILE没有设置正确导致 DeckBuild 启动时报 Cannot find license 错误。检查方法是打开命令行输入echo %SILVACO_LICENSE_FILE%看路径是否指向了正确的 license 文件。如果公司或学校提供的是浮动许可证还需要确认网络能通到 license server。安装路径不要有中文和空格。这个问题在 Windows 下特别常见。Silvaco 的很多脚本内部用的是绝对路径拼接如果路径里有中文或者空格会出现文件找不到或者解析错误。建议装在C:\Silvaco或者D:\SILVACO这种纯英文无空格的路径下。环境变量 PATH 的配置。安装程序一般会自动添加但有时候会被其他软件的安装覆盖掉。确认bin目录在 PATH 里否则 DeckBuild 调用 Atlas 的时候会报 atlas.exe not found。TonyPlot 的显示问题。在高分屏或者多显示器环境下TonyPlot 的界面可能会出现字体模糊或者窗口位置异常。解决办法是右键 TonyPlot 快捷方式在兼容性选项卡里设置替代高 DPI 缩放行为选择应用程序。2. DeckBuild 的操作逻辑不是 IDE是仿真流程的编排器2.1 输入文件的基本结构DeckBuild 的输入文件deck本质上是一个按顺序执行的命令列表。Atlas 从上到下逐行读取遇到一个命令就执行一个。这个执行模型很重要因为它决定了你不能像写 C 程序那样随意跳转——deck 是线性的。一个典型的 Atlas deck 包含以下几个部分按执行顺序排列go atlas # 启动 Atlas 仿真器 mesh ... # 定义网格 region ... # 定义区域 electrode ... # 定义电极 doping ... # 定义掺杂 material ... # 材料参数可选 models ... # 物理模型选择 method ... # 数值求解方法设置 solve init # 求解初始状态 solve ... # 偏压扫描 save ... # 保存结果 log ... # 记录电学特性 quit # 退出每一行的语法格式是命令 参数值 参数值 ...注释用#开头。命令可以缩写比如go atlas可以写成go at但为了可读性建议写全。注意deck 文件不要用 Windows 记事本编辑因为记事本会在文件开头加 BOM 字符Atlas 解析时会报错。用 DeckBuild 自带的编辑器或者 Notepad、VS Code 这类工具。2.2 网格定义仿真精度和速度的平衡点网格是 Atlas 仿真的基础它决定了在哪些位置求解方程。网格越密结果越精确但计算量也越大。新手最容易犯的错误是全局用很密的网格导致仿真跑几个小时甚至跑不动。Atlas 的网格定义用的是mesh语句支持x.mesh和y.mesh分别定义横向和纵向的网格线位置以及spacing参数控制局部密度。mesh space.mult1.0 x.mesh loc0.0 spac0.5 x.mesh loc1.0 spac0.02 x.mesh loc2.0 spac0.5 y.mesh loc0.0 spac0.01 y.mesh loc0.5 spac0.05 y.mesh loc1.0 spac0.5这里的逻辑是在 PN 结界面附近x1.0 附近用密集网格spac0.02 微米远离结区的地方用稀疏网格spac0.5 微米。纵向同理在结深附近加密。space.mult是一个全局的网格密度乘数默认值是 1.0。调试阶段可以设成 0.5 加快仿真速度最终出结果的时候再改回 1.0 或者更大。网格设计的经验法则在耗尽区宽度范围内至少保证 10-20 个网格点在浓度梯度大的地方比如 PN 结界面加密在电极接触附近适当加密因为电流集中在远离结区的衬底部分可以很稀疏2.3 区域和电极定义告诉 Atlas 器件长什么样区域定义用region语句通过指定矩形的对角坐标来确定。Atlas 的坐标系原点在左上角x 向右为正y 向下为正单位是微米。region num1 materialSilicon x.min0.0 x.max2.0 y.min0.0 y.max1.0这行定义了一个 2μm × 1μm 的硅区域。如果是多层结构就用多个 region 语句每个指定不同的 material 和坐标范围。电极定义用electrode语句可以指定电极的名称、位置和类型electrode nameanode x.min0.0 x.max0.5 y.min0.0 y.max0.0 electrode namecathode x.min1.5 x.max2.0 y.min1.0 y.max1.0这里 anode 定义在顶部左侧cathode 定义在底部右侧。电极的位置必须落在区域边界上否则 Atlas 会报错。提示电极的x.min和x.max如果相等表示是一个点电极如果不等表示是一个面电极。面电极的电流分布更均匀适合做功率器件仿真。2.4 掺杂定义PN 结的核心参数掺杂是 PN 结的灵魂。Atlas 支持多种掺杂定义方式均匀掺杂uniform、高斯分布gaussian、误差函数分布erfc、以及从文件读取来自 Athena 的工艺仿真结果。对于手工定义的 PN 结最常用的是高斯分布和均匀掺杂的组合doping region1 uniform conc1e15 typen doping region1 gaussian conc1e20 peak0.05 char0.02 typep doping region1 gaussian conc1e20 peak0.95 char0.02 typen第一行是衬底掺杂n 型浓度 1e15 cm⁻³。第二行是 p 型高斯掺杂峰值浓度 1e20 cm⁻³峰值位置在 y0.05μm特征长度 0.02μm。第三行是 n 型高斯掺杂峰值在 y0.95μm。char参数控制掺杂分布的陡峭程度值越小分布越陡。对于典型的离子注入掺杂char 在 0.01-0.05μm 之间比较合理。掺杂设置的注意事项峰值浓度不要超过硅的固溶度极限约 1e21 cm⁻³否则会出现物理上不合理的载流子统计高斯分布的峰值位置要在网格加密的范围内否则掺杂分布会被网格截断如果同时定义了 uniform 和 gaussian 掺杂Atlas 会将它们叠加注意不要重复定义3. 第一个 PN 结仿真从 deck 编写到结果验证3.1 完整的输入文件逐行拆解下面是一个可以直接运行的 PN 结二极管仿真 deck我把它拆成几个部分逐行解释。go atlas # --- 网格定义 --- mesh space.mult1.0 x.mesh loc0.0 spac0.1 x.mesh loc0.5 spac0.01 x.mesh loc1.0 spac0.1 y.mesh loc0.0 spac0.005 y.mesh loc0.1 spac0.01 y.mesh loc0.5 spac0.05 y.mesh loc0.9 spac0.01 y.mesh loc1.0 spac0.005 # --- 区域定义 --- region num1 materialSilicon x.min0.0 x.max1.0 y.min0.0 y.max1.0 # --- 电极定义 --- electrode nameanode top electrode namecathode bottom # --- 掺杂定义 --- doping region1 uniform conc1e15 typen doping region1 gaussian conc5e19 peak0.05 char0.02 typep doping region1 gaussian conc1e20 peak0.95 char0.02 typen # --- 物理模型 --- models srh auger bgn fldmob print # --- 求解方法 --- method newton trap maxtrap10 # --- 初始求解 --- solve init # --- 零偏压保存 --- save outfpn_zero.str # --- 正向 IV 扫描 --- log outfpn_forward.log solve vanode0.0 vstep0.05 vfinal1.0 nameanode log off # --- 反向 IV 扫描 --- log outfpn_reverse.log solve vanode0.0 vstep-0.1 vfinal-5.0 nameanode log off # --- 保存最终结构 --- save outfpn_final.str # --- 可视化 --- tonyplot pn_zero.str -set pn_plot.set tonyplot pn_forward.log -set iv_plot.set quit网格部分x 方向在 0.5μm 处加密spac0.01因为这里没有结其实可以更稀疏。y 方向在 0.05μm 和 0.95μm 附近加密对应两个掺杂峰值的位置。这个网格设计保证了结区有足够的解析度。掺杂部分衬底是 n 型 1e15顶部 p 型高斯掺杂峰值 5e19底部 n 型高斯掺杂峰值 1e20。这样形成的 PN 结在 y0.05μm 附近冶金结面在 p 型和 n 型浓度相等的位置。模型部分srh是 Shockley-Read-Hall 复合模型auger是俄歇复合bgn是带隙窄化fldmob是场相关迁移率。这四个模型是硅器件仿真的标配。print参数让 Atlas 在求解过程中输出详细信息方便调试。求解方法newton是牛顿迭代法trap是载流子输运的梯形积分方法maxtrap10限制最大陷阱数。对于 PN 结这种简单结构默认的 newton 方法基本都能收敛。3.2 正向特性仿真从 0V 扫到 1V正向扫描用的是solve vanode0.0 vstep0.05 vfinal1.0 nameanode。这行命令的意思是从阳极电压 0V 开始每次增加 0.05V一直加到 1.0V。log outfpn_forward.log和log off之间的所有 solve 结果都会被记录到 log 文件里。这个 log 文件是文本格式的包含每个偏压点下的阳极电流、阴极电流、以及一些内部变量。正向 IV 的理论预期是在低偏压0.3V下电流很小因为注入的载流子浓度远低于平衡态在 0.5-0.7V 之间电流指数上升在 1V 左右电流达到 mA 量级。如果仿真结果偏离这个趋势说明模型或者掺杂设置有问题。常见问题排查现象可能原因排查方法电流始终为 0电极没接触好检查 electrode 语句的位置是否在区域边界上电流不随电压变化掺杂类型搞反了检查 typen 和 typep 是否与预期一致电流过大mA 级 at 0.1V掺杂浓度太低检查 conc 值是否合理仿真不收敛网格太粗或步长太大减小 vstep 或加密网格3.3 反向特性仿真击穿电压的初步观察反向扫描从 0V 扫到 -5V步长 -0.1V。对于掺杂浓度 1e15 的衬底理论击穿电压在几十伏量级所以 -5V 还远没到击穿。这个扫描的目的是观察反向漏电流和结电容特性。反向电流的理论值应该在 pA 到 nA 量级取决于结面积和少子寿命。如果仿真出来的反向电流是 μA 甚至 mA 量级说明有漏电机制没考虑——可能是 SRH 复合参数设置不当或者表面复合没处理。提示如果要仿真击穿需要加入impact selb模型Selberherr 碰撞电离模型并且把反向电压扫到击穿点附近。击穿仿真的收敛比较困难建议用method newton trap配合较小的电压步长。3.4 用 TonyPlot 看结果哪些图必须看仿真跑完之后TonyPlot 会自动打开如果 deck 里有 tonyplot 命令。对于 PN 结以下几张图是必须看的能带图。TonyPlot 里选择 Band Diagram可以看到导带底、价带顶和费米能级随深度的变化。平衡态下费米能级应该是平的导带和价带在结区弯曲弯曲量等于内建电势。如果费米能级不平说明平衡态求解没收敛。载流子浓度分布。选择 Carrier Concentration可以看到电子和空穴浓度随深度的变化。在耗尽区载流子浓度应该比掺杂浓度低几个数量级。在中性区多数载流子浓度等于掺杂浓度。电场分布。选择 Electric Field可以看到耗尽区的电场峰值。对于突变结电场分布是三角形的对于线性缓变结是抛物线形的。电场峰值的位置应该在冶金结面附近。IV 曲线。TonyPlot 可以直接画 log 文件里的 IV 数据。正向曲线应该是指数上升的反向曲线应该是饱和的。在半对数坐标下正向曲线的斜率对应理想因子。Net Doping。这张图显示净掺杂浓度Nd - Na随深度的变化可以直观地看到 PN 结的位置和耗尽区的范围。4. 从跑通到跑对参数校准和常见陷阱4.1 理想因子为什么不是 1教科书上说 PN 结的理想因子 n1扩散电流主导或 n2复合电流主导。但实际仿真出来的 IV 曲线在低偏压区往往 n≈2在高偏压区 n≈1中间有一个过渡区。这个现象的原因是低偏压下耗尽区的 SRH 复合电流占主导理想因子接近 2高偏压下中性区的扩散电流占主导理想因子接近 1。如果你的仿真结果在整个范围内都是 n1可能是 SRH 复合模型没生效或者少子寿命设得太长。检查方法在 TonyPlot 里画log(I) vs V曲线取低偏压段0.1-0.3V的斜率计算n q/(kT) * dV/d(lnI)。如果 n 接近 2说明复合电流主导如果接近 1说明扩散电流主导。4.2 串联电阻的影响在实际器件中中性区的电阻和接触电阻会形成串联电阻导致高偏压下的 IV 曲线偏离指数关系变成线性。仿真中如果发现 0.8V 以上的电流增长变慢可能是串联电阻在起作用。Atlas 中可以通过设置电极的接触电阻来模拟这个效应electrode nameanode top resist1e-6resist参数的单位是 Ω·cm²。对于典型的金属-半导体接触接触电阻在 1e-6 到 1e-4 Ω·cm² 之间。4.3 网格收敛性验证网格收敛性是仿真可信度的基础。验证方法是把网格加密一倍重新跑仿真比较 IV 曲线。如果两条曲线几乎重合说明网格已经足够密如果差异明显说明还需要加密。具体操作把space.mult从 1.0 改成 0.5网格加密一倍重新跑一遍。比较两次的 IV 曲线如果电流差异小于 5%可以认为网格收敛了。注意网格加密会显著增加仿真时间。对于二维 PN 结网格点数从 1000 增加到 4000仿真时间可能增加 10 倍以上。所以要在精度和速度之间找平衡。4.4 温度参数的设置Atlas 默认的仿真温度是 300K。如果要仿真不同温度下的特性用models tempxxx设置。温度会影响本征载流子浓度、迁移率、SRH 复合速率等参数。对于 PN 结温度升高会导致正向压降减小约 -2mV/K反向漏电流增大约每 10K 翻一倍。这些趋势可以用来验证温度模型的正确性。5. 从 PN 结到更复杂的器件下一步该学什么5.1 双极晶体管BJT的仿真思路BJT 可以看成是两个背靠背的 PN 结但仿真复杂度高一个量级。关键区别在于BJT 需要同时定义发射区、基区、集电区三个掺杂区域而且基区宽度很窄通常 1μm对网格精度的要求更高。BJT 仿真的核心是 Gummel 图——把集电极电流和基极电流随基极-发射极电压的变化画在半对数坐标上。Gummel 图的斜率可以提取理想因子两条曲线的交点对应电流增益为 1 的点。5.2 MOSFET 的仿真要点MOSFET 仿真的难点在于栅氧化层的处理。Atlas 中可以用region materialSiO2定义氧化层区域然后在氧化层和硅的界面处定义栅电极。关键参数包括氧化层厚度、栅长、沟道掺杂浓度。MOSFET 仿真的核心输出是转移特性Id-Vg和输出特性Id-Vd。转移特性的亚阈值摆幅SS是衡量开关性能的关键指标理论极限是 60mV/dec室温下。5.3 功率器件的特殊考虑功率器件如功率二极管、IGBT、功率 MOSFET的仿真需要特别关注击穿电压和导通电阻的折中。击穿仿真需要加入碰撞电离模型而且收敛非常困难通常需要逐步增加反向电压每一步都保存结果以便在击穿点附近细化扫描。功率器件的网格设计也有特殊要求漂移区通常很厚几十到几百微米需要用非均匀网格在结附近加密在漂移区中部稀疏。5.4 仿真与实验的对照方法仿真的最终目的是指导实验或者解释实验现象。对照方法包括IV 曲线对照把仿真得到的 IV 曲线和实验测量的 IV 曲线画在同一张图上比较开启电压、理想因子、反向漏电流等参数。CV 曲线对照仿真可以得到结电容随电压的变化和实验的 CV 测量结果对照可以提取掺杂浓度和结面积。参数提取从仿真结果中提取少子寿命、迁移率、接触电阻等参数和实验提取的值比较验证模型的准确性。如果仿真和实验偏差较大首先检查掺杂分布和几何尺寸是否准确然后检查物理模型是否适用最后考虑是否有实验中没有考虑的效应如表面态、界面态。6. 一些让我少走弯路的实操习惯6.1 文件命名和版本管理仿真项目会产生大量文件deck 文件、log 文件、str 文件、set 文件。如果没有好的命名习惯一周之后就分不清哪个文件对应哪个参数了。我的习惯是用器件名_参数_日期的格式比如pn_1e15_1e20_20240115.in。每次修改参数就另存一个新文件不要在原文件上改。这样虽然文件多但回溯起来很方便。6.2 调试阶段的快速迭代调试阶段不要一上来就跑完整的 IV 扫描。先用solve init求解平衡态然后solve vanode0.1跑一个点看能不能收敛。如果能收敛再逐步增加电压点。这样可以在几秒钟内发现问题而不是等几分钟跑完整个扫描才发现不收敛。6.3 保存中间结果在每个关键步骤之后都save一个 str 文件。比如平衡态保存一个0.5V 保存一个1.0V 保存一个。这样如果后续仿真出问题可以从中间状态重新开始不用从头跑。6.4 用 TonyPlot 的 set 文件固化视图TonyPlot 的 set 文件保存了视图设置坐标轴范围、显示的物理量、颜色映射等。把常用的视图设置保存成 set 文件每次打开新结果时直接加载可以节省大量调整视图的时间。创建 set 文件的方法在 TonyPlot 里调整好视图然后 File Save Set。下次用tonyplot xxx.str -set xxx.set直接加载。6.5 记录仿真日志每次仿真都记录日期、deck 文件名、修改了什么参数、结果是否符合预期、遇到的问题。这个习惯在跑参数扫描的时候特别有用因为很容易忘记哪个参数对应哪个结果。我一般用一个简单的文本文件记录格式是日期 | 文件名 | 参数变化 | 结果摘要 | 备注。仿真工具的学习从来不是一蹴而就的PN 结只是起点。真正让我对 Atlas 的理解产生质变的是反复修改掺杂分布和网格密度观察结果如何变化然后和理论预期对照。这个过程很枯燥但每一次为什么这个结果和我想的不一样的追问都会让你对器件物理和数值方法有更深的理解。
返回列表