前言

TCAD(Technology Computer Aided Design),虽然原名中没有与半导体器件有关的词汇,但这种软件便是半导体工艺模拟及器件模拟的工具,可以说是EDA软件的一种。TCAD软件同其他EDA软件一样,底层需要复杂的数学模型和数物模型支撑,能大幅减少半导体制造的研发成本,为新型半导体器件提供初步验证,是半导体研究中不可或缺的软件。

这种软件大多使用自己开发的脚本语言进行编程仿真,少有图形化的操作界面,地球上几乎没有系统讲解TCAD软件的使用教程,即便市面上有一些教程,也只是粗略介绍了软件的基本使用,唯一的学习资源就是软件附带的文档,笔者在今年5月份有幸接触到人生中的第一款TCAD软件—Medici,使用该软件的目的是改变一种器件的某些参数后获取器件的击穿电压Bv,在使用过程中发现medici软件不仅仿真速度较慢而且需要频繁修改源文件去获取不同情况下的参数,大幅度延长了参数验证的时间,拖累科研进程,所以必须利用一些歪门邪道改变这一现状。

本文提供了一种利用python脚本让Medici根据用户所设参数自动获取结果的思路,笔者非计算机相关专业出生,脚本程序也只是笔者东平西凑的产物,但脚本确是提高了工作效率,本文也只注重讲解设计脚本的思路,不涉及器件源程序的相关知识。

实现原理

在设计python脚本的时候,将medici软件视为一个黑盒,这个黑盒是一个拥有一个输入和两个输出的盒子,当输入一个电压,这个盒子可以输出两个值,通过比对输出的两个值是否都在1附近来判断输入的电压是否正确。如下图所示:

由于判断输入的电压是否是正确的是在仿真结束后才能进行判断,因此需要进行多次修改源文件的电压进行仿真,存在着一定的试错成本,而且试错是一个不可避免的环节,所以我第一次设计的脚本也是一个暴力试错型的,下面是代码实现的流程图。

在上述所示的程序流程中,我最先输入了一个保守值进行仿真,为什么要输入这个保守值?由于笔者并没有深究Medici软件的数学模型,即便文档有提到也难以进行验证,在Medici软件提取电离值的时候,输出的结果是不固定的,这里的不固定说的是输出的内容不固定而不是指输出的数值不固定,当输入的电压小于一定值时,提取电离值语法会输出一些难以预料的内容,读者可以自行尝试,而即便是输出了自己想要的内容也离预期值过远,大大增加了试错的成本,所以这里我输入的保守值其实是一个“便于后续处理的数值”,如果不从一个“便于后续处理的数值”开始仿真,从0开始仿真的话是非常浪费时间的。因此,需要先根据一定的经验先输入一个保守值进行仿真,以便后续流程的处理。

脚本以这种运行方式运行往往需要多次修改电压输入后再运行多次仿真后才能得到结果,并且仿真次数与预期电压和我们输入的保守值有关,也就是说我们输入的保守值越接近预期电压其仿真所需要的次数也就越少,这样做的缺点是很明显的,在不同条件下器件的击穿电压应该是不一样的,也就是说需要试错的次数也不一样,不推荐这种做法。

在使用上述的方法编写脚本后我发现了一些规律,如下图所示

可以看出,我是在保守值得基础上增加1伏电压或是减少一伏电压让保守值去逼近目标值,而上图数据所示我输入的保守值是小于预期值的,因此只需每次加1伏电压否判断是否符合预期结果后输出就行(这里我为了方便演示选择了每次仿真结束后都输出结果),如上图所示,为得到预期结果我的脚本一共仿真了27次,这是特别花费时间的,是否还有跟简单的仿真方式?

图中的结果已经给出了答案,在图中可以看出,我每增加1伏电压对电离值所产生的增量是比较相近的,如果我先用保守值进行一次仿真然后再在保守值的基础上增加1伏后进行仿真后,得到这两次的电离值的差值也就得到了这1伏电压增量对结果引起的电离值的增量,随后我计算目前的电离值距离预期电离值还有多少个这样的增量,再增加这些量后进行仿真是不是就能快速达到预期结果了?改进后的程序设计流程如下所示:

这样便能快速逼近预期值,省了不少时间,以下是改进后的脚本输出的结果图

可以看到仿真的次数大大减少了,下面讲解具体的代码实现

代码实现

引言

虽然流程图里的步骤并不复杂,但我们需要组成流程图里的组分

由于笔者不是计算机专业出生的,但也略懂些编程的思路,这里我采用“自下而上”的编程思路,简单来说也就是先实现一些小功能,再将这些功能组合成逻辑运行。

在手动仿真的过程中,我发现经常需要执行以下几个步骤:

1. 打开源文件,填入电压,关闭源文件

2. 在源文件的路径中让shell执行“medici 源文件名”的命令

