在 Cadence 设计环境中,正确配置启动文件是建立稳定工作流的基础。本文将深入解析 Virtuoso、Library Manager 和 Simulation Environment (ADE) 的各类配置文件及其复杂的搜索逻辑。

本文内容参考并整合了 Cadence 官方知识库 Article 20122968 及其相关技术文档。


一、 基石:CSF (Configuration Search Framework)

CSF 是 Cadence 用于集中管理配置文件搜索的底层机制。它通过 setup.loc 文件定义了一套层级式的目录搜索策略。

1. setup.loc 搜索顺序

系统会按照以下顺序查找第一个遇到的 setup.loc 文件:

  1. . (当前工作目录 CWD)
  2. @LIBRARY (仅用于库相关文件)
  3. $CDS_WORKAREA (如果定义了)
  4. $CDS_SEARCHDIR (如果定义了)
  5. $HOME
  6. $CDS_PROJECT (如果定义了)
  7. $CDS_SITE (如果未定义,缺省值指向 install_dir/share/local)
  8. install_dir/share

2. 目录内的三层结构

在上述每个位置中,CSF 会按以下固定顺序深入子目录:

  1. location/.cadence/
  2. 确切位置
  3. location/cdssetup/

[!TIP] 这种设计允许用户通过 .cadence 隐藏文件夹管理私有设置,或通过 cdssetup 分类管理站点配置,避免 $HOME 根目录过于混乱。

3. csfLookupConfig:扩展 CSF 管理范围

默认情况下,仅 cds.libcdsinfo.tag 由 CSF 管理。要让 .cdsinit.cdsenv 也遵循 CSF 搜索顺序,需在 setup.loc 覆盖的路径中放置 csfLookupConfig 文件。

  • 支持关键字: INCLUDE, EXCLUDE, LOAD, SOFTLOAD, ALL, NONE
  • 示例: INCLUDE .cdsinit

二、 Virtuoso 启动文件群

1. .cdsinit (SKILL 环境初始化)

.cdsinit 是启动 Virtuoso 时的核心 SKILL 脚本。

默认搜索顺序 (非 CSF 模式):

image-20260105145617982

  1. install_dir/tools/dfII/local/.cdsinit (站点级,通常用于加载全局设置)
  2. ./.cdsinit (当前工作目录)
  3. ~/.cdsinit (主目录)

CSF 模式: 如果启用了 csfLookupConfig,则严格遵循 setup.loc 的定义顺序。

自定义加载方法:

方法 说明
virtuoso -init /path/.cdsinit 启动时通过命令行参数指定
CDS_LOAD_ENV=CWD 强制优先从当前目录加载
修改 csfLookupConfig .cdsinit 遵循 CSF 机制

调试技巧: 列出当前 session 加载的所有 SKILL 文件

[!IMPORTANT] 以下函数需要先在 .cdsinit 开头启用 SKILL Debugger:installDebugger()

; 列出所有已加载的 SKILL 文件及其定义的函数
let((files functions)
    files = getAllLoadedFiles()  ; 获取调试器启动后加载的所有文件
    foreach(file files
        functions = getFunctions(file)  ; 获取该文件中定义的函数
        printf("文件: %s\n" file)
        printf("包含函数: %L\n\n" functions)
    )
)

; 查找特定函数的定义位置
whereIs(functionName)  ; 示例: whereIs(CCSMptColorOnOpen)

2. .cdsenv (环境变量配置)

.cdsenv 用于设置工具的默认值。系统会合并多个 .cdsenv 文件,后加载的覆盖先加载的。

默认加载顺序:

image-20260105145644007

  1. <install_dir>/tools/dfII/etc/tools/<tool>/.cdsenv (安装目录默认值)
  2. setup.loc 定义的站点/项目路径
  3. ~/.cdsenv (主目录)
  4. ./.cdsenv (当前工作目录)

$CDS_LOAD_ENV 环境变量控制:

取值 加载行为
False 仅加载安装目录和站点目录的默认值
CWD / local 强制优先从当前目录加载 .cdsinit.cdsenv
addCWD 先加载 ~/.cdsenv,再加载 ./.cdsenv
CWDElseHome 优先加载 ./.cdsenv;若不存在则加载 ~/.cdsenv
CSF 遵循 setup.loc 的 CSF 搜索逻辑

常用 SKILL 函数:

; 为特定工具加载 .cdsenv 文件
envLoadVals(?envFile "my.cdsenv" ?tool "layout")
envLoadVals(?envFile "my.cdsenv" ?tool "ALL")  ; 对所有工具生效

