Appearance
附录 A:Tcl 命令参考
NOTE
原文来源:Sentaurus Data Explorer User Guide, Version W-2024.09, Synopsys, Inc. PDF 源页码:附录 A,对应 PDF 第 122–123 页
本附录为所有 TDX Tcl 命令提供快速查找表,包含返回类型、命令名称与完整语法。详细说明和示例请参见第 3 章。
命令索引说明
| 类型缩写 | 含义 |
|---|---|
Boolean | 成功返回 TRUE(或 1),失败返回 FALSE(或 0) |
Integer | 返回整数;出错时返回负值 |
String | 返回字符串 |
Double | 返回双精度浮点数 |
List | 返回 Tcl 列表 |
Handle | 返回对象句柄,用于标签组相关函数 |
TIP
所有索引(geometry_index、region_index、state_index、dataset_index)均从 0 开始。在遍历前,先用对应的 GetNum* 函数确认数量上限。
文件命令
| 返回类型 | 命令 | 语法 | 说明 |
|---|---|---|---|
| Boolean | TdrFileClose | TdrFileClose <filename> | 关闭文件,不保存修改 |
| Boolean | TdrFileConvert | TdrFileConvert <convert-cmd> [params] <src> [<dst>] | 在脚本中调用格式转换(等同于命令行) |
| Integer | TdrFileGetNumGeometry | TdrFileGetNumGeometry <filename> | 返回文件中几何体数量 |
| Handle | TdrFileGetTagGroup | TdrFileGetTagGroup <filename> | 返回文件根标签组句柄 |
| Boolean | TdrFileOpen | TdrFileOpen <filename> [-native_units] [-reference_coordinates] | 打开 TDR 文件(使用前必须调用) |
| Boolean | TdrFileSave | TdrFileSave <filename> [<new_filename>] | 保存所有修改(可选另存为新文件) |
文件命令说明
TdrFileOpen 选项:
| 选项 | 说明 | 场景 |
|---|---|---|
-native_units | 不进行单位换算,按内部单位读取 | 需要精确数值时 |
-reference_coordinates | 将坐标和矢量数据集转换为参考坐标系 | 有变换矩阵时避免坐标混乱 |
TdrFileConvert 命令格式:
tcl
# 等同于命令行:tdx -mtt -y tdr_file.tdr tdr_mirr.tdr
TdrFileConvert -mtt -y tdr_file.tdr tdr_mirr.tdr
# 等同于命令行:tdx -tt -v17 old.tdr new.tdr
TdrFileConvert -tt -v17 old.tdr new.tdr几何命令
| 返回类型 | 命令 | 语法 | 说明 |
|---|---|---|---|
| Boolean | TdrGeometryDelete | TdrGeometryDelete <filename> <geom_idx> | 删除指定几何体(循环中需反向遍历) |
| Integer | TdrGeometryGetDimension | TdrGeometryGetDimension <filename> <geom_idx> | 返回维度(1、2 或 3) |
| String | TdrGeometryGetName | TdrGeometryGetName <filename> <geom_idx> | 返回几何体名称字符串 |
| Integer | TdrGeometryGetNumRegion | TdrGeometryGetNumRegion <filename> <geom_idx> | 返回该几何体的区域数量 |
| Integer | TdrGeometryGetNumState | TdrGeometryGetNumState <filename> <geom_idx> | 返回该几何体的状态数量 |
| List | TdrGeometryGetShift | TdrGeometryGetShift <filename> <geom_idx> | 返回偏移向量 {x y z} |
| Handle | TdrGeometryGetTagGroup | TdrGeometryGetTagGroup <filename> <geom_idx> | 返回几何体的根标签组句柄 |
| List | TdrGeometryGetTransform | TdrGeometryGetTransform <filename> <geom_idx> | 返回 3×3 变换矩阵(9 元素列表,行优先) |
| String | TdrGeometryGetType | TdrGeometryGetType <filename> <geom_idx> | 返回几何体类型(见下表) |
| Boolean | TdrGeometrySetName | TdrGeometrySetName <filename> <geom_idx> <name> | 设置几何体新名称 |
| Boolean | TdrGeometrySetShift | TdrGeometrySetShift <filename> <geom_idx> <shift_list> | 设置偏移向量 |
| Boolean | TdrGeometrySetTransform | TdrGeometrySetTransform <filename> <geom_idx> <transform_list> | 设置变换矩阵 |
几何类型枚举值
TdrGeometryGetType 可能返回以下字符串:
| 类型值 | 说明 |
|---|---|
"envelop" | 包络几何体 |
"grid_raytree" | 光线追踪网格几何体 |
"mixed_element" | 混合单元几何体(最常用,SDE/SProcess 输出) |
"tensor_rectilinear" | 非均匀张量直角网格 |
"tensor_uniform" | 均匀张量直角网格 |
"tensor_warped" | 变形张量网格 |
"tensor_xy" | XY 绘图型几何体(用于 IV 曲线等) |
状态命令
| 返回类型 | 命令 | 语法 | 说明 |
|---|---|---|---|
| Boolean | TdrStateDelete | TdrStateDelete <filename> <geom_idx> <state_idx> | 删除状态(循环中需反向遍历) |
| String | TdrStateGetName | TdrStateGetName <filename> <geom_idx> <state_idx> | 返回状态名称 |
| Handle | TdrStateGetTagGroup | TdrStateGetTagGroup <filename> <geom_idx> <state_idx> | 返回状态的标签组句柄 |
| Boolean | TdrStateSetName | TdrStateSetName <filename> <geom_idx> <state_idx> <name> | 设置状态新名称 |
删除状态的正确方式
tcl
# 正确:反向遍历删除
set f device.tdr
TdrFileOpen $f
set ns [TdrGeometryGetNumState $f 0]
for {set i [expr $ns - 1]} {$i >= 0} {incr i -1} {
set sname [TdrStateGetName $f 0 $i]
if {$sname != "target_state"} {
TdrStateDelete $f 0 $i ;# 仅保留目标状态
}
}
TdrFileSave $f cleaned.tdr
TdrFileClose $f区域命令
| 返回类型 | 命令 | 语法 | 说明 |
|---|---|---|---|
| Integer | TdrRegionGetDimension | TdrRegionGetDimension <filename> <geom_idx> <reg_idx> | 返回区域维度 |
| String | TdrRegionGetMaterial | TdrRegionGetMaterial <filename> <geom_idx> <reg_idx> | 返回区域材料名称(如 "Silicon") |
| String | TdrRegionGetName | TdrRegionGetName <filename> <geom_idx> <reg_idx> | 返回区域名称 |
| Integer | TdrRegionGetNumDataset | TdrRegionGetNumDataset <filename> <geom_idx> <reg_idx> <state_idx> | 返回该区域在指定状态下的数据集数量 |
| Handle | TdrRegionGetTagGroup | TdrRegionGetTagGroup <filename> <geom_idx> <reg_idx> | 返回区域的标签组句柄 |
| String | TdrRegionGetType | TdrRegionGetType <filename> <geom_idx> <reg_idx> | 返回区域类型(见下表) |
| Boolean | TdrRegionSetMaterial | TdrRegionSetMaterial <filename> <geom_idx> <reg_idx> <material> | 修改区域材料 |
| Boolean | TdrRegionSetName | TdrRegionSetName <filename> <geom_idx> <reg_idx> <name> | 修改区域名称 |
区域类型枚举值
| 类型值 | 说明 |
|---|---|
"bulk" | 体区域(半导体、绝缘层等) |
"contact" | 接触区域(金属接触) |
"interface" | 界面区域 |
"raytree" | 光线追踪区域 |
"ten_bulk" | 张量网格体区域 |
"ten_contact" | 张量网格接触区域 |
"ten_xy" | 张量网格 XY 绘图区域 |
数据集命令
| 返回类型 | 命令 | 语法 | 说明 |
|---|---|---|---|
| Boolean | TdrDatasetDelete | TdrDatasetDelete <fn> <gi> <ri> <si> <di> | 删除数据集(循环中需反向遍历) |
| Boolean | TdrDatasetDeleteByName | TdrDatasetDeleteByName <filename> [<name>] | 按正则表达式删除数据集;无名称时删除所有 |
| String | TdrDatasetGetLocation | TdrDatasetGetLocation <fn> <gi> <ri> <si> <di> | 返回数据集的网格位置类型 |
| String | TdrDatasetGetName | TdrDatasetGetName <fn> <gi> <ri> <si> <di> | 返回数据集名称 |
| Integer | TdrDatasetGetNumValue | TdrDatasetGetNumValue <fn> <gi> <ri> <si> <di> | 返回数据集中的数据值数量 |
| String | TdrDatasetGetQuantity | TdrDatasetGetQuantity <fn> <gi> <ri> <si> <di> | 返回物理量名称(如 "ElectronConcentration") |
| String | TdrDatasetGetStructure | TdrDatasetGetStructure <fn> <gi> <ri> <si> <di> | 返回数据结构类型 |
| Handle | TdrDatasetGetTagGroup | TdrDatasetGetTagGroup <fn> <gi> <ri> <si> <di> | 返回数据集的标签组句柄 |
| String | TdrDatasetGetType | TdrDatasetGetType <fn> <gi> <ri> <si> <di> | 返回数据集的仿真类型 |
| String | TdrDatasetGetUnit | TdrDatasetGetUnit <fn> <gi> <ri> <si> <di> | 返回单位短名称(如 "cm^-3") |
| String | TdrDatasetGetUnitLong | TdrDatasetGetUnitLong <fn> <gi> <ri> <si> <di> | 返回单位长名称 |
| Boolean | TdrDatasetRename | TdrDatasetRename <filename> [<old_name>] <new_name> | 全局重命名匹配的数据集 |
| Boolean | TdrDatasetRenameQuantity | TdrDatasetRenameQuantity <filename> [<old_qty>] <new_qty> | 全局更改物理量名称 |
| Boolean | TdrDatasetSetName | TdrDatasetSetName <fn> <gi> <ri> <si> <di> <name> | 设置指定数据集名称 |
| Boolean | TdrDatasetSetQuantity | TdrDatasetSetQuantity <fn> <gi> <ri> <si> <di> <quantity> | 设置指定数据集物理量 |
参数缩写说明:
<fn>= filename,<gi>= geometry_index,<ri>= region_index,<si>= state_index,<di>= dataset_index
Dataset Location 枚举值
TdrDatasetGetLocation 返回以下字符串之一:
| 位置值 | 含义 |
|---|---|
"edge" | 数据定义在网格边上 |
"element" | 数据定义在网格单元(体心)上 |
"element_edge" | 数据定义在单元边上 |
"element_face" | 数据定义在单元面上 |
"element_vertex" | 数据定义在单元顶点上 |
"face" | 数据定义在网格面上 |
"region" | 数据定义在整个区域(单值) |
"vertex" | 数据定义在顶点上(最常见:逐点物理量) |
Dataset Structure 枚举值
TdrDatasetGetStructure 返回以下字符串之一:
| 结构值 | 含义 |
|---|---|
"matrix" | 矩阵型(如应力张量) |
"scalar" | 标量(如掺杂浓度、电位) |
"tensor_sym" | 对称张量 |
"var_dim_vector" | 可变维度矢量 |
"vector" | 矢量(如电场方向) |
数据值命令
| 返回类型 | 命令 | 语法 | 说明 |
|---|---|---|---|
| List | TdrDataGetAllCoordinates | TdrDataGetAllCoordinates <fn> <gi> <ri> <si> <di> <vi> | 返回数据值的所有坐标(Tcl 列表) |
| String | TdrDataGetComponent | TdrDataGetComponent <fn> <gi> <ri> <si> <di> <vi> [<row>] [<col>] | 返回指定行列的分量值 |
| Double | TdrDataGetCoordinate | TdrDataGetCoordinate <fn> <gi> <ri> <si> <di> <vi> <coord_idx> | 返回指定维度坐标值 |
| Integer | TdrDataGetNumCol | TdrDataGetNumCol <fn> <gi> <ri> <si> <di> <vi> | 返回数据值的列数(矩阵/矢量) |
| Integer | TdrDataGetNumRow | TdrDataGetNumRow <fn> <gi> <ri> <si> <di> <vi> | 返回数据值的行数 |
| String | TdrDataGetValue | TdrDataGetValue <fn> <gi> <ri> <si> <di> <vi> | 返回标量数据值(字符串形式) |
| Boolean | TdrDataSetComponent | TdrDataSetComponent <fn> <gi> <ri> <si> <di> <vi> [<row>] [<col>] <value> | 设置指定分量的新值 |
参数缩写说明:
<vi>= value_index(数据值索引)
数据值访问说明
对于标量数据集:
- 行数 (
NumRow) = 1,列数 (NumCol) = 1 - 直接用
TdrDataGetComponent <fn> <gi> <ri> <si> <di> <vi>读取
对于矢量数据集(如电场 E-field):
- 行数 = 维度数(2D → 2,3D → 3),列数 = 1
- 用
TdrDataGetComponent ... <vi> 0读取 x 分量 - 用
TdrDataGetComponent ... <vi> 1读取 y 分量
对于矩阵数据集(如应力张量):
- 行和列均对应维度数
- 用
TdrDataGetComponent ... <vi> <row> <col>读取指定分量
标签组命令
| 返回类型 | 命令 | 语法 | 说明 |
|---|---|---|---|
| Handle | TdrTagGroupCreate | TdrTagGroupCreate <parent_tg> <name> | 在父标签组下创建新的子标签组 |
| Boolean | TdrTagGroupDelete | TdrTagGroupDelete <parent_tg> <tg_idx> | 按索引删除子标签组 |
| Boolean | TdrTagGroupDeleteByName | TdrTagGroupDeleteByName <parent_tg> <name> | 按名称删除子标签组 |
| Handle | TdrTagGroupGetByPath | TdrTagGroupGetByPath <fn> [<gi>] [<ri>] [<si>] [<di>] <path> | 按路径字符串获取标签组(如 "a/b/c") |
| String | TdrTagGroupGetName | TdrTagGroupGetName <tag_group> | 返回标签组名称 |
| Integer | TdrTagGroupGetNumTag | TdrTagGroupGetNumTag <tag_group> | 返回标签组中的标签数量 |
| Integer | TdrTagGroupGetNumTagGroup | TdrTagGroupGetNumTagGroup <tag_group> | 返回子标签组数量 |
| Handle | TdrTagGroupGetTagGroup | TdrTagGroupGetTagGroup <parent_tg> <tg_idx> | 按索引获取子标签组句柄 |
标签命令
| 返回类型 | 命令 | 语法 | 说明 |
|---|---|---|---|
| Boolean | TdrTagCreateScalar | TdrTagCreateScalar <parent_tg> <name> <type> <value> | 创建标量标签(最常用) |
| Boolean | TdrTagDelete | TdrTagDelete <tag_group> <tag_idx> | 按索引删除标签 |
| Boolean | TdrTagDeleteByName | TdrTagDeleteByName <tag_group> <tag_name> | 按名称删除标签 |
| String | TdrTagGetComponent | TdrTagGetComponent <tg> <tag_idx> [<row>] [<col>] | 读取标签指定分量 |
| String | TdrTagGetName | TdrTagGetName <tag_group> <tag_idx> | 返回标签名称 |
| Integer | TdrTagGetNumCol | TdrTagGetNumCol <tag_group> <tag_idx> | 返回标签的列数 |
| Integer | TdrTagGetNumRow | TdrTagGetNumRow <tag_group> <tag_idx> | 返回标签的行数 |
| String | TdrTagGetStructure | TdrTagGetStructure <tag_group> <tag_idx> | 返回标签结构类型("scalar" 或 "matrix") |
| String | TdrTagGetType | TdrTagGetType <tag_group> <tag_idx> | 返回标签值类型(见下表) |
| String | TdrTagGetValue | TdrTagGetValue <tag_group> <tag_idx> | 返回标签值(标量结构) |
| Boolean | TdrTagSetComponent | TdrTagSetComponent <tg> <tag_idx> [<row>] [<col>] <value> | 设置标签分量值 |
TdrTagCreateScalar 的 type 参数
| type 值 | 说明 | 示例 value |
|---|---|---|
"bool" | 布尔值 | "1" 或 "0" |
"int" | 32 位整数 | "42" |
"int64" | 64 位整数 | "1000000" |
"float" | 单精度浮点 | "3.14" |
"double" | 双精度浮点 | "2.718281828" |
"string" | 字符串 | "my_label" |
创建标签示例:
tcl
set f device.tdr
TdrFileOpen $f
# 获取文件根标签组
set root_tg [TdrFileGetTagGroup $f]
# 创建子标签组
set meta_tg [TdrTagGroupCreate $root_tg "SimulationMeta"]
# 在子标签组中创建标签
TdrTagCreateScalar $meta_tg "SimVersion" "string" "W-2024.09"
TdrTagCreateScalar $meta_tg "Temperature" "double" "300.0"
TdrTagCreateScalar $meta_tg "Converged" "bool" "1"
TdrFileSave $f device_tagged.tdr
TdrFileClose $f快速参考:参数顺序规律
TDX Tcl 命令的参数遵循固定的层次顺序:
<filename> → <geometry_index> → <region_index> → <state_index> → <dataset_index> → <value_index>根据函数访问的层级,取前 N 个参数,后续参数按需追加(名称、值等)。
示例:
tcl
# 访问文件层级(1 个参数)
TdrFileGetNumGeometry file.tdr
# 访问几何层级(2 个参数)
TdrGeometryGetName file.tdr 0
# 访问区域层级(3 个参数)
TdrRegionGetMaterial file.tdr 0 2
# 访问数据集层级(5 个参数)
TdrDatasetGetName file.tdr 0 2 0 1
# 访问数据值层级(6 个参数)
TdrDataGetComponent file.tdr 0 2 0 1 5