摘要
该脚本由DS生成,实用性有待检验,仅供参考。
# Makefile for VCS compilation and Verdi simulation with testcase control# 基础配置
VCS := vcs
VERDI := verdi
TOP_MODULE ?= top_module # 默认顶层模块(可通过命令行覆盖)
TEST ?= default_test # 默认测试用例名称
SRC_DIR := src
INC_DIR := include
BUILD_DIR := build
LOG_DIR := log
WAVE_DIR := waves
TB_DIR := testbench# 路径配置
SIMV := $(BUILD_DIR)/simv.$(TEST)
FSDB_FILE := $(WAVE_DIR)/waves_$(TEST).fsdb
COMP_LOG := $(LOG_DIR)/compile_$(TEST).log
SIM_LOG := $(LOG_DIR)/sim_$(TEST).log# 编译选项
VCS_BASE_OPTS := -full64 -sverilog +v2k -debug_access+all -lca -kdb
VCS_EXTRA_OPTS ?= # 额外编译选项(命令行覆盖)
VCS_OPTS := $(VCS_BASE_OPTS) \-top $(TOP_MODULE) \+define+TESTNAME=$(TEST) \-o $(SIMV) \$(VCS_EXTRA_OPTS)# 仿真选项
SIM_BASE_OPTS := +fsdb+autoflush +fsdb+parallel=on
SIM_EXTRA_OPTS ?= # 额外仿真选项(命令行覆盖)
SIM_OPTS := $(SIM_BASE_OPTS) \+TESTNAME=$(TEST) \+FSDB_NAME=$(FSDB_FILE) \$(SIM_EXTRA_OPTS)# 文件收集
SRC_FILES := $(wildcard $(SRC_DIR)/*.v $(SRC_DIR)/*.sv)
TB_FILES := $(wildcard $(TB_DIR)/*.sv)
INC_FILES := $(addprefix -I ,$(INC_DIR))# 伪目标
.PHONY: all compile run verdi clean help# 默认目标
all: compile run# 编译规则
compile: $(BUILD_DIR) $(LOG_DIR)$(VCS) $(VCS_OPTS) \$(INC_FILES) \$(SRC_FILES) \$(TB_FILES) \-l $(COMP_LOG)@echo "Compilation log: $(COMP_LOG)"# 运行仿真
run: $(WAVE_DIR)$(SIMV) $(SIM_OPTS) -l $(SIM_LOG)@echo "Simulation log: $(SIM_LOG)"@echo "Waveform file: $(FSDB_FILE)"# 查看波形
verdi:$(VERDI) \-ssf $(FSDB_FILE) \-top $(TOP_MODULE) \-nologo &# 目录创建
$(BUILD_DIR) $(LOG_DIR) $(WAVE_DIR):mkdir -p $@# 清理
clean:rm -rf $(BUILD_DIR) $(LOG_DIR) $(WAVE_DIR)rm -rf csrc simv.daidir ucli.key *.fsdb *.log# 帮助信息
help:@echo "VCS/Verdi项目管理Makefile"@echo "可用命令:"@echo " make compile - 编译项目 (TEST=testname VCS_EXTRA_OPTS=...)"@echo " make run - 运行仿真 (TEST=testname SIM_EXTRA_OPTS=...)"@echo " make verdi - 查看波形 (TEST=testname)"@echo " make all - 编译并运行"@echo " make clean - 清理项目"@echo ""@echo "高级控制:"@echo " TEST=test_case1 - 指定测试用例名称"@echo " TOP_MODULE=mytop - 指定顶层模块"@echo " VCS_EXTRA_OPTS=...- 添加额外编译选项"@echo " SIM_EXTRA_OPTS=...- 添加额外仿真选项"@echo ""@echo "示例:"@echo " make compile TEST=smoke_test VCS_EXTRA_OPTS='-timescale=1ns/1ps'"@echo " make run TEST=smoke_test SIM_EXTRA_OPTS='+ntb_random_seed=123'"@echo " make verdi TEST=smoke_test"