Appearance
SWB 第 12 章:项目组织
来源:
swb_ug.pdf第 12 章(W-2024.09)
说明:本章围绕传统项目组织与层级项目组织的差异、分离存储策略、迁移注意事项,以及为层级组织新增的预处理引用。
本章介绍如何把 SWB 项目从传统的“所有文件都堆在项目根目录”模式,转向更适合大型 DoE 项目的层级项目组织。对实际工程来说,这一章的核心价值有四个:
- 大项目性能显著改善
- 可以把核心文件和可复现结果文件分盘存放
- 可以在不丢失结果的情况下重编号节点
- 输入文件可以写成同时兼容传统组织与层级组织的形式
传统项目组织的限制
传统项目组织里,项目目录会同时包含两大类内容:
- 核心数据(core data) 例如工具输入、仿真流程、DoE 表、变量、偏好、queue 设置和 project run limits。
- 可复现结果数据(reproducible data) 例如预处理结果、仿真结果、日志文件和错误文件。
配图如下:

图 75:传统项目组织下,core data 与 reproducible data 都集中在项目根目录。
这种模式简单直观,但在大型 DoE 项目上会逐渐暴露出明显问题。手册列出的典型慢操作包括:
- 删除实验、参数化步骤和工具实例
- 复制 / 粘贴选中的实验
- 将选中实验另存为新项目
- 清理选中节点或整个项目
根本原因是:SWB 需要根据工具数据库中定义的输出文件模式,在一个可能已经包含成千上万个文件的项目目录里反复做查询。目录越大,这种模式越慢。
除此之外,传统项目组织还有两个结构性限制:
- 不能把项目文件拆分到不同磁盘存储
- 不能在保留仿真结果的前提下重编号节点
层级项目组织
层级项目组织是传统模式的替代方案。SWB 允许你:
- 直接新建层级项目
- 把已有传统项目转换成层级项目
- 在同一个 SWB 环境里同时处理传统和层级两类项目
层级组织的核心思想是把 core data 和 reproducible data 分开:
- core data 仍然放在根项目目录下
- reproducible data 按节点组织成层级结构
项目文件位置
对层级组织的示意如下:

图 76:层级项目组织把日志和节点文件放入 results/ 层级。
在层级组织下:
- 项目日志保存在
results/logs - 节点文件保存在
results/nodes/<node#> - 节点文件名本身不变,只是存储位置改变了
- 虚拟节点没有自己的文件夹
对比传统和层级组织后,文件布局差异会更直观:

图 77:传统组织把所有 node files 与 log files 混在项目根目录;层级组织则把它们拆进 results/logs 和 results/nodes/<node#>。
层级项目组织的优势
手册把层级组织的优势总结为三点。
更好的性能
在大 DoE 项目上,层级组织能显著加速删除、清理和“保存选中实验为新项目”等操作。给了一个数量级示例:
- 约
1300个实验 - 约
3000个 nodes - 约
80000个文件
在这种规模上,层级组织中的删除和清理通常只需数秒;传统组织则可能需要二十多分钟。
支持项目文件分离存储
启用层级组织后,核心文件和可复现结果文件可以放在不同磁盘。这个能力对大 TDR 文件非常有用,例如把核心项目文件放到备份盘,把大量结果文件放到 scratch 盘。
支持不清理结果的节点重编号
在传统组织里,节点重编号通常要伴随 cleanup 才能做。层级组织则允许在保留已有仿真结果的前提下完成节点重编号。
分离存储项目文件
由于 TDR 文件通常很大,很多项目都会希望把项目核心数据和输出结果分开放。
在层级组织启用后,默认情况下两类文件仍然是“同目录但分层级”的,也就是 results/ 依然在项目根目录下。
如果想真正拆盘,需要修改偏好设置中的:
text
Project > Organization > Settings for Hierarchical Project Organization > Project Output Files Location设置步骤是:
Edit > Preferences或按F12- 展开
Project > Organization > Settings for Hierarchical Project Organization - 修改
Project Output Files Location - 点击
Apply
默认值是 @STDB@,表示 core data 与 reproducible data 仍然一起存放。
手册用下面这张图说明了“核心文件层级(core files hierarchy)”和“输出文件层级(output files hierarchy)”的对称结构:

图 78:STDB 指向核心文件层级,而 Project Output Files Location 指向输出文件层级。
强调几个重要规则:
- SWB 在 Projects 面板中只显示
STDB指向的核心文件层级。 - 输出文件层级只用于存放生成文件,不会单独显示在 Projects 面板中。
- 对于位于
STDB内部的项目,输出目录会沿用项目相对路径。 - 所有当前
STDB下的层级项目都会共享同一套 output storage 规则。
输出路径规则与冲突
如果项目本身不在 STDB 目录下,SWB 会把项目核心目录的绝对路径拼接到输出文件层级根目录下,以避免路径冲突。示例如下:

