Silvaco TCAD | Victory DoE的基本使用方法(三)
上篇链接:Silvaco TCAD| Victory DoE的基本使用方法(一)
Silvaco TCAD | Victory DoE的基本使用方法(二)
在前两篇分享中,我们基于Deckbuild示例中的SiC Planar VDMOS案例,构建了一个完整的DOE项目,项目顺利地完成了运行。在该项目中,对漂移区ndrift的浓度设置了DOE(ndrift = 8e15,9e15,1e16),模拟了工艺过程、IdVg、IdVd和BV,提取了氧化层厚度、开启电压Vth、开启电阻Rdson和击穿电压BV的结果。
当前工程的运行结束,意味着该项目的基本框架构建完成。但是如果想要该项目更加完整,则需要更新DOE,改变参数,多次运行,探究参数和器件性能间的规律。那么此时在已经运行完成的项目上进行再编辑就显得很重要。现在,我们想要基于已经完成运行的工程做以下的操作:
-
给ndrift再增加一个变量值
-
新增一个全新的变量“AnnealTime”(退火时间)
-
改变某个Module的代码并且重新运行
你也许会想,我可以在Deck/Split界面把DOE设置好,然后直接Build DOE Project,更新的内容自然就会更新到Dashboard中,上述操作似乎并没有特别说明的必要。
但需要注意的是,在VDOE的逻辑中,Deck/Split界面的"Build DOE Project"和”Rebuild”意味着全局修改工程。在"Build DOE Project"之前,有Split Level选项,该选项内可以输入数字,意味着"Build DOE Project"和”Rebuild”都从该数值的Module之后开始进行。在点击"Build DOE Project"之后,选定的Module之后的所有运行完成的结果都会被清空,该操作没有二次确认,并且不可逆,所以工程运行后要再次点击"Build DOE Project"的话,需要谨慎,对于运行完成的工程,建议复制一份进行备份,防止运行了很久的工程被一个误操作而清空。比如说,你构建的工程有Module 1(后面简称M1), M2, M3, M4这样的四个Module,并且都已经运行完成,那么在Split Level输入3,点击Build DOE Project之后,M3和M4的结果就会被清空,M1和M2的结果仍然会保留。
通常我们更想要在尽量保留原本的结果的同时更新工程,但上述方法是按照Module去改变结果的,以上面的举例来说,如果M3和M4内包含了多个node,这些node中仍然有你想要保留结果的node,又或者你只想清空M3,但不想清空M4,那么按照上述方法就不能达到目的。所以,接下来会介绍三种场景及对应的操作,以满足不同的编辑需求。
1. 给ndrift再增加一个变量值
在Deck/Split界面的DOE编辑区域,如果给ndrift重新增加一个值,如7e15,然后点击Rebuild,然后在Dashboard界面中进行查看,发现7e15这个变量确实添加了(新增了一列),但是已经运行完成的node也发生了重排。而我们想要的结果是:新增的node完全不影响已经运行过的node的运行结果。具体到本案例来说,即前三列的node的结果保持不变。然而现在的情况是:已经运行过的node号的位置变更了,新增的node号都变成了红色。和变更前对比发现,Deck/Split界面的Rebuild的逻辑是:从第一个Module开始,就像工程没运行过一样地重新排列node号。此时,如果点击Dashboard界面的左上角的黄色按钮(这个按钮的名称也是Rebuild,但作用上和Deck/Split界面的Rebuild有点不同,后面会看到演示),这些变红的node会被清空,而已运行完成的node所在的位置和所对应的代码的位置也是错乱的。所以,直接在Deck/Split界面的DOE编辑区域新增变量,然后直接点击Rebuild,这样的方法行不通。
在Deck/Split界面,DOE编辑区域新增变量值后进行Rebuild
在Dashboard界面,node编号错乱
想要达到目的,应该是在Dashboard界面对整列进行复制,然后修改变量值,而不是在Deck/Split界面操作。在Dashboard界面,选中想要复制的列中的ndrift的值,右键选择Copy node,会复制一整列,并且node号是从n43开始排列的。
这时双击新出现的列中的ndrift值,可以进行编辑,输入7e15后,输入框会变成黄色,内容会变成"8e15-->7e15",这时,需要点击右上角的绿色对勾,接受改变动,就可以完成变量的增加。这时,再点击Dashboard左上角的黄色按键,就可以在保留所有文件的情况下,对node号进行重排。已经运行完成的node,其node号变化后,对应node下的文件名前缀的node编号也会更新。
2. 新增一个全新的变量“AnnealTime”(退火时间)
在之前的演示中,我们在不同Module中定义了多个变量,但是只拿ndrift作为演示,构建了DOE。现在,我们想添加变量“AnnealTime”再次构建DOE,以查看退火时间对器件性能的影响。这时,就需要在Deck/Split界面中进行操作。在Module区域选中”AnnealTime”变量,点击添加变量到DOE编辑框内,这时直接点击Rebuild,就可以将该变量添加到在Dashboard的列中,并且不改变已经运行完成的结果。
如果想要对AnnealTime添加变量值,要避免在1小节中说明的错误做法,即在DOE编辑框新增行,然后改变AnnealTime的值,再进行Rebuild,这样也会出现node号错乱的情况。正确的做法还是在Dashboard界面中采用Copy node的方式,对AnnealTime添加变量值。在第三列的AnnealTime的变量的node n15进行右键和Copy,然后新增“20”这个变量值,点击对号,再点击左上角的黄色按钮,就完成了对新变量赋予新变量值的操作。也可以选择别的行进行复制,这就看你要选择哪个ndrift值去做对比实验了。
刚刚演示的新增变量,是我们运行工程时本来就有,但是没有把其添加入DOE编辑框的变量。如果要添加一个原本没有的变量,则需要到对应的Module中编辑代码,在Deck/Split界面进行Convert,然后重复前面的步骤,就可以把新增的变量也添加到DOE中。如下图,添加了一个变量名为VAR,变量值为10的变量,到第五个Module中。
3. 改变代码并且重新运行
在本工程中,求解IdVg、IdVd和BV的三个Module的关系是平行的。在Deck/Split的版本控制中可查看这种关系,Inputs下方的数字,说明了当前Module的输入文件来自前面哪个Module。-1表示上一个,-3表示上三个,-5表示上五个,这表示他们的输入都是M8。这种关系意味着M9, M11, M13可以独立运行,不存在依赖关系,彼此互不影响。
如果想要改变M9,即 IdVg中的代码,并使其重新运行,那么理论上来说,只需要让M9对应的node重新运行就可以了,M11和M13对应的node应该保持不变。
这里首先说明一种需要注意的代码更新办法。在Dashboard界面中,右键点击M9,选择Edit Module,然后修改其中的代码,点击保存。此时,Dashboard右上角的Refresh会变红,此时若是点击Refresh,则会清空M9以下的所有Module的结果(效果和Deck/Split界面Split Level设置为9,然后点击Build DOE Project一样)。这种方法比较适合修改最后一个Module的代码,或者后面所有Module都和当前修改的Module有依赖关系的情况。这些情况下,清空当前修改Module之后的所有Module的结果是必要的。但在这里,M9, M11, M13不存在依赖关系,我们修改了M9的代码就希望只有M9对应的node重新运行。因此这种更新代码的方法不是我们想要的。
在Dashboard界面右键Module,更改代码后,点击红色的Refresh,可以更新代码
但是这样做的会使修改Module之后的所有Module的结果也被清空
正确的做法是,在任何地方更新M9的代码后(不论是在Dashboard中右键Module进行更新,还是在Deck/Split界面直接在sdb文件中更新),到Deck/Split界面中,点即Convert,此时代码就更新到了Dashboard对应的Module中(可以右键该Module进行确认)。
但是此时已经运行过的结果还保留在对应的node中,此时如果点击左上角的运行按钮,并不会直接运行更新后的代码。这时,选中你想要重新运行的node,点击右上角的“扫把”按钮,清空node之前输出的文件,使node重新变成空白状态,此时再点击运行按钮,被清空的node会自动开始运行,并且运行的是更新后的代码。
总结:
-
工程运行完成后,最好复制一份备份
-
点击Build DOE Project之前,做好充分的确认
-
对运行完成的DOE的编辑,尽量在Dashboard界面中完成