做半导体功率器件设计,谁也绕不开肖特基二极管这一关。它开关快、正向压降低,但反向漏电天生比PN结大,耐压评估也更麻烦。最近我在整理Silvaco TCAD仿真例库,专门挑了一条“肖特基二极管反向击穿特性”的案例,从结构搭建、物理模型选型到击穿点提取,完整跑了一遍,过程中踩了一堆坑,也攒下一套可以复用的打法。这篇文章就把这条案例的完整思路和实操细节摊开讲,给正要接触TCAD仿真、或者想快速做器件耐压摸底的朋友一个可以直接上手的参考。
Silvaco TCAD仿真的核心价值在于,你不需要投片就能先“看”到器件内部的电场、载流子分布和电流路径。尤其是反向击穿这种强电场、强耦合的问题,光靠公式估一个数字不太够,必须把器件结构、掺杂、接触、温度全部建模进去,跟实测做交叉验证。下面我会把这条案例从物理原理到DeckBuild命令全部拆开讲,文末还会附上我在实际排查中遇到的几个典型问题和解决办法,信息密度会比较高,建议收藏了慢慢看。
1. 先弄清楚反向击穿仿真在模拟什么
很多人一上来就打开DeckBuild写命令,结果仿真出来的反向IV曲线要么平平淡淡,要么崩掉。根本原因不是命令语法不行,而是没想清楚反偏状态下肖特基二极管内部到底发生了什么。
1.1 肖特基二极管反向击穿的物理本质
金属和N型半导体接触会形成肖特基势垒,零偏时耗尽区内的电荷已经处于平衡状态。施加反向偏置后,金属一侧的费米能级被拉低,半导体一侧的能带进一步弯曲,耗尽区变宽,结面处的峰值电场也随之升高。理想情况下,反向电流主要由越过势垒的热电子发射决定,这个电流很小,对电压不敏感,所以反向IV曲线看起来会有一段很平的区域。
但电压继续往上拉,结面附近的电场强度突破105 V/cm量级时,载流子在耗尽区里会被电场加速到足够高的能量,碰撞晶格原子产生电子-空穴对,新产生的载流子再被电场加速继续碰撞电离,形成雪崩倍增效应,电流开始指数式上升。这个转折点对应的就是雪崩击穿电压,也是我们做反向击穿仿真最关心的数字。
肖特基二极管还有一点跟PN结不同:它是多子器件,没有少子存储效应,所以漏电机制里除了热电子发射和雪崩电离,还要考虑隧穿。当耗尽区比较窄、电场很高时,电子可能直接隧穿穿过势垒,表现为漏电流比纯热电子发射模型算出来的明显偏大,击穿曲线也会提前“抬头”。做TCAD仿真时,如果只开雪崩模型不管隧穿和势垒降低,击穿电压往往会被高估。
1.2 为什么必须用TCAD而不是手算公式
教科书里算单边突变结击穿电压,惯用BV ≈ Ec²/(2qN),这个公式很好用,但要付出很大的代价。它假设结是无限大平行平面,电场只在纵向变化,实际情况里器件有边界、有终端结构,电场会在金属边缘和台面拐角处集中,真实击穿电压通常比一维估算低不少。
TCAD的本质是用数值方法去解泊松方程、载流子连续性方程和电流传输方程耦合的非线性方程组。它能处理任意几何形状、任意掺杂分布、多物理场耦合,把边缘电场效应、二维耗尽层扩展、碰撞电离积分全部考虑进去。虽然Silvaco Atlas也是基于有限元/有限差分做离散近似,但比起手算公式,它对复杂结构的描述能力是数量级的提升。
所以这条案例的定位很清楚:不是教你用公式估一个点,而是用TCAD构建一个“虚拟器件”,把反向偏压从0一直推到击穿,观察内部电场和电流的演化过程,拿到一条完整的反向IV曲线,再去提取击穿电压。
2. 仿真前的准备:工具链与模型选型
Silvaco TCAD不像很多交互式软件那样所见即所得,它更像一个“写剧本然后执行”的工具链。提前把工具流程和物理模型定好,后面才能少走弯路。
2.1 Silvaco TCAD的常规打法:DeckBuild、Atlas、TonyPlot
Silvaco TCAD套件里,DeckBuild是主控界面,负责编辑命令、执行批量任务;Atlas是核心器件仿真器,所有物理方程都在这一层求解;TonyPlot是后处理可视化工具,用来画IV曲线、电场分布、能带图等。三者的配合关系是:你在DeckBuild里写Atlas命令,运行后Atlas生成log文件和structure文件,再用TonyPlot打开分析。
这条案例实际执行的流程可以概括成四步:建结构、定义材料与掺杂、设置物理模型、加偏压扫描。命令文件用文本形式管理非常方便,调参、批量跑多个电压点、换掺杂浓度,都是改几个变量的事。我习惯在DeckBuild里用set定义一组全局变量,比如外延层厚度、掺杂浓度、阳极势垒高度,后面结构命令和掺杂命令里直接引用,改参数时只动一处,清晰又不容易出错。
2.2 物理模型怎么开,千万别只靠默认
Atlas默认的模型往往不够用,尤其是在算击穿的时候。你至少要关注以下几类模型:
一是复合模型,最常用的是Shockley-Read-Hall复合,对应命令里的srh。反向漏电很小,往往就是SRH复合和热电子发射在主导,不开它,漏电流会被压到一个很假的低值。二是迁移率模型。高电场下载流子速度会饱和,必须开场相关迁移率(fldmob),否则高场区的电流会算歪。掺杂浓度高的时候还要看掺杂相关迁移率(commob)。三是产生模型,这是击穿仿真最关键的。碰撞电离用impact selber或impact darwell,Selberherr系数对硅最常用,算出来的雪崩增加因子和电场分布密切相关。
还有几个容易被忽略的细节:肖特基接触本身需要设置热电子发射和势垒降低,命令里对应contact name=anode barrier=...,要模拟镜像力势垒降低时可以提高image=1;如果做的是隧穿明显的窄耗尽区器件,还要在模型里打开场发射项。方程求解方面,载流子数要设置成carriers=2,因为雪崩过程里电子和空穴都要参与,只用单载流子方程的话,击穿根本算不出来。
下面给出一份常用的模型开启命令示例:
go atlas models srh fldmob commob auger impact selber \ print temperature=300这里把auger也开了,主要是考虑到反向高场下可能有高注入效应,再加上安培复合在击穿前对电流-电压关系也会有一点影响。模型不在多,但在击穿仿真里,SRH、fldmob、impact这三项是底线。条件允许的话,可以先用干净的模型跑通流程,再逐步加复杂项看结果变化。
3. 实操拆解:从画结构到提取击穿电压
到这一步,我就按案例里的实际命令流一步步走。为了便于复现,我把几何参数和命令都写得尽量具体。
3.1 结构定义与网格设计——这一步决定一半的收敛
我做一个阳极在上、阴极在下的二维垂直结构:上层是N型外延漂移区,厚度6微米,掺杂浓度8e15 cm⁻³,下层是N+衬底,厚度0.5微米,掺杂浓度1e19 cm⁻³。阳极金属覆盖整个器件顶部,形成肖特基接触,阴极在底部形成欧姆接触。
Silvaco默认长度单位是微米,所以坐标直接用微米写。网格设计是这里的关键,电场在金属-半导体界面处最强,往半导体内部迅速衰减,所以从表面往下要布置很密的网格。实际的网格命令可以这样写:
mesh space.mult=1.0 x.mesh loc=0.0 spac=0.5 x.mesh loc=10.0 spac=0.5 y.mesh loc=0.0 spac=0.01 y.mesh loc=0.1 spac=0.02 y.mesh loc=0.6 spac=0.05 y.mesh loc=2.0 spac=0.1 y.mesh loc=6.0 spac=0.2 y.mesh loc=6.5 spac=0.5 region num=1 material=Silicon x.min=0 x.max=10 \ y.min=0 y.max=6 region num=2 material=Silicon x.min=0 x.max=10 \ y.min=6 y.max=6.5 doping uniform concentration=8e15 n.type region=1 doping uniform concentration=1e19 n.type region=2 electrode name=anode top electrode name=cathode bottomy方向在0到0.6微米之间加密到0.01~0.05微米,是为了捕捉表面附近的强电场梯度。外延层中下部和衬底区域电场变化相对平缓,网格可以逐步放宽。注意x.mesh这里两边间距都是0.5微米,网格均匀,如果你的阳极宽度更小,或者想看边缘电场效果,最好在x=0和x=10附近再加密一点。
3.2 接触、势垒与电极设置
肖特基接触需要在电极定义后单独设置势垒高度。对N型硅,典型镍硅化物肖特基势垒大约在0.7~0.8 eV。命令如下:
contact name=anode barrier=0.8 image=1barrier直接指定金属一侧相对半导体的势垒高度,image=1开启镜像力势垒降低效应,这样高场下漏电流会略微增大,更接近真实器件。阴极默认就是欧姆接触,如果不想用默认值,可以显式写contact name=cathode ohmic。
这里有个细节容易踩坑:电极名称一旦定了,后面所有电压赋值命令都要用这个名称。比如电极叫anode,那加反向偏压时用solve vanode=-100,而不是通用的vd=...。如果你直接写solve vd=...但器件里没有这个电极名,Atlas会直接报错或者明明执行了却没有把电压加到目标电极上。
3.3 反偏扫描策略与求解器配置
击穿仿真难在收敛。反向电压从0开始,漏电很小,方程好解;但到了接近击穿的高压段,电流增长很陡,Newton迭代极容易发散。我的策略是:先初始化,再用小步长慢慢扫,临近击穿时进一步缩小步长。
假设要做0到-400V的反向扫描,命令可以这样组织:
method newton itlimit=50 maxtrap=10 solve init log outf=sbd_bv.log master solve vanode=-1 solve vanode=-5 solve vanode=-10 solve vanode=-20 vstep=-5 vfinal=-100 solve v=...实际跑的时候用循环或连续solve语句逐点推进,步长尽量不加到太猛。接近-300V以后,如果电流还在指数上升,就改用vstep=-2甚至vstep=-1微调,这样能更精确地捕捉击穿点。maxtrap=10的意思是Newton迭代发散时最多做10次外推尝试,对击穿这种强非线性问题很有用。
如果在某个电压点一直不收敛,还有一个骚操作:先在这个电压点附近用很小的步长跨过去,比如在-390V到-395V之间,每步只加0.5V,然后把该点的结果存成初始猜测,继续往高压推。这种方法在很多实际项目里都管用。
3.4 结果提取:IV曲线、击穿点判定与电场分布
仿真跑完,sbd_bv.log文件里存的是每个偏置点的电压和电极电流。用TonyPlot打开,画x轴=vanode、y轴=i.cathode,就能看到典型的反向IV曲线。
击穿电压的判定标准分两种。工程上常用电流阈值,比如反向电流密度达到1 A/cm²时对应的电压就是击穿电压。实验室里也会用电流突变点,也就是d|I_R|/dV最大的位置。更物理的定义是碰撞电离积分趋近于1,可以通过Atlas的输出积分项看,但这个需要额外设输出参数,工程上用得少。
为了方便批量处理,我一般会把log文件用脚本读出来,按阈值确定BV。下面是一段Python脚本思路,大家可以按需改路径和阈值:
import pandas as pd df = pd.read_csv("sbd_bv.log", sep=r"\s+", comment="#") df["abs_I"] = df["i.cathode"].abs() # 二维仿真电流单位通常为 A/um,按器件宽度换算可得电流密度 width_um = 10.0 df["J"] = df["abs_I"] / width_um * 1e4 # 粗换算为 A/cm2,实际要看输出单位 bv = df[df["J"] >= 1.0]["vanode"].min() print(f"BV@1A/cm2 = {bv:.2f} V")注意Silvaco二维仿真默认电流输出是单位宽度电流(A/μm),具体单位要看log文件头注释,不同版本可能不一样。提取完IV曲线后,再用TonyPlot打开对应电压点的structure文件,看电场分布,就能定位电场峰值到底在金属边缘还是体耗尽区,这对后面的终端优化特别有帮助。
4. 常见问题与排查实录
这套案例我跑了好几轮,中间遇到过不少问题。下面几条是我觉得最容易踩、也最影响效率的坑,按严重程度排个序。
4.1 反向电流不“翻”,漏电平平的
最诡异的一个现象是:反向电压拉到很高,电流曲线还是平的,一点要击穿的意思都没有。排查方向有三个。
第一,物理模型没开碰撞电离。如果impact selber没打开,雪崩过程根本不会发生,电流自然不涨。第二,网格太粗,尤其是表面附近和耗尽区边缘,电场峰值被离散步长“磨平”了,看不到真正的击穿。第三,载流子方程没设双载流子,只设置carriers=1,雪崩倍增产生的电子或空穴不能同时参与输运,模型本身就不完整。
4.2 击穿电压比理论值高或者低
理想平面结估出来的BV可能比仿真结果高10%到30%,这很正常,因为仿真能捕捉到边缘电场集中效应。但如果偏差大到离谱,就要检查网格和模型了。
网格太粗会让峰值电场偏低,击穿电压偏高,这是一个非常典型的网格依赖问题。我建议做一次“网格收敛性验证”:把表面y方向网格从0.01改成0.005,再对比击穿电压有没有明显变化。如果变化超过1%~2%,说明网格还不够密。另外,碰撞电离系数用的是硅的Selberherr默认参数,虽然适用性广,但不同文献里的系数也有差异,精确工程计算时要用自己标定过的系数。
4.3 Newton迭代不收敛的几个细节
反向击穿是强非线性问题,迭代不收敛太常见了。我先检查的是步长,临近击穿时如果还在用0.5V甚至更大的步长,电流跳变太剧烈,方程很容易跑飞。把步长缩小到0.1V左右,同时保证maxtrap开启,能解决大半问题。
还有一个是边界条件和初始条件的问题。如果器件初始化没做好,直接在0V就给一个比较大的反向偏压,方程一开始就不平衡。我习惯从0V开始,用solve init建立平衡态,然后再逐级加反向电压。这样每个电压点的初值都是上一个解的延续,收敛性好很多。
4.4 电场分布异常与网格问题
仿真后如果你在TonyPlot里看到电场分布图上有明显的尖峰或者锯齿状起伏,大概率是网格质量不够。网格在某个区域过渡太悬殊,导数和积分就会出现非物理的振荡。处理办法是在电场梯度大的区域加密网格,同时让网格间距变化平滑一点,不要从0.01突跳到0.2。
我把常见问题整理成一张速查表,方便现场排查:
| 现象 | 可能原因 | 处理建议 |
|---|---|---|
| 反向电流不上升 | 碰撞电离模型未开启 | 增加impact selber,确认载流子数设为2 |
| 击穿电压偏高 | 网格太粗、峰值电场被低估 | 表面网格加密到0.005~0.01,做网格收敛验证 |
| 击穿电压偏低 | 漏电模型过强或势垒过低 | 检查barrier设置,确认隧穿模型是否合理 |
| 高电压点发散 | 步长过大、初值跳跃 | 缩小扫描步长,增加maxtrap次数 |
| 电场出现锯齿状振荡 | 网格过渡不合理 | 平滑网格间距,加密高场区 |
5. 案例扩展:把击穿仿真用进工程实践
拿到一个顺利收敛、击穿点清晰的案例只是起点,真正有价值的是用这类仿真的套路去做器件优化。下面三条是我觉得对功率器件设计特别有实际意义的扩展方向。
5.1 掺杂浓度与漂移区厚度的双变量扫描
肖特基二极管的反向耐压主要由漂移区的掺杂浓度和厚度决定。掺杂越高,耗尽层越窄,峰值电场更容易达到临界值,击穿电压越低;漂移区越厚,耐压越高,但正向导通电阻也会变大,这是一组典型的折中关系。
用Silvaco做双变量扫描非常方便,把掺杂浓度设成变量,从5e15到1e16 cm⁻³,再配合外延层厚度从4微米到8微米,跑一组正交仿真,就能画出BV与掺杂、厚度的关系曲面。这样你在设计阶段就知道,要BV做到600V,漂移区掺杂高点行不行、厚度需要多厚、对应的正向压降大约多少,整个过程完全不需要晶圆流片。
5.2 场板和终端结构怎么建模
平面肖特基二极管的边缘是电场增强最明显的地方,不加任何终端结构时,击穿电压可能只有理想体击穿的60%到80%。工程上最常用的两个终端手段是场板和结终端扩展(JTE)。
在场板建模时,你只需要在阳极金属外延出一段场板,横跨一段氧化层。用Silvaco实现就是在结构命令里增加一个绝缘层region,然后把阳极电极延伸覆盖到绝缘层上。JTE的思路更复杂一点,要在阳极外围做一个低掺杂区域,用来横向扩展耗尽区,降低峰值电场。这个可以分析不同JTE剂量和宽度对BV的影响,TCAD在这里能省大量流片迭代时间。
5.3 温度特性与宽禁带材料的模型差异
功率器件必然要考虑高温工况。硅的碰撞电离系数随温度升高会下降,原因是高温下声子散射增强,载流子在两次碰撞之间积累的能量减小,所以击穿电压通常随温度升高而升高。把模型里的temperature从300K扫到450K,你会发现BV可能在升高,同时反向漏电流也会因为热电子发射增强而显著变大。这条IV曲线的温度依赖,和实测对比时非常关键。
如果做到碳化硅、氮化镓之类的宽禁带材料,就要注意Selberherr碰撞电离系数已经不再适用了,Silvaco材料库里虽然有这些材料,但碰撞电离参数还是要自己查文献填。宽禁带材料的临界电场比硅高一个量级,网格需要在更小的范围里捕捉更大的电场梯度,对网格质量的要求比硅更高。
我个人在实际操作里最深的体会是:击穿仿真不是跑出一个点就完事,一定要回到“电场在哪集中、漏电路径从哪走”这个物理本质上去看。每次拿到IV曲线,我都会顺手把击穿前一个电压点的二维电场分布调出来,看看峰值位置、看耗尽层的扩展情况,这个习惯帮我解决了不少“算出来数字看起来差不多、但换个结构就崩”的问题。
最后再分享一个小技巧:建模时尽量把掺杂浓度、厚度、势垒高度都做成变量,后面跑参数扫描、做灵敏度分析就不用改命令文本了。一套干净、参数化的Silvaco命令流,配合一份节点清晰的网格设计,就是功率器件反向击穿仿真里最值钱的资产。