VCS总结
简单来讲VCS有两个步骤:编译和仿真;两个模式:optimized mode(设计后期,批处理,编译和运行上有优势)和debug mode(纠错常用)。
VCS自带的说明文档非常管用。在$(VCS_HOME)里面的doc文件夹下面。里面还有一些简单的示例,不止VSC_UG, Ucli,Coverage, UVM也都在里面。
这里记录一下我用过的各个命令和功能。给出几个简单的例子应该会更容易理解。
首先是如何实现最基本的编译和仿真:
vcs -full64 \
-sverilog \
+v2k \
-R \
-nc \
-debug_pp \
-LDFLAGS \
-rdynamic \
-P ${NOVAS_HOME}/share/PLI/VCS/LINUX64/novas.tab \
${NOVAS_HOME}/share/PLI/VCS/LINUX64/pli.a *.sv
这里逐一分析一下每个命令的功能。
full64: 需要查看$(PLATFORM),若运行平台为64位x86,加上这个选项;
sverilog: SV程序
R: 这里没有运行./simv就是因为加上了这个选项,意为编译后直接仿真。
nc: no copyright,不显示Synopsys版权信息
debug_pp: 专门用于debug模式的选项。另外还有debug(partial debug mode), bebug_all(full debug mode), debug_acess(加上特定的选项)等选项。
这里没有在手册里找到debug_pp的具体解释,只找到debug_access+pp选项,有待研究。
LDFLAGS:把标志选项传给linker(编译中的一步)。仅适用于增量编译模式,是个默认值。
rdynamic: 指示需要加载的动态库
P 为了使用verdi产生fsdb波形,需要将这两个文件加入(
${NOVAS_HOME}/share/PLI/VCS/LINUX64/novas.tab:加载表格文件;
${NOVAS_HOME}/share/PLI/VCS/LINUX64/novas.tab:加载静态库)
然后是如何利用vcs进行uvm环境下的编译和仿真。
.PHONEY: comp_msg
comp_msg:
echo "Starting compiling..."
#VPATH = src
#vpath %sv src
uvm_home = ${VCS_HOME}/etc/uvm-1.1
PRACTICE_ENV_DIR = /home/xinyihuang/Documents/practice/verilog/uvm
PRACTICE_INC = \
+incdir+vl \
+incdir+spi_include.sv \
+incdir+sv
PRACTICE_USERVCSBUILDFLAGS = \
$(PRACTICE_INC)
PRACTICE_TB_SV_FILES = \
sv/test_if.sv \
spi_include.sv \
PRACTICE_TB_VR_FILES = \
vl/test_top.v
PRACTICE_DUT_FILES = \
vl/spimgr_erom.sv
PRACTICE_SIMV_FILES = \
$(PRACTICE_TB_SV_FILES) \
$(PRACTICE_TB_VR_FILES) \
$(PRACTICE_DUT_FILES)
#obj = $(PRACTICE_SIMV_FILES)
#m_uvm_home = /home/xinyihuang/Documents/practice/verilog/uvm
#PRACTICE_ENV_DIR = /home/xinyihuang/Documents/practice/verilog/uvm
uvm_opts = \
-ntb_opts uvm-1.1 \
$(PRACTICE_USERVCSBUILDFLAGS) \
+incdir+$(uvm_home)/src \
+incdir+$(uvm_home)/uvm.sv \
+incdir+$(uvm_home)/dpi/uvm_dpi.cc \
+define+UVM_VCS_RECORD \
-CFLAGS \
-DVCS
comp: comp_msg $(PRACTICE_SIMV_FILES)
vcs \
-full64 \
$(uvm_opts) \
-timescale=1ns/1ps \
-sverilog $(PRACTICE_SIMV_FILES) \
+v2k \
-R \
-lca \
-debug_all \
-P ${NOVAS_HOME}/share/PLI/VCS/LINUX64/novas.tab ${NOVAS_HOME}/share/PLI/VCS/LINUX64/pli.a \
-l comp.log \
+UVM_OBJECTION_TRACE
#+UVM_VERDI_TRACE="UVM_AWARE+RAL+TLM+MSG+HIER+PRINT" \
#+UVM_TR_RECORD \
#+UVM_LOG_RECORD
#simv:
# ./simv \
+fsdbfile+test.fsdb \
waveform:
verdi \
-2001 \
-sv $(PRACTICE_SIMV_FILES) \
-nologo \
$(PRACTICE_INC) \
-ssf test.fsdb
clean:
rm -rf csrc simv* novas* ucli.key vc*
这是我对于uvm环境编译和仿真的一份makefile。
针对vcs部分的命令:
lca:必须打开,否则会在debug的时候报错,具体什么错忘了。
这里指定uvm1.1。
+incdir+:设置includewen文件后缀
+define+:字面意思,设置define值
+libext+:设置库文件后缀,比如.v,.sv什么的