图 79:项目位于 STDB 内外时,输出文件的相对映射规则不同。
Project Output Files Location 还可以包含环境变量,例如:
text
/sim/tmp/@USER@/tcad/
/sim/tmp/@USER@/tcad/@STRELEASE@
/sim/tmp/@USER@/tcad/@STDB@这样可以把输出目录做成用户级、版本级甚至 STDB 级隔离。
结果路径不匹配
如果你在“同存储 / 分离存储”之间切换,或者修改了 Project Output Files Location,项目当前实际结果目录和首选输出目录之间可能会出现不匹配。SWB 检测到这类冲突后,会给出错误提示:

结果路径与首选输出路径不一致时的错误提示。
出现冲突后,SWB 不会继续运行该项目。你必须手工解决:
- 删除或重新链接项目目录中的
results文件夹 - 或者修改 Preferences 中的
Project Output Files Location
手册还特别提醒:项目本身并不记录“输出文件究竟存在哪里”。如果你在 SWB 外部用终端去复制、移动、删除或导出项目,必须自己同步处理输出文件层级中的结果文件。
迁移到层级项目组织
从传统项目迁移到层级项目时,给了几条非常实用的原则:
- 记住:节点文件现在放在独立的节点目录(node folders)中
- 记住:每个仿真是在自己的节点目录中执行,而不再是根项目目录
- 不要再假定“所有项目文件都在根目录”
- 如果旧项目依赖这种假定,就要调整 tool input files
例 1:Sentaurus Visual 输入文件假设所有 node files 都在同一目录
传统组织下常见写法:
tcl
load_file IdVg_n@node|sdevice@_des.plt -name PLT($N)层级组织下需要显式回到其他节点目录:
tcl
load_file ../@node|sdevice@/IdVg_n@node|sdevice@_des.plt -name PLT($N)给出的兼容写法是:
tcl
load_file @[relpath IdVg_n@node|sdevice@_des.plt]@ -name PLT($N)例 2:Sentaurus Process 输入文件假设当前目录就是根项目目录
传统组织下:
text
icwb filename= "SRAM_lyt.mac" scale=1e-3层级组织下应改为:
text
icwb filename= "@pwd@/SRAM_lyt.mac" scale=1e-3这种写法可以在两种项目组织下都正常工作。
扩展预处理语法
启用层级组织后,SWB 会在专用节点目录(dedicated node folder)中执行仿真,因此很多 @...@ 引用的替换结果会不同。在 Table 23 中列出了一整张对应表,这里先保留最常用的一批:
| 语法 | 含义 | 传统组织 | 层级组织 |
|---|---|---|---|
@node@ | 当前节点号 | 8 | 8 |
@tdr@ | 工艺/结构生成类工具的 TDR 输出 | n8_fps.tdr | ../8/n8_fps.tdr |
@tdrdat@ | 器件仿真类工具的 TDR 输出 | n12_des.tdr | ../12/n12_des.tdr |
@plot@ | plot 文件 | n12_des.plt | ../12/n12_des.plt |
@prjorg@ | 项目组织类型 | traditional | hierarchical |
@pwd@ | 核心文件层级中的项目路径 | $STDB/path/to/prj | $STDB/path/to/prj |
@pwdout@ | 输出文件层级中的项目路径 | $STDB/path/to/prj | 同存储时等于 @pwd@;分离存储时变成输出根目录下的对应路径 |
@nodedir@ | 相对 @pwdout@ 的节点目录 | . | results/nodes/8 |
@logsdir@ | 项目日志目录 | 项目根目录 | results/logs |
为了让输入文件同时兼容传统组织和层级组织,推荐使用两个特殊引用:
text
@[relpath <Reference_to_node_file>]@
@[abspath <Reference_to_node_file>]@它们告诉 SWB:这个引用指向的不是当前节点自己的文件,而是别的节点上的文件。这样 SWB 就能在预处理和执行阶段自动解析成正确的相对路径或绝对路径,而你不必在输入文件里手工区分项目组织类型。
迁移检查清单
把传统项目迁到层级组织前,建议先做下面几项检查:
- 搜索工具输入文件里是否写死了项目根目录或同目录节点文件路径。
- 确认后处理脚本是否默认在项目根目录查找
.plt、.tdr、日志或中间文件。 - 如果项目启用了分离存储,提前确认
Project Output Files Location指向的磁盘空间、权限和备份策略。 - 迁移后先用一个小场景跑通,再放大到完整 DoE,避免路径问题在大批量运行时才暴露。
Sentaurus™ Workbench User Guide W-2024.09 第 12 章