记录Verdi环境搭建过程中遇到的问题,以及解决方法
参考资料包含但不限于:
1、https://www.cnblogs.com/Eudemonia8023/p/17562060.html
2、新手教程03:通过makefile脚本使用VCS+Verdi进行联合仿真-优快云博客
3、https://blog.youkuaiyun.com/m0_51691711/article/details/132141764
1、定义的Logic无法观察
verdi -f filelist.f -ssf *.fsdb -nologo &
修改为:verdi -sverilog -v2k -sv -f filelist.f -ssf *.fsdb -nologo &
原因:logic是Systemverilog在后续的版本中添加
2、FSDB
FSDB(Fast Signal Database)是一种二进制格式的文件,用来存储硬件设计中的波形和时序信息。
使用Verdi有三个步骤:生成fsdb波形、查看fsdb波形、追踪RTL代码进行debug。
2.1、FSDB的生成
1.Verilog系统函数
在testbench中添加:
initial begin
`ifdef DUMP_FSDB
$fsdbDumpfile("top_tb.fsdb"); //产生fsdb文件
$fsdbDumpvars(0,counter_tb); //第一个参数为0,表示Dump所有层次,非0表示最大层次;第二个参数Dump模块名
$fsdbDumpMDA();
`endif
end
$fsdbDumpfile(XXX.fsdb); : 用于定义 .fsdb 波形文件;
$fsdbDumpvars; : 用于定义Dump 的变量;这里再详细介绍一下这一条命令,完整的格式应该是 $fsdbDumpvar(depth, instance, parameter);
depth=0 表示dump instance下所有层次的信号,depth=1 表示只dump instance的信号;
instance 可以指定dump 的 hierarchy;
parameter 表示dump时可以选择的一些选项,"+mda" 表示dump memory 和 多维数组的数据;"+all" 表示 dump 所有信号;
$fsdbDumpMDA; : 添加这一句可以用于查看寄存器变量,配合vcs命令使用。
当需要查看多维数组的数据的时候,可以参考如下所示的方法:
initial begin
`ifdef DUMP_FSDB
$fsdbDumpfile("top_tb.fsdb"); //产生fsdb文件
$fsdbDumpvars(0,counter_tb,"+mda","+all"); //第一个参数为0,表示Dump所有层次,非0表示最大层次;第二个参数Dump模块名
$fsdbDumpMDA();
`endif
end
2.2、FSDB在make file中需要使用的位置,以及定义
3、Makefile的基本格式
3.1 编译:
comp:
3.2 elab:
3.3 运行verdi
加载Verdi须在makefile脚本中添加:
- verdi 表示启动 Verdi 工具的命令;
- -nologo 表示启动 Verdi 时不加载欢迎界面;
- -ssf $(TEST_NAME).fsdb 表示指定 Verdi 可识别的波形文件$(TEST_NAME).fsdb,可自动加载波形;
- & 表示 Verdi 启动时新打开一个进程,不占用当前的 shell 环境进程。
4、Verdi的参数
参数 | 作用 |
---|---|
-f | 文件列表 |
-ssf | 指定fsdb的路径 |
-l | 设置仿真日志的输出级别,如"none"、“errors”、“info”、“debug” |
-top | 指定顶层设计 |
-nologo | 用于禁用Verdi启动时的Logo显示,加快启动速度。 |
-autoalias | 自动为未定义的信号和模块别名 |