[toc]
AlGaAs/GaAs HEMT TCAD 模拟:使用 C-Interpreter 开发用户模型

模拟示例简介
- 本示例演示了如何使用
C-Interpreter来开发用户自定义的材料参数和模型,用于AlGaAs/GaAs HEMT(高电子迁移率晶体管)的模拟。 - 在这里,解释器被用来原型化一个与组分相关的 AlGaAs 电子迁移率模型。
- 该解释函数与 AlGaAs 的内置模型对应,两者可进行对比。
- 示例由以下部分组成:
- 使用 Atlas 语法构建设备和网格
- 指定材料区域,包括一个渐变的 AlGaAs 异质结
- 定义电极、掺杂、材料和模型参数
- 使用 C-Interpreter 函数描述与组分和掺杂相关的电子迁移率
- 模拟 Id-Vds 特性
- 使用 TonyPlot 显示结果
输入文件内容
1 | # (c) Silvaco Inc., 2019 |
理解输入代码
go atlas:调用/启动ATLAS器件模拟器,并让输入文件中的命令交由ATLAS来执行。用于构建器件结构、指定物理模型、设定边界条件和执行仿真,如果是别的模块,比如
go victorydevice、go mixedmode,就会进入对应的模拟器环境。mesh:声明开始定义网格。ATLAS使用矩形网格(2D 时是 x-y 网格,3D 时还会有 z)。x.mesh loc=0.0 spac=0.2:表示在 x 方向上定义网格分布,loc为坐标位置,spac=...是该位置附近的 网格间距(步长),用于控制网格的密度。region num=1 material=GaAs y.min=0.055:是 ATLAS 中定义器件区域 (region) 的语句,定义了 区域 1,材料为 GaAs,其在 y 方向上的下边界位于 y = 0.055 μm 处- region表示定义一个新的区域(通常是一个矩形区域,除非指定更多边界参数)。每个器件都由一个或多个 region 组成,不同 region 可以有不同的材料和掺杂。
- num=1,给这个区域编号为 1,编号在后续的
doping、electrode、material等语句中会用到,用来指明作用在哪个区域。 - material=GaAs,定义该区域的材料为 **砷化镓 (Gallium Arsenide)**。这会告诉 ATLAS:在这个区域里用 GaAs 的材料参数(禁带宽度、介电常数、迁移率等),当然用户也可以再用
material语句修改默认参数。 - y.min=0.055,定义了该区域的 下边界 y 坐标 = 0.055。其他边界(如
y.max,x.min,x.max)如果没有在同一行给出,会在别的region语句或默认值中定义。
region num=2 material=AlGaAs y.max=0.055 x.composition=0.3 grad.3=0.002:定义了 ATLAS 中的 **第二个区域 (region)**,区域材料设为 **AlGaAs (砷化铝镓)**,是一种常见的 III-V 族化合物半导体。- x.composition=0.3
- 表示在这个区域里,Al 组分 = 0.3 → 即 Al₀.₃Ga₀.₇As。ATLAS 会根据组分比例自动插值材料参数(如带隙、电子迁移率等)。
- grad.3=0.002
grad.n表示沿某个方向的 **成分渐变 (grading)**。- 这里的
grad.3一般指 y 方向 (第 3 个坐标) 的组分渐变速率。 - 值为
0.002,意味着 Al 组分在 y 方向上按 0.002/μm 的速率逐渐变化。 - 换句话说:不是一个 abrupt(突变)的异质结,而是一个 graded heterojunction,更接近真实外延工艺(减少界面缺陷,缓解应变)。
- 在 Silvaco ATLAS 里,
grad.n中的数字对应坐标轴方向:- grad.1 → 沿 x 方向 的成分渐变(composition grading in x-axis)
- grad.2 → 沿 z 方向 的成分渐变(composition grading in z-axis,主要用于 3D 模拟)
- grad.3 → 沿 y 方向 的成分渐变(composition grading in y-axis)
- 在 2D 模式 下,它默认平面是 x-y,而把 y 定义为 第 3 个坐标。在 3D 模式 下,它的坐标顺序是 **(x, z, y)**,也就是:
- x:横向
- z:纵向(等效于 2D 的宽度方向)
- y:垂直方向(通常是厚度/外延生长方向)
- x.composition=0.3
elec num=1 name=source x.min=0.0 x.max=0.4 y.min=0.0 y.max=0.0:在 ATLAS 中定义器件电极elec
- 表示定义一个电极(electrode),用于施加偏压或作为边界条件。
num=1
- 电极编号为 1,方便在后续设置偏压、功函数或接触模型时引用。
name=source( / gate / drain)
- 电极名称为
source,表示 HEMT 或 MOSFET 的 源极。
- 电极名称为
x.min=0.0 x.max=0.4
- 电极在 x 方向的范围从 0.0 μm 到 0.4 μm。
y.min=0.0 y.max=0.0
电极在 y 方向的位置,通常 y=0 表示底部接触(或者是二维截面下的线性电极)。
y.min=y.max表示电极厚度在模拟中被视为零厚度线(2D 平面模拟常用)。
doping uniform y.max=0.0530 n.type conc=1.e18:定义掺杂 (doping)- doping
- 定义一个掺杂区域,指定类型、浓度以及空间范围。
- uniform
- 表示该区域内掺杂浓度 均匀,不是梯度掺杂。
- y.max=0.0530
- 掺杂区域的 上边界为 y = 0.053 μm。
- 如果没有指定 y.min,ATLAS 会默认从区域的下边界(通常为 y=0 或器件最底部)开始。
- n.type
- 表示这是 n 型掺杂(电子为主要载流子)。
- conc=1.e18
- 掺杂浓度为 1 × 10¹⁸ cm⁻³。
- doping
material taun0=1.e-9 taup0=1.e-9 f.conmun=hemtex01_interp.lib: 材料定义 (material) 语句进入 材料参数定义语句。在 ATLAS 中,每个
region都有一个材料(如 Si, GaAs, AlGaAs),这里可以通过material修改默认参数,或调用用户自定义模型。taun0=1.e-9
- 电子 SRH 寿命(Shockley-Read-Hall electron lifetime)。
taun0定义电子在陷阱复合过程中的平均寿命。- 这里是 1×10⁻⁹ 秒 (1 ns) → 表明材料中缺陷比较多,电子复合很快。
taup0=1.e-9
- 空穴 SRH 寿命,与
taun0对应。 - 同样设为 1 ns,说明电子和空穴在该材料里复合速率对称。
👉 这两个参数会直接影响载流子寿命、复合速率,以及电流-电压特性。
- 空穴 SRH 寿命,与
f.conmun=hemtex01_interp.lib
f.conmun表示调用一个 C-Interpreter 用户自定义函数 来计算 **低场电子迁移率 (mobility)**。hemtex01_interp.lib是外部库文件名,里面写了用户定义的函数(通常是.c文件编译成的.lib或者 ATLAS 内部可解释的 C 脚本)。- 用途:替代内置迁移率模型,让迁移率依赖于 合金成分 (composition) 和 **掺杂浓度 (doping)**。
material align=0.6: 设置 能带对齐 (band alignment) 参数align用来指定 导带/价带对齐的方式,主要影响 异质结 (heterojunction) 的能带偏移。- 当两个不同材料(如 GaAs / AlGaAs)相接时,导带和价带的能带差异需要人工指定,否则模拟器只会用默认值。
align=<value>定义了能带对齐系数:0.0→ 全部能带偏移分配到 **价带 (valence band offset)**。1.0→ 全部能带偏移分配到 **导带 (conduction band offset)**。0.6→ 表示 60% 的能带偏移给导带,40% 给价带。
- 不同的异质结器件(HBT、HEMT、量子阱)对导带/价带偏移比例非常敏感。
- 比如 HEMT 更关心 二维电子气 (2DEG) 的导带深度,align 值直接决定电子气的密度。
model bgn fldmob srh:定义 **物理模型 (physical models)**,告诉模拟器在计算载流子输运时需要考虑哪些物理效应。在模拟器件时,考虑 **带隙收缩 (bgn)、电场依赖迁移率 (fldmob)**、以及 缺陷复合 (srh) 三个物理效应bgn- 表示启用 带隙收缩 (Band Gap Narrowing) 模型。
- 在高掺杂半导体里,杂质能级与载流子相互作用会导致带隙变窄,影响载流子浓度与器件电流。
- 常见于重掺杂的 GaAs、Si、Ge 等器件模拟。
fldmob- 表示启用 **电场依赖迁移率模型 (Field-dependent Mobility)**。
- 在高电场区域,载流子迁移率会下降(速度饱和效应)。
- 这个模型对 MOSFET、HEMT 等高场器件尤为重要。
srh- 表示启用 Shockley–Read–Hall (SRH) 复合模型。
- 描述缺陷(陷阱态)引起的复合过程。
- 对亚阈值电流、载流子寿命、暗电流分析非常重要。
contact name=gate workfun=4.87:是 Silvaco ATLAS 里对 电极 (contact) 的定义。contact- 定义一个接触电极。
name=gate- 说明这是 栅极 (gate) 电极。
- 名字要和你之前在
elec语句里定义的name=gate保持一致。
workfun=4.87- 指定这个接触的 功函数 (Work Function) 值,单位是 **电子伏特 (eV)**。
- 功函数是金属栅电极决定器件势垒高度的重要参数。
- 这里设为 4.87 eV,相当于一个典型金属(如 Pt、Au 或特定栅材料)的功函数。
- 源极 (source)、漏极 (drain) 一般用欧姆接触(低电阻接触),不需要指定功函数。
- 栅极 (gate) 往往是 肖特基接触,需要定义功函数来决定栅控特性(阈值电压、势垒高度)。
solve init:求解器在零偏(热力学平衡)下的初始稳态解。
换言之:计算器件在没有外加偏压时的电势、能带、载流子分布、费米能级等场量。这通常作为后续偏压扫描(如栅压、漏压)或瞬态仿真的初始解。
提供收敛且物理合理的初始条件,避免直接在非平衡下求解时发散或收敛困难。
用于检查器件结构、掺杂和边界条件是否正确(可用 TonyPlot 查看初始分布)。
save outf=hemtex01_0.str:- 告诉 ATLAS 把当前计算得到的器件解(电势分布、载流子浓度、能带等所有场量)保存下来
- 保存的结构文件(后缀通常用
.str,表示 structure)。这个文件包含了网格信息 + 区域定义 + 掺杂分布 + 当前求解得到的物理量。 - 用途:
- 断点续算
- 后续可以用
load inf=hemtex01_0.str把这一步的解作为新的起点,继续加偏压或跑瞬态仿真。 - 避免从头
solve init再迭代,提高效率。
- 后续可以用
- 结果可视化
- 可以用 TonyPlot 打开
.str文件,查看能带、电势、载流子分布等。
- 可以用 TonyPlot 打开
- 流程衔接
- 大型仿真常常分步执行,每个关键步骤保存一次结构文件,方便在不同偏压点之间切换。
- 断点续算
tonyplot hemtex01_0.str -set hemtex01_0.set:tonyplot
Silvaco 提供的图形化后处理工具,用于查看.str、.log、.plt等文件里的仿真结果。hemtex01_0.str之前用
save outf=hemtex01_0.str保存的器件结构文件,里面包含网格、材料区域、掺杂分布以及当时的解(电势、能带、载流子浓度等)。-set hemtex01_0.set指定 TonyPlot 的显示设置文件,后缀
.set,里面保存了绘图习惯(例如:要显示的物理量、电势还是能带、配色方案、坐标范围等)。- 如果不加
-set,TonyPlot 默认用系统设置显示。 - 用
.set文件可以快速复现之前的图像风格。
- 如果不加
method gummel newton trap itlimit=20 maxtrap=6- Silvaco ATLAS 中指定数值求解方法的设置命令
method
声明接下来的参数是选择仿真中使用的数值求解算法。gummel
表示采用 Gummel 迭代法:逐方程(如泊松方程、电子、空穴连续性方程)分步求解,通常在初始条件或低偏压时更稳定。newton
表示采用 牛顿迭代法(Newton-Raphson):一次性联立所有方程,收敛速度快,但对初值敏感。gummel和newton同时指定时,ATLAS 会先用 Gummel 迭代获得一个稳定初解,再切换到 Newton 提高收敛速度。
trap
表示启用 陷阱态相关方程(如深能级陷阱或缺陷的占据方程),在存在 SRH 复合中心或缺陷态时必须打开。itlimit=20
每个偏置点的最大迭代次数上限,超过 20 次仍未收敛就报错/停止。maxtrap=6
陷阱态方程最大允许的耦合数(即最多考虑 6 个陷阱能级)。
output con.band val.band e.mobility h.mobility- 是 Silvaco ATLAS 中的输出设置,指定在仿真结果文件(
.str结构文件或日志文件)里要保存和显示哪些物理量 output
声明接下来列出的物理量需要被保存,以便后续在 TonyPlot 或其他工具中可视化con.band
输出 导带能量分布 (Conduction band edge)。
可以用于观察能带弯曲、势垒高度、量子阱深度等。val.band
输出 价带能量分布 (Valence band edge)。
与con.band一起可以显示带隙、带偏移、能带对齐等情况。e.mobility
输出 电子迁移率分布 (Electron mobility)。
能看到不同区域因掺杂、应力或材料组成导致的迁移率变化。h.mobility
输出 空穴迁移率分布 (Hole mobility)。
与e.mobility对应,用于分析空穴在器件中的传输特性
- 是 Silvaco ATLAS 中的输出设置,指定在仿真结果文件(
solve vgate=-0.0 vstep=-0.2 name=gate vfinal=-0.6Silvaco ATLAS 中的电偏压扫描设置,用来控制在 gate 电极 上逐步施加电压,并求解对应的器件特性。
solve
指令关键字,告诉 ATLAS 要进行一次或一系列偏置求解。vgate=-0.0
设置 初始的栅极电压为 -0.0 V(也就是 0 V)。注意:这里写成
-0.0和0.0在数值上没有区别。vstep=-0.2
电压扫描步长,每次在 gate 上递减 0.2 V。name=gate
指定要施加电压的电极名称是 gate,对应前面elec name=gate定义的接触。vfinal=-0.6
扫描的终止电压为 -0.6 V。这条命令会让 ATLAS 在 gate 上执行:
- 从 0 V 开始,
- 每次减 0.2 V,
- 直到 -0.6 V,
- 在每个电压点进行一次器件数值求解。
也就是说,求解点依次是:
0.0 V → -0.2 V → -0.4 V → -0.6 V这种扫描通常用于:
- 提取 Id–Vg 曲线(栅压控制特性);
- 观察 沟道开启/关断行为;
- 研究 阈值电压 Vth 和迁移率变化。
优点
- 简洁,只需一行即可实现等步长扫描。
- 程序自动生成电压点:0.0, 0.05, 0.10, …, 0.30。
- 特别适合 大范围、规则步长 的扫描。
缺点
- 只能用等步长;
- 遇到收敛困难时,可能在某些点跳不过去,而人工逐点控制更灵活(可插入小步长过渡)
log outf=hemtex01.log master- Silvaco ATLAS 中的日志输出控制,用来指定仿真过程中要记录的结果文件。
log
启动日志输出功能,ATLAS 会把仿真过程中的计算结果(电流、电压、收敛情况等)记录到一个.log文件。outf=hemtex01.log
指定日志文件的输出文件名,这里是 **hemtex01.log**。- 里面会保存偏置点、电流值、功率、收敛信息等。
- 后续可以用 TonyPlot 打开
.log文件绘制 I–V 曲线。
master
表示把所有电极的电流/电压信息同时输出到这个日志文件(而不是只输出一个电极的结果)。- 如果不加
master,默认只输出主要的电极信息。 - 加了
master后,可以直接用它来画完整的 I–V 特性。
- 如果不加
solve vdrain=0.05 solve vdrain=0.10 solve vdrain=0.125 solve vdrain=0.15 solve vdrain=0.20 solve vdrain=0.301
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
- 这几行命令是 **Silvaco ATLAS** 中对 **drain 电极** 逐步加电压的求解过程,用来提取 **Id–Vd 特性曲线**
- **`solve`**
表示在给定偏置条件下对器件进行数值求解
- **`vdrain=...`**
给 **drain 电极** 施加对应的电压值。
- ATLAS 会在这些电压下分别求解电子分布、电流等物理量。
- **优点**
- 可以灵活选择不等步长(比如 0.10 → 0.125 → 0.15),适合在某些电压范围需要更细分时使用。
- 每个电压点完全可控,方便插入特殊电压点进行测试。
- 麻烦、冗长,不适合大范围电压扫描。
不易复用,稍微换一个范围就要手工修改
-
### C-Interpreter内容
```c
/*
* -----------------------------------------------------------------
* ATLAS Parser Function Template
* ATLAS Version 5.2.0.R
* c 1993 - 2000 SILVACO International.
* All rights reserved.
* -----------------------------------------------------------------
*/
/*
* Composition, temperature and doping dependent electron mobility
* Statement: MATERIAL
* Parameter: F.CONMUN
* Arguments:
* xcomp composition fraction x
* ycomp composition fraction y
* temp temperature (K)
* nd net concentration of donors
* na net concentration of acceptors
* *mun electron mobility
*/
int conmun(double xcomp,double ycomp,double temp,double nd,double na,double x,double y,double taun,double *mun)
{
double mu0, ntot;
ntot = nd+na;
if(xcomp < 0.429)
mu0 = (8000.0-1.818e4*xcomp);
else if(xcomp < 0.46)
mu0 = (90.0 + 1.145e5*(xcomp-0.46)*(xcomp-0.46));
else if(xcomp < 0.5)
mu0 = (90.0 + 3.75e4*(xcomp-0.46)*(xcomp-0.46));
else
mu0 = (200.0-2.0/(xcomp-0.46));
*mun = (mu0*(0.34+0.66/(1.0+pow(ntot/9.85e16,0.553))));
return(0); /* 0 - ok */
}
这个函数主要用于 根据材料组成、温度和掺杂浓度计算电子迁移率(electron mobility)
1. 头文件部分
1
2
3
4
5
6
7
标准 C 库的头文件:
<stdio.h>:输入输出<stdlib.h>:标准库函数<math.h>:数学函数(例如pow)<ctype.h>:字符处理<malloc.h>:动态内存分配<string.h>:字符串操作
<template.h>:这是 SILVACO 提供的 ATLAS 函数模板库,里面定义了各种求解器相关函数接口。
2. 函数声明和注释
1
2
3
4
5
6
7
8
9
10
11
12 /*
* Composition, temperature and doping dependent electron mobility
* Statement: MATERIAL
* Parameter: F.CONMUN
* Arguments:
* xcomp composition fraction x
* ycomp composition fraction y
* temp temperature (K)
* nd net concentration of donors
* na net concentration of acceptors
* *mun electron mobility
*/
这是 ATLAS 用于自定义材料函数的标准注释格式。
说明该函数是 材料属性函数,用于计算电子迁移率
mun。输入参数:
xcomp,ycomp:半导体的化学成分(如 AlxGa1-xAs 的 Al 组分)temp:温度,单位 Knd:施主浓度(donor)na:受主浓度(acceptor)输出参数:
*mun:电子迁移率
3. 函数定义
1
2
3
4 int conmun(double xcomp,double ycomp,double temp,double nd,double na,double x,double y,double taun,double *mun)
{
double mu0, ntot;
ntot = nd+na;
- 定义函数
conmun,返回int(一般返回 0 表示正常)。ntot = nd + na;计算总掺杂浓度。
4. 根据组成
xcomp计算零掺杂迁移率mu0
1
2
3
4
5
6
7
8 if(xcomp < 0.429)
mu0 = (8000.0-1.818e4*xcomp);
else if(xcomp < 0.46)
mu0 = (90.0 + 1.145e5*(xcomp-0.46)*(xcomp-0.46));
else if(xcomp < 0.5)
mu0 = (90.0 + 3.75e4*(xcomp-0.46)*(xcomp-0.46));
else
mu0 = (200.0-2.0/(xcomp-0.46));
根据
xcomp的不同区间,选择不同的经验公式计算 **材料本征迁移率mu0**。这是典型的 分段经验公式:
xcomp < 0.429:线性衰减0.429 ≤ xcomp < 0.46:二次函数0.46 ≤ xcomp < 0.5:另一条二次函数xcomp ≥ 0.5:非线性反比函数这些公式通常来源于实验数据拟合,针对特定半导体材料(可能是 GaAs 或 AlGaAs)。
5. 考虑掺杂浓度对迁移率的影响
1 *mun = (mu0*(0.34+0.66/(1.0+pow(ntot/9.85e16,0.553))));
这是典型的 掺杂依赖迁移率公式:
ntot是掺杂浓度
pow(ntot/9.85e16,0.553)是掺杂抑制因子整体公式表示迁移率随掺杂增加而下降:
- 当
ntot很小,mun ≈ mu0- 当
ntot增大,mun显著下降
6. 返回值
1
2 return(0); /* 0 - ok */
}
- 返回 0 表示函数成功执行,没有错误。
✅ 总结
这是一个 半导体电子迁移率计算函数,考虑了:
- 化学成分(composition)
- 掺杂浓度(donor/acceptor)
温度
temp在这个函数里没有被使用,如果想加入温度依赖,需要在公式中加入温度因子。使用 经验分段公式处理不同
xcomp区间。掺杂浓度影响通过
ntot和幂函数来模拟迁移率下降。输出是
*mun,用于 TCAD 仿真材料模型。
模拟结果
| 器件结构 | 漏极电压/电流 |
|---|---|
![]() |
![]() |

