在使用 Cadence Virtuoso 的日常工作中,我们经常需要修改 .cdsenv 文件来调整工具的环境变量。但修改文件之后,如何在不重启 Virtuoso 的前提下让新的设置立即生效?本文整理了几种在 CIW(Command Interpreter Window)里重新加载 .cdsenv 的方法。
方法一:SKILL 函数 envLoadFile(最推荐)
直接在 CIW 里输入以下命令:
envLoadFile("~/.cdsenv")
或者指定完整路径:
envLoadFile("/home/username/.cdsenv")
函数说明(来自 Cadence User Interface SKILL Reference IC25.1):
- 从指定文件中加载一批环境变量,等效于对所有工具调用
envLoadVals(?tool "ALL") - 加载后,所有变量均被标记为”已修改”(modified)
- 即使文件中某行有语法错误,也会跳过该行并继续加载其余内容
- 返回
t表示成功,nil表示失败
这是在 CIW 里手动 reload .cdsenv 最直接的方式,适合在调试时快速迭代。
方法二:CIW 菜单 File → Refresh
在 CIW 窗口顶部菜单栏执行:
1
File → Refresh
此操作会刷新 Virtuoso 会话,并重新读取环境配置。
注意:Refresh 操作会重置部分运行时状态。如果你通过 SKILL 动态加载了 CDF 参数,刷新后这些参数可能会丢失。若有此需求,可以用
ddsRegPostRefreshTrigger注册一个回调函数,在每次 Refresh 之后自动重载:procedure(myPostRefreshCb(@rest args) load("/path/to/my_cdf.cdf") ) ddsRegPostRefreshTrigger('myPostRefreshCb)
方法三:Cdsenv Editor GUI
在 CIW 里通过菜单打开图形化编辑器:
1
Options → Cdsenv Editor
或在 CIW 里运行:
startCdsenvEditor()
Cdsenv Editor 支持跨多个 .cdsenv 文件搜索和编辑环境变量。打开后,在编辑器里选择 File → Reload 即可重新加载文件内的所有变量,修改后选 File → Save 可将改动写回指定文件。
单独读取 / 修改某个变量
如果只需要查看或临时修改某个变量而不重载整个文件,可以用以下 SKILL 函数:
; 读取当前值
envGetVal("layout" "xSnapSpacing")
; 临时修改某个变量(仅在本次会话中有效,不会写回 .cdsenv)
envSetVal("layout" "xSnapSpacing" 'float 0.1)
环境变量的优先级
如果执行了 envLoadFile 后某个设置看起来仍然没有生效,需要注意 Virtuoso 中环境变量有严格的优先级顺序(由高到低):
| 优先级 | 来源 |
|---|---|
| 1(最高) | Cellview 属性(File → Properties → Property 单选框) |
| 2 | 会话中通过 envSetVal 手动设置的值 |
| 3 | .cdsinit 中的设置 |
| 4 | .cdsenv 文件中的设置(通过 envLoadFile 加载) |
因此,即使 .cdsenv 里定义了某个变量,如果 Cellview 属性里也保存了同名属性,后者会覆盖前者,导致 .cdsenv 的设置看起来”不生效”。
小结
| 场景 | 推荐方式 |
|---|---|
| 快速 reload,不想重启 Virtuoso | envLoadFile("~/.cdsenv") |
| 同时修改并保存变量 | Options → Cdsenv Editor |
| 刷新整个会话 | CIW → File → Refresh |
| 临时修改单个变量 | envSetVal(...) |
最常用的还是直接在 CIW 里敲 envLoadFile("~/.cdsenv"),一行命令,立刻生效。