在大规模芯片验证项目中,仿真时间往往是瓶颈。Xcelium 提供了 Multi-Core(多核)仿真引擎,能够自动将设计拆分成独立部分,分配到服务器多核并行运行,从而大幅缩短仿真时长。本文整理了如何在实际项目中配置并使用 8 核心进行仿真的具体方法。
核心概念:ACC 与 NACC 区域
Xcelium Multi-Core 并不是把整个仿真都并行化,而是将设计分为两类区域:
- ACC(加速区域):RTL 代码、门级代码等高活跃部分,在多核上并行执行,能获得显著加速。
- NACC(非加速区域):SystemVerilog 行为代码(通常是 testbench),仍在单核上串行运行。
因此,Multi-Core 的加速效果主要取决于 DUT(被测设计)在仿真耗时中的占比。如果 testbench 本身就是瓶颈,多核加速收益会非常有限。
License 要求
运行 Xcelium Multi-Core 需要两个 license:
| License | 说明 |
|---|---|
X300 – Xcelium_Single_Core |
基础仿真 license |
X500 – Xcelium_MultiCore_App |
Multi-Core 加速 license |
License 在仿真启动时检出,每次仿真检出一个,不按核心数计费。
快速上手:单步运行指定 8 核
最简单的用法,一条命令直接跑:
1
xrun -mce -mce_sim_thread_count 8 -f run.f -mce_top tb.dut
-mce:开启 Multi-Core 模式-mce_sim_thread_count 8:仿真阶段使用 8 个线程-mce_top tb.dut:指定顶层 DUT 模块(20.04 版本之前必须指定)
分别控制 Build 和 Simulation 的核数
编译(build)阶段和仿真(simulation)阶段可以独立配置核数:
1
2
3
4
xrun -mce \
-mce_build_thread_count 8 \
-mce_sim_thread_count 8 \
-f run.f -mce_top tb.dut
注意:切勿使用
-mce_build_thread_count 1,这会把 build 强制限定在单核,导致编译性能严重下降。
多步编译流程(compile + elaborate + run)
如果项目使用 xrun -compile / -elaborate / -R 三步流程,各阶段分别配置如下:
1
2
3
4
5
6
7
8
9
10
11
# Step 1: 编译设计文件
xrun -compile -mce -64 -mce_build_thread_count 8 -f design_run.f -work work
# Step 2: 编译 testbench
xrun -compile -mce -64 -mce_build_thread_count 8 -f testbench.f -work work
# Step 3: Elaborate
xrun -elaborate -mce -64 -mce_build_thread_count 8 -snapshot project_snap -work work
# Step 4: 运行仿真
xrun -R -snapshot project_snap -mce_sim_thread_count 8
如果设计文件和 testbench 编译到不同的 work library,Elaborate 阶段需要通过 -work 指向包含 DUT 的那个库:
1
xrun -elaborate -mce -64 -mce_build_thread_count 8 -snapshot project_snap -work design_work
通过 LSF 队列系统使用 8 核(MCL 模式)
在有资源管理系统(如 LSF)的环境中,推荐使用 Multi-Core Lite(MCL) 模式。MCL 会配合资源管理器预先在同一节点上保留指定数量的核心,然后充分利用这些核心:
1
bsub -n 8 xrun -mcl 8 [other_options]
bsub -n 8:向 LSF 申请 8 个 slot-mcl 8:告知 Xcelium 使用 8 核
重要:bsub -n 和 -mcl 的数字必须一致。如果 LSF 实际分配的核数少于 -mcl 指定的数量,进程可能被队列系统异常终止。
常用选项速查表
| 选项 | 作用 |
|---|---|
-mce |
启用 Multi-Core 仿真 |
-mce_sim_thread_count <N> |
仿真阶段使用 N 个线程 |
-mce_build_thread_count <N> |
Build 阶段使用 N 个线程 |
-mce_sim_cpu_configuration <config> |
细粒度仿真 CPU 拓扑配置 |
-mce_build_cpu_configuration <config> |
细粒度 Build CPU 拓扑配置 |
-mcl [N] |
Multi-Core Lite 模式(不指定 N 则用满整个 socket) |
-mce_top <module> |
指定要加速的顶层 DUT 模块 |
-mce_acc_estimation <file> |
评估设计的 Multi-Core 加速潜力 |
-mce_pie |
仿真结束后生成性能报告 |
在运行前评估加速潜力
如果不确定 Multi-Core 对当前设计是否有收益,可以先用 -mce_acc_estimation 做评估,无需等到真正跑完仿真:
1
xrun -mce_acc_estimation dut_prof.txt -f run.f
dut_prof.txt 中填写 DUT 模块信息,格式为 dut:lib.cell:view,例如:
1
dut:worklib.myDut:v
不支持的场景
以下功能目前不支持与 Multi-Core 同时使用:
- AMS(混信号仿真)
- Coverage 使能的设计
- 低功耗仿真(UPF)
- X 传播(X-Propagation)
- 故障仿真(Fault Simulation)
小结
要在 Xcelium 中使用 8 核仿真,核心就是两个选项:
1
2
-mce_build_thread_count 8 # build 阶段 8 核
-mce_sim_thread_count 8 # sim 阶段 8 核
配合 LSF 队列则用 bsub -n 8 xrun -mcl 8。加速效果取决于 DUT 在仿真 profile 中的占比,建议先用 -mce_acc_estimation 评估后再大规模推广。