; 检查环境变量当前值
envGetVal("layout" "stopLevel")

; 保存当前环境设置
; CIW > Options > Save Defaults

3. display.drf (显示资源文件)

display.drf 采用了合并 (Merge) 逻辑,后加载的定义会覆盖前者:

image-20260105145734131

  1. install_dir/share/cdssetup/dfII/default.drf (出厂设置)
  2. .cdsenvgraphic drfPath string "path/display.drf" 指定的路径
  3. $CDS_SITE/display.drf
  4. $CDS_PROJECT/display.drf
  5. ~/display.drf
  6. ./display.drf

手动加载:

drLoadDrf("/path/to/display.drf")

4. .cdsplotinit (绘图仪配置)

控制打印和绘图设置。

默认搜索顺序:

  1. <install_dir>/tools/plot/.cdsplotinit
  2. ./.cdsplotinit (当前工作目录)
  3. ~/.cdsplotinit (主目录)

自定义方法:

  • 设置环境变量 CDS_PLOTTER_INIT 指向自定义文件的绝对路径
  • 在 CIW 中调用 psLoadCdsPlotInit() 重新加载绘图仪设置

5. Workspaces (工作区配置)

img

当您创建自定义 workspace 时(无论是个人使用还是站点级别),Cadence 内置的搜索机制决定了哪个配置会在特定情况下被使用。CAD 管理员、项目经理和终端用户都可以根据特定任务或应用程序定义他们认为合适的配置。

搜索顺序遵循 setup.loc 文件定义。 如果使用默认的 $CDSHOME/share/cdssetup/setup.loc,搜索顺序如下:

1. 本地 workspace(如果定义):

1
2
./.cadence/dfII/workspaces/<appNameDir>/workspaceName.workspace
~/.cadence/dfII/workspaces/<appNameDir>/workspaceName.workspace

2. 站点级 workspace:

1
$CDS_SITE/.cadence/dfII/workspaces/<appNameDir>/workspaceName.workspace

3. Cadence 默认 workspace:

1
$(compute:THIS_TOOL_INST_ROOT)/share/cdssetup/dfII/workspaces/<appNameDir>

您可以通过编辑 setup.loc 文件来更改搜索顺序。

调试命令: 使用 cdswhich 可查找 workspace 定义的实际来源目录:

1
cdswhich .cadence/dfII/workspaces/<appNameDir>/workspaceName.workspace

appNameDir 可以是以下任意一个:

应用目录名 对应工具
Layout Layout Editor L
Schematics Schematic Editor L
Schematics_XL Schematic Editor XL
Symbol Symbol Editor L
Symbol_XL Symbol Editor XL
VLS-GXL Virtuoso Layout Suite GXL
VLS-GXL_Schematics VLS-GXL Schematics
Virtuoso_CE Virtuoso Connectivity Editor
Virtuoso_XL Virtuoso XL Layout Editor
Virtuoso_XL_Schematics Virtuoso XL Schematics
adegxl-schematic ADE GXL Schematic
adexl-schematic ADE XL Schematic

默认 workspace 指定: 默认 workspace 的名称取自同一目录下的 workspace.default 文件,搜索机制同样遵循 CSF:

1
cdswhich .cadence/dfII/workspaces/<appNameDir>/workspace.default

如何设置默认 Workspace:

  1. 从 Layout/Schematic 或 ADE-L 窗口点击 Window → Workspaces → Set Default
  2. 在 “Set Default” 表单中,从所需路径选择您的自定义 workspace(例如之前保存的 “Basic_Custom”),点击 OK
  3. 下次打开 schematic/layout 窗口时,将自动加载您设置的 workspace

[!NOTE] 您需要针对不同的工具层级(VLS-L/VLS-XL/VLS-GXL/VSE-L/VSE-XL)分别执行 Window → Workspaces → Set Default 操作,以便在相应层级中将自定义 workspace 设置为默认。之后,当您在 L/XL/GXL 模式下打开 Layout/Schematic 时,将使用您设置的默认 workspace 来定位各个助手面板。

设置站点级默认 Workspace:

执行 Window → Workspaces → Set Default 时,会在用户指定的路径(如 ./.cadence/home/user/.cadence 目录)下创建 workspace.default 文件。

