前段时间,自己随便搞个小例子,进行SV 语言学习的时候,遇到一个问题,现总结如下。
在代码中添加如下的波形加载系统函数,用于仿真结束之后,进行波形review.。
Makefile 编写如下:
all : clean vcs run
#-------------------------------------------------------------------------------------------------------
comp : clean vcs
#-------------------------------------------------------------------------------------------------------
vcs :
vcs \
-f filelist.f \
-timescale=1ns/1ps \
-diag timescale \
+incdir+/home/uvm-1.1d/+./test/+./env/+./interface/ \
-ntb_opts uvm-1.1 \
+fsdb+force \
+vcs+initreg+random \
-kdb -lca -full64 +vc +v2k -sverilog -debug_all +apllylearn+pli_learn.tab \
-a vcs_run.log \
| tee vcs_all.log
#-------------------------------------------------------------------------------------------------------
run :
./simv
#-------------------------------------------------------------------------------------------------------
verdi :
verdi -f filelist.f -ssf top_tb.fsdb &
#-------------------------------------------------------------------------------------------------------
clean :
rm -rf *~ core csrc simv* AN.DB *.sw* stack* vc_hdrs.h ucli.key urg* *.log novas.* *.fsdb* verdiLog 64* DVEfiles *.vpd
#-------------------------------------------------------------------------------------------------------
filelist :
find -name "*.v" > filelist.f
然后,运行编译命令,遇到如下编译失败error:
奇怪哎,怎么系统函数找不到呢,系统函数我们不是随便使用么?。。。。。
【尝试1】此时,尝试将 -debug_all 改成 -debug , 发现同样error:
【尝试2】继续尝试,将选项-debug 改成 -debug_pp, 发现报错依旧是那样。
【尝试3】此时,尝试将-debug_pp 改写成 -debug_access(或者-debug_acc),均成功加载fsdb 波形。
此外,对于任何 -debug_access* 选项,该方式均取得成功。
哎,此时完全糊涂了,到底为甚么呢? 为什么刚开始的 -debug 或者 -debug_all 或者-debug_pp 法力不够呢?那么如果执意选择此三个编译选项,该如何解决问题呢?
经查阅资料发现,我们虽然调用了系统函数$fsdbDump* ,并将其添加到了 验证环境代码中,但是却没有添加具体的tab 文件和 静态库文件,VCS 编译器是找不到的,所以报错。
那么,将下面两句添加到 Makefile 中 编译选项中:
-P
${NOVAS_HOME}/share/PLI/VCS/LINUX64/novas.tab:加载表格文件
${NOVAS_HOME}/share/PLI/VCS/LINUX64/pli.a:加载静态库
另外,据试验,完全可以 用 “-fsdb ” 代替上面复杂冗长的编译选项。