
如果你的毕设题目里同时出现了Silvaco、PN结、击穿仿真这几个词大概率你是被导师一句话扔进了TCAD的深水区。我到现在还记得第一次在Silvaco TCAD里跑通PN结二极管雪崩击穿时的场景——屏幕上终于出现那条陡峭上升的反向I-V曲线我激动得差点从椅子上跳起来。而此前整整一周我都在跟网格报错、不收敛、电场峰飘到电极上这些幺蛾子斗智斗勇。这篇文章不是一个标准教程更像是一份踩坑地图。它没有帮你把Silvaco所有功能都讲一遍而是沿着“构建PN结二极管结构—设计网格—设置物理模型—扫描反向偏压—提取击穿电压”这条完整链路把我实际跑通过的路上遇到的所有问题、背后的原理、动手调试的思路全部摊开讲清楚。适合所有刚开始接触半导体器件仿真的学生和工程师尤其是毕设方向是功率器件、二极管、MOSFET耐压分析的同学。如果你正准备用Silvaco做第一个与击穿有关的仿真这篇记录能帮你少走至少两周弯路。1. 别急着跑仿真先把PN结击穿这件事吃透1.1 毕设小白的第一站为什么是PN结二极管很多人第一次听说Silvaco是因为导师说“回去把PN结二极管仿真跑一下”。这个选题听起来简单其实非常聪明。PN结二极管是半导体器件里结构最简单、物理图像最清晰的器件之一但它同时覆盖了掺杂分布、载流子输运、碰撞电离、电场分布、数值收敛——这一整套TCAD仿真的核心问题。把这一个器件跑明白了后面做肖特基二极管、功率MOSFET、IGBT的耐压分析思路都是同一个。我这会儿最想跟当年的自己说的是不要一上来就打开Silvaco先花半天把PN结的反向击穿机理想清楚。PN结反向击穿主要有两种机制雪崩击穿和齐纳隧穿。当反偏电压升高结区电场增强载流子在强电场中加速获得足够能量与晶格原子碰撞电离出新的电子空穴对新产生的载流子再次被加速、再次碰撞电离形成倍增效应电流急剧增大——这就是雪崩击穿。它对应的是轻掺杂、击穿电压较高的二极管。而齐纳隧穿是重掺杂下耗尽层极窄载流子直接量子隧穿通过势垒一般发生在击穿电压低于5V左右的器件里。我们的目标是做一个轻掺杂的功率PIN结构所以主要观察雪崩击穿。理解这一点直接决定了后面要不要开启碰撞电离模型。如果你连这个机理都没想清楚跑出来的结果是什么你都无法判断对不对。1.2 Silvaco TCAD的组成与工作流程Silvaco TCAD不是一个“打开就仿真”的软件它由几个模块配合工作DeckBuild是前端控制台用来编写和运行命令脚本ATLAS是核心仿真引擎负责求解半导体方程TonyPlot是可视化工具用来画结构、网格、电场分布和I-V曲线。它的工作方式本质上是用一套类似脚本的ATLAS语言告诉仿真器“器件长什么样、加了什么电压、用什么物理模型算”。这与我们熟悉的SPICE电路仿真思路完全不同SPICE是把电路当作黑盒算电气特性而TCAD是从器件内部的几何结构、掺杂浓度、物理方程出发算出一个空间上的场分布和电流路径。这带来的结果是TCAD能告诉你电场在哪集中、击穿发生在哪一个坐标点附近、电流从哪条路径流过——所有这些在工艺和器件设计里都极其关键。整套流程可以概括为定义网格结构→定义材料区域和电极→设置掺杂→选择物理模型→设置求解方法→逐步扫描电压→提取并分析结果。第一次跑的时候我傻傻地以为把结构写出来就能出I-V曲线结果发现每一步都可能卡住每一步卡住的原因还都不一样。1.3 从器件物理层面预判结果做仿真最忌讳的是“跑出图就算成功”。你在写deck之前心里必须有一个预期值否则仿真结果错了你根本看不出来。我的器件结构是一个纵向的PN二极管顶部是重掺杂的P阳极区中间是轻掺杂的N型漂移区底部是重掺杂的N阴极区。反偏时耗尽层主要在轻掺杂的N型漂移区展开所以器件的耐压主要由N型漂移区的掺杂浓度和厚度决定。对于单边突变结硅的雪崩击穿电压有一个经典经验公式V_BR约等于6乘以10的13次方除以N_B的3/4次方其中N_B是轻掺杂一侧的掺杂浓度单位是每立方厘米。如果N型漂移区掺杂浓度是1乘以10的16次方每立方厘米那理论上击穿电压在60伏左右。当时我把这个估算值写在草稿纸上然后用它判断仿真结果是否合理。后面跑出来是58伏左右跟理论值对得上我才确认整个模型链设置基本正确。这个“预先估算”的习惯我建议每个做器件仿真的人都养成。仿真不是造数据是用工具验证和延伸我们对物理的理解。没有理论预判仿真结果再漂亮也可能是一场精致的错误。2. 网格构建与优化Silvaco入门的第一个拦路虎2.1 网格不是画着玩的它直接决定击穿电压准不准网格是TCAD仿真的空间离散化基础。ATLAS本质上是把连续的半导体方程在网格节点上离散成代数方程组然后用数值方法求解。网格越密离散误差越小但计算量和内存占用也会急剧上升。关键在于网格疏密分布必须和物理量的梯度匹配。在PN结击穿仿真里最重要的物理量是电场。电场在耗尽区内部接近三角形分布在冶金结处达到峰值在耗尽区边界降到零而在中性区电场几乎为零。如果你的网格在结区和耗尽区太稀疏电场峰值的计算精度会非常差击穿电压的误差可能拉到20%甚至更高。我刚开始用均匀网格跑x方向间距0.2微米y方向间距0.1微米结果击穿电压比理论值高出了十几伏。后来才明白这是因为耗尽区里网格太粗电场峰值被数值平滑掉了碰撞电离积分被严重低估导致必须加更高电压才能算出击穿。网格这东西跑之前你觉得无所谓跑完你才发现它就是精度的命根子。2.2 一版可用的网格定义与参数解读下面这版网格定义是我调试了很多次以后觉得对入门者最友好的一版。结构纵向从表面到衬底厚度总共1.2微米其中P区0.1微米N型漂移区1微米N衬底0.1微米。这里为了方便展示我把横向宽度设成了2微米实际毕设中具体尺寸需要结合设计指标调整。go atlas # 网格定义横向用均匀网格即可纵向需要在结区和耗尽区加密 mesh space.mult1.0 x.mesh loc0.0 spac0.20 x.mesh loc2.0 spac0.20 # 纵向表面到P/N-结区域的网格逐步过渡 y.mesh loc0.00 spac0.005 y.mesh loc0.10 spac0.005 # 结区附近网格最密间距取0.001微米量级 y.mesh loc0.12 spac0.001 y.mesh loc0.30 spac0.010 # 漂移区和衬底网格逐渐变粗减少计算量 y.mesh loc0.80 spac0.050 y.mesh loc1.10 spac0.100 y.mesh loc1.20 spac0.100这里的space.mult是全局网格乘数因子等于1时用设定间距如果内存不够可以临时调成1.5或2相当于把网格整体变疏先跑通流程再用密网格算最终结果。x.mesh和y.mesh定义的是网格线位置和该位置的间距ATLAS会自动在相邻网格线之间按设定的spacing生成内部节点。关键是纵向网格设计思路P区掺杂浓度高载流子输运变化迅速用细网格冶金结和耗尽区是电场集中的核心区域用最细的网格N型漂移区中部电场变化相对平滑网格逐渐变粗N衬底几乎没什么物理过程给很粗的网格就行。这种“结区最密、两端渐疏”的网格策略兼顾了精度和计算效率。2.3 网格优化的实操手法refine、smooth与正交性Silvaco提供了网格优化命令但很多新手根本不知道什么时候用、怎么用。我在调试中实际用过的两个关键命令是refine和smooth。refine命令可以在指定区域内对网格进行局部加密。比如你发现结区附近电场梯度太大或者碰撞电离率分布有尖峰可以手动在局部加密refine y.mesh min0.0005 max0.005 ratio0.5 region1这条命令的含义是在region 1我设的硅器件区域内把纵向网格间距调整到0.0005微米到0.005微米之间ratio控制相邻网格的尺寸变化率。加密后击穿电压的数值通常会往下修正因为电场峰值被算得更准确了。smooth命令的作用则相反用来平滑网格间的尺寸突变。网格尺寸如果变化太剧烈会造成数值求解的截断误差增大甚至诱发不收敛。正常的操作顺序是先手动定义一版合理的网格跑一次看看电场分布和电流收敛情况再用refine在最敏感的区域加密最后用smooth把过渡区捋顺。还有一个很容易忽略的点网格线的正交性。ATLAS虽然支持非结构网格但绝大多数TCAD数值算法在正交性好的网格上收敛最快、精度最高。所以除非你对网格生成非常熟悉否则不要用倾斜网格。我见过一个同学为了节省节点数把横向网格线斜着拉结果仿真出来的电场分布明显扭曲。2.4 网格相关的三大禁忌第一不要在掺杂浓度突变的位置给粗网格。P区和N型漂移区的掺杂浓度差了三个数量级这个界面上载流子浓度变化极其剧烈粗网格会让掺杂分布被严重平滑等效结深都变了击穿电压肯定歪。第二不要一次性把网格加到特别密。我从间距0.002微米开始尝试直接导致矩阵维度爆炸单步求解要几分钟整体扫描根本跑不动。正确做法是先用粗网格跑通再逐步加密观察击穿电压的变化直到结果稳定。第三不要无视网格交叉报错。ATLAS对网格线交叉非常敏感“mesh: crossing lines”这个报错我第一周见了无数次原因通常是x.mesh和y.mesh的间距设置不合理或者refine区域设置重叠。这个报错不是小问题它会直接导致网格文件生成失败仿真根本没有开始的机会。3. 物理模型与参数设置为什么你的仿真跑不出击穿3.1 碰撞电离模型雪崩击穿的开关如果说网格是仿真的骨架那物理模型就是仿真的灵魂。我见过不少同样用Silvaco做毕设的同学结构写得很完整网格也画得很漂亮但反向扫描电压到100伏电流还是一路平坦完全看不到击穿迹象。问题基本都出在物理模型上——他们没有打开碰撞电离模型。ATLAS中默认的仿真模型组合通常不包含碰撞电离。要模拟雪崩击穿必须显式添加impact selber这是Silvaco内置的Selberherr碰撞电离模型是硅器件雪崩击穿仿真里最常用的模型。它的原理是把碰撞电离率写成电场和温度的函数其中电子和空穴各有不同的电离系数。这两条系数直接决定了击穿电压的计算结果。为什么Selberherr模型好用因为它是从大量实验数据拟合出来的在室温下、掺杂浓度中等范围内的硅器件中精度足够高而且在ATLAS里计算稳定、收敛性好。注意impact命令要在models命令之后指定同时反向击穿的温度特性也能通过这个模型体现。如果你仿真的是高温下的击穿特性Selberherr模型会给出击穿电压随温度升高而增大的趋势这和实际硅器件特性相符。仅仅是加上这一行我的仿真结果从“反向电流始终在微安级”变成了“反向电流在60伏附近陡峭上升”质变就是这么简单。3.2 迁移率、复合与禁带变窄该选的模型怎么选除了碰撞电离物理模型选择还会影响正向特性和击穿前的漏电流水平。下面这组models配置是我用来跑PN结二极管的常用组合models conmob srh auger bgn temp300conmob是浓度依赖迁移率模型。PN结两侧掺杂浓度差异大载流子迁移率在高掺杂区会显著下降如果不开启这个模型串联电阻的影响会被严重低估正向电压会失准。srh是Shockley-Read-Hall复合模型描述陷阱辅助的载流子复合过程对反向漏电流的大小有直接影响。auger是俄歇复合模型在高注入条件下影响较大二极管仿真一般开着没坏处。bgn是禁带变窄模型高掺杂下禁带宽度会变窄会影响结的内建电势和漏电流。这些模型不能乱选开关每个模型之前最好问自己一个问题这个模型对应的物理机制在我的器件和偏置条件下重要吗比如srh复合在耗尽区里决定了产生电流的大小反向小电压下的漏电流主要由它决定但到了雪崩击穿附近碰撞电离产生的倍增电流会掩盖掉产生电流srh的影响就变小了。还有一个容易踩的坑是温度。ATLAS中的很多模型参数都带温度依赖你设置了temp300就相当于所有的物理参数都自动使用300K下的值。但如果你的毕设要模拟器件在高温下的特性不能只改temp这个参数因为部分材料的参数温度依赖并不是线性的需要配合材料参数文件里的温度系数一起使用。新手阶段先固定温度300K就好把常温下的击穿特性跑明白再谈变温仿真。3.3 材料参数与边界条件哪些能改、哪些别乱动Silvaco内置了硅的众多材料参数包括禁带宽度1.12电子伏、相对介电常数11.9、本征载流子浓度约1.5乘以10的10次方每立方厘米等。新人最容易犯的错误是看到参数就想改好像不改参数就不叫仿真。实际上对标准硅PN结来说这些内建参数基本不需要动。你真正应该认真设置的是掺杂分布、器件几何尺寸和电极边界条件。电极定义这个细节特别容易出错。在我的结构里阳极在器件顶部与P区接触阴极在器件底部与N衬底接触。正确写法是这样electrode nameanode top electrode namecathode bottom这里的top和bottom是关键它告诉仿真器电极在哪个边界面上。如果你把电极位置写错比如把阳极写到了器件侧面电场分布会变得奇怪击穿位置也会完全错误。我当时就犯过这个错击穿电压算出来只有十几伏电场峰值竟然出现在器件侧面折腾了两天才发现是电极位置定义错了。还有一个重要的边界条件器件底部和侧面的默认边界属性。在正向导通和反向阻断仿真中电极之外的半导体外边界通常默认为反射边界也就是电流不能穿过。这对体二极管仿真没问题但如果做功率器件的终端结构就需要额外设置。新手期先不用管终端把体结构跑明白后面自然知道怎么加。4. 求解策略与收敛性调试从“不收敛”到“一步到位”4.1 从零偏到击穿合理的步进扫描方案模型和网格都设置好以后进入求解环节。Silvaco的求解本质上是在每个偏置点用牛顿迭代法求解一组高度非线性的偏微分方程。如果电压一下子加得太大初始解和真实解差得太远迭代很容易发散。所以反向击穿仿真必须采用逐步加电压的扫描策略。我的做法是这样先求解零偏状态让仿真器在零偏下获得一个收敛的初始结果然后以很小的步长先拿下几个点再逐步加大步长。solve init solve vd0.0 solve vd-0.1 vstep-0.1 vfinal-10 nameanode solve vd-10 vstep-1 vfinal-50 nameanode solve vd-50 vstep-0.2 vfinal-70 nameanode前三步的目的是给后面的扫描提供一个好的初始猜测。vstep和vfinal指定了这一段扫描的步长和终止电压。注意在接近击穿电压附近我把步长从1伏减小到0.2伏。为什么因为击穿是强非线性过程电流在击穿点附近会急剧上升几个数量级大步长很容易跳过击穿点导致仿真直接不收敛或者让你看到的I-V曲线在击穿附近“跳变”得特别毛糙无法准确定位击穿电压。这种扫描策略本质上是“粗跑远处、细扫关键区”。实际工程中你未必一开始就知道击穿电压在哪可以先用大步长快速扫一遍全范围确认击穿的大致位置再把电压步长调细重新细化扫描。这个方法效率极高我第一次用大步长扫到击穿位置后把局部步长降到0.1伏再扫一遍击穿电压的读数精确了好多。4.2 收敛性诊断与解法器的调参思路“不收敛”是TCAD仿真里最让人崩溃的问题它可能有几百种原因但解决办法的核心只有几条。最先要检查的是网格是否合理、模型是否符合物理、电压步长是否过大。大部分收敛问题都出在这三件事上而不是解法器调参。如果物理和网格都没问题可以尝试调整method命令中的参数method newton maxtrap15 itlimit50newton指定使用牛顿迭代法maxtrap是最大加速收敛步数itlimit是迭代次数上限。在实际调试中把itlimit从默认值调高到50确实能解决一部分“差一点就收敛”的情况。但要注意这只是治标不治本如果模型设置错了把itlimit调到10000也照样发散。还有一招非常好用分阶段求解。先不开碰撞电离模型把反向电压扫到比如20伏这组解基本都能收敛然后用save命令保存该状态再打开impact模型继续向上扫描。这样做的好处是把非线性最强的模型放在一个已经有合理初值的状态下开启收敛难度大大降低。我在实际项目里遇到高压扫描发散第一个反应就是“是不是接近击穿点了”先把步长调小不行就把前面的问题用分段求解的方式隔离。如果遇到“singular matrix”这种矩阵奇异的报错那通常说明网格质量和模型导数有问题需要回到网格环节做smooth或者检查是不是有区域之间掺杂梯度过大导致雅可比矩阵病态。别硬调解法器先把网格捋顺。4.3 结果提取与击穿判据怎么看这条I-V曲线仿真跑完最重要的就是从log文件中提取击穿电压。击穿电压的判据在工业界和学术界的定义不完全一样有的用反向电流达到某个阈值比如每平方厘米1毫安也有的用电流开始陡升的转折点。我一般用固定电流阈值法extract namebreakdown_voltage (v.anode when i.cathode-1e-6)这句的意思是当阴极电流等于负1微安时提取阳极电压值这个值就是击穿电压。为什么要用负号因为反向电流的方向和正向定义相反参照电流值取负号才能正确匹配。拿到I-V曲线后不要只看击穿电压一个数字还要打开TonyPlot看电场分布。一个合理的PN结击穿仿真应该满足击穿发生时电场峰值在P区和N型漂移区的冶金结附近电场沿耗尽区近似线性下降金属电极附近的电场强度应该很低。如果电场峰值出现在电极边界或者器件侧面说明器件结构定义或者网格设置一定有问题。另外把电流坐标改成对数坐标看反向特性你会看到击穿前有一段缓慢上升的漏电流这是产生电流和扩散电流的贡献击穿后电流指数式上升呈现典型的雪崩倍增特征。这一整套判断都符合预期这个仿真才算真正成功。5. 常见报错与实战排查我踩过的坑你可以绕开5.1 报错信息速查表我把Silvaco仿真中自己遇到的和周围同学遇到的典型报错整理成了一张速查表每个都是真实案例。这张表比任何长篇大论都更能帮你快速定位问题。报错关键词常见原因排查思路mesh: crossing linesx.mesh和y.mesh间距设置互相冲突或refine区域重叠检查组网格定义确保各段的spacing连续且过渡合理no initial solution初始条件设置不当或者结构定义缺失关键区域检查region、electrode是否齐全先跑solve initsingular matrix网格劣化或模型导致雅可比矩阵奇异用smooth平滑网格检查掺杂梯度调整方法参数impact: parameter not found碰撞电离模型参数缺失或和材料不匹配确认impact命令放在models之后检查模型名称拼写no convergence within itlimit电压步长过大或物理模型设置不合理缩小步长分阶段求解先不开启碰撞电离跑基础解electrode not attached to region电极位置和半导体区域没有接触检查electrode定义中的top、bottom或其他位置参数这张表解决了我大量“只会报错不会查”的焦虑但也要提醒一句报错信息只是入口真正的问题根源往往要从物理层面分析。比如singular matrix表面看是数值问题实际可能是掺杂浓度设置得极端不物理。5.2 五个真实翻车现场与复盘第一个翻车现场是网格过粗导致击穿电压偏高。当时我用均匀网格跑了第一版击穿电压估算值比理论值高出15伏左右。复盘后发现是结区网格太粗电场峰值被数值抹平了。解决方法是在结区附近做局部加密把y方向的结区最小间距从0.02微米降到0.001微米。第二个翻车是没有开碰撞电离模型反向扫描到100伏电流还是平的。这个之前讲过了属于对雪崩击穿机理理解不到位。我后来养成了一个习惯每次改物理模型都先在纸上写下“这个模型解决哪个物理问题”想不清楚就不加。第三个翻车是阳极位置定义到了器件侧面导致击穿电压骤降。这个锅必须甩给silvaco的电极默认规则刚开始我根本不熟悉electrode命令的默认行为以为只要写了锚点就行。后来仔细看手册才发现top和bottom参数直接决定电极所在边界。第四个翻车是电压扫描步长太大击穿附近直接不收敛。当时我从0伏直接步进到负80伏步长2伏结果在65伏附近死活过不去。把步长改小到0.2伏之后顺利通过而且击穿电压的读数比之前更稳定。第五个翻车比较隐蔽是掺杂区域的上下边界定义和网格线不贴合。我定义P区厚度0.1微米但网格线只在0.09微米和0.12微米处有节点结果掺杂区的等效边界被网格离散化了结深和设计值对不上。解决方案是让关键结构的边界落在网格线上网格不会自动贴合材料界面这事必须由你自己控制。5.3 给毕设小白的几条忠告仿真技术本身并不复杂真正难的是建立一套“每次只改一个变量”的工作习惯。我强烈建议完成为每个仿真做版本管理至少要做到deck文件按日期和参数命名否则你会在三天后彻底忘记哪个版本是网格加密前的、哪个版本是开了碰撞电离的。我自己的命名习惯是pn_breakdown_v3_mesh_refined.in一眼就能看出版本和改动重点。第二个建议是所有仿真结果都要和理论估算对照。你先用笔和公式估算击穿电压的范围再跑仿真任何一个数量级的偏差都要追查到底。绝大多数“仿真结果看起来不对劲”都不是软件坏了而是模型或结构出了问题。软件算出来的每一个数字背后都有明确的物理含义。最后多跑几个不同掺杂浓度的结构。我后来用同一套deck批量扫描了从5乘以10的15次方到5乘以10的16次方每立方厘米之间的多个漂移区掺杂浓度画出一条击穿电压随掺杂浓度变化的曲线跟文献里的趋势完全一致。那一刻我才觉得自己真正入门了TCAD仿真而不是只会重复跑别人给的例子文件。写在最后我到现在还留着第一次成功复现PN结雪崩击穿时用的那个deck文件里面的网格写得歪歪扭扭模型设置也带着很多不必要的参数但每次看到它我都会想起那一周从焦虑到兴奋的完整过程。这里面的核心经验和教训就是网格要贴合物理量的梯度模型要匹配你关心的物理机制扫描策略要兼顾效率和收敛性结果必须经得起理论估算的检验。如果你正被Silvaco的报错和发散折磨别急着怀疑自己不适合做仿真把问题拆开来看绝大部分坑都是结构、网格、模型、求解这四件事里的某一个环节。一个一个排查迟早会通的。最后再分享一个小技巧Silvaco的help文档和自带示例库远比你想的实用很多报错在example里都能找到对应解法遇到问题先翻example比我当年闭门造车高效得多。祝你的第一个PN结也能顺利击穿。跑通之后回来看看这篇记录你会发现那些曾让你崩溃的报错信息全都变成了能笑着说出来的经验。