Sentaurus语句合集:I-V/C-V、瞬态与辐照陷阱仿真避坑

发布时间:2026/11/4 21:51:23
Sentaurus语句合集:I-V/C-V、瞬态与辐照陷阱仿真避坑

简介:《各种语句sentaurus.docx》面向微电子、纳米电子与光电子器件仿真学习者,聚焦Sentaurus在器件电学特性与可靠性分析中的典型语句用法,可用于I-V、C-V曲线计算、辐照损伤与重粒子入射、瞬态过程等场景的建模与结果分析。压缩包共1个docx文件,大小约16KB,篇幅紧凑,便于按主题检索和对照查阅。内容围绕电流电压文件、电极与物理模型、Math与Solve求解设置、AC耦合电容仿真、重离子撞击及激光照明瞬态模型等展开,并给出可复用的命令片段与参数配置思路,帮助读者理解仿真流程、补全语句细节并排查常见设置问题。文档以可直接参考的语句块为主,适合课程设计、科研复现与工程仿真准备。已有2038人学习,适合具备一定器件物理与TCAD基础、希望快速查阅Sentaurus语句和仿真实例的读者。

1. 先把“各种语句sentaurus.docx”当参数底稿:它解决的是写语句卡壳,不是替你选模型

拿到一份只有命令片段的 docx,比拿到目录整齐的教程更麻烦:教程会告诉你先做什么,语句合集只会把 I-V、C-V、重离子、激光和辐照陷阱一股脑摊在面前。各种语句sentaurus.docx 就是这种资料,价值不在“读完”,而在“查到就能改”:网格文件、电极名、物理模型、扫描目标、瞬态步长都以可复制的 sentaurus 语句形式摆着。适合已经能打开 SDevice、但一写 Physics 和 Solve 就卡住的人,也适合做器件电学、单粒子瞬态和辐照损伤仿真的从业者,把它当参数底稿,而不是当标准答案。

2. I-V 扫描骨架:从 File 五件套到 QuasiStationary 收敛的四个参数

一份能跑起来的 I-V 语句,最先要看的不是 Physics 里开了多少模型,而是 File、Electrode、Mesh 三者是否对得上。很多“电流一直是零”“电极找不到”的报错,根子不在求解器,而在 tdr 网格里的电极名和语句里的ElectrodeN不是同一个字符串。下面这段是从输入资料里抽出的 I-V 主骨架,保留原语句结构,只把容易粘连的 Math 段拆开写,方便逐行核对。

File { Grid = "Diode_msh.tdr" Current = "Diode_IV.plt" Plot = "Diode_IV.tdr" Output = "Diode_IV.log" } Electrode { { Name="ElectrodeN" Voltage=0.0 } } Physics { AreaFactor = 1 Temperature = 300 Mobility( DopingDependence eHighFieldSaturation hHighFieldSaturation Enormal CarrierCarrierScattering ) Recombination( SRH(DopingDependence) Auger(withGeneration) Avalanche(UniBo Eparallel) Band2Band(Hurkx) ) EffectiveIntrinsicDensity(OldSlotboom) } Math { Number_of_threads = 4 ExtrapolateDerivatives AvalDerivatives RelErrControl Iterations=15 Notdamped=60 BreakCriteria { Current(Contact="ElectrodeN" maxval=1e-8) } } Solve { Coupled(Iterations=50) { Poisson } Coupled(Iterations=15) { Hole Poisson } Coupled(Iterations=15) { Electron Hole Poisson } QuasiStationary( InitialStep=1e-6 MaxStep=0.01 MinStep=1e-9 Goal { Name="ElectrodeN" Voltage=1000 } Plot { Range=(0 1) Intervals=2 } ) { Coupled { Hole Electron Poisson } Plot(FilePrefix="IV_" Time=(0.01;0.05;0.1;0.5) NoOverwrite) } }

