夜雨聆风学习资料网

ARTICLE · 1017688

半导体工艺和器件仿真软件Silvaco TCAD实用教程(1.3.4-set)

半导体工艺和器件仿真软件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=$gaspress

DeckBuild 看到:

$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 命令和变量替换的说明。

相关学习资料

返回首页浏览学习资料