3. 查看文件后缀是".out"的输出文件,判断结果是否符合预期

也就是说我的脚本需要以下功能:

1. 获得源文件路径

2. 在源文件中找到找到自己想要的信息

3. 在源文件中删除我需要更改的信息

4. 在源文件中添改我想要的信息

5. 执行仿真

6. 输出我想要的信息

下面逐一讲解代码实现,再三声明,笔者非计算机专业出生,脚本代码只是笔者东平西凑的产物,这个份产物对于专业人士而言就是所谓的”屎山“,但脚本确实提高了笔者的工作效率,不喜勿喷。

一、获得源文件路径

使用python脚本玩转古早TCAD软件(待更新)的更多相关文章

  1. Python 帮你玩微信跳一跳 GitHub Python脚本

    前言想自己搞游戏小程序的 在github 有人已经利用 python程序, 通过adb 获取不同型号安卓手机的系统截图,然后通过计算小人与目标位置距离之后得到准确的触摸时间,再通过 开发者模式里的 a ...

  2. 如何在python脚本开发做code review

    在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...

  3. 在Java中动态传参调用Python脚本

    最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...

  4. 旧酒换新瓶,新版M1/M2芯片Macos(Ventura)安装古早版本Python2.7(Python2.x)

    向下兼容特性是软件开发系统的一个重要指标,它是指一个新的系统或者软件能够与旧的系统或软件兼容并正常运行.这意味着旧系统或软件可以在新系统或软件中使用,而不会出现问题.向下兼容对于提高软件或系统的可用性 ...

  5. freeswitch嵌入python脚本

    操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 python版本:2.7.9 开启python模块 安装python lib库 apt-get install pyt ...

  6. python脚本后台运行

    问题描述: 环境: CentOS6.4 一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本: python t ...

  7. 某互联网后台自动化组合测试框架RF+Sikuli+Python脚本

    某互联网后台自动化组合测试框架RF+Sikuli+Python脚本 http://www.jianshu.com/p/b3e204c8651a 字数949 阅读323 评论1 喜欢0 一.**Robo ...

  8. 动态执行python脚本

    前言 存在许多独立的python脚本,这些脚本可能会增加,也可能会减少,现在需要按照某种顺序调度这些程序.在python的standard library中,有一个模块imp可以实现动态的调用ptho ...

  9. 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本

    摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...

  10. SecureCRT中python脚本编写

    SecureCRT中python脚本编写学习指南 SecureCRT python 引言 在测试网络设备中,通常使用脚本对设备端进行配置和测试以及维护:对于PE设备的测试维护人员来说使用较多是Secu ...

随机推荐

  1. [FAQ] 为什么部署到 github pages 时自定义域名总失效 (push-dir)

    Github_Pages 能方便我们部署静态页面,并且还支持 CNAME 自定义域名. $ yarn add --dev push-dir $ xxx build $ push-dir --dir=d ...

  2. K8s包管理工具Helm v3(19)

    一.Helm概述 官网:https://v3.helm.sh/zh/docs/ https://helm.sh/ helm 官方的 chart 站点: https://hub.kubeapps.com ...

  3. vue通过input选取图片,jq的ajax向服务器上传img

    <template>   <div class="">     <!-- 选择后预览 -->     <img v-if="im ...

  4. Solution Set - 图上问题

    CF360E Link&Submission. 首先显然可以选择的边的权值一定会取端点值.事实上,第一个人经过的边选最小,第一个人不经过的边选最大,这样一定不劣.进一步,如果 \(s_1\) ...

  5. 二、Doris架构原理

    Doris是一个MPP的OLAP系统,以较低的成本提供在大数据集上的高性能分析和报表查询功能. MPP (Massively Parallel Processing),即大规模并行处理.简单来说,MP ...

  6. Steam中将XBox手柄默认布局改为任天堂手柄布局的方法

    1. 在Steam菜单栏找到"查看",选择大屏幕模式. 2. 进入大屏幕模式后,在菜单界面找到"设置". 3. 在设置界面找到"控制器",选 ...

  7. WPF 纯xaml实现控件运动动画

    1.Image控件加载后上下运动 2.Image控件可以放在Grid等布局控件中 3.指定加载时触发动画: EventTrigger RoutedEvent="Image.Loaded&qu ...

  8. 介绍几种常用的Oracle客户端工具

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...

  9. Linux(二):Linux的灵魂

    上次说Linux的前世今生的时候,提了一句,就像学习java一样,我们有一个核心的准则 "万物皆对象" ,学习Linux,同样有基本准则,这也是Linux的最基本的特点,那就是&q ...

  10. WPF登录界面样例

    XAML文件内容如下 1 <Window x:Class="ERP.Views.Login" 2 xmlns="http://schemas.microsoft.c ...