Sentaurus TCAD脚本:从I-V到小信号与瞬态的收敛配置与排查
简介面向微电子、纳米电子与光电子器件仿真方向的学习者这份文档把 Sentaurus TCAD 中常用的 sdevice 命令语句集中整理可用于对照搭建 I-V、C-V 曲线提取、辐照损伤与重粒子入射、瞬态响应等典型仿真流程。包内仅含 1 个 docx 文件体积约 16KB篇幅精炼便于随查随用。内容以可直接套用的语句块为主体电流电压 File 与 Solve 段的准静态扫描设置、Diode 混合模式下的 AC 耦合电容仿真、HeavyIon 重离子撞击的 LET 与时间参数配置以及激光光照瞬态中的 Optics 与 WaveTime 写法并配合 Physics、Math、Plot 中的复合、迁移率、雪崩等模型声明展现各参数在完整输入文件中的位置关系与搭配方式便于读者理解语句之间的调用顺序。目前已有 2036 人学习适合初学 Sentaurus、需要快速回忆语句结构与参数含义的读者作为案头参考。1. 为什么 Sentaurus 脚本「跑完了」不等于「算对了」Sentaurus 这类 TCAD 工具最反直觉的地方在于它几乎不会因为物理设错而报错。你写一份 I-V 扫描脚本把迁移率模型全关、把 QuasiStationary 的 MaxStep 放大一百倍求解器照样一路通过plt 文件里也照样画出一条光滑曲线——只是那条曲线和真实器件已经没有关系了。它真正报错的场合几乎只有一种数学上真的解不下去。所以值得搞懂的不是「语句怎么写」而是这些语句之间的耦合关系Physics 里每加一个模型Math 里的 Newton 迭代就要多承担一份非线性Solve 里的每一层嵌套都在决定上一层的解能不能当作下一层的初值。后面几章按「命令骨架 → I-V → 小信号与瞬态 → 排查 → 取舍」拆开讲把每块为什么这么设计、改哪个参数会出问题说清楚。2. 命令文件的骨架File、Electrode、Physics、Math 四个块为什么不能乱序Sentaurus 的 cmd 文件读起来像一份声明式配置单实际却是一条有向依赖链File 决定器件长什么样Electrode 决定边界条件挂在哪Physics 决定方程里有哪些项Math 决定这些项怎么被线性化。顺序颠倒未必立刻报错但会在某一步给出一个和物理毫无关系的失败——这是排查时最浪费时间的一类。File { Grid Diode_msh.tdr # 网格器件几何与掺杂分布 Current Diode_IV.plt # 曲线端电流随偏置的变化 Plot Diode_IV.tdr # 场分布每个解点的空间量 Output Diode_IV.log # 日志每步迭代残差与收敛信息 } Electrode { { Name ElectrodeN Voltage 0.0 } # 初始偏置非接地声明 }四类输出各管一件事混用会直接毁掉后处理plt 是标量曲线数据适合直接画 I-Vtdr 是场数据体积大只在需要看结区电场、电流密度分布时才写入。见过不少脚本把 Plot 设成每个电压点都存跑一次 1 mm 深的功率器件能写出几十 GB 的 tdr磁盘先于求解器崩溃。2.1 File 与 Electrode先给器件一个身份再谈偏置Electrode 的 Name 必须和网格文件里的 contact 名逐字符一致包括大小写。这里是最常见的低级翻车点网格是从别的工具转出来的contact 名可能叫anode脚本里写ElectrodeN求解器不会告诉你名字不匹配而是报一个「contact not found」或者干脆在电流提取时给出零。Voltage 0.0 是求解的起点不是「这个电极接地」的语义。真正的接地信息来自 Mixed Mode 里的 System 块或者 Solve 里的电压目标。这一点在纯器件仿真里无所谓一旦切到混合模式初始偏置和电路节点的对应关系就必须对齐否则第一步 Newton 就会在一个自相矛盾的边界条件下打转。另一个容易忽略的是网格文件本身。tdr 里已经固化了掺杂分布、材料区域和接触位置脚本里的 Physics 只能在这些区域上生效。如果网格里没定义 Oxide 区域后面写MaterialInterfaceOxide/Silicon的界面陷阱就是空操作——不报错只是不起作用。这类「静默失效」是 TCAD 脚本最典型的坑。2.2 Physics每开一个模型都是在物理精度和收敛域之间做交易Physics 块是整个文件里最容易被复制粘贴搞坏的部分。一份典型的 I-V 脚本会长这样Physics { AreaFactor 1 # 器件面积因子决定电流标度 Temperature 300 # 晶格温度单位 K Mobility ( DopingDependence # 掺杂浓度对迁移率的影响 eHighFieldSaturation # 电子速度饱和 hHighFieldSaturation # 空穴速度饱和 EnormalCarrierCarrierScattering # 界面法向电场相关散射 ) Recombination ( SRH (DopingDependence) # 肖克利-里德-霍尔复合含掺杂依赖寿命 Auger (withGeneration) # 俄歇复合高注入下主导 Avalanche (UniBo Eparallel) # 碰撞电离雪崩击穿靠它 Band2Band (Hurkx) # 带间隧穿反偏漏电的来源之一 ) EffectiveIntrinsicDensity (OldSlotboom) # 重掺杂带隙变窄修正 }这些开关不是「全开就最准」的清单而是各自有明确适用域。DopingDependence 在轻掺杂时几乎没影响重掺杂下才是决定性的Auger 只有在注入载流子浓度接近 1e18 量级时才压过 SRH低注入下开了只是白增非线性Avalanche 的 UniBo 参数化对电场方向敏感Eparallel 表示驱动力取电场平行分量用错分量方向会得到一条「永远不会击穿」的曲线。EffectiveIntrinsicDensity 值得单独说。重掺杂下掺杂能级展宽、带隙收缩本征载流子浓度 n_i 会显著偏离纯硅的值直接影响 PN 结的内建电势和少子浓度。OldSlotboom 是这套修正的一个经典参数化代价是它让 n_i 变成位置的函数Jacobian 多了一项耦合。重掺杂器件的 I-V 曲线如果开和不开差出几十毫伏的开启电压那不是数值误差而是物理必须。常见的实现思路是先用最小模型集SRH 掺杂依赖迁移率把曲线跑出形状再逐个加上高场相关的模型每加一个就看曲线哪一段变了。哪一段没变这个模型在你的偏置范围内就是可省的而省掉它意味着 Newton 迭代的收敛半径会宽一圈。2.3 MathNewton 迭代黑匣子的四颗旋钮Math 块决定的是「同样的方程用什么数值手段解」。它不改变物理但几乎决定了收敛还是失败。Math { Method Pardiso # 线性求解器稀疏直接法 Number_of_threads 4 # 线程数与网格规模匹配 Stacksize ... # 递归栈大小大网格时需调 ExtrapolateDerivatives # 外推导数减少 Jacobian 重算 AvalDerivatives # 雪崩项也参与导数计算 RelErrControl # 用相对误差而非绝对误差判敛 Iterations 15 # 每个 Coupled 块的默认迭代上限 Notdamped 60 # 前 60 次迭代不加阻尼 BreakCriteria { Current (Contact ElectrodeN maxval 1e-8) # 电流超阈值即中止 } }Notdamped 60 是个很实用的旋钮。Newton 迭代初期离解很远过强的阻尼会把步长压得太小反而收敛慢前几十次放开阻尼让它快速接近解之后再靠默认阻尼策略稳住。这个数字设得太小会看到残差在下降途中反复回弹设得太大则在强非线性区比如击穿拐点直接发散。ExtrapolateDerivatives 的机制是从前两步的解外推当前步的导数省掉一次 Jacobian 组装。在 QuasiStationary 扫电压时收益明显因为相邻偏置的解很接近但在重离子瞬态这种解本身剧烈变化的场景外推反而会引入假导数此时更稳妥的做法是关掉它、老老实实重算。BreakCriteria 容易被误当成「收敛条件」其实它是中止条件。maxval 1e-8表示某个接触电流超过 1e-8 A 就停止整个 Solve——这恰恰是击穿仿真的常用手法你不需要真的扫到 1000 V只要器件电流开始指数上升就让它提前停下再回看 plt 里哪一点开始拐弯。2.4 Solve 的嵌套顺序为什么 Poisson 必须先单独解Solve { Coupled (Iterations50) { Poisson } # 只解泊松拿到初始电场 Coupled (Iterations15) { Hole Poisson } # 加入空穴连续性 Coupled (Iterations15) { Electron Hole Poisson } # 三方程全耦合 ... }这三行不是仪式感。零偏下器件的载流子浓度跨好几个数量级直接把三个方程一起丢给 Newton初值差得太远迭代会在几个量级之间来回震荡。先单独解 Poisson 得到与 doping 自洽的电场再纳入空穴方程对 PN 结来说空穴是少子先稳住它最后三方程全耦合——每一步都在给下一步喂一个质量更好的初值。这套「逐级加变量」的策略在瞬态和 AC 小信号里同样成立只是加的不是方程而是外部激励。理解了这一点后面看 C-V 和重离子为什么要先跑一遍 DC 就顺理成章了所有时变或频域的求解都建立在某个自洽的直流工作点上。3. I-V 曲线仿真原理QuasiStationary 的步长为什么比网格更能毁掉一条曲线I-V 扫描是 TCAD 里最常见的任务也是「看起来最简单、翻车最多」的一个。网格只决定空间离散误差而电压步进方式决定的是一个更根本的问题Newton 能不能在你给的初值附近找到解。反偏击穿、正偏大注入这两个区段电流对电压的敏感度相差好几个数量级用一套固定步长扫过去基本等于放弃。3.1 外层电压步进、内层 Newton 的两层循环QuasiStationary ( InitialStep 1e-6 # 首个电压步长V MaxStep 0.01 # 步长上限 MinStep 1e-9 # 步长下限低于此值判定失败 Goal { Name ElectrodeN Voltage 1000 } # 扫描终点 Increment 2 # 收敛后步长放大倍数 Decrement 4 # 失败后步长缩小倍数 ) { Coupled { Hole Electron Poisson } # 每个电压点内部的全耦合 Newton Plot (FilePrefixIV_ Time(0.01; 0.05; 0.1; 0.5) NoOverwrite) }这里有两层循环容易混淆。外层是电压的准静态推进从一个偏置出发按 InitialStep 迈一步内部用 Coupled 求解收敛就把步长乘以 Increment失败就把步长除以 Decrement 重试。内层是标准的 Newton 迭代变量是三个方程的离散解向量。自适应步长的本质是在「解曲线的局部曲率」上做采样。正向导通区的电流随电压近似指数增长固定 0.01 V 步长在开启电压附近可能一步跨过好几个电流数量级Newton 拿前一点的解当初值残差直接爆炸。而击穿区更极端电流从 nA 到 mA 只隔零点几伏步长必须压到 1e-6 以下。Increment/Decrement 设成 2/4 的意思是「谨慎减、大胆加」——降低步长要更果断因为失败重试的成本高于多走几步。MinStep 是最后的防线。它设成 1e-9 意味着当电压步长已经小到 1 nV 还收敛不了就判定这一步在数值上无解。这时要么是物理模型自相矛盾比如电场方向设错导致雪崩项永远不触发要么是网格在某处太差。3.2 Plot 里的 Time 是电压点不是时间Plot (Time(0.01; 0.05; 0.1; 0.5))这一行在瞬态里是时间在 QuasiStationary 里是电压到达值。这是同一个关键字在两种求解上下文下的不同语义抄脚本时最容易被骗过去。如果把它理解成时间你会以为仿真在 0.5 s 停止实际它指的是电极上 0.5 V 的那一点。Range (0 1) Intervals 2是另一种控制在 0 到 1 的归一化扫描区间里均匀取 2 段配合外层步进做场分布采样。NoOverwrite 表示同名文件不覆盖防止多步写到同一个 tdr 里互相踩掉。写场分布这件事要算成本。一个 50 万节点的网格单次 tdr 写盘量在几百 MB 量级而一次 I-V 扫描可能走几百个电压点。合理的做法是只在关心的区段采样开启电压、击穿拐点、某个指定的反偏值其余交给 plt 的曲线数据。3.3 AreaFactor、温度与电流数量级AreaFactor 1 是最容易被忽略的一行。TCAD 的二维仿真本质是「一个截面」求解器算出来的是单位深度上的电流密度积分。AreaFactor 就是把这个截面按器件实际宽度缩放成总电流的因子。设成 1 意味着你拿到的是「每微米宽度」的电流若直接和实测的安培级数据对比会差出三到四个数量级。这和网格分辨率是两回事。加密网格减少的是离散误差AreaFactor 影响的是标度前者让曲线更准后者让曲线对得上。我一般会在脚本顶部把它写成一个显式常量并在后处理脚本里再乘一遍确认避免出现「两边都乘了」或「两边都没乘」的翻车。温度同理。Temperature 300 是晶格温度单位 K。有些脚本写成 27摄氏度求解器不会报错只会给出一个荒谬的载流子统计结果——因为 27 K 下杂质几乎完全冻结载流子浓度比室温低十几个数量级。曲线看起来「很平滑」物理上完全错。4. 小信号与瞬态机制ACCoupled、HeavyIon、光注入凭什么共用一套求解循环C-V 曲线、重离子入射、激光辐照看起来是三个不同任务但它们在求解器内部走的是同一套抽象先有一个自洽的直流工作点再在它上面叠加一个外部激励——频域的正弦小信号、时域的电荷脉冲、或者一个光生载流子源项。理解了这套抽象三类仿真的脚本结构就能互相迁移。4.1 Mixed Mode 与 System 块C-V 为什么要绕道电路Device Diode { Electrode { ... } File { GridDiode_msh.tdr CurrentDiode_CV_1kHz.plt PlotDiode_CV_1kHz.tdr } Physics { ... } } System { Diode diodesystem (ElectrodeNfront ElectrodeP0) # 把器件电极接到电路节点 Vsource_pset vn (front 0) { dc0 } # 一个直流电压源夹住器件 } File { OutputDiode_CV_1kHz.log ACExtractDiode_CV_AC_1kHz.plt }纯器件模式里电极电压由 Solve 直接指定混合模式里电极变成了电路节点电压由外接的元件决定。C-V 必须走混合模式的原因在于小信号电容的定义是「电荷对电压的导数」你需要一个能同时施加直流偏置和交流扰动的边界条件。Vsource_pset 就干这件事dc0 给它一个直流工作点交流扰动由后面的 ACCoupled 施加。(ElectrodeNfront ElectrodeP0)这行的语义是电极名到电路节点的映射front 是外部节点0 表示固定在参考电位。名字写错不会报错只会让某个电极悬空结果是电容恒为零或者恒为某个常数值——这是 C-V 排查里排第一的怀疑对象。4.2 ACCoupled 的频域线性化电容是从导纳矩阵虚部里挖出来的Solve { Coupled (Iterations50) { Poisson } Coupled (Iterations15) { Hole Poisson } Coupled (Iterations15) { Electron Hole Poisson } Coupled (Iterations15) { Electron Hole Poisson Contact } QuasiStationary ( InitialStep1e-6 MaxStep1e-2 MinStep1e-7 Increment2 Decrement4 Goal { Parametervn.dc Voltage100 } # 扫直流偏置到 100 V ) { ACCoupled ( StartFrequency1e3 EndFrequency1e3 NumberOfPoints1 Decade # 单频点 1 kHz Iterations15 Node (front) ACMethodBlocked ACSubMethod(diodesystem)ParDiSo ) { Poisson Electron Hole Contact Circuit } } }机制是这样的在每个直流偏置点上求解器把方程在解附近线性化得到一个导纳矩阵 Y(ω)在小信号近似下Y 的虚部除以角频率就是电容。所以 C-V 曲线实际上是「一串直流工作点上的线性化结果」每个偏置点都要单独做一次 AC 求解。StartFrequency 和 EndFrequency 都设成 1e3、NumberOfPoints 1表示只在 1 kHz 取一个点。对低频 C-V 来说这足够因为测量本身的频率就是这么设定的如果是做频率色散分析比如看界面态响应才需要扫多个频点那时 NumberOfPoints 和 Decade 才有意义。ACMethod Blocked 和 ACSubMethod(diodesystem) ParDiSo 是求解器层面的分工Blocked 表示把耦合系统按物理块拆开求解避免直接把器件方程和电路方程拼成一个巨型稠密矩阵ParDiSo 指定子块用并行直接法。器件加电路的联合系统规模很容易上万全耦合矩阵的内存占用会直接超出可用内存分块是必须的。4.3 HeavyIonLET 波形怎么变成体电荷Physics { HeavyIon ( Direction (0,1) # 入射方向 Location (200, 0) # 入射位置μm Time 1e-9 # 入射时刻 Length [ ... ] # 径迹长度分布 Wt_hi [ ... ] # 径迹权重 LET_f [0 8.7e-6 8.7e-6 0] # LET 随时间的分段线性波形 GaussianPicoCoulomb # LET 单位与分布形状 ) } Solve { NewCurrentPrefix trans_ Transient (InitialTime0 FinalTime35e-9 MinStep1e-17 MaxStep1e-10) { Coupled { Poisson Electron Hole Circuit } Plot (FilePrefixTransHI_ Time(0.5e-9; 1e-9; 2e-9; 5e-9; 10e-9) NoOverwrite) } }LET_f 是这条语句的核心。它给出的是线性能量转移随时间变化的波形[0 8.7e-6 8.7e-6 0]意味着在四个时间采样点上 LET 从 0 上升到峰值、保持、再回落到 0。求解器把这个波形转成单位体积的电子-空穴对产生率作为连续性方程的源项加进去。GaussianPicoCoulomb 说明这个 LET 值对应的单位是 pC/μm 量级且径迹在横向按高斯分布展开——这两个设定共同决定了注入的总电荷量。时间尺度是最需要盯的地方。整个瞬态窗口只有 35 ns而 MinStep 设到 1e-17、MaxStep 设到 1e-10意味着求解器要在万亿分之一秒的粒度上推进。原因在于重离子径迹的产生和收集过程本身就在皮秒量级载流子以饱和速度穿过微米级距离只需几个皮秒脉冲前沿如果被步长跨过去收集电荷的峰值会直接算错。MaxStep 1e-10 是对「不能跨过脉冲上升沿」的硬约束。Direction (0,1) 和 Location 也要和网格对得上。入射位置如果落在电极或氧化层里产生率会加到一个不该有载流子的区域结果看起来「有瞬态响应」但形状完全不对。4.4 OpticalGeneration 与 Traps另外两类源项激光辐照走的是光学求解器它先算光在多层结构里的传播和吸收再把吸收功率转成产生率Optics ( OpticalGeneration ( ComputeFromMonochromaticSource () TimeDependence ( WaveTime (1e-9 1e-9) # 脉冲起止时刻 WaveTSigma 50e-12 # 高斯脉冲的时间宽度 ) 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 ) ) OpticalSolver (OptBeam (LayerStackExtraction (WindowNameL1 ...))) ) )波长 0.8 μm 落在硅的吸收深度约 10 μm 量级这个数值决定了光生载流子主要在哪一层产生。选错波长产生率分布会整体偏移——表面产生和体产生对瞬态波形的贡献完全不同。WaveTSigma 50 ps 是脉冲宽度它和后面的 Transient MaxStep 必须匹配脉冲宽 50 ps 而步长上限设 1 ns等于用一把尺子量一根头发。辐照损伤则完全是另一种建模方式用陷阱替代微观缺陷Physics (materialSilicon) { Traps ( (Acceptor Level EnergyMid0.42 fromCondBand Conc2.3226E15 Randomize0.29 eXsection9.5E-15 hXsection9.5E-14) (Donor Level EnergyMid0.36 fromValBand Conc1.8E15 Randomize0.31 eXsection3.23E-13 hXsection3.23E-14) ) } Physics (MaterialInterfaceOxide/Silicon) { Charge (Conc1.5e11) # 界面固定电荷面密度 }EnergyMid 给出陷阱能级相对带边的位置fromCondBand 表示从导带底量起fromValBand 从价带顶量起。Conc 是体浓度脚本注释里那句Conc Fluence * 1.1613透露了真实的建模思路陷阱浓度是由辐照注量乘以一个产生率系数换算来的不同注量对应不同浓度的缺陷。Randomize 给能级加随机扰动模拟缺陷能级的离散分布避免所有陷阱挤在同一个能级上产生不真实的复合峰。eXsection 和 hXsection 是电子、空穴的俘获截面单位 cm²。这两个参数的数量级直接决定陷阱是「复合中心」还是「陷阱电荷」截面大、能级靠近禁带中央主要贡献复合电流截面小或能级靠近带边更容易长期捕获电荷、改变电场分布。5. 排查清单五类让 Sentaurus 仿真静默出错的常见问题真正难处理的不是报错而是不报错。下面这几条是实际调试中最耗时间的每一条都按「现象 → 原因 → 解决」拆开。5.1 曲线跑出来了但电流差三四个数量级现象I-V 曲线形状对开启电压也对就是电流绝对值比预期小 1e3 到 1e4。原因AreaFactor 没设二维截面的单位深度电流被当成了总电流。或者反过来后处理脚本里又乘了一次面积变成重复缩放。解决把 AreaFactor 显式写在 Physics 块顶部并注释单位后处理阶段只做一次缩放。仿真结果和实测对比前先确认两边都是「总电流」还是「电流密度」这一步不做后面所有拟合都是无效功。5.2 反偏扫到某个电压突然不收敛步长一路掉到 MinStep现象正向区一路顺畅反偏到接近击穿时步长被反复砍半最后停在 MinStep 报「step too small」。原因Avalanche 模型的开启让电流对电压的敏感度陡增而 MaxStep 还是正向区那套量级Newton 一步跨过了拐点。另一种可能是 Eparallel 的方向设定和实际电场方向不符雪崩项在错误的区域被触发。解决在预计击穿区前把 MaxStep 降一到两个数量级同时打开 AvalDerivatives 让雪崩项参与导数计算先关掉其他高阶模型Auger、Band2Band确认曲线形状再逐个加回来看是哪个模型让收敛域塌缩。5.3 C-V 曲线是一条常数线或者恒为零现象AC 提取出来的电容在整个偏置范围内几乎不变或者干脆是 0。原因三种可能——System 块里电极名到节点的映射写错某个电极悬空ACCoupled 的 Node 指定的不是真正加扰动的节点或者直流工作点根本没扫起来Goal 里的 Parameter 写成了不存在的变量名。解决先看 log 里每个偏置点是否真的完成了 DC 收敛再检查 Device 块的电极名和 System 块的字符串是否逐字符一致最后确认 Node (front) 里的节点名和 Vsource 定义的一致。5.4 瞬态第一步就崩或者波形前半段是平的现象Transient 在 InitialTime 附近报错退出或者跑完了但收集电荷的波形在脉冲到达前就开始上升。原因初始条件和直流解不一致——Transient 的起点应该是一个已经收敛的稳态解如果前面没做 QuasiStationary 或者直流没收敛就进瞬态第一步的残差会非常大。波形提前上升则通常是 HeavyIon 的 Time 设在了某个步长中间求解器为了捕捉它自动缩步但 Plot 采样点没覆盖到。解决瞬态前强制跑一遍稳态 Coupled 并确认收敛把 MinStep 设到能分辨脉冲上升沿的量级并显式指定 Plot 的 Time 采样点覆盖脉冲前后。5.5 加了陷阱模型结果反而「更理想」现象开启 Traps 之后漏电流下降、亚阈值斜率变陡看起来器件性能变好了。原因陷阱参数的单位或符号搞错。Conc 写成面密度而不是体密度或者 EnergyMid 用了相对禁带中央而不是带边导致陷阱能级落在错误位置实际起的是「抽走载流子」的作用。界面 Charge 的符号也常错正负号搞反会让耗尽区行为完全颠倒。解决先用单一能级、单一大截面做一个可解析验证的对照比如只算复合电流确认数量级对了再叠加多能级和随机化。Randomize 打开后要检查随机种子的可复现性否则两次跑出来的曲线不同会误以为是物理差异。6. 设计取舍网格、模型完备性与算力之间的那笔账TCAD 仿真里没有「全都设到最准」这个选项因为三样东西互相挤占网格密度决定空间离散误差模型完备性决定物理误差时间/电压步长决定迭代误差而三者的成本都落在同一份算力预算上。一个实用主义的排序是先把网格做到结区和沟道处足够密、体区可以很疏这一步的收益最大再逐个加物理模型每加一个都对比曲线差异差异不显著的模型就是可以砍掉的最后才去调步长因为步长只影响能不能收敛不改变收敛到的那个解。配置项加严的代价漏掉时的典型后果结区网格加密内存与线性求解时间近似平方增长击穿电压偏高峰值电场被抹平Avalanche 模型强非线性收敛域收窄反偏电流永远上不去看不到击穿Auger 复合高注入区多一项耦合大电流段斜率偏小RelErrControl 收紧每步迭代次数增加曲线在拐点处出现台阶MaxStep 减小总步数成倍增加跨过脉冲前沿峰值算错我自己的习惯是给每个项目留一份「最小可复现配置」只保留能跑出正确曲线形状的模型其余全部注释掉每一步加模型都单独存一版 plt 做对比。这样一旦某条曲线对不上能立刻二分定位是物理问题还是数值问题。血泪经验是不要把「跑完了」当成通过Sentaurus 最擅长的就是在你什么都没察觉的时候安静地给出一条漂亮但错误的曲线。从那以后我每次改完 Physics 块都强制走一遍「关掉所有高阶模型 → 逐个加回 → 对比曲线」的流程宁可多花半天也不要在错误的结果上做一个月优化。希望帮到你。本文还有配套的精品资源点击获取