【博客首发于微信公众号《漫谈芯片与编程》,欢迎专注一下,多谢大家】
Xrun(Xcelium)对应的wavedorm view工具SimVision & Indago;
Xcelium(Xrun)是cadence最新的仿真工具,原型是Incisive(irun);
Xrun 仿真
Xrun模式是单步仿真:
xrun add.v //自动完成comp , elab ,sim
三步仿真
comp:
xrun -compile add.v //--本质是调用 xmvlog
elab:
xrun -elaborate add.v //--本质是调用xmelab,生成仿真snapshot:对于verilog来说,xrun可以自动检测top模块,但不能检测VHDL的top模块;需要通过-top来指定;
sim:
xrun -R //--本质是调用xmsin,调用仿真snapshot;
Xrun项目结构
使用Xrun的项目文件结构:
project/
├── Makefile
├── src/
│ ├── top.sv
│ └── ...
├── tb/
│ ├── testbench.sv
│ └── ...
└── sim/
└── xrun.log
//-- src/ 目录包含设计源文件。
//-- tb/ 目录包含测试平台文件。
//-- sim/ 目录用于存放仿真结果和日志文件。
使用Xrun来进行编译:
xrun -64bit \
-access +rwc \
-f filelist.f \
-top testbench \
-define "DEFINE1=1 DEFINE2=2" \
-l sim/xrun.log
-64bit:启用 64 位模式。
-access +rwc:允许读写访问。
-f filelist.f:指定包含所有源文件的文件列表。
-top testbench:指定顶层模块。
-define “DEFINE1=1 DEFINE2=2”:定义宏。
-l sim/xrun.log:指定日志文件。
在这里重点看一下filelist.f的src文件格式:
+incdir+../src
+incdir+../tb
../src/top.sv
../tb/testbench.sv
Makefile 示例
# Makefile for Xrun
# 工具路径
XRUN = xrun
# 源文件目录
SRC_DIR = src
TB_DIR = tb
# 输出目录
SIM_DIR = sim
# 设计文件
DESIGN_FILES = $(wildcard $(SRC_DIR)/*.sv)
TESTBENCH_FILES = $(wildcard $(TB_DIR)/*.sv)
# 文件列表
FILELIST = $(SRC_DIE)/filelist.f
# 日志文件
LOG_FILE = $(SIM_DIR)/xrun.log
# 编译目标
all: compile
# 编译目标
compile:
@echo "Compiling design and testbench..."
$(XRUN) -64bit -access +rwc -f $(FILELIST) -top testbench -l $(LOG_FILE)
@echo "Compilation complete."
# 清理生成的文件
clean:
@echo "Cleaning up..."
rm -rf $(SIM_DIR) *.log
@echo "Cleanup complete."
# 默认目标
.PHONY: all clean
Indago view
Indago对标Verdi,也是一款波形查看,代码调试的EDA;
在debug uvm验证环境时,我们一般是通过增加打印,然后仿真,根据仿真打印的log,来确定问题。除此之外,indago也可以查看仿真时刻的任意状态。
如何实现查看任意时刻的任意状态–,使用Xrun工具仿真的时候,需要产生indago database,将仿真过程中的信息,给记录下来。最后使用indago工具,载入这个database,实现信息的回看
编译阶段
在编译阶段,要加入如下三个选项:
-ida: 使能indago debug analyzer。 如果使用xrun工具,不需要加该选项。
-linedebug:支持代码行调试,必加
-uvmlinedebug: 支持uvm库代码行调试,可选
仿真阶段
在仿真阶段,需要加入 +UVM_HYPERLINKS=ON 选项,和-input run.tcl 选项,来指定仿真所需要的tcl文件。
在run.tcl中,可以精细化的控制indago database生成。因为产生indago database会降低仿真速度,因此需要使用run.tcl,来精细化控制,database的生成过程。
参考的run.tcl脚本:
ida_probe -log -sv_flow -uvm_reg -log_objects -sv_modules -wave -wave_probe_args="top_tb -depth all –all memories"
run
exit
ida_probe命令
ida_probe,指定database中记录产生的数据。这个命令很重要,因为后面indago能回看的数据,完全是由这个命令,来指定的。
Indago启动
通过run.tcl脚本,指定产生database的信息。Xrun工具仿真完毕后,会在当前目录下,生成ida.db文件夹。
Indago的debug特性和Verdi基本类似:
- 查看波形
- 设置断点
- 单步执行
- 查看变量值
…