ARTICLE · 1017688
半导体工艺和器件仿真软件Silvaco TCAD实用教程(1.3.4-set)
今天过1.3.4-set这部分,原书正文如下:


1.3.4 set 命令
上一节我们学习了 go:
go负责告诉 DeckBuild,接下来使用哪个仿真器。
这一节要认识另一个非常实用的 DeckBuild 命令:
set
它最主要的作用就是:
先定义一个变量,后面的仿真命令再使用这个变量。
这样做最大的好处是:以后修改参数时,不需要满篇代码到处找数字,只改变量本身就可以了。
一、set 是干什么的?
原书说,set 可以设置 DeckBuild 的全局变量。
所谓全局变量,可以先简单理解成:
我先给一个名字赋一个值,后面的 deck 可以反复使用这个名字。
例如:
set temp=1000这句话就是:
定义一个变量
temp,让它的值等于1000。
以后需要使用这个变量时,在变量名前面加 $:
$temp所以:
temp是变量的名字,
而:
$temp表示:
把这个变量当前保存的值拿出来使用。
二、set 的基本语法
原书给出的语法形式是:
SET <VARIABLE> = { <VALUE> | <EXPR> } [NOMINAL]现在不用把这些符号背下来。
简单看就是:
set 变量名 = 值例如:
set temp=1000或者:
set gaspress=1其中:
temp是变量名;1000是它的值;gaspress是另一个变量名;1是它的值。
原书在语法格式中还列出了 NOMINAL,但这一小节没有继续展开它的具体用法,所以现阶段不用深入。
三、定义变量以后怎么使用?
原书给了一个很直观的例子:
set temp=1000set gaspress=1diffuse time=30 temp=$temp press=$gaspress我们一句一句来看。
首先:
set temp=1000定义:
temp = 1000然后:
set gaspress=1定义:
gaspress = 1到了真正的扩散命令:
diffuse time=30 temp=$temp press=$gaspressDeckBuild 看到:
$temp就会把它替换成:
1000看到:
$gaspress就会替换成:
1所以这条命令实际上相当于使用:
diffuse time=30 temp=1000 press=1四、为什么不直接把数字写进去?
你可能会觉得:
那我直接写
temp=1000不就行了吗?
当然可以。
但是假设一个很长的 deck 里面,很多地方都用了同一个温度:
temp=1000...temp=1000...temp=1000...temp=1000现在想把温度全部改成 1050。
如果直接写数字,就需要到处修改。
但如果一开始写:
set temp=1000后面全部使用:
$temp那么只需要修改一处:
set temp=1050整个 deck 中使用 $temp 的地方都会随之改变。
所以原书强调,这种全局变量设置方式可以让:
仿真参数更加容易修改和维护。
这也是参数化仿真最基本的思想。
五、变量的值不一定只是一个数字
set 还有一个很重要的特点。
变量右边不仅可以直接写一个数值:
set temp=1000还可以写一个表达式。
也就是说,可以经过计算之后,再把结果赋给变量。
原书举了一个与 extract 联合使用的例子。
先提取一个氧化层厚度:
extract name="oxide thickness" thickness oxide \mat.occno=1 x.val=0.49然后根据这个提取结果进行计算:
set etch_thickness=($"oxide thickness"*10000)+0.05再把计算得到的结果用于后面的刻蚀:
etch oxide dry thickness=$etch_thickness这里不需要现在就学会 extract。
我们只看逻辑:
先得到一个结果 ↓用 set 对结果进行计算 ↓把结果保存成新变量 ↓后面的命令继续使用这个变量所以 set 不只是:
“给变量存一个固定数字。”
它还可以:
根据前面的结果计算出新的参数,再交给后面的仿真步骤。
六、set 和参数扫描有什么关系?
原书在这里还提前提到:
后面讲 DOE,也就是实验设计时,全局变量会变得非常有用。
原因也很好理解。
例如:
set temp=1000如果不断改变:
1000105011001150然后每次重新运行同一个 deck,就可以研究:
不同温度对仿真结果有什么影响。
所以 set 实际上是以后进行:
参数扫描; 参数优化; DOE;
这些工作的基础之一。
现在不用深入,只要知道为什么作者在这里强调“全局变量”即可。
七、还有一个容易混淆的 .set 文件
这一节后半部分又提到了 TonyPlot 的:
*.set这里一定要注意:
set命令和.set文件不是同一件事。
DeckBuild 中的:
set temp=1000是在:
定义仿真变量。
而 TonyPlot 中的:
something.set主要保存的是:
TonyPlot 的显示方式。
比如你已经把某张图的:
坐标轴; 显示项目; 曲线显示方式; 其他绘图设置;
调整好了,就可以把这种显示配置保存成 .set 文件。
原书提到,可以通过 TonyPlot 中的 Save Set Files 保存当前显示设置。
以后再看类似结果时,直接载入这个 .set 文件,就不需要每次重新设置图形显示方式。
所以可以这样区分:
set 命令↓控制仿真中的变量而:
.set 文件↓保存 TonyPlot 的显示设置名字很像,但作用完全不同。
本节小结
1.3.4 最重要的是理解 变量。
例如:
set temp=1000表示定义变量 temp。
后面使用:
$temp就代表取出这个变量的值。
所以:
set temp=1000diffuse time=30 temp=$temp可以理解成:
先把温度保存为一个变量,再让后面的扩散命令使用这个变量。
这样做最大的好处是:
参数只需要在一个地方修改,整个 deck 都可以跟着变化。
此外,set 右边还可以使用表达式,甚至可以利用前面 extract 得到的结果计算新的参数。
最后再记住一个区别:
set命令用于定义 DeckBuild 变量;.set文件用于保存 TonyPlot 的显示设置。
如果只记一句话:
set就是“先给一个参数起名字并赋值,以后通过$变量名反复使用它”。
资料依据:《半导体工艺和器件仿真软件 Silvaco TCAD 实用教程》第 1.3.4 节 set;并参考 ATLAS 用户手册中关于 DeckBuild SET 命令和变量替换的说明。