Cadence CSF 机制详解

本文始于2025年5月,在配置cadence软件设计环境时,往往需要对不同的配置文件进行自动加载,而常见的自动加载配置文件的方法是从各个Users自己home路径或当前项目工作路径进行自动加载,这样由于每个Users对每个文件都有编辑的权限,所以会在管理方面造成一定的困扰。然本文介绍的Cadence CSF功能就可以帮你统一指定自动加载的路径和配置文件,并且可以很好的对配置文件的权限进行统一管理。太棒了,特别方便。👏👏👏


1. 什么是Cadence CSF 机制?

📝 CSF,全称:Cadence Setup Search File,是一种特殊的搜索机制,是通过读取setup.loc文件和csfLookupConfig文件来定义应用程序在启动时如何搜索和配置相关文件(如:.cdsinit/.cdsenv/.simrc/display.drf等等)

setup.loc 和 csfLookupConfig 是两个不同层次的配置文件,各自负责不同任务,它们互相配合完成CSF(Cadence Setup Search File)机制的灵活查找。

配置文件主要功能工作关系
setup.loc定义有哪些路径,都按什么顺序被搜索。控制路径和搜索路径顺序。
csfLookupConfig定义有哪些文件需要使用CSF机制来搜索。控制哪些具体文件需要套用setup.loc路径搜索。

🌟 大白话港:setup.loc 控制 “去哪找”,csfLookupConfig 决定 “找哪些文件要走CSF机制”。

2. Setup.loc文件

setup.loc 是一个文本文件,它列出了一系列路径,指定搜索顺序。文本中每一行就是一个搜索路径。

Cadence系统默认提供了一个标准的setup.loc文件,通常放在:

your_install_dir/share/cdssetup/setup.loc

🔔 注意:setup.loc文件本身也通过 CSF 机制搜索。

🔔 请copy系统默认的setup.loc文件到其他自己定义的路径进行修改,而不要在原文件上进行修改。

📁 setup.loc文件中默认的搜索目录

.                                     #当前启动目录,默认是第一个被查找的路径;
@LIBRARY                     #定义在cds.lib中的库路径,按照定义的顺序依次查找;
$CDS_WORKAREA        #个人项目目录,如果未定义,CSF会跳过这个位置;
$CDS_SEARCHDIR        #已废弃,不推荐使用;
$HOME                         #用户家目录
$CDS_PROJECT             #项目所在的目录,如果未定义,CSF会跳过这个位置;
$CDS_SITE                    #站点级的目录,一般用于安装默认时的配置或全公司或全项目的配置;
                                       如果未定义,默认路径是:your_install_dir/share/local
$(compute:THIS_TOOL_INST_ROOT)/share     #应用程序自己安装的share目录。

⚠️ 注意:这里要特别说明下,在实际的CSF搜索机制中,会对上述每个路径(@LIBRARY除外)额外在查找其2个子路径(location/.cadence 与 location/cdssetup),与本身的路径(location)构成3个查找路径,而且这3个路径同样有搜索顺序要求。

以【$CDS_PROJECT】为例,构成的3个查找路径和搜索顺序如下;

$CDS_PROJECT/.cadence
$CDS_PROJECT
$CDS_PROJECT/cdssetup

而对于@LIBRARY项,只会搜库定义的路径,且不会额外去.cadencecdssetup子目录。

📚 对每个路径进行详细解释:

搜索位置说明是否需要手动设置特别注意事项
.程序启动时所在的当前工作目录。默认第一个查找
@LIBRARY指通过 cds.lib 定义的各个库目录路径。依赖 cds.lib 配置搜索库所在目录路径,但不额外查找库中.cadence/cdssetup/路径。
$CDS_WORKAREA当前工作区路径,通常是项目开发目录。是,需要export或setenv设置环境变量路径如果没定义,则跳过。用于项目局部设置。
$CDS_SEARCHDIR已废弃不建议使用Cadence官方已标明废弃。
$HOME当前用户的home目录,比如 /home/username/默认存在,每个用户独立。
$CDS_PROJECT项目共享目录,比如整个项目工程目录。是,需要export或setenv设置环境变量路径如果没定义,则跳过。用于项目级通用配置。
$CDS_SITE站点级共享配置目录。可设置可不设置如果没设置,默认使用 your_install_dir/share/local
$(compute:THIS_TOOL_INST_ROOT)/share自动查找应用程序安装目录的 share 子目录。无需设置,自动查找保证无论安装在哪,都能找到正确的默认配置。

$CDS_PROJECT为例,设置此环境变量的路径,如下;

setenv  CDS_PROJECT  /xxx/xxx/xxx/xxx    #在.cshrc文件中设置;
export  CDS_PROJECT=/xxx/xxx/xxx/xxx    #在.bashrc文件中设置;
/xxx/xxx/xxx/xxx 代表设置的绝对路径。

