Sentaurus TCAD Device仿真指南:物理模型与收敛调优实践
简介《Sentaurus TCAD Device User Guide》是Synopsys官方为其半导体器件仿真软件Sentaurus TCAD Device编写的用户指南主要面向集成电路设计、半导体器件仿真领域的工程师、研究人员以及微电子/纳电子专业学生旨在解决软件基础操作不熟、仿真流程不清晰、器件结构构建与优化无从下手等常见问题。指南内容覆盖Sentaurus Device功能概览、器件结构创建与网格划分、工具流程等核心章节并结合Synopsys在EDA领域的大量工程实践帮助使用者理解如何借助TCAD工具开展器件结构设计、行为级仿真和性能优化以改善芯片的速度、功耗与可靠性。由于该软件具有高度的可扩展性在全球微电子、纳电子、光电子及其他相关领域应用广泛因此这份官方资料既适合初次接触TCAD的初学者快速建立整体认知也可作为日常查参数、查命令和排查错误的工具手册。资源为单份PDF文档大小7.85MB版本P-2019.032019年3月内容完整、排版规范便于检索和打印阅读。已有3812人学习或下载是Sentaurus TCAD入门与进阶过程中较常被引用的官方参考资料之一。1. 拿到Sentaurus TCAD Device User Guide之前先明白它替你算的是什么做功率器件仿真的人办公桌上几乎都有一本Sentaurus TCAD Device User Guide但真正能连续读下去的人不多。原因很直接这本质上是半导体方程、物理模型和数值方法的边界说明书不是点鼠标的操作手册。它解决的问题是你给它一个结构网格和一段求解意图它用什么方程、哪些近似、以什么步长把电流、电压、电场算出来。我见过不少新手第一天就把迁移率、复合、碰撞电离模型全部打开然后盯着No Convergence的报错发愣。血泪经验是这本手册教你的不是什么时候开模型而是什么时候不开模型。先跑通、再逐步加物理是唯一不容易翻车的路径。它适合功率器件、光电、存储器方向的器件设计和工艺协同工程师也适合想独立验证器件物理的研究生。读它之前先搞清网格文件与Device输入文件怎么配合否则后面全是在猜。2. 先把Device输入文件拆开看Section结构、模型族与数值方法选型2.1 输入文件是命令文本File、Electrode、Physics、Math、Solve怎么协作Sentaurus Device的输入端不是图形界面而是一个纯文本命令文件。描述一次完整的电学仿真的最小结构由File、Electrode、Physics、Plot、Math、Solve、CurrentPlot这样几个Section协作完成。File负责告诉程序网格从哪读、结果往哪写Electrode负责定义接触和初始电压Physics负责声明你允许程序用哪些物理模型Math负责数值求解器的行为Solve负责编排求解顺序和扫描策略。我习惯把Solve当成“仿真的剧本”其余Section是“演员表”。下面是一份常见骨架包含了大多数pn结和功率器件起步时需要的东西; 一份典型的Device输入文件骨架用来理解Section之间的配合 File { Grid pn_msh.tdr Current pn_iv.plt Plot pn_des.tdr } Electrode { { Nameanode Voltage0.0 } { Namecathode Voltage0.0 } } Physics { Area 1e-4 Mobility( DopingDependence eHighFieldSaturation ) Recombination( SRH(DopingDependence) Auger ) EffectiveIntrinsicDensity( BandGapNarrowing(Slotboom) ) } Plot { eDensity hDensity Potential ElectricField eCurrent hCurrent Doping eMobility hMobility } Math { NumberOfThreads 8 Extrapolate RelErrControl Iterations 30 } Solve { Coupled(Iterations30) { Poisson } Coupled { Poisson Electron Hole } Quasistationary( InitialStep0.01 MaxStep0.05 Goal { Nameanode Voltage1.0 } ) { Coupled { Poisson Electron Hole } } } CurrentPlot { Axis x IntDoping eCurrent hCurrent }逻辑上File块里的Grid指向结构工具导出的网格文件Current和Plot分别是电流曲线和数据场的输出。Electrode里每个接触必须和网格文件中定义好的接触集同名名字对不上程序会在初始阶段直接报边界缺失。Solve块里第一个Coupled只求解Poisson目的是先建立电势分布再联立Poisson和载流子连续性方程这是一个稳定的启动策略。最后的Quasistationary让anode电压从0逐步扫到1V每步都重新联立求解。参数上有几个值得注意InitialStep0.01是第一步电压增量MaxStep0.05是允许的最大步长这两个值决定扫描的精细程度。Iterations30表示每个工作点Newton迭代上限而不是固定迭代次数。Math块里的Extrapolate表示用上一步收敛解作为下一步初值对提高扫压效率很关键RelErrControl则按相对误差控制收敛比绝对误差更适应弱电流区间。Section名不要拼错Device日志最前面如果出现Unknown Section通常就是这种低级错误拿一份跑通的文件当模板改比手敲可靠得多。2.2 物理模型该开哪些从默认模型到功率器件、温度场景的取舍Physics Section是新手最容易失控的地方。我见过有人把手册里能见到的模型全部写进去仿真直接慢一个数量级还不收敛。常见做法是先用极简模型跑通再按场景逐层叠加。默认情况下只写Physics { Area 1e-4 }也能跑程序会使用内置的默认模型包括基本的载流子传输和复合只是精度通常在定性水平。Mobility里的DopingDependence描述掺杂浓度对迁移率的散射影响eHighFieldSaturation描述高场速度饱和功率器件导通压降、饱和电流都受它们影响。Recombination里的SRH(DopingDependence)说明少子寿命随掺杂变化Auger描述高注入下的俄歇复合漏电流和高压下的复合电流和它相关。EffectiveIntrinsicDensity里的BandGapNarrowing(Slotboom)处理重掺杂区禁带变窄这个效应对双极型器件和高压二极管的正向导通、反向漏电都有显著影响。碰撞电离模型Avalanche则只在扫击穿电压时才需要开平时开着会让结区网格极其敏感收敛困难。温度相关场景还要考虑Thermodynamic模型族它额外求解晶格热方程配合热接触才能模拟自热效应。我一般按这个顺序做选型先确认器件类型和关键电学量再决定模型类不用一锅端。下面这个对照表是我常用的起点仿真场景建议开启的模型说明普通pn结、二极管正向IVMobility(DopingDependence)、Recombination(SRH Auger)先不加BandGapNarrowing也能得到定性曲线高压功率器件、击穿扫描上一行再加EffectiveIntrinsicDensity(BandGapNarrowing)和Avalanche结区网格必须加密否则击穿电压对网格敏感自热效应、大电流密度开启Thermodynamic或LatticeHeat并在边界配置热接触只开模型不配热边界等于白开小尺寸器件、沟道载流子输运按节点评估HPM流体动力学模型或量子修正不是默认选项需对照User Guide确认适用条件逐层叠加的另一个理由是排查方便。每加一个模型重跑一遍曲线变化如果大到不合理通常是两个模型在物理机制上重叠或者参数单位和默认值不匹配。比如同时打开BandGapNarrowing又手动改本征载流子浓度结果会互相抵消曲线却看不出问题等到对比实测才暴露。3. 从零跑通一个pn结IV结构脚本、Device最小输入与曲线校验3.1 结构网格从哪来一个可改的SDE脚本骨架Device本身不产生网格它只消费网格。网格绝大多数来自结构工具SDE也可以从工艺仿真结果转出。下面是一个10微米乘1微米的二维pn结构脚本骨架pn结在x5位置左侧p型阳极右侧n型阴极。坐标按微米理解掺杂浓度单位是cm的负三次方。; pn_sde.cmd —— 结构准备骨架pn结在x5附近 (sdegeo:create-rectangle (position 0.0 0.0 0.0) (position 10.0 1.0 0.0) Silicon region_1) ; 先铺低浓度n型衬底 (sdedr:define-constant-profile n_sub PhosphorusActiveConcentration 1e16) (sdedr:define-constant-profile-region n_sub_reg n_sub region_1) ; 左侧5微米窗口覆盖p型阳极 (sdedr:define-constant-profile p_anode BoronActiveConcentration 1e17) (sdedr:define-constant-profile-window p_anode_win p_anode (rectangle (position 0.0 0.0 0.0) (position 5.0 1.0 0.0))) ; 结区加密母网格0.1/0.05最小尺寸0.02/0.01 (sdedr:define-refinement-size ref_junc 0.1 0.05 0.02 0.01) (sdedr:define-refinement-window ref_junc_win (rectangle (position 4.5 0.0 0.0) (position 5.5 1.0 0.0))) (sdedr:define-refinement-region ref_junc_reg ref_junc region_1) (sde:save-model pn_msh.tdr) (sde:build-mesh snmesh pn_msh)逻辑上先创建矩形区域并赋予Silicon材料然后定义一个常量掺杂profile铺满整个区域再用一个窗口把p型掺杂覆盖到左半部分形成突变结。最后定义refinement把结附近网格加密避免耗尽层内网格过疏导致电场失真。接触集部分我习惯在结构工具界面里直接框选左右边界生成名字定为anode和cathode不同版本的Contact Set API写法差异比较大以你本地安装版本的结构工具手册为准但Device脚本里的接触名必须和结构里的一致。参数上p区1e17、n区1e16的搭配是为了让耗尽层主要落在轻掺杂侧击穿特性更接近单边突变结。refinement的四个数字分别对应两个方向的最大网格尺寸和最小网格尺寸结区母网格用0.1最小加密到0.01已经够用再细对收敛帮助有限只会增加内存。保存结构后执行build mesh得到pn_msh.tdr这一步完成后就轮到Device。3.2 Device最小输入先跑通再逐层加模型结构准备完用一个最小Device输入文件把正向IV跑通。这个版本不写任何Mobility或Recombination模型让程序用默认机制速度最快也最容易定位问题。; pn_des.cmd —— 最小可跑版本目标是先出IV形状 File { Grid pn_msh.tdr Current pn_iv.plt Plot pn_des.tdr } Electrode { { Nameanode Voltage0.0 } { Namecathode Voltage0.0 } } Physics { Area 1e-4 } Math { Extrapolate Iterations 30 } Solve { Coupled(Iterations30) { Poisson } Coupled { Poisson Electron Hole } Quasistationary( InitialStep0.01 MaxStep0.05 Goal { Nameanode Voltage1.0 } ) { Coupled { Poisson Electron Hole } } }逻辑说明先单独解Poisson得到初始电势再联立两个载流子连续性方程这一步完成之后才允许扫电压。Quasistationary从0V开始逐步升高anode电压到1V扫描过程中每一步都以上一步的解为初值。注意整个文件没有电极电流提取语句电流会由File块里Current指定的pin_iv.plt自动输出。Area这个参数容易被忽略。二维仿真的电流默认按单位宽度算写成1e-4程序就按1厘米乘1微米的等效截面积把二维结果折算成安培。如果你后面要和实测一个确定面积的器件对比这个值必须先对准。执行命令很简单cd /your/case/dir sdevice pn_des.cmd正常运行结束时终端会显示每个工作点收敛并在case目录下生成pn_iv.plt和pn_des.tdr。如果中间报No Convergence不要急着改物理模型先检查Math块和步长下一章节具体说。3.3 曲线校验先看形状再解释数值有了pn_iv.plt第一步不是算数值而是看形状。我用下面的命令快速确认扫描是否完整tail -20 pn_iv.plt grep anode pn_iv.plt | tail -5pn_iv.plt是Tecplot风格的文本或二进制格式文本格式下可以直接搜电极名定位输出行。正向IV应该单调上升0.6V附近进入明显导通区整条曲线没有锯齿、没有突然的台阶。如果出现锯齿或者局部负斜率先怀疑MaxStep太大跨过了导通拐点把MaxStep从0.05减到0.01再看如果仍然存在再检查结区网格是否够密。默认模型下1V时的电流密度数量级不需要和实测完全一致它只是用来确认求解链路是通的。这个阶段常犯的错误是一上来就用默认参数跑击穿结果反向电压扫描到一半发散。最小文件先跑正向IV确认载流子输运和接触都正常再考虑反向和击穿顺序不要反。4. 把结果调到可信模型叠加顺序、Math参数与接触边界的四个层次4.1 模型逐层叠加每加一个都重跑一遍对比我见过最省事的调模型方法是把所有需要的模型一次写进Physics曲线一出就对比实测对不上就开始乱改参数。这不是调试是玄学。可靠路径是逐层叠加每一步都保留上一次的输出文件作为对照。常见叠加顺序是先加Mobility(DopingDependence)看导通区电流是否按掺杂分布产生合理变化再加eHighFieldSaturation看高压大电流下是否出现速度饱和导致的电流压缩然后加Recombination(SRH(DopingDependence) Auger)看低注入和高注入下电流是否分别被寿命和俄歇复合影响最后加EffectiveIntrinsicDensity(BandGapNarrowing)看漏电和正向拐点电压是否移动。每一层之间的曲线差异都必须能解释。比如加了Auger之后高注入电流明显下降这是对的如果正向拐点电压也大幅移动就要检查是不是模型参数和衬底掺杂重复设置了。判断标准很简单模型越加越多曲线变化应当越来越小最终趋于稳定。如果加一个模型导致曲线数量级变化通常不是模型本身的作用而是某个参数单位错了。这时候回头查手册里该模型的默认参数和适用范围比继续叠加更有效。4.2 Math参数步长、迭代和外推如何影响收敛与精度Math块是仿真收敛性最直接的调节面板。下面是几个我每次必看的参数及作用参数作用常用起点调节说明Iterations每个工作点Newton迭代上限30不是越大越好不收敛先查模型和网格Extrapolate用上一步解外推初始值开扫描电压时建议开启能显著减少迭代次数RelErrControl按相对误差控制收敛开弱电流区间比绝对误差更稳定InitialStep第一步扫描步长0.01冷启动时给小步长避免初值离解太远MaxStep单步最大电压增量0.05跨拐点有锯齿就减小速度与稳定性取平衡NumberOfThreads并行线程数与机器核数一致只影响速度不应影响结果新手最容易踩的坑是把Iterations从30改成100认为迭代次数不够才会不收敛。大多数情况下不收敛是模型组合冲突或者网格退化的结果把Iterations调大只是让程序在错误解上多挣扎几十轮。我更习惯先把MaxStep减半再把Physics里明显不适合当前偏置条件的模型关掉比如低压扫描时关掉Avalanche。Extrapolate几乎总是开着它会用上一个电压点的收敛解做预测在平滑区间能省一半迭代但在击穿拐点附近也可能把初值带偏所以遇到击穿发散可以临时关掉它再试。网格密度和Math参数是配合关系。网格太粗MaxStep再小也救不回电场尖峰网格足够细但步长过大仍然会在强非线性区跳过物理拐点。我一般先固定网格用MaxStep0.01把曲线跑平顺再逐步放大到0.05甚至0.1如果最终曲线和0.01时一致说明步长不是精度瓶颈。4.3 电极与接触欧姆、肖特基和串联电阻的边界处理电极边界是Device仿真里最容易被忽略的“最后一公里”。默认情况下Electrode里的接触按理想欧姆接触处理程序假设电极下方表面载流子浓度极高、准费米能级被钉扎。这在大多数pn结仿真里够用但对功率器件接触电阻会显著影响导通压降。Electrode块里给接触加SeriesResistance单位是欧姆可以等效外部引线电阻和接触电阻输出IV会自动叠加这个压降。肖特基接触则是另一个场景。默认欧姆接触不适合作肖特基二极管需要在Physics或电极定义里配置功函数和热电子发射机制。Workfunction差会直接决定势垒高度半导体功函数参数也要对照材料数据设置否则反向漏电会差几个数量级。这里有一个很容易混淆的点Electrode里的Voltage是电学边界条件Workfunction是材料界面属性两者不是一回事。我一般会在案例模板里分别写好欧姆接触和肖特基接触两套电极配置需要时直接切换避免每次手敲出错。接触名的一致性也值得复查一遍。结构工具里接触集命名是anodeDevice里写成Anode或anode_1程序不会做模糊匹配直接报找不到边界。这类错误日志位置靠前看到Electrode相关警告先检查名字。5. Sentaurus Device仿真常见问题排查五个翻车现场与解决路径5.1 No Convergence先回退模型再减步长最后动迭代上限现象程序在某个电压点报出No Convergence in Newton Loop日志尾部出现类似“Coupled”的错误终止运行。原因分三类模型组合过强导致方程刚性过大MaxStep太大导致初值离真实解太远网格局部退化让雅可比矩阵接近奇异。解决顺序我固定在三条先检查Physics里是否开了Avalanche、Thermodynamic这类强非线性模型当前偏置条件不需要就先关掉然后MaxStep减半从0.05改到0.02或0.01最后才考虑把Iterations从30提到50。如果三步走完仍然不收敛把结区网格加密一档再看。5.2 IV曲线出现锯齿或假负阻MaxStep跨过了物理拐点现象正向IV在0.5到0.7V之间出现抖动电压上升一点电流反而下降看起来像负阻。原因绝大多数是MaxStep太大单步电压增量跨过了导通拐点每个工作点的收敛解跳到另一条分支上。解决方法是把MaxStep降到0.01必要时对拐点附近单独缩小步长再用三套不同步长跑同一段曲线曲线重合就说明步长够了。也有真实负阻机制比如某些器件的Gunn效应但那是高频器件特征普通二极管出现负阻先别往物理上想数值原因优先排除。5.3 击穿电压和实测差很多Avalanche模型与结区网格的双重影响现象反向扫描得到的击穿电压比实测低20%甚至更多或者曲线在预计击穿前突然发散。原因一是Avalanche碰撞电离模型没有开程序根本没有产生载流子倍增原因二是结区网格太粗峰值电场被低估或高估离化积分对电场分布极敏感。解决方法是先确认Physics里有没有ImpactIonization相关模型再检查结区热力学温度下离化参数是否适用于材料最后把结区最小网格加密到0.005量级对比两套网格的击穿电压偏差。切记击穿电压不是扫出一条曲线就完事网格无关性验证在这一项上几乎是强制要求。5.4 自热仿真温度不变化没开Thermodynamic也没有热接触现象大电流下功耗明显增大但器件内部温度场始终是初始值输出文件里温度分布均匀不变。原因很直接只写了Physics模型而没开启晶格热方程求解温度根本不在状态变量里。解决方法是开启Thermodynamic或LatticeHeat模型族并在边界补充热接触比如衬底底部固定300K恒温边界器件表面按自然对流或指定热阻处理。这里有个配套坑开启热方程后Math收敛难度会明显上升建议先在常温电学仿真收敛的基础上再加不要同时改模型和Math参数。5.5 改了线程数结果对不上先怀疑网格质量再怀疑数值路径现象同一输入文件NumberOfThreads从4改成16后结果发生明显差异超过几位有效数字的浮点噪声范围。原因通常是不同线程数改变了矩阵分解和浮点累加顺序本身会引入极小差异但差异大到肉眼可辨说明解对数值路径极其敏感底层往往是网格质量差或局部出现近奇异单元。解决方法是先回到顺序求解或固定线程数跑一遍排除并行随机性如果顺序求解结果稳定再检查网格是否有退化单元、长宽比过大的单元。把网格修好后再开并行差异会回到可忽略区间。6. 进阶模板化批量扫描与网格无关性验证6.1 用sed模板批量扫温度与电压工况单点仿真跑通后实际工作量在批量工况。常见做法是准备Device输入文件模板把会变的量写成占位符再通过脚本批量替换并逐个执行。下面这个bash循环可以扫三个温度点每个温度独立输出plt文件for temp in 300 350 400; do sed s/VAR_TEMP/$temp/g; s/VAR_VMAX/1.0/g \ pn_des.cmd.template pn_des_${temp}.cmd sdevice pn_des_${temp}.cmd done模板文件里把原来的数值替换成占位符例如Math块附近写Temperature VAR_TEMPQuasistationary的Goal电压写VAR_VMAX。sed逐文件替换后调用sdevice输出文件会以不同名字区分开来。如果还要扫描掺杂浓度或结构尺寸建议改用Python脚本做模板替换正则替换占位符比sed更可控也方便把每次工况的参数记录到CSV里。批量跑完用grep从各plt里提取最后工作点的电压和电流就能拼出一张条件矩阵。6.2 提交结果前先做一次两套网格的无关性对照我现在的习惯是任何要拿去做判断的曲线提交前必须过一次网格无关性验证同一器件结构生成粗、细两套网格跑同一个偏置点比较导通电流、峰值电场这类关键量。偏差在百分之二以内说明结果基本不依赖网格可以放心往下分析偏差偏大说明瓶颈在网格而不是物理模型参数。这项验证花费的时间不多却能省掉后面大量无意义的参数拟合。希望帮到你。本文还有配套的精品资源点击获取