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目标,回归时按种子批量运行并汇总报告。

Xcelium多时钟CDC仿真环境搭建流程 安装与配置 PATH / CDS_LIC_FILE XCELIUM_TMPDIR 编译与精化 xrun -elaborate 生成snapshot 仿真运行 xmsim -snapshot run.tcl控制 CDC检查 报告/豁免 违例判定 多时钟激励生成(互质周期示例) clk_cpu 10ns clk_ddr 7ns clk_periph 37ns CDC工程目录组织 cdc_soc/ ├── rtl/ ├── tb/ (top, agents, seq) ├── cdc/ (waivers, reports) └── sim/ (filelist, run.tcl) 关键判断依据 • 编译通过:xrun -elaborate 无error,snapshot生成成功 • 时钟正确:波形中三个时钟周期比与设定一致,相位关系稳定 • CDC收敛:check_cdc_violations 无error级违例,豁免项均有评审记录

五、结果观察与判断

环境搭好后,先跑一个短仿真确认三个时钟波形正确:周期比、相位差与设定一致,且无X态。再运行CDC检查,观察报告中的违例数量与类型。若出现大量同步器缺失告警,优先检查跨时钟域信号是否都经过两级触发器或握手同步;若出现亚稳态相关告警,确认同步器是否被正确识别。豁免文件要逐条记录原因与责任人,避免“一键豁免”掩盖真实问题。

建议把时钟参数、种子、CDC检查选项都写进Makefile变量,回归时用make sim SEED=1234即可复现,减少手工改脚本带来的不一致。