Skip to content

SWB 第 12 章:项目组织

来源:swb_ug.pdf 第 12 章(W-2024.09)
说明:本章围绕传统项目组织与层级项目组织的差异、分离存储策略、迁移注意事项,以及为层级组织新增的预处理引用。

本章目录

本章介绍如何把 SWB 项目从传统的“所有文件都堆在项目根目录”模式,转向更适合大型 DoE 项目的层级项目组织。对实际工程来说,这一章的核心价值有四个:

  • 大项目性能显著改善
  • 可以把核心文件和可复现结果文件分盘存放
  • 可以在不丢失结果的情况下重编号节点
  • 输入文件可以写成同时兼容传统组织与层级组织的形式

传统项目组织的限制

传统项目组织里,项目目录会同时包含两大类内容:

  • 核心数据(core data) 例如工具输入、仿真流程、DoE 表、变量、偏好、queue 设置和 project run limits。
  • 可复现结果数据(reproducible data) 例如预处理结果、仿真结果、日志文件和错误文件。

配图如下:

图 75:SWB 中的传统项目组织

图 75:传统项目组织下,core data 与 reproducible data 都集中在项目根目录。

这种模式简单直观,但在大型 DoE 项目上会逐渐暴露出明显问题。手册列出的典型慢操作包括:

  • 删除实验、参数化步骤和工具实例
  • 复制 / 粘贴选中的实验
  • 将选中实验另存为新项目
  • 清理选中节点或整个项目

根本原因是:SWB 需要根据工具数据库中定义的输出文件模式,在一个可能已经包含成千上万个文件的项目目录里反复做查询。目录越大,这种模式越慢。

除此之外,传统项目组织还有两个结构性限制:

  • 不能把项目文件拆分到不同磁盘存储
  • 不能在保留仿真结果的前提下重编号节点

层级项目组织

层级项目组织是传统模式的替代方案。SWB 允许你:

  • 直接新建层级项目
  • 把已有传统项目转换成层级项目
  • 在同一个 SWB 环境里同时处理传统和层级两类项目

层级组织的核心思想是把 core data 和 reproducible data 分开:

  • core data 仍然放在根项目目录下
  • reproducible data 按节点组织成层级结构

项目文件位置

对层级组织的示意如下:

图 76:SWB 中的层级项目组织

图 76:层级项目组织把日志和节点文件放入 results/ 层级。

在层级组织下:

  • 项目日志保存在 results/logs
  • 节点文件保存在 results/nodes/<node#>
  • 节点文件名本身不变,只是存储位置改变了
  • 虚拟节点没有自己的文件夹

对比传统和层级组织后,文件布局差异会更直观:

图 77:传统组织与层级组织的文件存储对比

图 77:传统组织把所有 node files 与 log files 混在项目根目录;层级组织则把它们拆进 results/logsresults/nodes/<node#>

层级项目组织的优势

手册把层级组织的优势总结为三点。

更好的性能

在大 DoE 项目上,层级组织能显著加速删除、清理和“保存选中实验为新项目”等操作。给了一个数量级示例:

  • 1300 个实验
  • 3000 个 nodes
  • 80000 个文件

在这种规模上,层级组织中的删除和清理通常只需数秒;传统组织则可能需要二十多分钟。

支持项目文件分离存储

启用层级组织后,核心文件和可复现结果文件可以放在不同磁盘。这个能力对大 TDR 文件非常有用,例如把核心项目文件放到备份盘,把大量结果文件放到 scratch 盘。

支持不清理结果的节点重编号

在传统组织里,节点重编号通常要伴随 cleanup 才能做。层级组织则允许在保留已有仿真结果的前提下完成节点重编号。

分离存储项目文件

由于 TDR 文件通常很大,很多项目都会希望把项目核心数据和输出结果分开放。

在层级组织启用后,默认情况下两类文件仍然是“同目录但分层级”的,也就是 results/ 依然在项目根目录下。
如果想真正拆盘,需要修改偏好设置中的:

text
Project > Organization > Settings for Hierarchical Project Organization > Project Output Files Location

设置步骤是:

  1. Edit > Preferences 或按 F12
  2. 展开 Project > Organization > Settings for Hierarchical Project Organization
  3. 修改 Project Output Files Location
  4. 点击 Apply

默认值是 @STDB@,表示 core data 与 reproducible data 仍然一起存放。

手册用下面这张图说明了“核心文件层级(core files hierarchy)”和“输出文件层级(output files hierarchy)”的对称结构:

图 78:核心文件与输出文件的分离层级

图 78:STDB 指向核心文件层级,而 Project Output Files Location 指向输出文件层级。

强调几个重要规则:

  • SWB 在 Projects 面板中只显示 STDB 指向的核心文件层级。
  • 输出文件层级只用于存放生成文件,不会单独显示在 Projects 面板中。
  • 对于位于 STDB 内部的项目,输出目录会沿用项目相对路径。
  • 所有当前 STDB 下的层级项目都会共享同一套 output storage 规则。

输出路径规则与冲突

如果项目本身不在 STDB 目录下,SWB 会把项目核心目录的绝对路径拼接到输出文件层级根目录下,以避免路径冲突。示例如下:

图 79:输出文件位置规则示例

图 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@当前节点号88
@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@项目组织类型traditionalhierarchical
@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 就能在预处理和执行阶段自动解析成正确的相对路径或绝对路径,而你不必在输入文件里手工区分项目组织类型。

迁移检查清单

把传统项目迁到层级组织前,建议先做下面几项检查:

  1. 搜索工具输入文件里是否写死了项目根目录或同目录节点文件路径。
  2. 确认后处理脚本是否默认在项目根目录查找 .plt.tdr、日志或中间文件。
  3. 如果项目启用了分离存储,提前确认 Project Output Files Location 指向的磁盘空间、权限和备份策略。
  4. 迁移后先用一个小场景跑通,再放大到完整 DoE,避免路径问题在大批量运行时才暴露。

Sentaurus™ Workbench User Guide W-2024.09 第 12 章

基于 Sentaurus TCAD 官方文档构建

代码块