简介:Sentaurus TCAD Device 用户指南(P-2019.03 版)是 Synopsys 官方发布的集成电路器件仿真软件学习资料,面向从事半导体器件设计、工艺仿真与电路优化的工程师和研究人员。文档系统讲解 Sentaurus Device 的功能特性、物理模型及仿真流程,帮助读者掌握器件结构创建、网格划分、电学特性模拟与结果分析等核心环节。资源为 PDF 格式,共 1 个文件,压缩包大小 7.85MB,内容覆盖软件入门、工具流程、网格划分等模块,既适合初学者建立整体认知,也适合有经验者作为案头参考手册。目前已有 3812 人学习下载,是 TCAD 方向使用频率较高的官方文档之一。相较于碎片化教程,该指南对关键概念、命令语法和典型应用场景均有规范说明,且目录编排清晰,便于按需检索。若能结合具体器件案例边读边练,可显著缩短工具上手周期,并为器件性能优化提供扎实理论依据。
1. 一本上千页的Device User Guide,真正要精读的其实是三块
拿到 Sentaurus TCAD Device User Guide,大多数人会在目录页被二十多个章节吓到,然后从第一章开始逐页读,读到物理模型章节就彻底放弃。做过几个器件仿真项目之后,我的体会是:这本手册虽然有上千页,但你要让一条二极管或 MOSFET 的仿真 I-V 曲线对上实测,真正值得反复精读的只有三块——Command File 的段结构与数据流、物理模型的选型与参数入口、Math 和 Solve 段的收敛控制。这篇笔记就按这个顺序展开,适合刚用 sdevice 跑脚本的入门者,也适合被不收敛和错误结果折磨过的老手对照排查边界。
2. 把Command File骨架搭起来:File、Electrode、Solve之间的数据流
很多第一次用 sdevice 的同学,花最多时间的地方不是建模,而是读懂一个.des文件里各个段到底在干嘛。其实整个 Device 仿真的一切输入,都写在这份命令文件里;手册里的章节再多,落到执行层面就是“输入资源→几何电气定义→物理方程→数值方法→求解序列”这条链路。把这条链路的对应段名记住,你翻手册才知道去哪一章查什么。
2.1 一份能跑通的最简脚本:先认识五个段
下面这份是一个最简 PN 结二极管的 Device 命令文件框架,按手册的经典结构组织,实际上也是我平时新开一个器件项目的起点模板:
# 硅二极管正向/反向I-V扫描的最小Device脚本 set V_max 200 # 扫描终点电压,正向扫描用正数,反向击穿用负数 File { Grid = "diode_mesh.tdr" # 输入:网格、掺杂、电极几何都来自这个文件 Plot = "diode_plot.tdr" # 输出:每个保存点的电场、载流子浓度分布 Current = "diode_plt.dat" # 输出:各电极的电压电流曲线,文本格式 Output = "diode_out.txt" # 输出:运行日志、迭代统计、警告信息 } Electrode { { Name="anode" Voltage=0.0 } { Name="cathode" Voltage=0.0 } } Physics { Area = 1e-8 # 二维仿真的器件截面积,单位cm^2 Mobility( DopingDep HighFieldSaturation ) Recombination( SRH Auger ) EffectiveIntrinsicDensity( Slotboom ) } Math { Extrapolate RelErrControl Iterations = 20 } Solve { Coupled { Poisson } Coupled { Poisson Electron Hole } Quasistationary ( Goal = { Name="anode"; Voltage = $V_max } DoTrace ) Plot( FilePrefix = "diode_iv" ) }这个脚本的逻辑是这样:File段把仿真需要的输入输出文件全部声明清楚,其中Grid指向的是网格文件,掺杂分布、几何结构、电极位置都在里面,不在这里生成;Electrode段定义接触的电气属性,名字必须和网格文件里的电极名一一对应,大小写敏感;Physics段声明这一轮仿真要解哪些物理方程;Math段控制数值求解器的行为;Solve段规定从什么初始状态开始、沿什么路径扫描到目标电压。
几个容易被忽略的参数点:$V_max这种带$的变量是 Device 脚本里做参数扫描的惯用方式,换一个值就能整批复算;DoTrace让扫描过程中持续输出轨迹和 Plot,不加它有时跑完只有最后一个点;Area对二维仿真必须给,否则电流结果没有物理单位意义上的绝对量级,只能看相对趋势。
2.2 网格、掺杂和电极边界:Device到底是“消费”什么
Device User Guide 里反复出现的一个词是Grid,但很多新手误以为 sdevice 会自己画网格。实际上 sdevice 是一个求解器,它“消费”网格而不是“生成”网格。网格文件diode_mesh.tdr里装的是三样东西:几何坐标、掺杂浓度分布、电极边界。它们通常来自工艺仿真或者专门的网格生成工具;Device 阶段能做的是通过Refinement之类的机制在关键区域进一步加密,但网格的基本骨架在外面就定好了。
这意味着一个很现实的工程原则:仿真的精度上限,在网格导入的那一刻就已经被决定。PN 结耗尽区、沟道反型层、击穿时的高场区,这些地方必须预先有足够密的网格,否则后面怎么调模型都救不回来。手册里对应的读法是看 Mesh/Grid 相关章节里关于张弛和加密的说明,理解不连续掺杂分布对网格正交性的要求。
边界条件这一侧,Electrode段里其实还可以给接触串电阻、指定肖特基接触等。常见做法是:
Electrode { { Name="anode" Voltage=0.0 Schottky Resistance=1e-4 } { Name="cathode" Voltage=0.0 } }接触的物理模型不同,对少子复合的处理就不同。默认情况下金属-半导体接触按欧姆接触处理,如果你做的是功率二极管或肖特基器件,要回到手册的 Electrode 章节确认接触类型和表面复合速度的默认值。这一项最容易被忽略,却直接决定反向漏电的底数。
2.3 Solve段怎么读:先站稳,再走路
Solve段是命令文件里最像“程序”的部分,它的编排逻辑就是仿真策略。最稳的启动方式永远是先解纯泊松方程,再开全耦合:
Solve { Coupled { Poisson } # 只求静电势,得到一个合理的初始电场 Coupled { Poisson Electron Hole } # 载流子输运方程全耦合求解 }为什么要分两步?因为从一个完全零场、零载流子浓度的初始状态直接上全耦合 Newton,Jacobian 矩阵在第一步就可能病态到解不动。先解一次 Poisson 是给整个解空间一个“地形图”,后面载流子方程再进场就稳得多。这个写法对应手册里关于初始条件和求解序列的章节,也是我排查不收敛问题时第一个会检查的写法——很多人图省事,一个Coupled从冷启动直接跑到几百伏,不炸才怪。
输出侧也要在 Solve 段规划好:Plot( FilePrefix="diode_iv" )会在扫描过程中把每个偏置点的场分布写出来;电流电压曲线则实时累积到Current指定的文件里。文件里的列通常是扫描变量、各电极电流的线性和对数数值,我一般直接拿它画 I-V,不再做二次处理。
3. 物理模型选型与参数入口:从Drift-Diffusion到雪崩击穿
物理模型是 Device 仿真里水最深的一块。新手最容易犯的错是模型全开,觉得开得越多越准;老手反而崇尚“最少必要模型”。原因是每开一个模型,方程里就多一组非线性源项,收敛难度和参数不确定性同步上升。什么时候开什么模型,取决于你要回答的物理问题,而不是越全越好。
3.1 Drift-Diffusion还是Hydrodynamic:选型看特征尺寸和电场
默认的输运模型是 Drift-Diffusion(DD),它假设载流子和晶格温度一致,适用于沟道较长、电场变化不太剧烈的器件。对大多数功率器件和常规 CMOS 工艺节点,DD 的精度足够。但器件尺寸缩到亚 100nm 或者出现明显速度过冲时,载流子的能量松弛长度已经和特征尺寸可比,就必须考虑 Hydrodynamic(HD)模型带来的非平衡输运效应。
# 默认DD模型:三方程体系(Poisson + 电子连续性 + 空穴连续性) Physics { Mobility( DopingDep HighFieldSaturation ) } # 流体动力学模型:额外求解载流子温度方程 Physics { Hydrodynamic Mobility( DopingDep HighFieldSaturation ) }HD 不是“更高级所以更准”的象征。它多一组载流子温度方程,未知量和 Jacobian 规模都上去了,对网格密度更挑剔。我的习惯是先用 DD 跑通全流程,再切 HD 对比关键指标;如果结果差异小于 2%,说明这个器件当前工作区不依赖非平衡输运,果断用回 DD,省一半时间。
3.2 迁移率、复合和禁带窄化:一套组合拳打天下
这是我新建仿真项目时最常用的物理模型组合:
Physics { Mobility( DopingDep HighFieldSaturation ) # 掺杂依赖 + 高场速度饱和 Recombination( SRH Auger ) # 深能级复合 + 俄歇复合 EffectiveIntrinsicDensity( Slotboom ) # 高掺杂下禁带窄化修正 }每一项都有明确物理指向:掺杂依赖捕获了杂质散射对迁移率的压低,导通电阻和饱和电流都看它;高场速度饱和决定短沟道器件的电流上限;SRH 复合通过少子寿命控制反向漏电和开关恢复时间;Auger 复合在大注入条件下才起主导作用;Slotboom 禁带窄化修正重掺杂区的本征载流子浓度,直接影响双极器件在大注入下的电导调制。具体模型系数(比如 Masetti 迁移率表、SRH 寿命的掺杂依赖系数)手册的物理模型参数表里都能查到,不同版本默认值可能有差异,所以有版本洁癖的人会把用到的系数显式写进脚本,而不是依赖默认。
选型时有个很实用的原则:模型之间是互相牵连的。比如把 Slotboom 关掉,禁带变宽,本征载流子浓度变低,同一个温度下复合率也会变,击穿电压和正向压降可能同时漂移。所以排查结果异常时,不要单个模型反复调,先把模型组合整体对照一遍。
3.3 碰撞电离与雪崩击穿:功率器件仿真的分水岭
做功率器件的人,迟早要在 Device 仿真里面对击穿电压。默认状态下没有碰撞电离,高场区再多也只是电流饱和,不会雪崩。要仿真击穿,必须在 Physics 段显式打开电离模型:
Physics { Recombination( SRH Auger ) ImpactIonization( Selberherr ) # 碰撞电离,雪崩击穿的物理来源 }碰撞电离是强非线性源项,它一开,网格问题立刻暴露。耗尽区网格稍粗,电场尖峰就会被抹平,击穿电压偏高,而且往往高得“很合理”——这是最坑的地方,因为你不做网格加密对照,根本发现不了。配合的做法是在扫描时加上电流限制,避免一旦击穿电流就冲上几个数量级、把数值解直接带崩:
Quasistationary ( Goal = { Name="anode"; Voltage = 1200 } DoTrace Compliance = { Current = { Name="anode"; Value = 1e-4 } } )Compliance的意思是阳极电流一旦达到 1e-4 A,扫描就停下来。这样你得到的击穿点是一个明确的转折,而不是一次残差爆炸的报错。对于先进制程的小尺寸器件,还有量子修正模型要考虑,但那是另一个维度的选型问题,先把经典体系走通再看。
4. 拿一条可信I-V曲线:Solve序列、扫描步长与Math收敛控制
理想情况下,Solve 段写好、物理模型选对,sdevice 就能一路跑到目标电压。但现实是 Device 仿真的收敛像开车:起步要慢,换挡要稳,刹车要留距离。这一章讲怎么把扫描和求解器参数编排好,让收敛过程可控可复现。
4.1 求解序列怎么编排:Poisson预热与Newton全耦合的拆解
上一章提到的两级 Coupled 是基础,但要理解这里的水有多深,得看清每一步在解什么:
Solve { Coupled { Poisson } # 相当于“先画一张地形图” Coupled { Poisson Electron Hole } # 相当于“在地形图上放洪水” }第一步只有电势一个未知量,线性化后问题规模小,收敛很容易。第二步三个方程全耦合,是真正的 Newton 迭代。很多不收敛问题,其实不是终止条件不够,而是第一步没站稳——比如初始偏压直接给了 -100V,Poisson 解出来电场分布已经离谱,后面载流子方程怎么迭代都回不到物理上合理的解。所以我的习惯是:任何扫描都从 0 偏压附近的稳态开始推,而不是从目标电压冷启动。
4.2 Quasistationary扫描:步长、增量与Compliance的配合
正向双极器件、反向击穿扫描、栅压转移特性,这些场景的通用做法是用拟静态扫描:
Solve { Quasistationary ( Goal = { Name="anode"; Voltage = 200 } InitialStep = 0.01 MinStep = 1e-4 MaxStep = 0.5 Increment = 1.5 DoTrace ) }步长参数的含义是:InitialStep是扫描第一步的电压增量,取 0.01V 这种小量级是为了从上一个稳态平滑起步;MinStep是收敛失败时步长能退到的最小值,低于它就终止报错;MaxStep限制最大增量,否则大信号区电流陡变时容易一步跨过物理拐点;Increment是步长增长因子,1.5 意味着每收敛一步,下一步电压增量乘 1.5,在低非线性区快速推进。
这套参数的经验是:击穿电压附近把MaxStep压到 0.1 以下,才能看到平滑的雪崩转折;正向导通区转折快,InitialStep给太大了会在导通电压附近来回震荡。改参数后如果收敛失败,先看日志里步长退到多少才挂的——那个数字会告诉你问题发生在哪个偏压区间。
4.3 Math段的收敛控制:四个开关的双刃剑
Math段是很多人跳过不看的段落,但它决定了上面所有模型方程能不能被顺利解出来:
Math { Extrapolate RelErrControl Iterations = 25 Digits = 6 }Extrapolate允许从上一个偏压点的解外推当前点的初值,加速收敛;代价是外推解在强非线性段可能偏离太远,让 Newton 第一步就跳出吸引域。RelErrControl开启相对误差控制,比单纯绝对误差更合理,但网格极粗或极细时它的表现会走偏。Iterations是 Newton 迭代次数的上限,默认值经常偏小导致“误报不收敛”,我一般设到 25 以上。Digits控制误差容限的有效位数,6 位对绝大多数器件物理足够了,调到 7 通常只是让求解器多跑几个来回,曲线看不出任何区别。
三者联动有个典型场景:仿真跑着跑着突然发散,你第一反应是加密网格,结果问题反而更严重;其实把Extrapolate关掉、Iterations调大,可能就稳了。所以遇到收敛问题时,先动 Math,再动网格,最后才动物理模型,这个排查顺序能省大量时间。
5. Device仿真排查手记:四个把结果带偏的隐性坑
Device 仿真最磨人的不是跑不通,而是跑通了结果错了,还错得很有说服力。这里整理几个我在项目里真实遇到过的坑,每条按现象到原因到解决展开,给同样被折磨的人一条捷径。
5.1 不收敛排查:从初值、步长到网格的三步定位
坑一:反偏扫描一开始残差震荡,步长一路跌到 MinStep。
现象是新脚本从 0 偏压启动,前几步还能收敛,推到 5V 附近残差就开始上下跳,日志里步长从 0.01 一路退到 1e-4 然后终止。
原因通常是两个叠加:PN 结耗尽区网格太粗,导致耗尽层边界附近的离散误差变成残差源;再加上Extrapolate从上一个偏压点外推初值,外推解在高场区已经偏离物理解,Newton 来回折腾不收敛。
解决方法是先关掉Extrapolate,看纯 Newton 从零初值能不能起步;再把结区网格加密一组对照,最后把扫描起始电压放到 0 偏、InitialStep调到 0.005。三步做完,大概率能定位到元凶。
坑二:击穿电压点附近无穷发散。
现象是加了ImpactIonization之后,扫描推到某个电压,残差突然指数级放大,log 里出现明显的数值溢出。
原因是雪崩产生率对电场极度敏感,电场分布有细微误差就会被指数放大;常见情况是耗尽区网格密度不够,电场峰值被数值解“捕捉”得偏大或偏小。
解决是先开Compliance限制电流上限,别让扫描冲进雪崩大电流区;然后把高场区的MaxStep压小,同时做一次网格加密对照。如果加密后击穿电压明显移动,说明之前的结果不可信,继续加网格直到击穿电压稳定。
5.2 结果异常排查:击穿电压偏低和漏电流对不上
坑三:击穿电压比期望值低了 30% 以上。
现象是仿真曲线很光滑,转折点也在,但数值就是明显偏低。
原因未必是模型参数,最常见的是碰撞电离模型的开启方式有问题;有些用户把电离系数直接改大去“拟合”,反而掩盖了网格问题。
解决方法是先做网格无关性检验,再把碰撞电离模型和掺杂浓度的对应关系核对一遍(电场峰值在高掺杂一侧),最后看温度是否被默认设成了非室温值——温度每高一点,击穿电压就会低一截。
坑四:反向漏电流和理论估算对不上,量级差好几个单位。
现象是 SRH 复合、Auger 都开了,漏电底数还是不对。
原因通常出在Area和高低注入条件的匹配上:二维仿真的电流是“每单位宽度”的电流密度,乘以Area才是器件总电流;没乘对,量级自然全错。另外,SR H寿命用默认值和显式值之间的差异也可能有一个量级。
解决方法是先把Area这一项核实,再把寿命显式设成一个物理合理的量级,比如 1e-6 到 1e-5 秒区间,跑一组对照即可看见漏电的底数变化规律。
6. 让仿真结果经得起复核:网格无关性检验与参数校准
仿真结果的价值不在于“跑出来”,而在于“经得起复核”。这个习惯是我被一次高压二极管项目教训之后养成的,那时候我拿到击穿电压就交付,后来别人复核时网格加密一倍,结果差了 20V 以上,整个结论都要重来。
6.1 网格无关性检验:加密一倍结果变多少才可信
做法很简单:把关键区域(结区、耗尽区、沟道)的网格步长减半,重跑同一份脚本,对比击穿电压、正向压降、漏电三个关键指标。变化量在 1% 以内且趋势收敛,网格才算“够用”;如果关键指标移动超过 2% 到 3%,说明你的结果还在被网格牵着走,不是真实物理。这项验证应该写成习惯,而不是等发现问题再做。
6.2 参数校准:用一组寿命把模拟IV拉回实测
碰到仿真曲线和实测偏离,最直接的办法是批量扫“物理上最不确定的那个参数”。比如双极器件的 SRH 寿命,不同工艺下可能差一个量级,通常的做法是准备一个带占位变量的模板脚本,写个小循环批量跑:
for tau in 1e-6 1e-5 1e-4; do sed "s/SRH_TAU/$tau/" template.des > run_tau_${tau}.des sdevice run_tau_${tau}.des mv diode_plt.dat iv_tau_${tau}.dat done跑完把几条 IV 曲线和实测叠在一起,挑残差最小的一组。但校准有个原则必须守住:固定住其它参数,只动最有物理不确定性的那个参数,否则一组参数怎么调都能“凑”上,但完全失去预测力。我最早犯的错就是同时调寿命和迁移率,正反向曲线都对上了,换一个温度点就全崩。
现在我的习惯是,任何参数校完,都对正向、反向、瞬态三类指标各做一个对照,全过才算过关。毕竟 Device 仿真的意义不是生成一条好看的曲线,而是让这条曲线在边界条件变了以后仍然靠得住。希望帮到你。
本文还有配套的精品资源,点击获取