• Synopsys Sentaurus TCAD系列教程之-Tcl《4》


    Tool command language(Tcl)

    4. 示例

    介绍TCAD sentaurus特有的Tcl示例

    4.1 Inspect: 抽取击穿电压

    source util_ins.cmd
    
    proj_load  break.plt  D
    cv_create IcVc "D IcVc(4) x" "D IcVc(4) y" 
    
    set Ilevel 1e-8
    Extract_BV IcVc $Ilevel
    
    cv_display IcVc
    cv_setCurveAttr IcVc "IcVc" \
      red solid 3 circle 3 defcolor 1 defcolor
    gr_setAxisAttr X  {Collector Voltage (V)} 14 {} {} black 1 14 0 5 0
    gr_setAxisAttr Y  {Current (A)}           14 {} {} black 1 14 0 5 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    此示例“Inspect_ins.cmd”显示了如何在Inspect输入流中混合Tcl命令和Inspect命令,以从双击晶体管模拟结果中提取开路基极击穿电压。
    提取不同的击穿电压:
    1)BV_vmax定义为扫描期间获得的最大集电极电压
    2)BV_Ilevel被定义为集电极电流超过某一值时的集电极电压
    如果“Inspect”工具节点没有完成状态,既不是黄色,请首先运行该节点以生成结果。然后,单击“Run Selected Visualizer Nodes Together” 工具栏按钮以创建绘图。
    首先,来源文件util_ins.cmd,提供击穿电压提取程序EXTRACT_BV:

    source util_ins.cmd
    
    • 1

    其次,加载.plt文件并创建集电极I-V曲线

    proj_load break.plt D
    cv_create IcVc "D IcVc(4) x" "D IcVc(4) y"
    
    • 1
    • 2

    最后,通过使用限流调用EXTRACT_BV来提取击穿电压

    set Ilevel 1e-8
    Extract_BV IcVc $Ilevel
    
    • 1
    • 2

    击穿电压提取程序EXTRACT_BV在文件util_ins.cmd中定义
    因此,Inspect节点返回从“DOE:”输出中提取的值:
    DOE: BV_vmax 75.35
    DOE: BV_Ilevel 40.91
    DOE: Ilevel 1e-8

    proc Extract_BV { Cname Ilevel } {
      set VList [cv_getValsX $Cname]
      set IList [cv_getValsY $Cname]
     
      set vmax 0.0
      set vi   0.0
      foreach v $VList i $IList {
         if { $v > $vmax } { set vmax $v }
         if { $i >= $Ilevel && $vi == 0.0} { set vi $v}
      }
     
      ft_scalar BV_vmax   $vmax
      ft_scalar BV_Ilevel $vi
      ft_scalar Ilevel    $Ilevel
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    Inspect命令cv_getValsX 和cv_getValsY将Inspect曲线转换为Tcl列表,其中包含曲线的x或y值
    Inspect命令ft_scalar打印提取的值并将其传递给Sentaurus Workbench.

    4.2 Sentaurus Process: 抽取SiO2厚度

    本示例sprocess_fps.cmd.演示了在Sentaurus Process命令文件中使用Tcl脚本

    #--- 1D Grid definition ----------------------------------------------
    line x location=0.0         spacing=  2 tag=SiTop                     
    line x location=0.5  spacing= 50 tag=SiBottom                 
    
    #--- Initial simulation domain ---------------------------------------
    region silicon xlo=SiTop xhi=SiBottom 
    
    #--- Initialize the simulation ---------------------------------------
    init concentration=1.0e15 field=Boron wafer.orient=100
    
    #--- Grid settings for automatic meshing in newly generated layers -
    grid set.min.normal.size=3 set.normal.growth.ratio.2d=1.4
    
    #--- Growing screening oxide -----------------------------------------
    gas_flow name=O2_1_N2_1 pressure=1 \
             flowO2=1.2 flowN2=1.0
    diffuse temperature=1000  time=40 gas_flow=O2_1_N2_1
    grid remesh
    
    #--- Measuring the oxide thickness -----------------------------------
    select z=Boron
    
    set LAYERS [layers]
    puts "$LAYERS"
    #->{         Top                Bottom             Integral             Material }
    #->{  -1.584176604347e-02  1.126859234306e-02  6.391490417248e+09 Oxide }
    #->{   1.126859234306e-02  5.000000000000e-01  4.360844257716e+10 Silicon }
    
    set FirstColumn [list]
    foreach Row $LAYERS {
     lappend FirstColumn [lindex $Row 0]
    }
    
    set Tox [expr [lindex $FirstColumn 2] - [lindex $FirstColumn 1]]
    puts "The thickness of the grown oxide is \
            [format %.2f [expr 1e3*$Tox]] nm"
    #-> The thickness of the grown oxide is 27.20 nm
    puts "DOE: Tox $Tox"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    Sentarurus Process接收到仿真命令后,Sentaurus Process Tcl函数层用于提取有关生成的层的信息作为列表。每个图层条目都是一个列表,包含了顶部和底部坐标、当前数据集的积分值(此处不研究这个),以及材料:

    set LAYERS [layers]
    puts "$LAYERS"
    #->{         Top                Bottom             Integral             Material }
    #->{  -1.584176604347e-02  1.126859234306e-02  6.391490417248e+09 Oxide }
    #->{   1.126859234306e-02  5.000000000000e-01  4.360844257716e+10 Silicon }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    为了提取氧化物厚度,Layers表被简化为一个简单的平面列表,由第一列也就是顶部坐标构成:

    set FirstColumn [list]
    foreach Row $LAYERS {
     lappend FirstColumn [lindex $Row 0]
    }
    
    • 1
    • 2
    • 3
    • 4

    然后,通过减去第一层和第二层的顶部坐标来确定氧化物厚度。结果作为DOE:output打印到日志文件中,这样Sentaurus Workbench可以从输出中提取结果并将其添加到结果表中。

    set Tox [expr [lindex $FirstColumn 2] - [lindex $FirstColumn 1]]
    puts "The thickness of the grown oxide is \
            [format %.2f [expr 1e3*$Tox]] nm"
    #-> The thickness of the grown oxide is 27.20 nm
    puts "DOE: Tox $Tox"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用命令行选项-n运行Sentautus Process, 以在使用Tcl表达式时忽略语法检查,Tcl表达式使用尽在运行时可用的信息。

  • 相关阅读:
    测试左移和测试右移,我们为何要“上下求索”?
    springboot+vue音乐歌曲分享试听网站java
    Element(Java后端入门篇)
    Could not resolve all files for configuration ‘:app:debugRuntimeClasspath‘
    经验分享,xps格式转成pdf格式
    Springboot之邮件发送(内附源码)
    pexpect 自动交互输入
    初步探索react-redux拆分组件——connect()
    最小二乘法
    详解API基础知识
  • 原文地址:https://blog.csdn.net/weixin_42104289/article/details/128016701