简介:这份面向微电子与光电器件仿真学习者的 Sentaurus 语句示例文档,聚焦 I-V、C-V 曲线计算、辐照损伤与重粒子入射、瞬态仿真等常见任务,适合已具备器件物理与 TCAD 基础、需要查阅命令写法的读者。压缩包仅含 1 个 docx 文件,大小约 16KB,篇幅紧凑,便于按关键词定位关键语句。文档围绕电流电压文件、混合模式 C-V、重离子撞击与激光光照等场景,给出 Physics、Math、Plot、Solve 等模块的配置片段,并涉及电极、网格、输出文件与 AC 耦合设置,可作为搭建仿真输入、核对模型参数和排查收敛问题的参考。内容还覆盖 I-V 准静态扫描、交流小信号提取、重离子 LET 与瞬态时间步长设置,以及 Optics/OpticalGeneration 的写法,对器件结构、掺杂、接触与数值求解参数之间的对应关系有较好示范。目前已有 2038 人学习,适合用于课程实验、科研入门或项目复现时快速对照。
1. 一份被反复翻出来的语句合集,能省下多少翻文档的时间
Sentaurus 的命令文件不属于看一遍手册就能写对的东西。物理模型名字、Math 里的收敛开关、Solve 里 Coupled 的变量顺序,任何一处少个逗号或多粘一个字母,sdevice 都会返回一行看不出所以然的报错,而实际上问题可能只是 Word 把引号自动转换成了弯引号。手头这份《各种语句sentaurus.docx》把最常被翻出来抄的五个场景攒在了一起:二极管 I-V 扫描、混合模式下的 C-V 交流求解、重离子入射瞬态、激光激励瞬态,以及辐照缺陷陷阱与界面电荷的定义语句。
它能解决的是“模型我大致懂,但命令卡该怎么排”的问题,并非相反方向。刚做完网格、卡在 sdevice 上的新手可以从这里起步;另一种是文献里看到一条陷阱定义写法、想快速验证的从业者。不过得说清楚:这些只是骨架,其中的网格文件名、接触点电压、陷阱浓度、径迹长度必须按自己的器件改,原样丢进去跑,十有八九在第一条 Physic 就中断。后面按 File 卡到 Solve 卡的顺序把这五段拆开,讲参数填什么、填错会怎样、报错先看哪儿。
2. 二极管 I-V 扫描:File、Physics、Math、Solve 四张卡的拼装顺序
2.1 段落顺序为什么不能随便挪
sdevice 是按段解析的:File 声明网格和输出文件,Electrode 声明接触点,Physics 挂模型,Math 定数值方法,Solve 才真正开始算。Solve 里用到的接触点名字,必须先在 Electrode 段出现过,否则到 Goal 那一步才报找不到名字。原始片段里的 Electrode 只写了 N 极,P 极靠“默认接地”含糊过去,放到混合模式里就会出问题——System 段要写"ElectrodeP"=0,这个名字在 Electrode 里没有定义,求解器直接退出。
File { Grid = "Diode_msh.tdr" # smesh 或 sde 输出的网格,文件名带 tdr Current = "Diode_IV.plt" # 端电压/端电流曲线,后处理读这个 Plot = "Diode_IV.tdr" # 场量分布,二进制,体积比 plt 大得多 Output = "Diode_IV.log" # 收敛日志,出问题第一眼看这里 } Electrode { { Name="ElectrodeN" Voltage = 0.0 } # 阳极,扫描起点 { Name="ElectrodeP" Voltage = 0.0 } # 阴极接地,名字后面还要被 System 引用 }Current和Plot分开是有讲究的:前者记录端电流随偏置的变化,一个偏置点只占一行;后者保存整个二维或三维场,每隔几个偏置点存一次就够。很多人一开始把 Plot 的采样点设得很密,几百兆的 tdr 拷来拷去,纯属给自己添麻烦。
提示:Grid 指向的 tdr 必须在当前工作目录,或者写绝对路径。sdevice 不会去上一级目录找网格,报的错通常只有一句
Cannot open grid file。
2.2 Physics 卡:迁移率、复合、禁带变窄三组模型怎么搭
这一段是整份文件里信息密度最高的地方,也是最容易贴错的地方。原始文档经过 Word 排版后,好几个模型名粘成了一坨:DopingDependenceeHighFieldSaturation实际是两个关键词,CarrierCarrierScattering前面少了个空格。sdevice 对这种粘连不会给出友好的提示,只会报一个行号,让人对着屏幕怀疑人生。
Physics { AreaFactor = 1 # 二维网格的单位深度,1 表示 1 um,别随手改 Temperature = 300 # 单位是 K,不是摄氏度 Mobility ( DopingDependence # 掺杂相关的迁移率退化 eHighFieldSaturation # 电子高场速度饱和 hHighFieldSaturation # 空穴高场速度饱和 Enormal # 法向电场导致的界面迁移率退化 CarrierCarrierScattering # 载流子间散射,高注入区才明显 ) Recombination ( SRH (DopingDependence) # 肖克利-里德-霍尔复合,寿命随掺杂变化 Auger (withGeneration) # 俄歇复合,高注入下主导 Avalanche (UniBo Eparallel) # 碰撞电离,做击穿必须开,用平行电场驱动 Band2Band (Hurkx) # 带间隧穿,反偏漏电的来源之一 ) EffectiveIntrinsicDensity (OldSlotboom) # 禁带变窄,重掺杂区必开 }几个选择上的理由值得说透。做普通二极管的正向 I-V,SRH 加 Auger 基本够用;一旦要往反偏跑,Band2Band 和 Avalanche 就得同时挂上,否则你会得到一条“漏电为零、击穿电压无穷大”的完美曲线,跟实测差出一个数量级。UniBo Eparallel里的 UniBo 是驱动力的取法,平行电场取法在中低压段更接近实测,换成总电场在深结器件上会偏乐观。
Enormal只在有绝缘层界面的结构上才有意义,纯体材料里开着不报错但也不产生效果。AreaFactor则是二维仿真的隐式约定:网格是二维的,实际器件有宽度,1 表示按 1 um 折算电流,如果你的器件宽度是 100 um,这里就得跟着改,否则所有电流值都差两个数量级——这条坑几乎每个新手都会踩一次。
2.3 Math 卡:收敛不好先动这几个开关
Math 段在原文里塞得比较满,逐项拆开看每一项都是为收敛服务的,但它们的副作用不一样。
Math { #Cylindrical # 轴对称结构才打开,会按 2πr 做面积分 Method = Pardiso # 线性求解器,三维大网格下的默认选择 Number_of_threads = 4 # 并行线程,改了会影响结果末几位 Stacksize = 8192 # 栈空间,大网格递归溢出时往上加 ExtrapolateDerivatives # 用外推加速牛顿迭代 AvalDerivatives # 碰撞电离项参与雅可比,击穿扫描必开 RelErrControl # 用相对误差控制代替绝对误差 Iterations = 15 # 单个牛顿步内的最大迭代数 Notdamped = 60 # 前 60 次迭代不阻尼,加速启动阶段 BreakCriteria { Current (Contact = "ElectrodeN" maxval = 1e-8) # 端电流超阈值就中断 } }Stacksize那一项原文写的是省略号,实际得按机器内存和网格规模填一个数。三维网格几十万节点以上时,递归深度上去就容易栈溢出,表现出来的现象是程序直接崩溃而不是报收敛失败,很多人会误以为是内存不够,其实是栈不够。
BreakCriteria是把双刃剑。它的本意是防止击穿后电流失控跑飞,但如果第一次跑通就把阈值定在 1e-8 A,很可能在真正击穿之前就强行终止,曲线在高压端莫名断掉几个点。我的习惯是先把它注释掉,让整个扫描跑完看看形状,再回头按器件面积和预期电流定一个合理的上限。
RelErrControl打开以后,收敛判据从绝对误差换成相对误差,对电流跨度好几个数量级的 I-V 扫描更友好。不开的话,低压小电流段很容易因为绝对误差太严而反复迭代。
2.4 Solve 卡:三级 Coupled 预热之后再做准静态扫描
Solve 段的结构很值得学,它没有一上来就扫电压,而是先用三次耦合求解把零偏状态找到一个靠谱的初值。
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 } # 从 0 V 扫到 1000 V Plot { Range = (0 1) Intervals=2 } # 场量只存首尾两个点 ) { Coupled { Hole Electron Poisson } Plot (FilePrefix="IV_" NoOverwrite) # 文件名前缀,避免覆盖上一次 } }为什么要分三步预热?泊松方程只有一个未知量,收敛快且稳定;直接把电子、空穴、电势三个量一起耦合求解,在零偏附近很容易发散,尤其是有界面态或异质结的结构。把上一步的结果作为下一步的初值,等于给求解器一个越来越接近答案的起点,收敛迭代数能少一半以上。
Goal里的 1000 V 是个示意值,实际得按器件击穿电压量级来定,二极管给 1000 V 意味着你在扫反向击穿区;如果器件额定只有几十伏,这个值会让求解器在击穿后追着一条几乎垂直的曲线跑,步长被压到 1e-9 以下,一晚上跑不完。
原文的 Plot 里还带了一串Time=(0.01; 0.05; 0.1; 0.5),那是瞬态求解的写法,放到准静态扫描里不控制任何东西,真正决定场量输出密度的是Range和Intervals。Intervals=2表示在归一化扫描区间内均分两段,也就是输出三个点;想看得细
本文还有配套的精品资源,点击获取