Sentaurus脚本合集:I-V/C-V/重离子/辐照损伤建模命令详解 简介围绕 Sentaurus 仿真软件在半导体器件特性分析中的应用文档整理了 I-V 曲线、C-V 曲线、辐照损伤、重粒子入射及瞬态仿真等典型场景的常用语句与命令写法适合微电子、纳米电子与光电子方向的研究生、工程师以及刚接触 Sentaurus 的仿真初学者参考。内容从电极定义、物理模型配置、网格与输出文件设置到求解器中准静态扫描、AC 分析、重离子撞击和激光照射等瞬态流程均给出可复用的关键片段并附有 SDevice、MixedMode 等典型仿真模式的完整思维线索可直接迁移到实际项目中作为脚本模板。资源为单个 docx 文件压缩包仅 16KB轻量易读无需安装额外环境即可快速查阅。目前已有 2032 人学习适合需要快速上手器件特性仿真、辐射效应模拟或瞬态分析流程的读者参考借鉴。1. 一份能直接复用的 Sentaurus 语句合集从 I-V 到辐照损伤的建模脚本整理拿到这份《各种语句sentaurus.docx》时我已经在 TCAD 仿真里折腾了大半年坦白说散落在网上的 sdevice 命令片段见过不少但能同时覆盖 I-V 曲线、C-V 曲线、重离子撞击、激光照明和辐照损伤五类场景的脚本整理这是头一份。它不教半导体物理也不讲网格怎么画而是把能直接跑通的命令模板按场景摆好解决的是从物理模型到数值求解参数的那层“最后一公里”问题。适合两类人刚装了 Sentaurus 还没跑通第一个例程的新手以及手头已有器件结构但拿不准 Physics 块该挂哪些模型的熟手。下面按命令文件的真实执行顺序拆开讲参数怎么改、坑在哪一次说清。2. 把 sdevice 命令理顺I-V 仿真中 File、Physics、Solve 三层怎么配合2.1 File 块网格、电流与输出文件的路径约束sdevice 是 Sentaurus 家族里的器件电学特性仿真器它不读图形界面操作只认命令脚本。这份资源里第一段就是标准二极管 I-V 仿真脚本最容易被新手跳过、却最容易翻车的是开头这个 File 块File { Grid diode_msh.tdr # 初始网格文件由 sde/smesh 生成 Current diode_iv.plt # 电流-电压曲线数据后续提取 I-V 用 Plot diode_iv.tdr # 每个保存点的完整空间分布结果 Output diode_iv.log # 文本日志记录收敛过程、迭代次数和报错 }四个路径分别对应四类产物。Grid 指向的是网格文件没有它整个仿真根本起不来Current 指向的 .plt 是最终要拿去做图的电流电压点Plot 保存的是能带、电场、载流子浓度这类空间分布快照Output 是日志我自己的习惯是每跑一步都盯一眼这个 log看它迭代了几次收敛、有没有出现负浓度或者负电压的警告。这里必须注意sdevice 执行时的工作目录决定了这些相对路径的起点。最常见的报错就是 Cant open grid file十有八九是你在别的目录敲了命令而 .tdr 网格文件留在原目录。我一般会在运行脚本前先cd到网格文件所在目录或者干脆全部写成绝对路径。另外文件名里别带中文和空格.tdr/.plt 这类后缀名要小写Windows 和 Linux 混用时最容易在这些地方踩雷。2.2 Physics 块迁移率、复合与产生模型的组合规则这份资源里 I-V 脚本的 Physics 块值得逐行看因为它把反向击穿二极管仿真里该开的模型基本都挂上了Physics { AreaFactor 1 # 二维仿真时的面积因子决定电流归一化基准 Temperature 300 # 晶格温度单位 K Mobility ( DopingDependence # 掺杂浓度相关的迁移率退化 HighFieldSaturation # 高电场饱和击穿区必须开 Enormal # 界面垂直电场引起的迁移率退化 CarrierCarrierScattering # 高注入下的载流子间散射 ) Recombination ( SRH (DopingDependence) # 掺杂相关的 Shockley-Read-Hall 复合 Auger (withGeneration) # 俄歇复合含产生项 Avalanche (UniBo Eparallel) # 雪崩倍增UniBo 模型沿平行电场方向 Band2Band (Hurkx) # 带间隧穿Hurkx 模型 EffectiveIntrinsicDensity (OldSlotboom) # 重掺杂带隙变窄修正 ) }Mobility 挂了四个模型DopingDependence 是低场迁移率随掺杂浓度下降这个基本必开HighFieldSaturation 模拟速度饱和效应算击穿电压时不开它结果会偏得离谱Enormal 是 MOSFET 界面那种垂直电场导致的退化二极管仿真里可以留着影响不大CarrierCarrierScattering 在高注入下起作用比如大电流正向导通时载流子浓度高相互散射会拉低迁移率。Recombination 是重头戏。SRH 复合是间接复合的基础寿命项挂上 DopingDependence 表示寿命随掺杂浓度变化Auger 在高注入下占主导加上 withGeneration 是让它同时考虑俄歇产生项Avalanche 选 UniBo 模型而且指定 Eparallel意思是雪崩电离系数按平行于电场方向积分这对反向击穿电压的准确性至关重要Band2Band 的 Hurkx 模型描述高场下的带间隧穿反向偏压接近击穿时隧穿电流会显著增加。这里有一个很常见的误区新手喜欢把 Recombination 里所有模型全挂上觉得越多越准。实际上模型之间会互相竞争比如 SRH 和 Auger 同时开启时寿命会被两个复合路径共同限制建模时长会拉长收敛难度也上升。我的做法是先只挂 SRH跑通一个基线结果再逐步把 Auger、Avalanche、Band2Band 加进去对比每一步的 I-V 曲线变化这样你能清楚地知道是哪个物理机制在主导击穿特性。2.3 Solve 块从泊松方程到准静态电压扫描的收敛控制Solve 块是命令文件里决定成败的部分。脚本先用三个逐步耦合的步骤做初始化Solve { Coupled (Iterations50) { Poisson } Coupled (Iterations15) { Hole Poisson } Coupled (Iterations15) { Electron Hole Poisson } }第一步只解泊松方程得到初始电势分布第二步把空穴方程加进来让少子分布先建立第三步才把电子、空穴和泊松方程全耦合。这个从简到繁的过程是为了避免一开始就强耦合导致牛顿迭代发散。迭代次数 50 和 15 分别对应各步骤允许的最大迭代轮数如果超了还不收敛sdevice 会报 Newton iteration did not converge。真正扫描电压的是后面的 QuasiStationary 块QuasiStationary ( InitialStep 1e-6 # 起始电压步长 MaxStep 0.01 # 最大电压步长 MinStep 1e-9 # 最小电压步长防止步长缩得太小卡死 Goal { NameElectrodeN Voltage1000 } Plot { Range (0 1) Intervals 2 } ) { Coupled { Electron Hole Poisson } Plot ( FilePrefixIV_ Time(0.01; 0.05; 0.1; 0.5) NoOverwrite ) }QuasiStationary 的意思是把电极电压从当前值逐步增加到目标值 1000V每一步都重新求解耦合方程。InitialStep1e-6 是第一步先试很小的电压增量MaxStep0.01 限制最大增量防止在击穿电压附近步长跨得太大而跳过关键拐点MinStep1e-9 是当收敛困难时步长最多缩到多少再小就直接判定仿真失败。Plot 参数里Range(0 1) 表示把整个扫描进度归一化到 01 的区间Intervals2 表示在这个区间里均匀取两个点保存图像。这里有个隐患如果击穿发生在扫描后期很窄的电压窗口内只保存两个均匀点很可能漏掉击穿瞬间的空间分布。我一般会直接用 Time 参数手动指定关键电压点比如把 Time(0.01; 0.05; 0.1; 0.5) 改成 (10; 50; 100; 500)确保靠近击穿的区域有输出。3. C-V 特性提取混合模式下的 AC 耦合与 System 块搭建3.1 System 块器件实例与电压源的连接方式C-V 曲线仿真的命令写法和 I-V 完全不同因为它需要给器件施加一个交流小信号再从交流响应里提取电容。资源里给的是 MixedMode 混合模式仿真也就是说电路级的东西电压源、节点也要一起写进命令文件device Diode { Electrode { ... } File { Grid diode_msh.tdr Current diode_cv_1khz.plt Plot diode_cv_1khz.tdr } Physics { ... } } # End device System { Diode diodesystem (ElectrodeNfront ElectrodeP0) Vsource_pset vn (front 0) { dc 0 } }System 块里有三件事要读懂。第一Diode diodesystem (...)创建了一个器件实例名字叫 diodesystem括号里是电极到电路节点的映射ElectrodeN 接到电路节点 frontElectrodeP 接地节点 0。第二Vsource_pset vn (front 0)定义一个电压源 vn正极接 front负极接地初始直流电压 dc0。第三后续 C-V 扫描就是通过不断改变 vn.dc 这个参数来实现的。这里最坑的是电极名称的匹配。device Diode 块里 Electrode 定义的名字必须和 System 块的映射字符串完全一致哪怕差一个字母、多一个空格都会报 electrode not found。而且System 里的节点名 front 是自定义的但 0 这个节点是固定的地。我见过有人把 ElectrodeP 也接到一个叫 back 的节点上结果器件悬空仿真直接发散。3.2 ACCoupled 求解频点、迭代与 Blocked 方法接着看 Solve 部分的 C-V 扫描命令File { Output diode_cv_1khz.log ACExtract diode_cv_ac_1khz.plt } Solve { Coupled (Iterations50) { Poisson } Coupled (Iterations15) { Hole Poisson } Coupled (Iterations15) { Electron Hole Poisson } Coupled (Iterations15) { Electron Hole Poisson Contact } QuasiStationary ( InitialStep 1e-6 MaxStep 1e-2 MinStep 1e-7 Increment 2 Decrement 4 Goal { Parameter vn.dc Voltage 100 } ) { ACCoupled ( StartFrequency 1e3 EndFrequency 1e3 NumberOfPoints 1 Iterations 15 Node (front) ACMethod Blocked ACSubMethod (diodesystem) ParDiSo ) { Poisson Electron Hole Contact Circuit } } }如果把 I-V 和 C-V 的命令对照看区别就清楚了。I-V 的 Goal 里写的是电极名和电压值C-V 的 Goal 里写的是vn.dc因为这里要扫描的是电压源参数而不是电极电压。ACExtract 指向的文件名是专门存放小信号结果的电容值、电导值都在这里。ACCoupled 是核心。StartFrequency 和 EndFrequency 都设为 1e3说明只算一个频点1kHz。NumberOfPoints1 表示在这个频段内取一个点。Iterations15 是交流求解的迭代上限。ACMethodBlocked 的意思是分块求解小信号方程ACSubMethod (diodesystem)ParDiSo 指定对器件子电路用 Pardiso 直接求解器。做 C-V 仿真时有两点特别值得注意。第一交流小信号的频率选择不是随便定的1kHz 对于大多数二极管电容提取足够低可以避免寄生电感影响但如果你的器件面积很小、电容值在 fF 量级频率可能要降到 100Hz 甚至更低才能读到稳定的电容值。第二Increment 2和Decrement 4控制步长放大和缩小倍数意思是收敛顺利时步长乘 2失败时步长除以 4这个不对称设计是为了在击穿或电容突变区间快速缩步长。4. 三类瞬态仿真重离子撞击、激光光照与辐照损伤的参数化写法4.1 重离子建模LET_f 与 GaussianPicoCoulomb 的配合重离子入射仿真是单粒子效应分析的基础资源里的脚本把关键参数写得非常清楚Physics { ... HeavyIon ( Direction (0, 1) # 入射方向沿 y 方向 Location (200, 0) # 入射位置坐标随网格定义通常为微米 Time 1e-9 # 离子撞击发生的时刻单位秒 Length [ ] # 轨迹长度留空表示贯穿整个器件 Wt_hi [ ] # 轨迹半径留空则用默认值 LET_f [ 0 8.7e-6 8.7e-6 0 ] # 线性能量转移沿深度方向的分布 GaussianPicoCoulomb # 生成率的时间波形为高斯型电荷量用 pC 表示 ) }HeavyIon 的位置 (200, 0) 必须落在网格有效范围内坐标单位默认是微米。方向 (0,1) 表示离子沿正 y 方向垂直入射如果你要模拟倾斜入射就改成 (0.707, 0.707) 这类归一化的方向向量。Time1e-9 是撞击时刻意味着前面的 1 纳秒是器件稳态预热时间。LET_f 这个参数是最需要理解的。它给出的是线性能量转移Linear Energy Transfer沿离子轨迹的分布写法是一个数组 [起始深度1 对应LET1 对应LET2 终止深度2]这里[0 8.7e-6 8.7e-6 0]表示从深度 0 到轨迹末端LET 先是从 0 升到 8.7e-6再降回 0模拟一个 Bragg 峰形状的能量沉积。搭配 GaussianPicoCoulomb 表示该 LET 值的单位是按皮库仑每微米处理的如果你从其他文献里拿到的 LET 单位是 MeV·cm²/mg需要先做单位换算再填进来这是新手最容易犯的错。瞬态部分的 Solve 块同样讲究Solve { ... NewCurrentPrefix trans_ Transient ( InitialTime 0 FinalTime 35e-9 MinStep 1e-17 MaxStep 1e-10 ) { Coupled { Poisson Electron Hole Circuit } Plot ( FilePrefixTransHI_ Time(0.5e-9; 1e-9; 2e-9; 5e-9; 10e-9) NoOverwrite ) } }FinalTime35e-9 表示从 0 时刻一直算到 35 纳秒覆盖重离子撞击后的电荷收集和恢复过程。MinStep1e-17 这个值小得夸张用意是保证撞击瞬间产生的极高载流子浓度梯度能被分辨出来MaxStep1e-10 又把最大步长限制在 0.1 纳秒避免后期步长太大导致波形失真。NewCurrentPrefix 给瞬态过程的电流文件加一个前缀这样不会和直流扫描的结果混在一起。4.2 激光照明建模OpticalGeneration 窗口与时间波形激光照明的瞬态仿真和重离子撞击在 Solve 块结构上几乎一样区别全在 Physics 里的 Optics 描述上Optics ( OpticalGeneration ( ComputeFromMonochromaticSource () TimeDependence ( WaveTime (1e-9 1e-9) # 激光脉冲的时间窗口 WaveTSigma 50e-12 # 高斯脉冲的时间标准差50 ps ) Scaling 0 Excitation ( Wavelength 0.8 * um Intensity 0.06 * W/cm2 Window(L1) ( Origin (200, 0) XDirection (1, 0, 0) Line (Dx 10) Theta 0 # 相对正 y 轴的入射角度 ) OpticalSolver ( OptBeam ( LayerStackExtraction ( WindowName L1 WindowPosition Center Mode ElementWise ComplexRefractiveIndex (WavelengthDep (real imag)) ) ) ) ) ) }Wavelength0.8*um 是 800nm 波长的激光Intensity0.06 W/cm2 是光强。WaveTime(1e-9 1e-9) 表示激光脉冲的时间起点和终点WaveTSigma50e-12 表示高斯脉冲的展宽两者共同定义了一个在 1ns 附近、宽度约 50ps 的光脉冲。Window 是光学窗口的位置和方向设定。Origin(200,0) 是光束中心坐标XDirection(1,0,0) 定义光束的横向传播方向是 x 方向Line(Dx10) 表示在 x 方向上的扫描线间距是 10 微米Theta0 表示光束相对正 y 轴垂直入射。OptBeam 光学求解器用层堆叠提取方法逐层计算光的吸收和反射这个 LayerStackExtraction 需要你提供每一层材料的复折射率一般从工艺仿真文件里带出来不需要手动输入。激光仿真有一个容易搞反的点Theta0 是垂直入射如果你改成 30 度光束在器件内部的路径会变长吸收深度分布也会跟着变仿真结果和垂直入射是完全不同的两套数据。4.3 辐照损伤建模陷阱能级、浓度与俘获截面的输入方式辐照损伤仿真不直接描述粒子撞击过程而是用陷阱Traps来模拟辐照后在禁带中引入的缺陷能级Physics (material Silicon) { Traps (( Acceptor Level EnergyMid 0.42 fromCondBand # 受主型陷阱能级位于导带下 0.42 eV Conc 2.3226E15 # 陷阱浓度单位 cm^-3 Randomize 0.29 eXsection 9.5E-15 # 电子俘获截面 hXsection 9.5E-14 # 空穴俘获截面 )) # Conc Fluence * 1.1613 Traps (( Acceptor Level EnergyMid 0.46 fromCondBand Conc 1.8E15 Randomize 0.23 eXsection 5E-15 hXsection 5E-14 )) # Conc Fluence * 0.9 Traps (( Donor Level EnergyMid 0.36 fromValBand # 施主型陷阱能级位于价带上 0.36 eV Conc 1.8E15 Randomize 0.31 eXsection 3.23E-13 hXsection 3.23E-14 )) }每个 Traps 块定义一种辐照缺陷。Acceptor Level 表示受主型陷阱它带负电会俘获空穴Donor Level 是施主型陷阱带正电会俘获电子。EnergyMid 后面的 fromCondBand 表示能级位置从导带底往下算 0.42eVfromValBand 表示从价带顶往上算 0.36eV。eXsection 和 hXsection 分别是电子和空穴的俘获截面单位是 cm²这个值决定了陷阱俘获载流子的效率。注释里的Conc Fluence * 1.1613很关键。它表示陷阱浓度不是随便填的而是由辐照注量Fluence乘以一个经验系数得到。这个系数的来源是实验数据或文献拟合不同辐照粒子类型、不同能量对应不同的产生率。也就是说你拿到一份辐照仿真脚本时要先确认陷阱浓度是按什么注量条件算出来的再决定是直接采用还是按你的注量重新换算。别忘了还有一个氧化层界面的电荷设置Physics (MaterialInterface Oxide/Silicon) { # Traps (FixedCharge Conc 5e10) Charge (Conc 1.5e11) }这行给氧化层/硅界面加了浓度为 1.5e11 cm^-2 的固定电荷模拟辐照在界面处引入的氧化层电荷积累。注释掉的写法是另一种设置固定陷阱电荷的语法两者二选一同时用会重复计算。氧化物电荷对 MOSFET 阈值电压漂移的影响特别大做辐照仿真时这个界面电荷的数值要按器件工艺认真调。5. 避坑指南Sentaurus 命令文件最常见的五个翻车现场5.1 网格文件打不开现象运行 sdevice 后立刻报错 Cant open file: diode_msh.tdr。原因File 块里写的是相对路径而执行命令时的工作目录和网格文件目录不一致。还有一种情况是文件名写错了比如把 .tdr 写成了 .tdr 和 .TDR 混用Linux 下大小写敏感直接找不到文件。解决统一在网格文件所在目录执行 sdevice或者 File 块里直接用绝对路径。我自己习惯在命令文件开头写一个变量记录路径前缀所有文件名都拼上这个前缀换环境时只改一处。5.2 击穿电压附近不收敛仿真卡死现象QuasiStationary 扫描到接近击穿电压时迭代次数用完仍不收敛日志里出现 Transient iteration did not converge。原因击穿点附近电流随电压指数增长步长稍微大一点就会跳过平衡点牛顿迭代在强非线性区失效。MaxStep 设置过大是最常见原因。解决把 MaxStep 缩小比如从 0.01 改成 1e-3 或更小同时确认 BreakCriteria 里的电流阈值设得合理当电流增长到 1e-8 A 量级就提前终止避免在击穿后继续硬算。注意只有开了 Avalanche 模型击穿区才可能收敛纯 SRH 复合模型下反向电流会在某个电压点突然发散。5.3 保存的 Plot 文件里找不到关键拐点现象仿真跑完了打开 .tdr 文件想看击穿瞬间的电场分布结果发现保存的点全在低电压区击穿点附近一张图都没有。原因QuasiStationary 块里 Plot 的 Range(0 1) Intervals2 只在扫描进度 0 和 1 两个位置保存也就是起始和终点电压。如果击穿发生在中间位置正好被跳过。解决别依赖自动均匀取点直接用 Time 参数手动列出关键电压点例如 Time(900; 950; 980; 995; 1000)把击穿区附近的采样密度提上来。NoOverwrite 关键字也要带着否则每次保存都会覆盖相同文件名。5.4 混合模式 AC 仿真电容全为零现象ACExtract 文件生成正常但打开后电容值全是 0或者只有噪声量级。原因ACCoupled 里没有正确设置 ACMethod 和 ACSubMethod或者 System 块的器件实例名和 ACSubMethod 括号里的名称不一致。另一个可能是指定了太高的频率器件电容在 GHz 量级被寄生参数淹没。解决确认方块ACMethod Blocked以及ACSubMethod (diodesystem) ParDiSo里引号内的名字和 System 块里Diode diodesystem的实例名完全一致。频率先用 1kHz 验证一个点读到的电容值和手算的耗尽层电容对得上再改成扫频。5.5 瞬态仿真初始几步就数值溢出现象Transient 从 0 时刻开始算没几步日志就报 NaN 或者 INF 浓度波形图上全是乱跳。原因瞬态开始前器件没有建立正确的稳态初值。如果 Solve 块里没有先做 Coupled 初始化就直接进 Transient初始载流子分布可能是错的在重离子撞击的高密度产生下直接爆掉。解决瞬态前必须先跑完整的 Coupled 初始化步骤确保电子、空穴、泊松方程都收敛到一个物理合理的稳态。另外把 MinStep 设小一点比如 1e-17 秒让撞击产生的瞬间尖峰能被解析出来MaxStep 也别太大控制在撞击特征时间的十分之一以内。6. 验证而不是直接采信从 .plt 数据反推器件参数的习惯6.1 由 1/C²-V 斜率反推有效掺杂浓度C-V 仿真跑完得到的是不同偏压下的电容值。很多人直接拿电容值做图就结束了但其实这些数据能用来反推器件的掺杂分布验证仿真用的网格和掺杂设置是否合理。对突变结二极管耗尽层电容满足关系1/C² 2·(V_bi V_R) / (q·ε_s·N_eff·A²)其中 q 是电子电荷ε_s 是硅介电常数A 是结面积N_eff 是有效掺杂浓度。把 1/C² 对 V_R 做线性拟合斜率 k 满足N_eff 2 / (q·ε_s·A²·k)用这个公式算出来的有效掺杂浓度如果和你在网格文件里设定的衬底掺杂浓度在一个量级说明 C-V 仿真的物理模型和网格精度是可信的。如果差了一个数量级以上优先检查 ACCoupled 频率是否太高、AreaFactor 是否设成了 1而你的器件实际结面积不是这个值。6.2 跑瞬态前的三个自查点第一个自查点是器件是否已经达到稳态判断方法是看瞬态前最后一步收敛时的电流值如果它还在缓慢漂移说明初值没建立好瞬态波形的前几个纳秒会掺杂虚假的瞬态响应。第二个自查点是重离子撞击时刻 Time 值是不是落在稳态窗口内通常我会把 Time 设在瞬态开始后的 0.51ns确保撞击前有足够长的平稳期。第三个自查点是时间步长跨度MinStep 和 MaxStep 相差七个数量级是常态但别把 MaxStep 放得太松比如重离子撞击后 10ns 内MaxStep 建议不超过 0.1ns。我个人的习惯是每改一次网格或掺杂都会重新跑一遍完整的 I-V 和 C-V 基线测试把击穿电压和零偏电容这两个关键数值记录下来作为后续所有瞬态仿真的参照。曾经有一次就是因为改了几何尺寸后没重跑 C-V 基线直接用旧的电容值去校核瞬态结果硬是调了三天参数才发现问题出在网格面积因子没更新。从那以后凡是从文档或同事手里拿到不完整的 sdevice 片段我第一件事就是逐行核对 File 块路径和 Physics 块模型组合先把 C-V 混合模式跑通再谈后面的重离子和激光瞬态仿真。希望这份梳理能帮到正在跟 Sentaurus 命令缠斗的你。本文还有配套的精品资源点击获取