如果要为整个站点添加默认 workspace:

  1. 首先在 setup.loc 文件中添加 $CDS_SITE 路径
  2. $CDS_SITE 变量定义为某个路径,然后启动 Virtuoso
  3. 将您的自定义 workspace(如 “Basic_Custom”)保存到 $CDS_SITE 位置并设置为默认
  4. 之后当 Virtuoso 启动时,如果在 CWD 或 HOME 中没有找到 workspace.default 文件,它将在 $CDS_SITE 路径中查找此文件,并将指定的 workspace 应用于站点的所有用户

[!TIP] 相关文档:How to set default workspace for Layout-L, Layout-XL, Layout-GXL, Schematics-L, Schematics-XL, ADE-L etc. 以及 Virtuoso: User defined default workspace does not show up in the editor window

6. Toolbars (工具栏配置)

工具栏配置同样遵循 CSF 搜索机制。

存储位置: .cadence/dfII/toolbars/byApplication/<appName>.toolbars


三、 Library Manager 专属配置

1. cdsLibMgr.il

用于自定义库管理器的菜单和界面。系统只加载 setup.loc 搜索路径中找到的第一个文件。

加载多个文件的技巧: 站点级的 cdsLibMgr.il 需要显式 load() 其他位置的文件:

; 在站点级 cdsLibMgr.il 中
let((homeFile cwdFile)
  homeFile = strcat(getShellEnvVar("HOME") "/.cadence/cdsLibMgr.il")
  when(isFile(homeFile) load(homeFile))
  
  cwdFile = "./cdsLibMgr.il"
  when(isFile(cwdFile) load(cwdFile))
)

更改默认文件名:.cdsenv 中设置:

1
cdsLibManager.customize startupFile string "my_custom_lib_mgr.il"

隐藏库:cds.lib 中使用:

1
ASSIGN <libname> DISPLAY invisible

自定义库图标和颜色 (IC23.1+):

lmgrSetLibDisplayOverride("myLib" ?color "#FF5733" ?icon "custom_icon.png")

2. displayPrefs

控制库管理器的列显示和首选项。遵循 CSF 逻辑,采用逆向合并:高优先级的设置会覆盖低优先级的默认值。

3. libInit.il (库级别初始化)

位于特定库目录下的脚本。当该库在 session 中被首次访问时自动加载。

[!WARNING] 点击 CIW 的 File 菜单会触发所有已定义库的 libInit.il 加载,这可能导致启动延迟。PDK 通常利用此机制加载技术特定的设置和 SKILL 程序。


四、 ADE / Simulation Environment (SE)

1. si.env (集成环境状态)

位于模拟运行目录中。记录仿真器选择、网表选项等。每次点击 “Run Simulation” 或 “Check and Save” 时被覆盖。

2. .simrc (仿真运行控制)

用于覆盖 si.env 或定义全局仿真行为。

搜索顺序 (首胜机制):

  1. $SIMRC/.simrc (若定义了环境变量)
  2. $ossSimUserSiDir/.simrc (若定义了环境变量)
  3. dfII/local/.simrc
  4. ./.simrc (当前目录)
  5. ~/.simrc (主目录)

五、 窗口尺寸与位置配置

可以通过 .cdsenv 设置 Schematic 和 Layout 窗口的默认尺寸和位置:

1
2
3
4
5
; Schematic 窗口
schematic windowBBox string "((0 0) (800 600))"

; Layout 窗口  
layout windowBBox string "((100 100) (1200 900))"

六、 调试与排查工具

在大规模 IC 环境中,定位”到底是哪个文件生效了”至关重要。

命令行工具

命令 用途
cdswhich <file> 显示配置文件的最终来源
cdswhich -debug <file> 详细展示 CSF 的搜索足迹
cdswhich -lookupconfig <file> 查看文件是否受 CSF 管理
cdsinfo -lookup <property> 查询库属性(如编译路径)

CIW 中的 SKILL 函数

; 检查系统环境变量
getShellEnvVar("CDS_SITE")

; 检查 .cdsenv 变量值
envGetVal("layout" "stopLevel")

; 列出已加载的 SKILL 文件
getAllLoadedFiles()

附录:核心环境变量速查

变量 用途
$CDS_SITE 定义站点配置根目录
$CDS_LOAD_ENV 决定 .cdsinit.cdsenv 的加载策略
$SIMRC 指定 .simrc 的最高优先级路径
$CDS_PLOTTER_INIT 指定 .cdsplotinit 文件路径
$SKIP_PALETTE_LOAD 设为 t 可加速启动并忽略某些调色板文件

参考资料