Silvaco TCAD肖特基二极管反向击穿仿真:建模、网格与收敛控制要点
前阵子用Silvaco TCAD跑肖特基二极管仿真正向I-V、电容特性都很快就收敛了唯独反向击穿这一步卡了快两个礼拜——不是击穿电压偏低就是曲线在击穿前突然发散好几个结构参数反复调才摸到门道。这篇就借“肖特基二极管反向击穿特性”这个案例把结构建模、网格划分、碰撞电离模型和收敛控制从头到尾拆一遍顺带把那些光看手册根本找不到的坑标出来。适合正在用Silvaco做功率器件仿真的工程师、研究生也适合刚碰TCAD、想通过具体案例快速上手的人。1. 反向击穿为什么是TCAD仿真里最挑设置的一关1.1 正向I-V随便跑反向击穿却对网格和模型高度敏感很多初学者跟我最开始一样觉得一个肖特基二极管嘛正向反向不就是换一下电压扫描方向么。结果正向I-V曲线三分钟跑完一到反向高压区就各种崩。原因在于这两类特性对仿真的敏感度完全不同。正向导通时电流主要受肖特基势垒高度和外延层串联电阻控制势垒高度是你在contact里直接给定的参数串联电阻则由掺杂浓度和尺寸决定。只要这两个大致没错哪怕网格粗糙一点、碰撞电离模型开没开正向曲线都长得像模像样。反向击穿则完全是另一回事。它依赖的是金属-半导体界面附近峰值电场区域的碰撞电离积分而电场是电势的一阶导数。网格一粗电势在网格单元上被近似成线性分布电场就变成阶梯状峰值被明显抹平击穿电压自然偏大反过来网格畸变严重时又可能造出虚假的电场尖峰让击穿电压偏低。更要命的是击穿过程是强非线性的电流在几个伏特甚至零点几伏特内跳变多个数量级对数值求解的稳定性和物理模型的完备程度要求完全不在一个量级。所以同一个deck文件里正向跑得越顺反向崩得越快这件事一点都不奇怪。理解了这一点再去调反向击穿思路才能对不是碰运气而是逐项排查网格、模型、边界条件和数值控制。1.2 肖特基结击穿的物理机制雪崩碰撞电离是主角反向偏置下肖特基结耗尽区内的电场随电压升高而增强。载流子在强电场中加速获得足够动能后与晶格原子发生碰撞电离产生新的电子-空穴对新产生的载流子继续被电场加速又引发下一轮碰撞电离最终形成雪崩倍增。当空间电荷区内的碰撞电离积分接近1时电流趋于无穷大这就是通常看到的击穿。Silvaco里用碰撞电离系数α(E)来描述这个过程常用的是Selberherr模型形式上是α a·exp(-(b/E))。系数对电场呈指数依赖意味着电场只要变一点点碰撞电离率就会有剧烈变化。这也是反向击穿仿真对峰值电场精度要求极高的根本原因。肖特基二极管和PN结的击穿有个显著差异PN结的电场峰值在冶金结附近而肖特基结的电场峰值就贴在金属-半导体界面上。这意味着表面态、界面附近的网格质量、甚至钝化层边界都会直接影响击穿。另外肖特基二极管是多数载流子器件反向击穿之前的“本底漏电”是热电子发射电流比PN结的扩散电流大好几个量级所以在仿真里如果发现击穿前漏电已经有了相当数值不用大惊小怪这是器件本身特性不是模型设错了。2. 结构建模与材料参数击穿电压的地基在哪2.1 肖特基接触与欧姆接触的电极定义先看ATLAS里怎么把一个结构定义成“肖特基二极管”而不是一个普通电阻或pn结。核心是阳极必须定义成肖特基接触也就是用金属功函数来设置势垒。一个典型的低压硅肖特基二极管结构代码长这样go atlas region num1 silicon y.min0 y.max5 electrode nameanode x.min0 x.max5 top electrode namecathode bottom doping uniform conc1e16 n.type y.min0 y.max4 doping uniform conc1e19 n.type y.min4 y.max5 contact nameanode workfunction5.15这里有几处容易踩坑的地方。第一阳极电极直接用top定义在硅片表面不需要单独建一个金属regionATLAS里电极就是边界条件。第二contact nameanode workfunction5.15这句话不能省——如果不写ATLAS默认阳极也是欧姆接触那仿的就是一个纯电阻结构反向I-V完全不对。第三金属功函数直接决定势垒高度对硅来说电子亲和势约4.05 eV势垒高度近似等于金属功函数减去4.05 eV。Ni的功函数约5.15 eV形成的势垒约1.1 eVPt的功函数约5.65 eV势垒约1.6 eV。势垒越高反向漏电越小击穿前的反向电流平台也越低。阴极的欧姆接触则简单得多下方的N衬底浓度给到1e19 cm^-3左右ATLAS默认的欧姆接触边界条件就够用接触电阻基本可以忽略。这里提醒一句衬底浓度如果给得太低仿真结果里会多出一段串联电阻导致反向曲线在高压区提前上翘容易被误判成击穿。2.2 外延层浓度和厚度决定了击穿电压的大区间击穿电压的地基说到底是由外延层掺杂浓度和厚度画出来的。对单边突变结忽略边缘效应时击穿电压近似正比于Ec²/(qN_B)——Ec是临界电场N_B是外延层掺杂浓度。临界电场本身又和掺杂浓度弱相关所以工程上粗略看外延浓度每降一半耐压大致翻一倍。我习惯在建模前先用下面这张表做一次数量级预判避免盲调参数外延层浓度 (cm^-3)外延层厚度 (μm)理想击穿电压近似值 (V)1e164约305e158约602e1520约1501e1530约300这里的先决条件是耗尽层还没有完全穿通外延层。如果外延层给得太薄耗尽层直接碰到N衬底电场分布从三角形变成梯形击穿电压会被明显压低而且不再严格服从“浓度减半、耐压翻倍”的规律。仿真前先按耗尽层宽度公式粗算一下浓度1e16、耐压30V的结构最大耗尽层宽度大约1.5~2μm外延层给4μm就够用想仿300V档的器件外延层至少30μm起步这个量级在网格设计时就要有所准备。这个案例后续的演示结构我就按第一行参数来外延浓度1e16 cm^-3、厚度4μm、Ni肖特基接触预期击穿电压落在25~35V之间。用这个结构跑完整个流程再去扩展高压结构就顺了。3. 网格划分反向曲线平不平网格先给答案3.1 界面与耗尽区的网格排布网格是TCAD仿真里最容易被低估的一环。很多刚上手的人直接把grid语句抄过来用了等反向曲线出现锯齿、击穿点飘忽不定时才回头发现网格密度不对。肖特基二极管反向特性对网格的核心要求是在电场峰值处给出足够的分辨率。电场峰值就在金属-半导体界面下方所以y方向第一层网格必须足够密。我的经验值是0.01~0.02μm再粗就很难看准击穿了。从界面往体内走电场近似线性衰减网格可以逐步放宽但相邻网格间距的比值不要超过1.5~2倍否则数值上容易出现寄生振荡。对应到上面的结构网格定义可以这么写mesh space.mult1.0 x.mesh loc0.0 spac0.5 x.mesh loc2.0 spac0.1 x.mesh loc5.0 spac0.5 y.mesh loc0.0 spac0.02 y.mesh loc1.0 spac0.05 y.mesh loc2.0 spac0.2 y.mesh loc4.0 spac0.5 y.mesh loc5.0 spac1.0细看这个网格y方向从界面处的0.02μm开始到1μm处放宽到0.05μm再到2μm处0.2μm体内0.5μm以上。x方向在阳极边缘2μm附近加密到0.1μm这是为了照顾边缘电场集中效应——实际肖特基二极管的击穿点往往不是正中央而是阳极边缘如果x方向网格太疏边缘电场会被严重低估。还有一个常见错误把所有网格都设成加密导致节点数上万高压扫描每一步迭代都很慢。网格不是越密越好而是“该密的地方密、该疏的地方疏”。电场变化平缓的衬底区给1μm步长完全没问题。3.2 先粗后细的两步验证法网格数量对击穿电压的影响不是单调收敛那么简单的。网格太少击穿电压偏高网格畸形击穿电压偏低网格密到一定程度后结果才趋于稳定。实际项目里我不可能一面加压一面反复试网格所以一直用“两步走”策略。第一步用较粗的网格界面间距0.1μm左右完整跑一遍反向扫描确认击穿电压大致在哪个区间同时观察电场峰值出现在哪个位置。第二步在电场峰值区域和阳极边缘把网格加密到0.02μm甚至0.01μm重新跑一遍。对比两次的击穿电压如果变化在5%以内说明网格已经收敛如果变化很大继续加密再对比。这种做法能省掉大量无谓等待。因为高压扫描配合超细网格仿真时间会呈指数上涨一开始就上最细网格很容易让人心态崩溃。另外每次加密网格后记得重新看一下击穿点附近的电场分布确认峰值位置没有发生异常的跳变。如果电场峰值从半导体内部跑到结构边界或者电极拐角上那基本说明网格或边界条件出了问题要先修结构而不是继续加密。4. 碰撞电离模型与反向扫描的收敛控制4.1 Selberherr模型默认参数能用但别乱动物理模型的选择直接关系到击穿曲线准不准。我的model语句一般这样写model srh auger bgn selberherr printselberherr启动碰撞电离模型反向击穿模拟的核心。srh空间电荷区产生-复合电流反向漏电的物理基础之一。auger大电流密度下的俄歇复合在击穿点附近电流暴涨时起修正作用。bgn禁带变窄效应高浓度衬底区域需要。对硅材料而言Silvaco内置的Selberherr碰撞电离参数是经过文献标定的常规温度范围内直接用就行不建议一上来就改an、bn、ap、bp这些系数。很多初学者发现击穿电压和实测对不上第一反应就是去调碰撞电离参数结果改了半天根本没变化——因为雪崩击穿对电场指数敏感树根在网格和结构上叶子才是模型系数。什么时候需要动参数两种情况一是把结构换成SiC、GaN等宽禁带材料必须换成对应材料的碰撞电离参数这些参数Silvaco未必内置好了二是仿真温度和标定温度差很多时要注意迁移率和碰撞电离模型的温度耦合不过硅器件在常温附近并不敏感。在动参数之前请务必先用仿真和实测对比做一组校准确认偏差确实是模型参数引起的而不是网格、边界条件或者封装寄生带来的。4.2 反向扫描步长、compl与log记录模型的收敛性除了物理设置还和解算策略强相关。反向扫描不建议一次性给一个大电压步长尤其接近击穿区时电流跳变极其剧烈一个不小心就直接发散。推荐的做法是分段步进solve init solve vcathode0 log outfschottky_rev.log solve vcathode1 step1 compl1e-4 solve vcathode10 step2 compl1e-4 solve vcathode20 step1 compl1e-4 solve vcathode27 step0.5 compl1e-4 solve vcathode30 step0.1 compl1e-4思路很直白远离击穿区时电压-电流关系相对平缓用1V、2V的大步长快速扫过去到了20V以后电流开始明显爬升步长缩到0.5V27V以后进入击穿边缘步长再缩到0.1V确保能把击穿点附近的曲线细节完整采下来。compl1e-4是一条保护性的电流上限电流达到这个值继续解下去会让非线性方程组彻底失去平衡设置电流限制可以在击穿时触发收敛停止避免log文件里出现一堆乱码数据。log outfschottky_rev.log会把之后所有solve步骤的电流、电压、电荷量等输出到同一个log文件方便后续用tonyplot看曲线或者用extract提取击穿电压。别忘了在击穿扫描前把log打开漏了这一步就得重新跑一遍。4.3 不收敛的完整排查链从报错到逐步加载初值仿真最让人抓狂的就是盯着终端看半天最后蹦出一句“Newton convergence failed”然后什么都没有。我这一年多踩出来的排查顺序是这样的。先看日志里最后一个收敛点落在哪个偏置。如果是在击穿临界区附近不收敛八成是步长太大把当前位置解“甩”出了收敛域。处理方法很简单从上一个收敛点回头把步长减半甚至缩到0.05V。击穿区本来就是个电流跳变几百万倍的非线性区间电压步长稍微大一点牛顿迭代的雅可比矩阵就卡住了。如果缩小步长仍然不行把回线方法从Gummel换成Newton并在method语句里加上maxtrap10method gummel newton maxtrap10Gummel法在小电流阶段迭代快但进入强非线性区后收敛半径小Newton法每一步都求雅可比矩阵计算代价高但在击穿区反而稳。同时maxtrap允许求解器在迭代发散时自动回退半步再试等于多了一层保护。真正顽固的不收敛尤其是那种“无论怎么缩步长都崩”的情况问题往往出在初值离真实解太远。这就要用到“分布加载”思路先不带碰撞电离模型只用srh、auger、bgn把反向偏置的静电势和载流子分布解出来保存成初值文件然后打开selberherr载入这个初值从已经收敛的偏置点继续小步进扫描。相当于先让求解器在一个“没有雪崩”的世界里热身把一个光滑解作为起跳点再接上剧烈的碰撞电离非线性。这一步解决了我遇到过的大半反向不收敛问题。排查完之后还有最后一招把电场峰值区域的网格再加密一轮。很多看似“模型发散”的问题根源其实是某个网格单元太大导致局部电场突变雅可比矩阵病态。修复网格后原来的奇葩结果可能自动消失。5. 从击穿曲线到器件设计决策5.1 击穿电压怎么才算“击穿”仿真里不存在一个开关式的“击穿”所谓击穿电压本质上是一个工程判据。对功率肖特基二极管常见标准是反向电流密度达到某个阈值比如0.1~1 mA/cm²对应的电压就是击穿电压。Silvaco里可以用extract语句把这个判据写进流程extract nameBV x.val from curve(vcathode, i.cathode) where y.val1e-4意思是当阴极电流i.cathode达到1e-4 A/μm时取对应的vcathode作为击穿电压。注意2D仿真的电流单位是A/μm和实际器件宽度有关如果要和实测mA/cm²对照记得先把器件宽度和厚度方向换算清楚。提取击穿电压时还要留意“伪击穿”。有时候反向曲线在某电压附近突然跳高看起来像击穿但加密网格后再跑击穿电压大幅移动甚至消失。这种“伪击穿”大多是数值伪影常见于网格畸变区或结构边界处。判断方法很简单输出击穿瞬间的电场分布图看峰值电场是不是出现在金属-半导体界面下方。如果峰值跑到仿真区域角落、衬底边界或者电极拐角上基本可以断定是边界条件或网格问题必须先修结构再谈击穿电压。5.2 边缘电场集中与终端结构的仿真体现如果只用简单的矩形结构仿真得到的击穿电压会比实际流片结果乐观很多原因就是忽略了边缘电场集中。肖特基二极管阳极边缘处电场线会拥挤峰值电场比内部更高击穿往往从这里先发生。仿真里要逼近真实情况通常需要把阳极边缘的介质层和可能的场板结构建进去。比如在阳极边缘定义一层SiO₂再让金属阳极延伸覆盖到介质上形成场板region num2 oxide y.min0 y.max0.3 x.minedgestart x.maxchipend electrode nameanode x.min0 x.max5 top electrode namefieldplate x.min5 x.max7 top场板的作用是让耗尽区在表面附近向外扩展一些摊薄峰值电场从而抬升击穿电压。仿真里加上场板后你会看到击穿点从阳极边缘移到内部或者沿场板边缘重新分布这跟实测的失效点分布是能对上的。不过场板结构会给网格划分带来新麻烦特别是在介质与半导体的尖角处网格不加密的话那里的电场奇异值会让收敛雪上加霜。对有结终端需求的高压肖特基还可以引入JTE结构——在阳极外侧做一圈低浓度P型注入或刻蚀台阶同样是降低边缘电场尖峰。TCAD的价值在这里体现得很直接还没流片就能把几种终端结构的击穿电压、电场分布、电流路径对比出来省下好几轮实验费。5.3 仿真与实测的偏差预期仿真跑完了击穿电压也和预期接近了接着就要面临最后一个现实问题实测能对上吗对此我的经验是硅基肖特基二极管的2D TCAD仿真结果通常比实际流片测试结果乐观5%~15%。原因不难理解仿真里的外延浓度是理想的均匀分布实际外延片有浓度梯度、缺陷和金属杂质仿真里的表面是理想平整界面实际制造过程会引入界面态和损伤而且2D仿真无法完全不考虑器件周边的三维耗尽区扩展复杂终端结构尤其明显。所以我不建议拿TCAD仿真值去对冲实测值的绝对匹配而是重点看趋势和相对变化。同一个结构体系里外延浓度从1e16降到5e15击穿电压是否如预期地翻倍场板长度加长1μm击穿电压提升了多少这些相对量的仿真精度远比单个点的绝对数值可靠。做功率器件设计时把仿真当作“决策向导”而不是“数据手册”你的心态会好很多项目推进也会顺利很多。我自己刚开始做肖特基反向击穿仿真时最常犯的错就是把所有问题都归到碰撞电离参数上盯着an、bn改了一下午最后发现只是阳极边缘网格太粗。后来我养成一个习惯每次跑击穿前先用粗网格快速扫一遍不带碰撞电离的静电势和电场分布确认峰值电场的位置和量级都合理再决定加密区域和扫描步长。这个小习惯帮我省了大量时间。如果你正卡在反向击穿不收敛的死循环里不妨也从这个角度重新排查一遍多半会有收获。