使用vcs+verdi完成对混合语言设计的仿真(2)

这一篇文章将介绍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.

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值