这段的逻辑是:File先把网格、电流曲线、空间分布图和日志分开命名;Electrode给电极初始偏压;Physics定义迁移率、复合和本征载流子模型;Math设定线程、导数外推、误差控制和电流保险丝;Solve先做 Poisson 初解,再逐步耦合空穴、电子,最后用准静态扫描把电压推到 Goal。参数上,AreaFactor=1表示按一维面积因子计算,Temperature=300是 300 K,Number_of_threads=4只影响计算资源,不改变物理;BreakCriteria里的maxval=1e-8更像保险丝,电流超过这个量级就中断,先确认单位再决定是否保留,不要把它当成收敛精度。

2.1 File 五件套与网格/电极的绑定

Grid指向的 tdr 文件决定了器件几何、掺杂和电极名,Current存端电流随电压的变化,Plot存空间分布,Output存求解日志。四件套之外,Plot段里的FilePrefix="IV_"会再派生带前缀的输出文件。常见翻车是改了Current文件名却忘了改Plot前缀,第二次跑完发现曲线还是旧的;更隐蔽的是 tdr 里电极名大小写不一致,语句写ElectrodeN,网格里却是electrodeN,求解器不会帮你猜。我的习惯是先用网格查看工具把电极名抄下来,再回填到Electrode、System和BreakCriteria三处,三处必须同源。

Electrode段只给了一个ElectrodeN,而 C-V 段又出现ElectrodeP,这说明不同语句片段对应的器件结构可能不同。I-V 片段如果只给 N 端加偏压,另一端是否通过背面欧姆接触或电路地节点闭合,要按实际 tdr 判断。若 tdr 里有两个电极,却在 I-V 里只写一个,求解可能仍能跑,但电流路径不完整,曲线看似平滑,物理上已经偏了。遇到这种情况,先把全部电极列出来,再决定哪个接地、哪个扫描,别让“能跑”掩盖“接错”。

2.2 Physics 模型开关:迁移率、复合和雪崩不要一次全开

Mobility里的DopingDependence处理掺杂依赖迁移率,eHighFieldSaturation和hHighFieldSaturation分别处理电子、空穴的高场饱和,Enormal考虑法向电场,CarrierCarrierScattering处理载流子散射。正向小电压 I-V 先保留掺杂依赖和场依赖通常够用,载流子散射在低注入下影响不一定明显,但开了不等于错,关键看收敛和曲线是否合理。Recombination里SRH(DopingDependence)是掺杂依赖的 Shockley-Read-Hall 复合,Auger(withGeneration)是俄歇复合并允许产生项,Avalanche(UniBo Eparallel)是平行电场下雪崩,Band2Band(Hurkx)是 Hurkx 带间隧穿。做反向击穿或高压时雪崩和带间隧穿有意义,做 0 到几伏的正向曲线时一次全开,收敛难度会上来。

EffectiveIntrinsicDensity(OldSlotboom)会影响重掺杂下的有效本征载流子浓度,适合和掺杂依赖模型一起核对。参数表可以这样记:

语句片段作用什么时候先关掉
DopingDependence掺杂依赖迁移率掺杂浓度很低、先看理想曲线时
eHighFieldSaturation/hHighFieldSaturation高场速度饱和低压线性区先做基线时
Avalanche(UniBo Eparallel)平行电场雪崩正向小电压、未接近击穿时
Band2Band(Hurkx)带间隧穿没有高反偏或窄带隙结构时
OldSlotboom有效本征密度模型重掺杂未校准时先做对照

这张表不是让你永久关模型,而是让你知道每次只改一个开关。一次把迁移率、复合、雪崩、隧穿全打开,曲线不对时根本分不清是谁造成的。常见做法是先用SRH加基础迁移率跑一条正向基线,再加高场饱和,最后才加雪崩和带间隧穿,每加一层保存一份Current文件,后面做对照。

2.3 QuasiStationary 的步长、Goal 和 BreakCriteria

QuasiStationary的InitialStep=1e-6、MaxStep=0.01、MinStep=1e-9控制电压扫描步长。初始步长小一点有利于第一段斜率,最大步长决定扫描速度,最小步长是求解器被逼到墙角时的下限。Goal { Name="ElectrodeN" Voltage=1000 }表示把电极推到 1000 V,这个目标对普通二极管非常大,若器件耐压没有到那个量级,扫描后期会在击穿区反复缩步,日志里能看到步长被切得很碎。我的做法是先把 Goal 改到 5 V 或 10 V,确认正向曲线和BreakCriteria量级正常,再按耐压逐段加目标,不要一上来就 1000 V。

