Sentaurus Workbench
https://web.stanford.edu/class/ee328/swb/swb_b.html
Sentaurus主界面可以分为三部分,由上至下分别是Tool Flow,Project Parameters,和Simulation Tree。由左至右是顺序执行的关系,比如SPROCESS做一些预定义或前处理,SDE(Sentaurus Device Editor)负责建模和网格生成,SDEVICE进行实际的模拟设置,比如设置求解的方程和扫掠的电压范围,也可以设置多个SDEVICE,顺序执行多个模拟,最后的INSPECT做一些后处理操作。
在Tool Flow中的每一个工具,我们都要编写相应的输入文件,来告诉Sentaurus它应该在这一步干什么。这里并没有图形界面,因此必须像Lammps一样手动编写in文件。不同Tool的语法和支持的语言不同,比如sde使用scheme语言,inspect支持tcl语言,sdevice的输入格式又不相同。我们需要在Tool Flow这一行为每一个Tool编写输入文件,Sentaurus将这一行的输入文件命名为<tool_label>_<tool_acronym>.cmd
,其中<tool_label>
为这个工具的标签,<tool_acronym>
为这个工具的首字母缩略词。比如建模的Sentaurus Device Editor的label为sde,acronym为dvs
,因此Tool Flow中SDE工具的输入文件的命名就为sde_dvs.cmd
。
每一个Tool下面存在多个节点,这些节点的输入文件承接自Tool中定义的输入文件,区别是因为不同的节点对应着不同的参数,Sentaurus中存在一个预处理程序,这个预处理程序会将Tool的输入文件中的变量先替换为对应节点的参数值,就像C或者C++中的宏一样,在编译前预处理器的主要作用就是把宏进行替换展开。每一个节点都是一个simulator对象,都需要去进行计算,他们就像在服务器中排队的一个个计算任务,每一个节点都有一个唯一的编号,在Sentaurus中用@node@
表示某一节点的编号,两个@
中间的内容代表变量。在Sentaurus中有一个小型的作业调度工具gjob,类似于服务器中的slurm或者lsf作业调度系统,负责提交调度这些simulator。每一行从左到右执行一次,就代表完成了一次对应参数组合下的实验。界面中一共有多少行,就代表一共存在多少组独立的实验。因此在Sentaurus中进行仿真时,整体上存在以下两个步骤,在Tool Flow中搭建编写好了各个工具的输入文件后,
- Sentaurus Workbench预处理程序基于Tool Flow中的input文件为每个节点生成参数化后替换好的input文件。
- Sentaurus为每个节点生成一个simulator,点击执行后,gjob就去做调度完成模拟过程
Sentaurus为每个节点的输入输出文件设置了统一的命名规则,为n@node@_<tool_acronym>.extension
或n@node@_<tool_acronym>.extension
,其中@node@
在不同的节点中会替换为对应的编号。<tool_acronym>
为工具的首字母缩略词。比如SDE工具下面第21个节点的输入文件,命名就为n21_dvs.cmd
。
下面这几个文件类型在Sentaurus仿真中都经常出现。节点中的cmd文件是预处理后的input文件,plt文件储存了器件终端(源、漏、栅,MOSFET实际上就是一个三端子器件)的变量信息,tdr是Sentaurus中的核心文件,包含了器件中各个物理场的信息,比如器件的材料与结构、掺杂分布、边界条件、网格、电流电压场等等。par文件用于提供SDEVICE仿真中相关的物理模型参数,Sentaurus自带了许多默认材料参数,对应一系列的par文件,我们也可以定义自己的par文件来更改对应物理模型的参数。
程序=算法+数据结构,Sentaurus的运行逻辑也是这样,一步一步的模拟过程,实际上就是这一堆数据(比如.tdr文件)的传递过程,在对应节点按照算法(.cmd文件)对这些数据进行计算处理,自己写一个仿真程序实际上也是这种过程的简陋版。Sentaurus也提供了一系列的后处理程序,比如Sentaurus Visual,Tecplot SV,Inspect等,把生成的.tdr或者.plt数据文件用对应程序打开,就可以按照预置好的接口对这些数据进行可视化和后处理了。