使用CVS仿真的两个简单的Makefile
在Linux/Unix下,提交RTL仿真常用的有两种方法,一个靠perl脚本,一个靠Makefile。当然更多的是将两者组合到一块来用。这里分享下我用过的两个功能比较简单的Makefile。
1. 编译纯verilog DUT+TB
在这个Makefile中, CODE_PATH是dut的源文件存放路径。
filelist 文件名为file.f。case名字是通过TEST变量在command line中制定。这是一个纯verilog的TB+DUT,没有使用SV和UVM。
CODE_PATH = /home/xxx/work/rtlcode/dut # dut rtl path CASE := GUI := TEST = $(CASE) # case name from command line CASEFILE = $(CODE_PATH)/tb/tcase_$(TEST)_test.v # the testbench including testcase LOG = tcase_$(TEST)_test.log all: comp run all_cov: comp_cov run_cov dbg: comp rung debug: comp rung comp: vlogan -f file.f $(CASEFILE) vcs -lca -noIncrComp +lint=TFIPC-L +lint=PCWM -debug_all tb_dut_top comp_cov: vlogan -f file.f $(CASEFILE) vcs -lca -noIncrComp +lint=TFIPC-L +lint=PCWM -cm line+cond+fsm+tgl+branch -cm_scope "tree+tb_dut_top.dut_top" -debug_all tb_uicc_top run: ./simv -l $(LOG) $(GUI) run_cov: ./simv -cm line+cond+fsm+tgl+branch -l $(LOG) rung: ./simv -gui -l $(LOG) &
使用时的命令行:
make comp CASE=test_name # 编译dut + test_name对于的tb file make comp_cov CASE=test_name # 编译dut,仿真时会生成覆盖率数据 make run CASE=test_name # 编译 + run make run GUI=-gui CASE=test_name # 编译+ GUI模式的run make rung CASE=test_name # 编译+ GUI模式的run
2. 使用了UVM TB编译
CODE_PATH = # /home/x'x'x/work/rtlcode/xxx CASE := GUI := TEST = $(CASE) CASEFILE = #$(CODE_PATH)/tb/tcase_$(TEST)_test.v LOG = run.log #tcase_$(TEST)_test.log all: comp run dbg: comp rung debug: comp rung comp_uvm: vlogan -sverilog +incdir+$(UVM_HOME)/src -nc $(UVM_HOME)/src/uvm.sv -l uvm_comp.log comp_tb: vlogan -sverilog -timescale=1ns/1ps +incdir+$(UVM_HOME)/src -nc -f filelist.f -l comp.log elab: vcs -full64 -debug_all $(UVM_HOME)/src/dpi/uvm_dpi.cc -timescale=1ns/1ps -CFLAGS -DVCS -l elab.log top_tb comp: comp_uvm comp_tb run: ./simv -l $(LOG) $(GUI) rung: ./simv -gui -l $(LOG) &; clean: rm -rf *~ core csrc simv* AN.DB DVEfiles vc_hdrs.h ucli.key urg* *.log
使用时的命令行:
make comp_uvm # 编译uvm make comp_tb # 编译DUT+TB make elab # 编译DUT+TB make run # 编译+ batch模式的run make rung # 编译+ GUI模式的run
3.使用UVM时需要做的3步
- 首先要编译 $UVM_HOME/src/uvm.sv,在编译命令中需要include这个目录: +incdir+$UVM_HOME/src
- 在代码里要 import uvm_pkg:: *. 如果使用UVM的宏定义,还需要include “uvm_macros.svh”。
import uvm_pkg:: *;
`include “uvm_macros.svh” - 还要编译 $UVM_HOME/src/dpi/uvm_dpi.cc,或者给仿真器指明使用的UVM DPI shared library的位置。