目录
一、Verdi简介
Verdi是一个功能强大的debug工具,可以配合不同的仿真软件进行debug,很多企业常用的就是VCS+Verdi的方式就行代码的仿真与检查。Verdi使用情形主要是IC验证工程师(Debug),IC设计工程师(Review)。
二、Verdi 使用目标
使用Vverdi主要有三个步骤:生成fsdb波形——查看fsdb波形——追踪RTL代码debug。
1.生成fsdb波形
三个变量
- VERDI_HOME/NOVAS_HOME:仿真器默认,且为设置PATH做准备
- PATH:让系统(Linux)找到verdi
- LD_LIBRARY_PATH:让系统(Linux)能够找到Verdi需要的库文件.so(静态库),.a(动态库),.tab(表格文件).
三个命令
- echo(可配合sed):查询(打印)环境变量,管道命令|相当于把管道左边的结果给右边的命令再执行
echo $PATH | sed ‘s/\:/\n/g’ ,全局替换,把冒号替换为换行符
echo $LD_LIBRARY_PATH | sed ‘s/\:/\n/g’
- which :查询当前软件是否设置,若设置成功,会显示软件路径,使用which verdi
- uname -i:查询当前系统信息,如硬件平台64bit为x86_64/amd64,32bit平台为i386
两大方法
- 使用Verilog系统函数,在测试代码里加上如下代码
initial begin
$fsdbDumpfile("top_tb.fsdb");
$fsdbDumpvars(0,"tob_tb");
end
- 使用UCLI、TCL接口(VCS使用tcl脚本)
global env
fsdbDumpfile "$env(demo_fifo).fsdb"
fsdbDumpvars 0 "top_tb"
run
Dump波形的两类主要方法优缺点比较
基于系统函数 | 基于ucli/tcl接口 | |
优 | 1.新员工熟悉Verilog代码,接受较快 | 1.不需要重新编译仿真顶层; 2.使用高级语言接口,容易完成复杂处理,例如传递变量,例如使用正则表达式;3.交互式接口,控制灵活,仿真过程可修改dump信息,如dumpon/dumpoff |
缺 | 1.需要重新编译系统,浪费时间(不使用valueplusargs时);2.Verilog是低级语言,对于文本处理比较困难,不支持正则表达式 | 1.新员工大多不熟悉Tcl,接受较慢 |
三大EDA厂商
- Synopsys:VCS + Verdi
- Cadence :irun + Verdi
- Mentor :Questa + Verdi
VCS的Makefile脚本:与Verdi有关的为注释内容,使用ucli接口
com:
vcs -full64 \
-sverilog \
-debug_pp \ # 使能UCLI命令
-LDFLAGS \ # 传递参数给VCS的linker,与以下三行配合使用
-rdynamic \ # 指示需加载的动态库,如libsscore_vcs201209.so
-P ${VERDI_HOME}/share/PLI/VCS/${PLATFORM}/novas.tab \ # 加载表格文件
${VERDI_HOME}/share/PLI/VCS/${PLANTFORM}/pli.a \ # 加载静态库
-f ../${demo_name}/tb_top.f \
+vcs+lic+wait \
-l compile.log
sim:
./simv \
-ucli -i ../scripts/dump_fsdb_vcs.tcl \ # ucli的输入文件(-i)为tcl脚本
+fsdb+autoflush \ # 命令行参数autoflush,一边仿真一边dump波形,如果没有该参数,那么不会dump波形,需要在ucli命令run 100ns后键入fsdbDumpflush才会dump波形
-l sim.log
其中dump_fsdb_vcs.tcl(ucli脚本为tcl语言)
global env # tcl脚本引用环境变量,Makefile中通过export定义
fsdbDumpfile "$env(demo_name).fsdb" # 设置波形文件名,受环境变量env(demo_name)控制 # demo_name在makefile中使用export demo_name=demo_fifo
fsdbDumpvars 0 "tb_top" # 设置波形的顶层和层次,表示将tb_top作为顶层,Dump所有层次
run # 设置完dump信息,启动仿真(此时仿真器被ucli控制) 可以run 100ns会在仿真100ns的时候停下来下来
也可以使用交互式仿真:注释内容可以在仿真过程中键入
global env
fsdbDumpfile "$env(demo_name).fsdb"
fsdbDumpvars 0 "top_tb"
run 200ns
#fsdbDumpoff
#run 100ns
#fsdbDumpon
#run
questa脚本:
compile:
vlib work
vmap work work
vlog \
-64 \
-sv \
+acc \ # +acc使加载PLI有效
-f ../${demo_name}/tb_top.f \
-l com.log
run:
vsim \
-64 \
-batch \
-novopt \
-pli ${VERDI_HOME}/share/PLI/MODELSIM/${PLATFORM}/novas_fli.so \ # 加载共享对象
work.tb_top \
-do ../scripts/dump_fsdb_questa.tcl \
+fsdb_autoflush \
-l sim.log
dump_fsdb_questa.tcl
gloal env
fsdbDumpfile "$env(demo_name).fsdb"
fsdbDumpvars 0 "tb_top"
run -all
quit -sim
不同场景dump波形的需求
这里写图片描述
2.查看fsdb波形和追踪RTL代码debug
关于Verdi细节操作见Verdi快速使用技巧_yh13572438258的博客-CSDN博客
参考链接:https://blog.csdn.net/immeatea_aun/article/details/80961258