🔔 如果在上述指定的路径下第一次找到了相关文件,搜索就会停止;如果没找到,会继续按照setup.loc文件中的顺序往下搜索。

🔔 这些路径也是查找setup.loc文件、csfLookupConfig文件、还有一些配置文件的路径。

3. csfLookupConfig文件

csfLookupConfig 是一个文本文件,用于指定哪些配置文件(如 .cdsinit.cdsenv 等)应通过 CSF 机制进行搜索。
默认情况下,只有 cds.libcdsinfo.tag 是通过 CSF 搜索的。若想让 .cdsenv.cdsinit 等文件也通过 CSF 搜索,就需使用 csfLookupConfig文件。

📌 使用方法:

1️⃣ 创建文件

setup.loc 所指定的任意目录下(如 $HOME, $CDS_SITE),创建一个名为 csfLookupConfig 的文本文件。

例如:

$HOME/csfLookupConfig

$CDS_SITE/csfLookupConfig

🔔 注意:csfLookupConfig文件本身也通过 CSF 机制搜索。

2️⃣ 写入配置内容

支持的关键字语法如下:

关键字含义
ALL所有配置文件都使用 CSF 搜索。
NONE不对任何文件使用 CSF 搜索。
INCLUDE file指定 file 要使用 CSF 搜索。
EXCLUDE file指定 file 不使用 CSF 搜索。
fileNameINCLUDE fileName 等效。
LOAD fileName加载另一个 csfLookupConfig 文件,找不到时报错。
SOFTLOAD fileName同上,但找不到不会报错。

示例:

# 使用 CSF 搜索 .cdsinit 和 .cdsenv
INCLUDE .cdsinit
INCLUDE .cdsenv

💡 关键规则说明

  • 每行只能指定一个文件;
  • 支持注释:以 # 开头;
  • 关键字不区分大小写;
  • 后面出现的语句会覆盖前面;
ALL
NONE   # NONE 会覆盖 ALL,最终不启用任何 CSF 搜索
  • 不要用它来配置本就使用 CSF 的文件(如 cds.lib, cdsinfo.tag)。

4. 检查相关配置文件是否通过 CSF 搜索

🌟 使用命令

以配置文件.cdsenv文件和display.drf文件为例:

cdswhich -lookupconfig .cdsenv 
cdswhich -lookupconfig display.drf

如果该文件通过 csfLookupConfig 配置了 CSF 搜索,会返回实际路径。否则会显示未配置消息,如下图;

5. 具体的CSF搜索机制流程

📘 Cadence 配置文件加载流程

1️⃣【阶段一】🔍 搜寻 setup.loc 文件 —— 确定搜索路径顺序

Cadence 启动时,首先会按照以下路径顺序查找 setup.loc 文件,一旦找到就停止:

.                                     #当前启动目录,默认是第一个被查找的路径;
@LIBRARY                     #定义在cds.lib中的库路径,按照定义的顺序依次查找;
$CDS_WORKAREA        #个人项目目录,如果未定义,CSF会跳过这个位置;
$CDS_SEARCHDIR        #已废弃,不推荐使用;
$HOME                         #用户家目录
$CDS_PROJECT             #项目所在的目录,如果未定义,CSF会跳过这个位置;
$CDS_SITE                    #站点级的目录,一般用于安装默认时的配置或全公司或全项目的配置;
                                         如果未定义,默认路径是:your_install_dir/share/local
$(compute:THIS_TOOL_INST_ROOT)/share     #应用程序自己安装的share目录。

对以上每个路径location,查找的顺序为:

location/.cadence/setup.loc
location/setup.loc
location/cdssetup/setup.loc

✅ 找到第一个合法的 setup.loc 文件后,Cadence会读取其中列出的路径,用来作为接下来的CSF搜索路径序列。

2️⃣【阶段二】🔍 搜寻 csfLookupConfig 文件 —— 决定哪些配置文件要使用 CSF 查找

使用【阶段一】读取到setup.loc文章中的路径顺序,Cadence 接着依次查找 csfLookupConfig 文件。

对于每个路径 location,查找的顺序为:

location/.cadence/csfLookupConfig
location/csfLookupConfig
location/cdssetup/csfLookupConfig

🔎 如果找到第一个 csfLookupConfig 文件,即刻读取,后续路径不再查找。

然后对读取到的csfLookupConfig 文件进行解析;

以.cdsenv文件为例;

  • INCLUDE .cdsenv:表示 .cdsenv 文件应该使用 CSF 路径查找;
  • ALL:表示所有支持的配置文件(包括 .cdsenv)都使用 CSF;
  • EXCLUDE .cdsenv:排除 .cdsenv,不走CSF;
  • NONE:所有文件都不使用 CSF 机制;
  • LOAD, SOFTLOAD:加载其他 csfLookupConfig 文件片段。

✅ 最终由这个被读取的csfLookupConfig文件内容决定哪些配置文件是否启用CSF查找机制。