Plot { Range=(0 1) Intervals=2 }控制扫描过程中的空间输出,Plot(FilePrefix="IV_" Time=(0.01;0.05;0.1;0.5) NoOverwrite)控制输出时刻。Time列表在准静态扫描里对应扫描路径上的输出点,不是随便写的采样率;输出太密会让 tdr 文件快速膨胀,输出太稀又看不到击穿点附近的分布变化。NoOverwrite防止同名文件被覆盖,但前提是FilePrefix和File里的Current不在同一层级打架。每次改扫描目标,最好换一个独立目录或换前缀,别让旧 plt 混进新结果。

提示:Math段里的Stacksize、ExtrapolateDerivatives、AvalDerivatives在原始语句里可能和相邻参数粘连,复制到新文件时逐行拆开核对,别整段粘贴后直接跑。

3. C-V 与 MixedMode:AC Coupled 的节点映射、频率点和提取文件

C-V 和 I-V 最大的区别不是多了一个 AC 求解,而是器件被放进混合模式系统里:器件电极要映射到电路节点,电压源负责扫描,AC 小信号加在指定节点上。很多 C-V 曲线平得像一条直线,不是电容模型没开,而是System里的front和0没对上,或者ACExtract文件根本没生成。下面这段保留输入资料的混合模式结构,把电极和注释拆清楚。

Device Diode { Electrode { { Name="ElectrodeN" Voltage=0.0 } { Name="ElectrodeP" Voltage=0.0 } } File { Grid = "Diode_msh.tdr" Current = "Diode_CV_1kHz.plt" Plot = "Diode_CV_1kHz.tdr" } Physics { Mobility( DopingDependence eHighFieldSaturation hHighFieldSaturation ) Recombination( SRH(DopingDependence) Auger ) } Plot { eDensity hDensity Potential ElectricField/Vector } } System { Diode diodesystem ("ElectrodeN"=front "ElectrodeP"=0) Vsource_pset vn (front 0) { dc=0 } } File { Output = "Diode_CV_1kHz.log" ACExtract = "Diode_CV_AC_1kHz.plt" } Solve { Coupled(Iterations=50) { Poisson } Coupled(Iterations=15) { Hole Poisson } Coupled(Iterations=15) { Electron Hole Poisson } Coupled(Iterations=15) { 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 Decade Iterations=15 Node(front) ACMethod=Blocked ACSubMethod("diodesystem")=ParDiSo ) { Poisson Electron Hole Contact Circuit } } }

这段的逻辑是:Device定义二极管本体和文件,System把ElectrodeN接到电路节点front,把ElectrodeP接地,Vsource_pset vn在front和地之间加直流源;QuasiStationary扫描vn.dc,每个偏压点里执行一次ACCoupled,最后把 AC 结果写到ACExtract。参数上,StartFrequency=1e3和EndFrequency=1e3表示只算 1 kHz,NumberOfPoints=1表示单频点,Decade在单点时不起作用;Node(front)指定小信号加在front节点;ACMethod=Blocked和ACSubMethod("diodesystem")=ParDiSo是 AC 求解器选项,"diodesystem"必须和System里的器件实例名一致。

3.1 MixedMode 的 Device/System 映射

Device Diode { ... }只描述器件,System { Diode diodesystem (...) }才把器件放进电路。括号里的"ElectrodeN"=front "ElectrodeP"=0是映射表:左边是 tdr 里的电极名,右边是电路节点名。front是自定义节点,0是地。电压源Vsource_pset vn (front 0)接在front和地之间,dc=0是初始值。扫描时Goal { Parameter=vn.dc Voltage=100 }推的是电压源直流值,不是电极本身的Voltage参数。这个区别很容易混淆:器件电极的Voltage=0.0只是初始边界,真正扫描的是电路源。

