2. Xcelium仿真环境搭建
多时钟SoC的CDC验证对仿真环境有额外要求:不仅要能编译RTL与验证平台,还要能稳定产生多个异步时钟、控制时钟相位与频率关系,并把CDC检查工具(如Xcelium的CDC/跨时钟域检查能力)纳入同一套流程。本节从安装配置讲到目录组织,给出一条可直接落地的搭建路径。
一、安装与基础配置
Xcelium通常随Cadence工具链安装,安装后需要设置环境变量。核心是PATH、CDS_LIC_FILE(或LM_LICENSE_FILE)以及库路径。一个典型的bash配置如下:
export XCELIUM_HOME=/tools/cadence/XCELIUM2309
export PATH=$XCELIUM_HOME/tools/bin:$PATH
export CDS_LIC_FILE=5280@lic-server
export CDS_LIB_PATH=$XCELIUM_HOME/tools/lib
# 可选:指定仿真临时目录,避免占满home
export XCELIUM_TMPDIR=/scratch/$USER/xcelium_tmp
配置完成后用xrun -version确认版本,用xrun -help确认命令可用。若报license错误,先检查CDS_LIC_FILE指向的端口与主机是否可达。多时钟仿真对机器资源敏感,建议在.cdsinit或启动脚本中设置setenv XM_SHMEM相关参数,减少大设计下的内存抖动。
二、编译流程:从RTL到可执行快照
Xcelium的编译与仿真通过xrun统一驱动,也可拆成xmvlog/xmelab两步。对多时钟SoC,推荐使用三步式:先分析(xmvlog或xrun -compile),再精化(xmelab),最后仿真(xmsim)。这样在只改测试激励时无需重新编译RTL。
# 1) 分析并精化,生成快照snapshot_cdc
xrun -elaborate -snapshot cdc_snap \
-f filelist.f \
-timescale 1ns/1ps \
-define CDC_ENABLE \
-access +rwc \
-incdir ./rtl/include
# 2) 用快照启动仿真
xmsim -snapshot cdc_snap -run \
+CLK_FAST=200 +CLK_SLOW=37 \
-input run.tcl
其中-access +rwc为CDC调试保留读写访问能力,-define CDC_ENABLE用于条件编译CDC断言。filelist中应把RTL、验证平台、时钟生成模块分开列出,便于按需替换。
三、仿真脚本与多时钟激励生成
多时钟激励的关键是让每个时钟独立可控,且频率、相位、占空比可参数化。推荐用一个时钟生成模块,通过参数或plusargs传入周期与相位:
module clk_gen #(parameter PERIOD=10, PHASE=0, DUTY=50) (output reg clk);
initial begin
clk = 0;
#PHASE;
forever begin
#(PERIOD*DUTY/100.0) clk = 1;
#(PERIOD*(100-DUTY)/100.0) clk = 0;
end
end
endmodule
在顶层实例化多个时钟,例如clk_cpu周期10ns、clk_ddr周期7ns、clk_periph周期37ns,三者互质,能覆盖大量相位组合。仿真脚本用TCL控制运行与检查:
run 200us
check_cdc_violations -severity error
exit
若使用UVM,可在run_test()前通过uvm_config_db把时钟参数下发给时钟agent,实现激励与时钟解耦。
四、CDC场景的工程目录组织
CDC验证的目录要能清晰区分“设计侧”“验证侧”“检查侧”。建议结构如下:
cdc_soc/
├── rtl/ # DUT RTL与include
├── tb/
│ ├── top/ # 顶层testbench、时钟生成
│ ├── agents/ # 各时钟域agent
│ └── seq/ # 激励序列
├── cdc/
│ ├── waivers/ # CDC豁免文件
│ └── reports/ # CDC检查报告
├── sim/
│ ├── filelist.f
│ ├── run.tcl
│ └── Makefile
└── scripts/ # 回归与结果解析脚本
把CDC豁免与报告单独放在cdc/下,便于版本管理和评审。Makefile中提供compile、sim、cdc、clean目标,回归时按种子批量运行并汇总报告。
五、结果观察与判断
环境搭好后,先跑一个短仿真确认三个时钟波形正确:周期比、相位差与设定一致,且无X态。再运行CDC检查,观察报告中的违例数量与类型。若出现大量同步器缺失告警,优先检查跨时钟域信号是否都经过两级触发器或握手同步;若出现亚稳态相关告警,确认同步器是否被正确识别。豁免文件要逐条记录原因与责任人,避免“一键豁免”掩盖真实问题。
make sim SEED=1234即可复现,减少手工改脚本带来的不一致。