3️⃣【阶段三】🔍 搜寻配置文件 —— 执行路径查找

.cdsenv文件为例,如果 .cdsenvcsfLookupConfig 标记为需要使用 CSF 机制:

Cadence 会对 setup.loc 中定义的每一个路径 location,按照如下顺序查找 .cdsenv

location/.cadence/.cdsenv
location/.cdsenv
location/cdssetup/.cdsenv

一旦在某个路径下找到 .cdsenv,即停止继续查找,直接加载使用。

✔️ 至此结束一个配置文件按CSF机制查找的流程。

📚 简化的流程

【1】查找 setup.loc
    └→ 按固定路径顺序查找,找到后读取路径序列

【2】查找 csfLookupConfig
    └→ 按 setup.loc 中路径顺序查找第一个 csfLookupConfig

【3】解析 csfLookupConfig
    └→ 判断 .cdsenv 是否需要走 CSF 搜索机制

【4】查找 .cdsenv
     启用 CSF:
    │       每个路径按以下顺序查找:
    │         a. location/.cadence/.cdsenv
    │         b. location/.cdsenv
    │         c. location/cdssetup/.cdsenv

6. 实际案例演示

以.cdsinit文件为例说明;

原因:目前大多数用户都是从当前工作路径或home路径作为自动加载路径,在实际项目中需要每个项目成员手动复制.cdsinit文件到对应路径下,作为版图leader可以通过setup.loc中的$CDS_PROJECT环境变量,来统一指定.cdsinit文件,而无需每个人手动复制。

🧩 场景设定

  • 使用 $CDS_PROJECT 指向项目路径:Project/kx000/v0
  • 该目录下包含统一的 setup.loc文件、.cdsinit文件 和 csfLookupConfig 文件
  • 启动 Cadence 时自动加载此 .cdsinit文件,无需用户拷贝

实际操作步骤

1️⃣ 第一步:设置环境变量

在启动 Cadence 前,设置对应shell 环境中设置环境变量:

setenv CDS_PROJECT /Project/kx000/v0    #cshrc文件
或
export CDS_PROJECT=/Project/kx000/v0  #bashrc文件

2️⃣ 第二步:准备目录结构和文件

📁 在目录 /Project/kx000/v0 中创建如下结构:

/Project/kx000/v0/
├── .cdsinit
├── csfLookupConfig
└── setup.loc  

🧾 setup.loc 内容如下:

./
@LIBRARY
$CDS_WORKAREA
$HOME
$CDS_PROJECT        
$CDS_SITE
$(compute:THIS_TOOL_INST_ROOT)/share

🧾 csfLookupConfig 内容如下:

INCLUDE .cdsinit

3️⃣ 执行流程说明(从启动到加载 .cdsinit)

【1】Cadence 启动

用户进入某工作目录,例如 /MyDesign,执行 virtuoso & 启动程序。

【2】查找 setup.loc文件

Cadence 内部使用固定路径顺序查找 setup.loc,其中包括 $CDS_PROJECT

./
@LIBRARY
$CDS_WORKAREA
$HOME
$CDS_PROJECT          命中 /Project/kx000/v0/setup.loc
$CDS_SITE
$(compute:THIS_TOOL_INST_ROOT)/share

【3】查找 csfLookupConfig

依照 setup.loc 读取的路径顺序,Cadence 会在每个路径尝试查找:

$CDS_PROJECT/.cadence/csfLookupConfig     ❌ 
$CDS_PROJECT/csfLookupConfig              ✅ ← 找到!
$CDS_PROJECT/cdssetup/csfLookupConfig     ❌ 

Cadence 读取此文件,并解析内容:

INCLUDE .cdsinit        #.cdsinit 文件需要用CSF路径搜索机制查找

【4】查找 .cdsinit(启用 CSF 路径机制)

Cadence 会根据 setup.loc 中的路径(此时至少包含 $CDS_PROJECT)逐路径查找 .cdsinit

$CDS_PROJECT 下依次查找:

/Project/kx000/v0/.cadence/.cdsinit       ❌
/Project/kx000/v0/.cdsinit                ✅ ← 找到!
/Project/kx000/v0/cdssetup/.cdsinit       ❌

✅ Cadence 成功加载该 .cdsinit,停止搜索后续路径。

📦 最终效果

  • 用户无需在当前目录复制 .cdsinit
  • 系统通过环境变量 $CDS_PROJECT 成功定位到统一配置目录
  • csfLookupConfig 控制了 .cdsinit 并启用;CSF搜索
  • .cdsinit 自动从 $CDS_PROJECT 目录加载,确保工程一致性

7. 参考

【1】caiuser.pdf

8. 获取参考文档

关注【藍色天空】博客的公众号,并在公众号里发送对应的下载关键字【KX003】获取下载链接。

本站相关文章:

发表评论