导言
本期主要给大家出一个简单makefile+tcl的仿真环境,支持vcs+verdi以及xrun+indago,因为最近虚拟机中的vcs不稳定,所有把以前的makefile修改一下同时支持vcs和xrun(xcelium),这两款仿真器我用的都是2020版本,如果你使用的低于这个版本,有些feature看可能会不支持或者报错。
基础介绍
先看一下模板示例,rtl目录主要放verilog代码,sim文件夹下包含3个文件以及2个文件夹,filelist.f主要存放仿真文件路径,Makefile为执行文件,我们待会重点讲,run.tcl主要是为xrun生成能被indago打开的db。vcs文件夹是vcs仿真生成的所有文件,verdi生成的文件也会放入此文件夹。xrun则对应也是xrun仿真文件,indago文件对应放入xrun文件夹。
├── rtl
│ ├── axis_adapter.v
│ ├── axis_async_fifo_adapter.v
│ └── axis_async_fifo.v
├── sim
│ ├── filelist.f
│ ├── Makefile
│ ├── run.tcl
│ ├── vcs
│ └── xrun
├── spyglass
└── tb
└── tb.v
Makefile解释
执行make sim SIM=vcs
即可以开始仿真,仿真完毕执行make verdi
即可打开波形文件。执行make sim SIM=xrun
即可开始xrun的仿真,这里的仿真器默认使用xrun,所以这里大家可以省略SIM=xrun
,仿真完就可以执行make indago
开始调试波形。执行make help
可以打印相关的makefile命令,还是建议大家自己打开文件看看最好,也方便修改。
vcs相关解释
vcs仿真需要生成.fsdb文件给verdi,所以tb文件需要添加如下内容,当然也可以用脚本的方式实现生成,网上有教程,这里仅使用这种方法,代码如下:
`ifdef DUMP
initial begin
$display("Dump");
$fsdbDumpfile("tb.fsdb");
$fsdbDumpvars;
end
`else
initial begin
$display("No Dump");
end
`endif
注意必须要用条件编译,因为vcs命令会用+define+DUMP
来传递参数,条件编译fsdb相关函数,而xrun这里不需要。注意,这里面的4个软件,vcs仅支持和verdi配合使用,xrun仅支持和indago配合使用,其他搭配方式我没有写,也没太大必要。
xrun相关解释
ida_database -open -name="ida.db"
ida_probe -log -sv_flow -uvm_reg -log_objects -sv_modules -wave -wave_probe_args= "tb -depth all -all -memories -variables -packed 10000000 -unpacked 10000000 -dynamic" -wave_glitch_recording
run
exit
上面代码是tcl脚本里面的内容,主要是生成ida.db文件,用于indago打开调试波形,其他命令不去详细讲了,大家找个手册看看。这里面文件在makefile里面-input run.tcl即可。
makefile代码
SIM = xrun# default sim
FILE_LIST_PATH := ../filelist.f ## file path
XRUN_TCL_PATH := ../run.tcl ## xrun tcl patch
################
OPTION_XRUN := -64bit -sv -notimingcheck -access +rwc -accessreg +rwc -debug -uvmlinedebug -classlinedebug -plidebug -fsmdebug -uvmaccess -date -dumpstack -negdelay -timescale 1ns/100ps -lwdgen -f $(FILE_LIST_PATH) -input $(XRUN_TCL_PATH) -l xrun.log
OPTION_VCS := -f $(FILE_LIST_PATH) \
-timescale=1ns/1ps \
+define+DUMP \
-fsdb -R -full64 +vc +v2k -sverilog -debug_acc+all \
-debug_region+cell+encrypt \
-P ${LD_LIBRARY_PATH}/novas.tab ${LD_LIBRARY_PATH}/pli.a | tee vcs.log &
OPTION_Verdi := -f $(FILE_LIST_PATH) -ssf *.fsdb &
################
sim :
@echo "Welcome!"
ifeq ($(SIM),xrun)
@echo "SIM is $(SIM) and dubug support indago"
@cd ./xrun && rm -rf *
@cd ./xrun && xrun $(OPTION_XRUN)
else
ifeq ($(SIM),vcs)
@echo "SIM is $(SIM) and dubug support verdi"
@cd ./vcs && rm -rf *
@cd ./vcs && vcs $(OPTION_VCS)
else
@echo "SIM is $(SIM) and it not support now"
endif
endif
indago :
@echo "Debug is indago"
@cd ./xrun && indago
@echo "Welcom indago !"
verdi :
@echo "Debug is verdi"
@cd ./vcs && verdi $(OPTION_Verdi)
@echo "Welcom verdi !"
主要的代码就是上面的,主要给大家一个小的思路,有些特性需要自己根据需求去加,更深入的内容就不去展开讲了,这些命令手册都有,最好对应版本,有时候看看编译器的警告,它会教你有些特性可能不支持,或者有些命令会影响调试的某个方面。
示例
大家可以自己随便找个例子,按照上面的要求建立目录来测试一下makefile,或者自己打开makefile修改相关文件路径。
1、xrun仿真indago调试 进入sim文件夹,修改好filelist.f里面的文件路径,执行make sim
等待仿真仿真完毕,执行make indago
,等待打开即可,如下:
2、vcs仿真verdi调试 进入sim文件夹,修改好filelist.f里面的文件路径,执行make sim SIM=vcs
等待仿真完毕,再执行make vedi
即可打开波形文件调试了,如下:
总结
主要给不常写脚本的朋友做个引导,因为自己会写真的很方便,xrun我也就刚跑起来的水平,这2个软件各有特色,学习的话可以都试着用用,我建议大家多看手册,工具这种东西和理论不一样,基本一看就会。makefile和tcl脚本还是建议大家自己写,要不然遇到其他需求都不知道怎么办,也很难提高效率。如果对这里有任何问题,也欢迎联系亦安讨论。
没有回复内容