在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的位置。
本博客所有文章均同步發表於www.mx1980.cn/blog