如果 tdr 里电极名不是ElectrodeN和ElectrodeP,映射表必须改成实际名字,BreakCriteria、Plot、Electrode三处也要一起改。混合模式里最容易出现“器件能解,电路不收敛”,原因往往是映射表把两个电极接到同一个节点,或者把ElectrodeP写成0但 tdr 里根本没有这个电极。先把映射表打印出来逐项对照,再谈 AC 求解。

3.2 ACCoupled 的频率、节点与 Blocked/ParDiSo

ACCoupled里StartFrequency和EndFrequency决定频率范围,NumberOfPoints决定点数,Decade表示按十倍频程取点。例子里首尾都是 1 kHz、点数为 1,所以只算一个频点;要做频率扫描,至少把EndFrequency拉到 1e6 或更高,并把NumberOfPoints调到 10 以上。Node(front)决定小信号加在哪,ACMethod=Blocked表示分块求解,ACSubMethod("diodesystem")=ParDiSo绑定到具体器件实例。实例名写错时,日志里会出现找不到子方法的报错,别急着改物理模型,先核对字符串。

Iterations=15是 AC 耦合迭代上限,Coupled { Poisson Electron Hole Contact Circuit }把电路和接触也纳入耦合。若 C-V 在某个偏压点突然不收敛,先把MaxStep从1e-2降到1e-3,再看Increment=2、Decrement=4是否让步长切得太猛。Goal的 100 V 对电容扫描也偏大,先从 0 到 5 V 跑通,再逐段加。

3.3 从 ACExtract 到 C-V 曲线的检查点

ACExtract输出的是 AC 小信号结果,不是直接给你一条整理好的 C-V 曲线。常见做法是从里面取电容的实部、虚部或导纳,再按C = Im(Y)/omega一类关系换算,具体取哪一列要看输出表头和求解器定义。检查点有三个:第一,Diode_CV_AC_1kHz.plt是否生成且行数随偏压增加;第二,Diode_CV_1kHz.plt里的直流电流是否随偏压单调变化;第三,AC 结果的实部是否远大于虚部或符合预期。三者有一个不对,先回到混合模式映射,不要直接怀疑电容模型。

注意:NumberOfPoints=1时频率扫描退化成单点,画不出频率色散图;如果目的是看 1 kHz 下的 C-V,这没问题,如果目的是看频散,必须改点数。

4. 两类瞬态语句:重离子 HeavyIon 与激光 OpticalGeneration 的步长差异

瞬态段最容易让人误判“机器不行”:同样的网格,I-V 几秒跑完,重离子瞬态几分钟不动,激光瞬态又卡在光学窗口。原因通常不是算力,而是时间步长、脉冲宽度和输出时刻三者没有对齐。重离子是电荷沿轨迹瞬时注入,激光是光生在时间上的高斯包络,两者都要求Transient的最小步长足够小,但全局MinStep=1e-17会把整个时间轴都拖进极小步长,后面收集阶段也走不快。

4.1 HeavyIon 语句:位置、LET 波形和时间窗

Physics { HeavyIon ( Direction = (0,1) Location = (200, 0) Time = 1e-9 Length = [ 按器件厚度或敏感区长度填写 ] Wt_hi = [ 按脉冲时间宽度填写 ] LET_f = [0 8.7e-6 8.7e-6 0] Gaussian PicoCoulomb ) } Solve { NewCurrentPrefix = "trans_" Transient ( InitialTime=0 FinalTime=35e-9 MinStep=1e-17 MaxStep=1e-10 ) { Coupled { Poisson Electron Hole Circuit } Plot(FilePrefix="TransHI_" Time=(0.5e-9;1e-9;2e-9;5e-9;10e-9) NoOverwrite) } }

这段的逻辑是:HeavyIon定义入射方向、位置、时间、轨迹长度、时间宽度和 LET 时间波形,Transient从 0 跑到 35 ns,Plot在 0.5 ns、1 ns、2 ns、5 ns、10 ns 输出空间分布。参数上,Direction=(0,1)表示沿 y 方向入射,Location=(200,0)是入射坐标,Time=1e-9是入射时刻,LET_f的四个点描述从 0 升到 8.7e-6、保持、再回 0 的时间波形,Gaussian给横向分布,PicoCoulomb指定电荷量模型。Length和Wt_hi在原始片段里是空方括号,实际运行时必须按器件厚度和脉冲宽度填,不能留空。

