在使用 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"),一行命令,立刻生效。