makefile是Linux的一种编译脚本,可以帮助使用者更快的运行Linux中的项目。vcs编译和运行时往往需要一长串开关选项,手敲一长串命令显得冗长又容易出错。但将命令都写到makefile里,就可以通过“make target”执行vcs命令等
############################
##Filename : sim.mf
## Description : Makefile for compiling and running the UVM Platform
## History : 0
## Author : Laplace-2023
## Date : 2023/09/16
## Modification : initial release for xxxx
####public config#############
VERBOSITY = UVM_MEDIUM
SYS =
MOD =
TC =
DF =
TESTTIMESCALE = 1ps/1ps
SEED := $(shell date +%N)
LSF_QUE =
HOST =
EXCEL = 0
SVN = 0
DEBUG = NODUMP
IS_REGRESSION = 0
IS_COV = 0
INCDIR = $(SIM_PATH)
SEED_DIR_EN = 0
UPF =
USR_CMD =
############### creat tc dir ##########################
ifeq "$(DF)" ""
tc_dir = $(TC)
else
tc_dir = $(TC)_$(DF)
endif
#################select lsf host########################
HOST_QUE=
HOST_CMD=
ifeq "$(LSF_QUE)" ""
HOST_QUE= wx_sz_veri
else
HOST_QUE= $(LSF_QUE)
endif
ifeq "$(HOST)" "NOLSF"
HOST_CMD=
else ifeq "$(HOST)" ""
HOST_CMD=bsub -Ip -P xxxx -q $(HOST_QUE)
else
HOST_CMD=bsub -Ip -P xxxx -q $(HOST_QUE) -m $(HOST)
endif
TEST_CASE = $(SIM_PATH)/tc/$(MOD)/$(TC).sv
VCS_COV= $(SIM_PATH)/vsif/$(MOD)/$(MOD)_vcscov.list
mk_dir:
@if [ -d $(tc_dir) ]; then \
echo $(tc_dir); \
else \
mkdir $(tc_dir); \
fi
## coverage #################################################
ifeq ($(IS_COV),1)
vcs_cov_opt = -cm cond+fsm+tgl+branch+line -cm_hier $(VCS_COV)
else
vcs_cov_opt =
endif
## compile vcs ###############################################
vcs_cmp_opt = +vcs+lic+wait -sverilog -timescale=$(TIMESCALE) -full64 -debug_pp +notimingcheck +nospecify \
+define+$(DF) -ntb_opts uvm-1.1 \
+define+$(DEBUG)+UVM_REG_DATA_WIDTH=1024 \
+incdir+$(SIM_PATH) \
+incdir+$(INCDIR) $(MY_CMD) -error=IWNF -error=noMPD\
+libext+.sv+.v+.vp+.vhd+.vh \
-lca $(vcs_xstate_opt) $(vcs_pwr_sim_cmd) \
-assert svaext \
$(vcs_cov_opt) \
-l vcs_cmp.log \
-P $(VERDI_HOME)/share/PLI/VCS/LINUX64/novas.tab $(VERDI_HOME)/share/PLI/VCS/LINUX64/pli.a \
$(TEST_CASE)
## sim vcs #############################################
vcs_sim_opt = +UVM_TESTNAME=$(TC) +UVM_VERBOSITY=$(VERBOSITY) \
+ntb_random_seed=$(SEED) \
$(vcs_cov_opt) \
-l vcs_run.log -reportstats
#################### self common define #######################
COM_RTL_DEF = +define+RTLSIM+RTLSIM_MEM+RANDOM_CLK+SIM_COVERAGE_MEM+MEM_MONITOR_NF
#################### filelist & sim_top #######################
VCS_FILE_LIST = -f $(SIM_PATH)/tb/$(MOD)/filelist/$(MOD)_dut_vcs.f
-f $(SIM_PATH)/tb/$(MOD)/filelist/$(MOD)_sim.f
vcs_rtl: mk_dir
cd $(tc_dir) && $(HOST_CMD) vcs $(vcs_cmp_opt) $(COM_RTL_DEF) $(VCS_FILE_LIST)
cd $(tc_dir) && $(HOST_CMD) simv $(vcs_sim_opt) $(COM_RTL_DEF)
help:
@echo "============ sim.mf discription ================="
@echo "vcs_rtl : rtl sim with vcs"
@echo " make -f ../script/sim.mf SYS=xxx MOD=xxx TC=xxx vcs_rtl "
@echo "vcs_rtl_verdi : open verdi with vcs rtl filelist "
@echo "make -f ../script/sim.mf SYS=xx MOD=xx TC=xx vcs_rtl_verdi "