MinStep=1e-17很激进,第一次跑建议先放到1e-15或1e-14,只在脉冲上升沿附近收紧;MaxStep=1e-10限制全局最大步长,避免跳过收集峰。Plot Time要和入射时刻对齐,入射在 1 ns,输出却只写 0.5 ns 和 10 ns,中间峰形就看不到。NewCurrentPrefix="trans_"会给电流文件加前缀,防止和稳态 I-V 混在一起。

4.2 OpticalGeneration 语句:波长、强度和窗口

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( WindowName="L1" WindowPosition=Center Mode=ElementWise ComplexRefractiveIndex(WavelengthDep(real imag)) ) )) ) ) ) ) Solve { NewCurrentPrefix="trans_" Transient(InitialTime=0 FinalTime=60e-9 MinStep=1e-17 MaxStep=1e-10) { Coupled { Poisson Electron Hole Circuit } } }

这段的逻辑是:Optics里的OpticalGeneration用单色光源计算光生,TimeDependence给时间包络,Excitation给波长、强度和线窗口,LayerStackExtraction从层栈提取折射率并求解光束。参数上,Wavelength=0.8*um是 0.8 微米,Intensity=0.06*W/cm2是光强,Window("L1")定义窗口名,Origin=(200,0)是窗口起点,XDirection=(1,0,0)是窗口方向,Line(Dx=10)是线窗口长度,Theta=0是角度,WaveTSigma=50e-12是 50 ps 时间展宽。Scaling=0在不同求解器里的含义要按手册核对,别默认它是“不缩放”。

光学瞬态常见的坑是窗口没有覆盖器件有源区,或者ComplexRefractiveIndex的材料层没有和网格材料对齐。日志里如果出现层栈提取失败,先检查WindowName是否和OpticalSolver里的名字一致,再检查网格里是否有对应的材料区域。FinalTime=60e-9要覆盖光脉冲和后续收集时间,MaxStep=1e-10够用,但MinStep=1e-17同样建议先放宽。

4.3 瞬态步长与输出时刻的取舍

项目HeavyIonOpticalGeneration
时间起点由Time指定入射时刻由WaveTime指定脉冲中心
时间宽度Wt_hi和LET_f共同决定WaveTSigma决定高斯宽度
空间窗口Location、Direction、LengthWindow、Origin、Line
输出对齐Plot Time覆盖入射前后Plot Time覆盖上升沿和衰减
步长策略脉冲窗口收紧,收集段放宽光脉冲窗口收紧,尾段放宽

提示:瞬态跑不动时先看日志里实际步长被压到多少,不要只看语句里的MinStep。如果实际步长长期停在1e-17附近,说明某个变量在剧烈变化,先减少同时开启的物理模型,再查网格和接触。

5. 辐照陷阱与界面电荷:Traps 能级、截面和注量换算的避坑排查

辐照损伤段的参数看起来最像“填数字”:能级、浓度、随机化比例、电子和空穴截面,一行里全是科学计数法。真正容易翻车的地方不是会不会写Traps,而是能级参考方向、浓度单位和注量换算。输入片段里已经给了注释Conc=Fluence*1.1613一类换算,说明陷阱浓度不是拍脑袋填的,而是由注量乘系数得到。下面按现象、原因、解决把常见问题拆开。

5.1 收敛、网格和文件类问题

  1. 现象:加了Traps后瞬态在第一个时间点就不收敛,日志里残差反复放大。原因:陷阱浓度和网格掺杂量级差太多,或者Randomize让局部浓度突变,求解器在初始解上找不到平衡。解决:先不加陷阱跑一条暗态基线,确认初始解正常;再把陷阱浓度降低一个数量级做扫描,Randomize先设为 0,等收敛后再打开随机化。

  2. 现象:ACExtract或Current文件生成了,但内容只有表头。原因:File段里的文件名和Plot前缀冲突,或者NoOverwrite遇到旧文件直接跳过。解决:每次仿真换独立目录,Current、Plot、ACExtract三个名字分开写,先删掉旧结果再跑;不要用同一个前缀同时给稳态和瞬态。

  3. 现象:MixedMode 报找不到diodesystem或ACSubMethod。原因:System里的实例名和ACSubMethod("...")字符串不一致,或者Device名字大小写不一致。解决:把System段和ACCoupled段并排看,实例名逐字符对照;改完名字后同步改ACSubMethod。

