这一篇文章将介绍vcs仿真环境的搭建,所有的演示将根据我的工程来说明,可以根据需要更改其中的细节。
一、仿真环境的搭建
在linux下某处新建一个文件夹,取名MIXED,这就是我们启动vcs的软件了。这次我们来仿真一个同时有verilog、VHDL的设计,tb采用verilog,同时,设计中也可以有system verilog。
MIXED文件夹中我们要准备好以下的文件和目录:
①src目录,里面存放设计文件(包括测试激励文件)。
②makefile文件,在上一篇文章以及给出
③.f文件,这是vcs进行批量处理时的必须文件,要把verilog(包括system verilog)和VHDL文件分开,写两个f文件,f文件内部存储有所有设计文件的路径,可以使用相对路径。在设计文件较多时,f文件能够极大提高我们的工作效率。
④synopsys_sim.setup文件,注意,在没有特殊说明下,这个文件的名字必须原原本本地与我所给出的一致。这个文件在上一篇以及讨论过,我注意到许多同事并没有单独在启动目录下设置该文件,但出于工程的可控性还是决定加上。
⑤work目录,参照上一篇文章,在setup文件中,我们进行了默认库的地址映射,当时的路径即为./work,因此必须要在当前目录下(即setup文件存放的目录下)新建work目录,根据vcs 用户手册,若没有这个目录,vcs不会替用户创建,而是会直接报错。
到这一步基本的工程环境就搭建好了,下面我们来对照着vcs user guide来对makefile的内容和使用方法进行说明。
二、makefile
我对上一篇博文中的makefile文件加入了测试覆盖率的内容,重新粘贴在下面,并且挑一些重要的部分来说明:
.PHONY: com sim clean
OUTPUT = simv
TB_TOP_MODULE = tb
FSDB_FILE = ${TB_TOP_MODULE}.fsdb
ALL_DEFINE = +define+VIRAGE_FAST_VERILOG +define+DISPLAY
ANVHD = vhdlan -smart_order -nc -no_opt -f vhdl_f.f
ANVLG = vlogan -sverilog -nc +v2k -kdb ${ALL_DEFINE} -f verilog_f.f
CM = -cm line+cond+fsm+branch+tgl
CM_NAME = -cm_name ${OUTPUT}
CM_DIR = -cm_dir ./${OUTPUT}.vdb
ELAB = vcs ${TB_TOP_MODULE} \
${CM} \
${CM_NAME} \
${CM_DIR} \
-full64 -R -debug_pp \
-l compile.log \
-o ${OUTPUT} \
-lca -kdb \
-P ${VERDI_HOME}/share/PLI/VCS/LINUX64/novas.tab ${VERDI_HOME}/share/PLI/VCS/LINUX64/pli.a \
WAVE = verdi -simflow -top ${TB_TOP_MODULE} -ssf ${FSDB_FILE} -l sim.log &
REPORT_CM = urg -dir ./${OUTPUT}.vdb -format both -report ./cm_report
anvhdl:
${ANVHD}
anvlog:
${ANVLG}
elab:
${ELAB}
wave:
${WAVE}
report_cm:
${REPORT_CM}
print-% : ; @echo $* = $($*)
clean:
rm -rf ./csrc DVEfiles simv* *.vpd *.key *.log *.vpd novas* *.fsdb verdiLog \
cm_report*
find ./work -type f -exec rm -f {} \;
(1)为仿真过程添加宏定义
我们知道可以在verilog文件中通过`define语句来添加宏定义,在VCS提供了另一种方法,可以直接在命令行中加入宏定义,具体做法是anvlog命令中加入 +define+选项。注意该选项在三步模式下不可以加到elaboration命令中,否则会报错。
(2)vhdl的smart_order选项
在vcs mx user guide中对vhdlan命令的描述有这么一句话:
意思是你所有的vhdl文件必须按照由低至上的顺序交给vcs工具去analyze,那比如说整个工程有非常多的.vhd文件,搞懂其中的引用顺序将是非常困难的,这时候我们就需要使用-smart_order去让工具自动推导文件的顺序从而节省大量时间。
(3)如何生成fsdb文件?
①在tb文件中使用fsdbDumpfiles和fsdbDumpvar函数,可参考其他博文这里不多解释。
② 在elab命令中加入debug_pp选项,该选项可以被其他同类选项所代替,我看到其他博文中使用过debug_all之类的。
③在elab命令中加入-kdb选项,同时由于kdb选项是VCS的测试功能所以还要再加入-lca来启用这项功能。
④加入-P选项
(4)如何使用这个makefile?
①在makefile所在目录下打开终端
②如果设计中vhdl文件,先 make anvhdl
③make anvlog
④make elab
⑤make wave 注意:将会使用verdi读取fsdb波形并打开
⑥如果想要查看覆盖率,则 make report_cm,将会生成cm_report文件夹,里面有一个tests.html和tests.txt,双击任意一个都可以
⑦(推荐)再次仿真之前,使用make clean清除掉上一次运行生成的各种顺序
结语:
距离上一次博文有一段时间了,再次打开这个东西发现很多细节已经想不起来,可能写的不是很清楚。。。如果有疑问或者你使用我的方法无法成功仿真,可以留言,我会定期查看,或者直接加QQ:2522035636.