我们往往遇到要对器件进行优化设计,此时可能要研究某些参数,如厚度、掺杂浓度等对器件性能的影响时,就需要多次进行仿真。每次仿真后手动更改参数非常麻烦,此时在Silvaco中可以通过循环的方法自动更改参数值。方法是书写两个文件比如file1.in 、file1_loop.in,在file1.in中先将参数设定为某一定值,在file1_loop.in中利用sweep对该参数进行更改。
1、sweep语法
sweep parameter=<parameter1> type=<linear|power>range="start,stop,num"\
parameter=<parameter2> type=<list> date="list,of points" \
[linked=<param3> type=<sweep_type> range="range"]
(1) type: 有三种,liner, power, list. liner和power 后面使用 range列出开始值,结束值及总共的数目、list后面用data来列出一系列分立的值,如 1,2 ,3等。
(2) 用parameter定义的参数与其他parameter定义的参数是相互独立的。比如:
sweep parameter=x type=linear range="1,3,3" \
parameter=y type=linear range="10,30,3"
x的值为1,2,3;y的值为10,20,30.这样将产生9组数据 ( 1,10 ), ( 2,10 ), ( 3,10 ), ( 1,20 ), ( 2,20 ), ( 3,20 ), ( 1,30 ), ( 2,30 ), ( 3,30 )。
(3)使用linked命令定义的任何参数都与前面的参数绑定在一起,比如:
sweep parameter=x type=linear range="1,3,3" \
linked=y type=linear range="10,30,3"
将产生 (1,10), (2,20), (3,30)三组数据。下列更复杂的语句进一步说明liked的功能:
sweep parameter=A type=linear range="1,3,3" \
linked=B type=linear range="1,2,2" \
linked=C type=linear range="1,4,4"
在上面的语法中,A被定义为值(1,2,3)。B被定义为值(1,2)。C被定义为值(1,2,3,4)。但本实验以参数A为控制参数,将包含(1,1,1)、(2,2,2)、(3,2,3)三次试验。B的最终值是2,然后一直保持不变而C的最终值永远不会达到。
2、循环的使用以silvaco中例子ganfetex01_aux.in为例:
1)在ganfetex01_aux.in(主文件)文件中对要更改的变量用set语句进行设置,如:
set th=0.005
set index=1
上述语句设计了变量厚度th
2)在ganfetex01_aux.in(循环计算文件,计算控制文件)中采用如下语法进行循环计算和保存结果
# This small script allows us to loop on the device thickness to
# extract the channel charge concentration versus device thickness
#
go internal
load inf=ganfetex01_aux.in
sweep parameter=th type=list data="0.005, 0.01, 0.015, 0.02, 0.025"
save type=sdb outf=ganfetex01.dat
tonyplot ganfetex01.dat -set ganfetex01.set
quit
其中:
·go internal命令。将控制从当前的模拟器(Atlas)转移到DBinternal.
`load命令指定需要多次运行的模板文件。
·sweep命令指定如何修改模块文件中设置的变量,在本例中材料的厚度从0.005变化到了0.025共5个值,模拟次数设计为5次。
·save命令告诉DBinternal将所有的ganfetex01_aux.in文件中的extract语句中生成的数据整理到文件ganfetex01.dat中。
3)tonyplot输出的折线图。反映出了二维电子气浓度与器件厚度之间的关系。
4)ganfetex01_aux.in主文件。
#
# ganfetex01.in
#
# This example is the basis of the Simulation Standard article
# "Simulating the Source of Polarization Charge in AlGaN/GaN HFETs"
# Simulation Standard, V. 15, N. 8, Aug. 2006, Silvaco International.
#
# That article is based on the work of:
# J. P. Ibbetson, et. al., Appl. Phys. Lett. 77, 250 (2000).
#
go atlas
# initial thickness
set th=0.005
set index=1
# delta Ec is 75% of delta Eg
set align1=0.75
# location of surface donor trap level relative to valence band
set Ed=2.6
# density of surface donor traps
set Dens=6e13
# density of donors in GaN
set d_gan=1e15
# density of donors in AlGaN
set d_algan=1e18
# lifetime
set tau=1e-10
# polarization charges either set by model or fixed
# in the example they are fixed in order to calibrate
# to Ibbetson's paper
#set po="polarization polar.scale=1 calc.strain"
set po=" "
set pz=1.608e13
set pzAlGaN=-1*($pz + 2.122e13)
# set up some thickness dependent mesh parameters
set ymin=-1*$th
set ymin2=$ymin/2
set ydelta=$th + 0.0010
#
mesh auto width=1000
x.m l=0.0 s=1
x.m l=1.0 s=1
#
y.m l=$ymin s=0.0001
y.m l=$ymin2 s=0.001
y.m l=0.0 s=0.0001
y.m l=0.01 s=0.001
y.m l=1.0 s=0.5
y.m l=1.98 s=0.001
y.m l=2.0 s=0.0001
#
region mat=AlGaN y.min=$ymin y.max=0 x.comp=0.34 $"po" donors=$d_algan
region mat=GaN y.min=0 y.max=2.0 donors=$d_gan $"po" substrate
#
elec name=sub bottom
#
material material=Oxide alattice=5.43
material mat=AlGaN edb=0.042 eab=0.200 \
taun0=$tau taup0=$tau align=$align1
material mat=GaN edb=0.042 eab=0.200 \
taun0=$tau taup0=$tau mun=100
#
material mater=AlGaN mun=5 vsatn=1.1e7
material mater=GaN mun=100 vsatn=1.9e7
# Caughy-Thomas parameters
mobility mater=AlGaN mu1n.caug=5 mu2n.caug=135 ncritn.caug=1e17 vsatn=1.1e7
mobility mater=GaN mu1n.caug=100 mu2n.caug=2000 ncritn.caug=1e17 vsatn=1.9e7
#
models fldmob k.p print srh fermi incomplete
#
interface charge=$pz s.s y.min=0.0 y.max=0.0
interface charge=$pzAlGaN s.x y.min=$ymin y.max=$ymin
interface charge=2.122e13 s.x y.min=2.0 y.max=2.0
#
inttrap donor density=$Dens degen=2 e.level=$Ed taun=1e-12 taup=1e-12 \
y.min=$ymin y.max=$ymin s.x
inttrap acceptor density=9e14 degen=4 e.level=0.2 taun=1e-12 taup=1e-12 \
y.min=2.0 y.max=2.0 s.x
#
output con.band val.band band.param flowlines charge traps \
e.mob h.mob e.vel ex.vel ey.vel h.vel hx.vel hy.vel qss polar.charge
#
method gumits=300 clim.dd=1e5 autonr
#
solve
save outf="ganfetex01_$'index'.str"
#
#
extract init inf="ganfetex01_$'index'.str"
extract name="2DEG" 1e-4 * area from curve(depth,impurity="Electron Conc" \
material="All" mat.occno=1 x.val=0.5) \
where x.min=0 and x.max=0.5 outfile="extract.dat"
quit