当前位置: 首页 > news >正文

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,改变参数,多次运行,探究参数和器件性能间的规律。那么此时在已经运行完成的项目上进行再编辑就显得很重要。现在,我们想要基于已经完成运行的工程做以下的操作:

  1. 给ndrift再增加一个变量值

  2. 新增一个全新的变量“AnnealTime”(退火时间)

  3. 改变某个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会自动开始运行,并且运行的是更新后的代码。

 

总结:

  1. 工程运行完成后,最好复制一份备份

  2. 点击Build DOE Project之前,做好充分的确认

  3. 对运行完成的DOE的编辑,尽量在Dashboard界面中完成

http://www.dtcms.com/a/357720.html

相关文章:

  • 小杰机器视觉(six)——模板匹配
  • LeetCode 01背包 494. 目标和
  • 顶点 (VS)vs 片段(FS):OpenGL纹理滚动着色器的性能博弈与设计哲学
  • Java进阶教程之多线程与并发编程
  • Windows下快速配置UDF编译环境的详细步骤
  • VexCL并行异构库介绍和使用
  • Python Imaging Library (PIL) 全面指南:PIL图像处理异常处理与优化
  • oceanbase-参数及变量的记录
  • LeetCode 刷题【56. 合并区间】
  • 新人桌球笔记
  • Apisix工作流程
  • 主流国产数据库:文档完备性
  • 进程与线程的根本区别
  • 【双指针 - LeetCode】42. 接雨水
  • gstreamer使用hook的简单示例
  • 用户自定义字段(Custom Fields)设计方案,兼顾多语言、分组、校验、权限、查询性能、审计与多租户
  • LeetCode - 128. 最长连续序列
  • LeetCode第二题知识点3 ----引用类型
  • lxml库如何使用
  • DSP280049 CLA可访问资源
  • 【开题答辩全过程】以 非遗信息管理系统为例,包含答辩的问题和答案
  • 2025年企业管理与经济、文化发展国际会议(MECD 2025)
  • 拎包入住搭建 Browser Use Agent:基于PPIO Model API +Agent 沙箱的一体化构建
  • React-Native项目回忆
  • QML Chart组件之坐标轴共有属性
  • 基于Springboot + vue3实现的教育资源共享平台
  • Java流程控制03——顺序结构(本文为个人学习笔记,内容整理自哔哩哔哩UP主【遇见狂神说】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
  • PCIe 6.0 TLP路由机制:解密高效数据传输的核心架构
  • 贪心算法面试常见问题分类解析
  • 了解 JavaScript 虚拟机(VM)引擎