Verdi使用情形:
学习目标主要以下三方面:
/home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/libLINUX64
/home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/IUS/LINUX64/boot
/home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/libLINUX64
/home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/IUS/LINUX64/boot
/home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/libLINUX64
/home/.tools/synopsys/Verdi3_L-2016.06-1/share/PLI/IUS/LINUX64/boot
+ which :查询当前软件是否设置,若设置成功,会显示软件路径
+ uname -i:查询当前系统信息,如硬件平台64bit为x86_64/amd64,32bit平台为i386
initial begin
$fsdbDumpfile("top_tb.fsdb");
$fsdbDumpvars(0,"tob_tb");
end
* 使用UCLI、TCL接口(VCS使用tcl脚本,irun、questa与该脚本类似)
global env
fsdbDumpfile "$env(demo_fifo).fsdb"
fsdbDumpvars 0 "top_tb"
run
… | 基于系统函数 | 基于ucli/tcl接口 |
---|---|---|
优点 | 1.新员工熟悉Verilog代码,接受较快 | 1.不需要重新编译仿真顶层; 2.使用高级语言接口,容易完成复杂处理,例如传递变量,例如使用正则表达式;3.交互式接口,控制灵活,仿真过程可修改dump信息,如dumpon/dumpoff |
缺点 | 1.需要重新编译系统,浪费时间(不使用 value v a l u e plusargs时);2.Verilog是低级语言,对于文本处理比较困难,不支持正则表达式 | 1.新员工大多不熟悉Tcl,接受较慢 |
+ 三大EDA厂商
* Synopsys:VCS + Verdi
* Cadence :irun + Verdi
* Mentor :Questa + Verdi
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
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
com:
irun \
-elaborate \
-access +r \ # 表示需要有读的权限
-f ../${demo_name}/tb_top.f \
-top tb_top \
-licqueue \
-l compile.log
sim:
irun \
-R \
-input ../scripts/dump_fsdb_irun.tcl \
+fsdb+autoflush \
-licqueue \
-l sim.log
global env
call fsdbDumpfile "$env(demo_name).fsdb" # 需要使用call,与vcs区别之一
call fsdbDumpvars 0 "tb_top"
run
quit # 需要使用quit,irun不自动结束
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
gloal env
fsdbDumpfile "$env(demo_name).fsdb"
fsdbDumpvars 0 "tb_top"
run -all
quit -sim
debug:
verdi \
-sv \ # 支持sv
-f ../${demo_name}/tb_top.f \ # 加载设计文件列表
-top tb_top \ # 指定设计顶层
-nologo # 关掉欢迎界面
dbg:
verdi -sv \ #支持SV
-f ../${demo_name}/tb_top.f \ #加载设计文件列表
-top tb_top \ #设置设计顶层
-ssf ${waveform} \
-nologo #关闭欢迎界面
verdiLog文件夹里面的compile.log是verdi编译信息
重复加载设计和波形:(reload)
选择信号方式:
查看波形
目标 | 快捷键 | 鼠标操作 |
---|---|---|
100%波形 | F | 点击100%符号 |
缩小波形 | z(推荐) | - |
放大波形 | shift+z | 左键拖选放大范围(推荐) |
移动信号 | 中键选择位置+信号+M | 鼠标中键按住信号拖拽 |
拷贝波形 | ctrl+p | 右键选择 |
粘贴信号 | 中间选择位置+Ins | 右键选择 |
删除信号 | Del | 右键选择 |
显示结构 | h(开/关) | - |
时间差
+ nWave:waveform -> marker 标记 :输入名字,然后add
* nWave:waveform -> Signal Value Radix修改进制;
* nWave:waveform -> Signal Value Notation设置信号。无符号unsigned,有符号一般选择Signed 2's Complement
查看信号变化:
save和restore
快速熟悉一个设计:双击RTL中的信号,追踪波形
快速找到应用实例:nTrace : Source -> Find Signal/Instance/Instport
+ 获取波形里面的信号数值:nTrace:source -> Active Annotation,将所有的信号标值