5.2 陷阱、界面电荷和单位类问题

  1. 现象:辐照后暗电流大得离谱,或者漏电曲线完全不像预期。原因:EnergyMid=0.42 fromCondBand和fromValBand的参考方向搞反,或者Conc没有按注量换算,直接把Fluence填进了浓度位置。解决:先确认能级是从导带还是价带算起,Acceptor和Donor的能级方向不要混;浓度按Fluence乘系数算,单位保持 cm^-3,截面保持 cm^2,跑之前用一张参数表把量级写下来。

  2. 现象:界面电荷加了以后阈值电压漂移方向不对。原因:Physics(MaterialInterface="Oxide/Silicon")里Charge(Conc=1.5e11)和注释掉的FixedCharge混用,或者界面电荷面密度单位当成体密度。解决:先注释掉所有界面电荷跑基线,再单独打开Charge,确认单位是面密度;FixedCharge和Charge不要同时开,除非明确知道两者叠加后的符号。

  3. 现象:陷阱参数扫描跑了十几组,结果文件分不清哪组对应哪个注量。原因:文件名只用固定前缀,没有把注量或系数写进输出名。解决:把Current、Plot、ACExtract的文件名带上注量标签,例如用参数化前缀区分组别;每组跑完立刻记录能级、浓度、截面和随机化比例,别等全部跑完再回忆。

5.3 先基线后模型的复现顺序

血泪经验是:辐照段不要和 I-V、C-V、瞬态混在一个脚本里一次跑完。先跑无陷阱的 I-V 基线,确认电极和网格;再加单能级陷阱跑暗态;然后加注量换算跑辐照后 I-V;最后才进瞬态看重离子或激光的收集峰。每一步只改一个物理开关,输出文件单独命名。这样后面曲线不对时,至少知道是哪一步引入的偏差,而不是面对一堆科学计数法猜原因。

6. 把语句合集变成可回归基线:三组对照与一个电容提取小技巧

拿到这份 docx 后,我一般先做三组最小对照,而不是直接跑最复杂的重离子段。第一组是 I-V 小电压扫描,Goal 设 5 V,确认Current曲线单调、BreakCriteria不误触发;第二组是 C-V 单频 1 kHz,确认ACExtract有数据、混合模式节点映射正确;第三组是单粒子或激光瞬态,时间窗缩到脉冲前后各 5 ns,确认输出时刻能抓到峰。三组都过,再把 Goal 拉大、把陷阱打开、把频率扫宽。

对照项通过标准常见失败点
I-V 小电压电流随电压单调,日志无反复缩步电极名不一致、Goal 过大
C-V 1 kHzACExtract行数随偏压增加System映射错、实例名不一致
瞬态脉冲输出时刻覆盖上升沿和衰减Plot Time与入射时刻错位

电容提取有个小技巧:先不要急着换算成绝对电容,先把ACExtract里的实部、虚部随偏压画出来,看趋势是否连续。趋势连续但数值偏,优先查面积因子和电极面积;趋势跳变,优先查 AC 频点是否落在寄生效应或收敛失败的区域。把这条趋势图留作基线,后面每次改陷阱或改迁移率都拿它对照,比只看最终 C-V 曲线更容易定位问题。

从那以后我每次拿到这种语句合集,都先复制一份、改文件名和电极名,保留原始语句做对照,再按“I-V 基线、C-V 单频、瞬态脉冲、辐照陷阱”的顺序逐段启用。整段复制看起来快,后面排查时没有后悔药。希望帮到你。

本文还有配套的精品资源,点击获取