Skip to content

使用 Scheme 和 Scheme 扩展

NOTE

原文来源:Sentaurus Structure Editor User Guide, Version W-2024.09, Synopsys, Inc. PDF 源页码:第 9 章,对应 PDF 第 311–324 页

Scheme 数据类型

Scheme 是 SDE 使用的脚本语言,基础数据类型包括:

类型说明
数值整数或浮点数
字符串用双引号包裹
列表(item1 item2 ...)
布尔#t 真,#f
实体几何对象引用

基本 Scheme 编程

定义简单变量

scheme
(define width 10.0)
(define material "Silicon")

打印输出

scheme
(display "Hello, SDE")
(newline)

字符串操作

scheme
(string-append "prefix" "suffix") ; 拼接字符串
(string-length str)          ; 获取长度

列表操作

scheme
(car list)    ; 获取第一个元素
(cdr list)    ; 获取剩余部分
(cons elt list) ; 向表头添加元素
(length list)  ; 获取列表长度

算术表达式

scheme
(+ a b)    ; 加法
(- a b)    ; 减法
(* a b)    ; 乘法
(/ a b)    ; 除法
(expt x n) ; 幂

布尔运算

scheme
(and condition1 condition2) ; 逻辑与
(or condition1 condition2)  ; 逻辑或
(not condition)             ; 逻辑非

条件判断

scheme
(if condition
    (then-expression)
    (else-expression))

循环

scheme
; 简单 do 循环
(do ((i 0 (+ i 1)))
    ((= i n) done-expression)
  body-expression)

循环遍历列表

scheme
(for-each proc list)

对列表中每个元素应用过程 proc

定义过程(函数)

scheme
(define (func-name arg1 arg2)
  body-expression)

打印文本到标准输出

scheme
(display "Current value: ")
(display width)
(newline)

系统调用

scheme
(system "shell-command")

执行 shell 命令,返回退出码。


给 Sentaurus Workbench 发错误信号

scheme
(swb-error "Something went wrong")

在 SWB 流程中标记该步骤失败。


几何查询函数

实体 ID 和属性

每个几何实体有唯一 ID,可以查询属性:

scheme
( entity? obj )    ; 是否是实体
( get-type entity ) ; 获取实体类型

拓扑实体类型

  • body:三维实体
  • face:面
  • edge:边
  • vertex:顶点
  • region:材料区域
  • contact:接触

选择几何对象

  • GUI 交互式选择:(get-selected-entity)
  • 按名称查找区域:(find-region region-name)

查找区域名称和材料属性

scheme
(get-region-name region)
(get-region-material region)

自动区域命名

创建结构时自动根据材料命名区域:

scheme
(auto-region-naming #t) ; 开启自动命名

支持的材料列表

scheme
(list-materials) ; 打印所有已定义材料

查找相交面

查找两个实体相交得到的面:

scheme
(find-intersection-faces entity1 entity2)

查找顶点位置

scheme
(get-vertex-position vertex)
; 返回 (x y z) 列表

顶点–顶点距离

scheme
(vertex-vertex-distance v1 v2)

调试拓扑实体

scheme
(debug-entity entity)

打印实体调试信息。


查找边、面、体的元素

scheme
(body-faces body)      ; 获取体的所有面
(face-edges face)      ; 获取面的所有边
(face-vertices face)    ; 获取面的所有顶点
(region-bodies region)  ; 获取区域中的所有体

包围盒查询

scheme
(get-bounding-box entity)
; 返回 (xmin ymin zmin xmax ymax zmax)

Scheme 函数查询实体

所有查询结果返回 Scheme 列表,可以直接循环处理:

scheme
(for-each
  (lambda (face)
    ; 处理每个 face
    )
  (body-faces mybody))

本章小结

  • SDE 使用 Scheme 脚本语言自动化建模
  • 基础语法和 Lisp/Scheme 一致
  • 提供大量几何查询函数,可以编写复杂参数化建模脚本
  • 自动命名和查询减少重复劳动

TIP

复杂参数化器件,推荐用 Scheme 脚本建模,方便修改参数重新生成,可重复性好。

基于 Sentaurus TCAD 官方文档构建

代码块