环境搭建与启动:安装配置、许可证设置、环境变量、常用启动命令及基本工程目录结构
Cadence Xcelium 是业界领先的数字仿真器,支持 Verilog、SystemVerilog、VHDL 及混合语言仿真。在实际工程中,环境搭建的规范性直接决定了仿真效率与团队协作的顺畅度。本章围绕 Xcelium 的安装配置、许可证(License)管理、环境变量设置、启动命令(xrun 与 xcelium)以及标准工程目录结构展开,帮助读者建立一套可复用、可维护的仿真环境基线。
上图展示了从安装许可到最终仿真输出的完整链路。下面我们将按照“安装配置 → 许可证设置 → 环境变量 → 启动命令 → 工程目录”的顺序逐一深入,并在每个环节给出可直接落地的操作方法和常见问题规避策略。
2.1 安装配置:从介质到可用的仿真器
Xcelium 的安装并非简单的解压复制,而是需要结合操作系统版本、文件系统权限、依赖库以及后续工具链(如 Verdi、Genus)的协同。安装前应确认 Linux 发行版(RHEL/CentOS 7/8、Ubuntu 20.04+)与 Xcelium 版本的兼容性矩阵。Cadence 官方通常提供 InstallScape 图形化安装工具,也支持命令行静默安装。
核心安装步骤:
- 创建专用用户与目录:建议使用非 root 用户(如
eda),安装目录统一放在/tools/cadence或/opt/cadence下,避免权限混乱。 - 挂载安装介质:将 ISO 或 tar 包挂载/解压到临时目录,运行
./SETUP.SH或InstallScape。 - 选择安装组件:至少包含 Xcelium 主程序、Simulation Library(如 xcelium_lib)、文档与示例。若需要混合仿真,还需勾选 VHDL 库。
- 配置安装路径:例如
/tools/cadence/xcelium/20.09,注意版本号目录便于多版本共存。 - 验证安装:进入安装目录的
bin子目录,执行./xrun -version,应输出类似xrun 20.09-p001的版本信息。
/tmp 空间不足也会导致安装失败,建议预留至少 20GB 临时空间。
2.2 许可证设置:让仿真器“拿到钥匙”
Xcelium 运行前必须获取有效的 License。Cadence 使用 FlexNet 许可证管理机制,常见方式有两种:指向许可证服务器(浮动 License)或使用本地 License 文件。对于企业级团队,推荐使用服务器模式,便于集中管理和监控。
关键环境变量:
| 变量名 | 作用 | 示例值 |
|---|---|---|
CDS_LIC_FILE | Cadence 专用 License 指向,优先于 LM_LICENSE_FILE | 5280@license_server |
LM_LICENSE_FILE | 通用 FlexNet 变量,可包含多个 vendor 的 License | 5280@license_server |
CDS_ROOT | Cadence 安装根目录(部分版本需要) | /tools/cadence |
配置流程:
- 在服务器上启动
lmgrd守护进程,加载license.dat文件。 - 在客户端(仿真机)上设置
CDS_LIC_FILE指向port@host。 - 使用
lmstat -a -c 5280@license_server检查 License 是否可用。
LM_LICENSE_FILE 设置为 5280@server1;27000@server2,用分号分隔多个服务器。但 CDS_LIC_FILE 只写 Cadence 的 License,避免冲突。
2.3 环境变量配置:让 Shell 找到工具
环境变量是连接操作系统与仿真器的桥梁。配置不当会导致“command not found”或动态库加载失败。推荐在 .bashrc 或 .cshrc 中集中管理,并采用模块化脚本(如 env_setup.sh)便于团队复用。
最小必要变量集:
# Xcelium 安装路径
export XCELIUM_HOME=/tools/cadence/xcelium/20.09
# 可执行文件路径
export PATH=$XCELIUM_HOME/bin:$PATH
# 动态库路径(64位)
export LD_LIBRARY_PATH=$XCELIUM_HOME/lib:$LD_LIBRARY_PATH
# License 指向
export CDS_LIC_FILE=5280@license_server
# 强制使用 64 位模式(可选)
export CDS_AUTO_64BIT=64
# 仿真器工作目录(可选)
export XRUN_WORK_DIR=./work
验证方法:执行 which xrun 应返回 /tools/cadence/xcelium/20.09/bin/xrun;执行 echo $LD_LIBRARY_PATH 确认包含 lib 路径。若使用 C Shell,将 export 替换为 setenv,语法略有不同。
libxrun.so: cannot open shared object file。排查发现新服务器未设置 LD_LIBRARY_PATH,且 XCELIUM_HOME 指向了旧路径。修正环境变量后,仿真恢复正常。建议在 CI 脚本中每次构建前显式 source 环境文件,避免依赖用户默认 Shell 配置。
2.4 常用启动命令:xrun 与 xcelium
Xcelium 提供两种启动方式:xrun(推荐,统一编译仿真入口)和 xcelium(底层命令,通常由 xrun 内部调用)。对于绝大多数场景,直接使用 xrun 即可,它自动处理编译、elaboration 和仿真三个阶段。
xrun 常用选项分类:
| 类别 | 选项 | 说明 |
|---|---|---|
| 文件输入 | -f filelist.f | 从文件列表读取源文件 |
| 编译选项 | -timescale 1ns/1ps | 指定默认时间单位和精度 |
| 访问权限 | -access +rwc | 允许波形记录和内部信号访问 |
| 仿真控制 | -q | 安静模式,减少日志输出 |
| GUI 模式 | -gui | 启动 SimVision 图形界面 |
| 覆盖率 | -coverage all | 使能代码/功能覆盖率收集 |
典型启动示例:
# 编译并仿真,输出波形
xrun -f filelist.f -timescale 1ns/1ps -access +rwc -gui
# 命令行批量回归
xrun -f filelist.f -q -coverage all -log xrun.log
# 仅编译不仿真
xrun -f filelist.f -elaborate -exit
xcelium 命令替代 xrun,因为 xrun 会处理多语言编译顺序和库映射。另外,-access +rwc 中的 r(读)、w(写)、c(调用)权限应根据调试需求开启,过度开放会降低仿真性能。
2.5 基本工程目录结构:从混乱到有序
一个规范的工程目录不仅便于个人管理,更是团队协作和自动化回归的基础。推荐采用以下分层结构,兼顾可读性与扩展性:
project_root/
├── rtl/ # 设计源文件(.v/.sv/.vhd)
│ ├── module_a/
│ └── module_b/
├── tb/ # 测试平台文件
│ ├── testcases/ # 各测试用例
│ └── sequences/ # 激励序列
├── scripts/ # 仿真脚本、Makefile、filelist
│ ├── filelist.f
│ └── run_sim.sh
├── work/ # 仿真中间文件(自动生成)
├── logs/ # 仿真日志
├── reports/ # 覆盖率报告、断言报告
└── waves/ # 波形文件(.shm/.fsdb)
目录设计原则:
- 源文件与生成文件分离:
rtl/和tb/只存放源码,work/、logs/等由工具自动生成,避免版本管理混乱。 - filelist 集中管理:在
scripts/filelist.f中按编译顺序列出所有源文件,支持+incdir+指定包含目录。 - Makefile 封装常用命令:提供
make sim、make clean、make regress等目标,降低使用门槛。
filelist.f 中按模块分组,配合 make regress 批量跑 200 个用例,脚本稳定性显著提升。关键改动包括:将 work 目录加入 .gitignore,每次仿真前自动清空 work 和 logs,避免旧文件干扰。
2.6 环境验证与排障清单
环境搭建完成后,建议执行一套快速自检流程,确保后续仿真不会因环境问题中断。
| 检查项 | 命令/方法 | 预期结果 |
|---|---|---|
| License 可用 | lmstat -a -c 5280@server | 显示 Xcelium 功能已 checkout |
| 版本正确 | xrun -version | 输出 20.09 或更高版本 |
| 库文件加载 | ldd $XCELIUM_HOME/bin/xrun | 无 “not found” 条目 |
| 最小仿真 | 运行 hello_world 示例 | 仿真结束,退出码 0 |
常见问题速查:
- “License request failed”:检查
CDS_LIC_FILE拼写、服务器端口是否开放、License 是否过期。 - “Cannot open file”:确认 filelist 中的相对路径基于工程根目录,而非当前执行目录。
- “Segmentation fault”:多为 32/64 位库混用,设置
CDS_AUTO_64BIT=64并确保LD_LIBRARY_PATH指向 64 位库。
env_check.sh 自动检测所有依赖项,将排障时间从小时级压缩到分钟级。