2. Sentaurus Workbench项目工程化
Sentaurus Workbench(SWB)不只是一个图形化的仿真启动器,它本质上是一个实验管理系统。当项目从“一个人跑一个器件”扩展到“多人维护几十组参数、上百个 split 时”,工程化程度直接决定结果是否可复现、可追溯。本节围绕四个相互咬合的层面展开:目录结构、实验管理、参数化扫描、版本控制与协作规范。
一、项目目录结构:让路径本身携带语义
SWB 项目以 .swb 文件为入口,但真正承载工程信息的是它周围的目录树。一个可维护的项目建议采用如下布局(示例名 nmos_vdsweep):
nmos_vdsweep/
├── nmos_vdsweep.swb # 项目主文件,记录节点、参数、工具流
├── gtree.dat # 实验树/参数组合定义
├── nodes/ # 每个 split 的独立工作目录
│ ├── n1_1/ n1_2/ n2_1/ ...
├── lib/ # 共享的 SDE/SDEVICE 命令文件与材料库
│ ├── sde_dvs.cmd
│ ├── sdevice_des.cmd
│ └── models.par
├── tools/ # 工具配置、版本锁定文件
├── results/ # 导出的 IV/CV 曲线、图片、报告
└── docs/ # 实验说明、变更记录、评审结论
关键原则有三条。第一,命令文件放 lib/,节点目录只保留差异。SWB 的 @parameter@ 机制会在运行时把变量替换进命令文件,因此同一份 sdevice_des.cmd 可服务所有 split,避免复制粘贴导致的版本漂移。第二,nodes/ 下目录名与实验树节点一一对应,便于用脚本批量提取结果。第三,results/ 与 docs/ 分离,前者是机器产物,后者是人写的判断依据,二者混放会让“哪条曲线对应哪次评审”变得不可查。
二、实验管理:用 gtree 组织变量与 split
SWB 的实验管理核心是 gtree(实验树)。每个变量在 gtree 中定义取值列表,SWB 自动做笛卡尔积生成节点。例如定义:
Vg = 0.0 0.5 1.0 1.5
Vd = 0.05 1.0
Lg = 0.045 0.065
则生成 4×2×2 = 16 个节点。这里必须区分两类变量:扫描变量(进入 gtree,产生 split)与固定参数(写在命令文件或 models.par 中,不产生 split)。把不该扫描的量放进 gtree,会让节点数指数膨胀;把该扫描的量写死,则实验失去意义。工程上建议在 docs/ 中维护一张“变量登记表”,记录变量名、物理含义、单位、取值范围、是否扫描、默认值,作为团队共识。
vg0p5_vd1p0_lg45,这样即使 gtree 顺序调整,结果目录仍可被脚本按名解析,而不是依赖节点编号。三、参数化扫描:从变量到可判读的结果
参数化扫描的价值不在于“跑得多”,而在于扫描维度与判读指标一一对应。以 NMOS 输出特性为例,扫描 Vg 与 Vd,目标指标是饱和电流 Id_sat、阈值电压 Vth、跨导 gm。SWB 在每个节点运行 SDEVICE 后,可通过 svisual 或 inspect 提取这些量,并写入 results/ 下的汇总文件。
实际操作中,参数替换依赖命令文件中的占位符,例如在 sdevice_des.cmd 中写:
Electrode {
{ Name="gate" Voltage=@Vg@ }
{ Name="drain" Voltage=@Vd@ }
}
SWB 在节点运行时将 @Vg@、@Vd@ 替换为 gtree 中的具体值。扫描完成后,用脚本把各节点 Id 提取出来,按 (Vg, Vd) 组织成二维表,即可判断:Vd 增大时 Id_sat 是否如预期上升、Vth 随 Lg 缩短是否发生 roll-off。若某节点因收敛失败无结果,应在汇总表中显式标记为“未收敛”,而不是静默跳过——静默跳过会让后续拟合误用缺失数据。
四、版本控制与团队协作规范
SWB 项目纳入 Git 时,最大的坑是把节点目录和二进制结果一起提交。正确做法是:.swb、gtree.dat、lib/、tools/、docs/ 纳入版本控制;nodes/ 下的运行产物、results/ 中的大文件通过 .gitignore 排除,只提交汇总后的 CSV 或关键曲线图。这样仓库保持轻量,且每次提交对应的是“实验定义”而非“实验垃圾”。
协作规范建议明确以下几条:
- 分支策略:
main只保留已验证的实验定义;每个新实验从main拉出exp/xxx分支,评审通过后合并。 - 提交信息:必须写明“改了什么变量、为什么改、预期影响”,例如
gtree: Lg 增加 0.032nm 点,用于评估 roll-off 拐点。 - 工具版本锁定:在
tools/中记录 Sentaurus 版本号与补丁级别,避免不同成员用不同版本跑出不可比结果。 - 结果评审:每次合并前,在
docs/中附上关键曲线与结论,评审人确认“数据支持结论”后才合并。
.swb 或 gtree.dat 并直接覆盖。SWB 的图形界面不会自动合并冲突,一旦覆盖,实验树可能丢失节点定义。规范做法是修改前先 git pull,修改后立即提交,冲突时以文本方式手工合并 gtree 行。