上一次讲的loop循环适合在一次仿真中对某一相似行为进行多次计算,适合于一次仿真多次计算的情况。
但是,我们往往遇到要对器件进行优化设计,此时可能要研究某些参数,如厚度、掺杂浓度等对器件性能的影响时,就需要多次进行仿真。每次仿真后手动更改参数非常麻烦,此时在Silvaco中可以通过循环的方法自动更改参数值。 方法是书写两个文件比如file1.in 、file1_loop.in,在file1.in中先将参数设定为某一定值,在file1_loop.in中利用sweep对该参数进行更改。
1.sweep语法:
sweep parameter=<param1> type=<linear|power> range="start, stop, num" \
parameter=<param2> type=<list> data="list, of, ..., points" \
[linked=<param3> type=<sweep_type> range="range"]
1)parameter: 参数 param1等应该是一个变量,而且不能用缩写的形式。
2)type: 有三种,liner, power, list. liner和power 后面使用 range列出开始值,结束值及总共的数目、list后面用data来列出一系列分立的值,如 1,2 ,3等。
3)用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 ).
4)使用liked命令定义的任何参数都与前面的参数绑定在一起,比如:
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. 循环的使用(以官方organicex03 为例说明)
1)在organicex03_1.in (主文件)文件中对要更改的变量用set语句进行设置,如:
set doping=1e18
set gamma=3.3e7
上述语句中设置了两个变量 doping、gama
2)在organicex03.in(循环计算文件,计算控制文件)中采用如下语法进行循环计算和保存结果
go internal
load infile=organicex03_1.in
sweep parameter=doping type=power range="1e17, 1e23, 14" \
parameter=gamma type=linear range="2.5e7, 3.5e7, 3"
save type=sdb outfile=organicex03.dat
tonyplot organicex03.dat -set organicex03.set
quit
其中:
- go internal命令,将控制从当前的模拟器(即Atlas)转移到DBInternal.
- load命令指定要多次运行的模板文件。
- sweep命令指定如何修改模板文件中设置的变量。在本例中,变量 doping从1e17到1e23,变量gamma从2.5e7到3.5e7。模拟次数设置为14*3=42次。
- save命令告诉DBInternal将所有organicex03_1.in文件中extract语句中生成的数据整理到文件“organicex03.dat”中。