一个实现vcs自动化仿真的makefile模板

一个实现vcs自动化仿真的makefile模板

vcs的安装可以参考我另外一篇文章【点这儿

makefile简单介绍

个人理解就是一种类似脚本的东西。
写一个名字叫Makefile的文件,里面放很多块shell命令,为每一块命令分配一个自定义名称(就像打包一样),再把包之间像树状图一样连起来。
这样以来,在终端输入一个简单的自定义名称,Makefile就能帮你运行相应的那一大堆命令。如果这个名称下面还连接(一种依赖关系)了其他块的名称,那么这些被依赖的命令块也会被执行。
所以,说白了就是把在一大串命令写到一个文本里面,然后用一个简单的名字替代了。
当然里面也有很多复杂功能,但是这里不赘述了。

要想使用makefile,需要先安装

$ sudo apt-get install make

makefile & vcs

文件结构

如下:
在这里插入图片描述
/doc:放各种设计文档、说明文档、波形示例图
/prj:放工程文件,就是IDE自动生成的一大堆东西
/rtl:放源代码,可以有子文件夹
simulation:放Makefile、testbench,以及执行make命令之后生成的一系列文件

makefile文件内容

.PHONY:exe_file sim check cov watch_wave clean verdi
#使用说明:
#	使用前只需要修改OUTPUT、VERILOG_NAME、TIMESCALE三个变量,以及vpath
#	执行最开始可以执行[make check]检查语法错误
#	执行[make]默认执行编译并保存波形到wave.vpd文件
#		之后可以执行[make watch_wave]、[make cov]查看波形、查看覆盖率
#	执行[make sim]可以打开仿真
#	执行[make clean]可以删除过程文件

#路径与文件名定义,是需要根据工程修改的变量
vpath %.v ../rtl   #放置源代码的路径,多个路径用空格隔开

OUTPUT:=mult_top  #输出文件的名称
VERILOG_NAME:= test.v verilog_file1.v verilog_file2.v   #仿真文件以及源代码文件
TIMESCALE:=1ns/1ps   #仿真时间单位

#变量定义
VPD_NAME:=${OUTPUT}_wave.vpd
LOG_PATH:=./log

	#代码覆盖率相关
CM = -cm line+cond+fsm+branch+tgl
CM_NAME = -cm_name ${OUTPUT}
CM_DIR = -cm_dir ./${OUTPUT}.vdb

SIM:=./${OUTPUT}                   \
	-gui                           \
	-l ${LOG_PATH}/run.log         \
	${CM}			               \
	${CM_NAME}		               \
	${CM_DIR}

VCS:=vcs -full64 -R -debug_all -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed  \
	-timescale=${TIMESCALE} 	   \
	-o ${OUTPUT}                   \
	-l ${LOG_PATH}/report.log      \
	+define+DUMP_VPD               \
	+define+DUMP_FSDB              \
	-P /home/自定义路径/synopsys/verdi_2016.06-1/share/PLI/VCS/LINUXAMD64/novas.tab \
	/home/自定义路径/synopsys/verdi_2016.06-1/share/PLI/VCS/LINUXAMD64/pli.a  \
	+vpdfile+${VPD_NAME}           \
	${CM}						   \
	${CM_NAME}				       \
	${CM_DIR}

VLOGAN:=vlogan -full64             \
	-l ${LOG_PATH}/check.log

MID_FILE:=csrc DVEfiles .vlogansetup.args *.daidir  *.key  *.DB

#目标定义
exe_file:log ${VERILOG_NAME}
	${VCS} $^

sim:exe_file
	${SIM} &

check:log ${VERILOG_NAME}               #检查语法错误
	${VLOGAN} $^

log:
	mkdir log

cov:
	dve -full64 -covdir *.vdb &

watch_wave:
	dve -vpd ${VPD_NAME} &

verdi: ${VERILOG_NAME}
	verdi $^ -ssf rtl.fsdb

clean:
	rm -r ${MID_FILE} ${OUTPUT} *log *.vdb *.vpd

才知道CSDN居然不支持makefile语法高亮!!!
把上面的代码复制到自己的makefile文件里面,根据vcs的安装路径修改39和40行的路径、根据自己的文件结构修改11-15行的内容就好了,感觉注释得还算易懂

testbench

为了收集调试信息,需要在testbench文件中加入以下内容,一些参数可以根据自己的实际使用需求进行调整。

initial
begin          
    `ifdef DUMP_VPD
        $vcdpluson();
    `endif             
end

`ifdef DUMP_FSDB
    initial
    begin
        $fsdbDumpfile("rtl.fsdb");
        $fsdbDumpvars;
        #12500 $finish;
    end
`endif

使用

执行makefile的时候要把终端路径换到/simulation下,个人常用的流程如下:

  1. 流程1:
    一般用在代码基本调通了的情况下
make check   #检查语法错误
make         #静默仿真,并生成波型文件、覆盖率文件
make watch_wave   #查看波型
make cov          #查看代码覆盖率,根据个人需求选择是否使用
make clean        #清理上面几步产生的文件还眼睛一个清静,根据实际需要执行
  1. 流程2:
    用在还要狂改代码的情况下
make check   #检查语法错误
make sim     #打开软件仿真,不会生成波形文件和覆盖率文件,但是很方便
make clean        #清理上面几步产生的文件

至此,欢迎提问/建议/指点

  • 5
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值