25 |
BSVにおけるコマンドバッファ制御 (7) |
4. Makefile
次にMakefileのサンプルを提供します。
########################################
# Makefile(サブ→トップ→リンク:.v→.v 依存で必ず階層化)
########################################
BSC := bsc
SIMFLAGS := -sim
VLOG_FLAGS := -verilog
# -------- トップとソース ---------------------------------
TOP_MOD := mkTopDirect
TOP_SRC := TopDirect.bsv
SRCS := Producer4.bsv Consumer4.bsv OneStage.bsv $(TOP_SRC)
# -------- サブ(mk付き=モジュール名)---------------------
SUB_MODS := mkProducer4 mkConsumer4
# -------- 生成物/ディレクトリ ---------------------------
RTL_DIR := rtl
BSIM_DIR := bsim
VOBJ_DIR := vobj
BA := $(TOP_MOD).ba
SIM_EXE := $(TOP_MOD).exe
V_EXE := $(TOP_MOD).vexe
TOP_V := $(RTL_DIR)/$(TOP_MOD).v # rtl/mkTopDirect.v
SUB_V := $(SUB_MODS:%=$(RTL_DIR)/%.v) # rtl/mkProducer4.v など
BVCD := bsim.vcd
VVCD := vsim.vcd
# -------- デフォルト -------------------------------------
.PHONY: all
all: $(SIM_EXE) $(V_EXE)
############################################################################
# Bluesim(トップ一発)
############################################################################
$(BSIM_DIR)/%.ba : %.bsv
@mkdir -p $(BSIM_DIR)
$(BSC) $(SIMFLAGS) -bdir $(BSIM_DIR) -u -g $(basename $<) $<
$(BA): $(SRCS)
@mkdir -p $(BSIM_DIR)
$(BSC) $(SIMFLAGS) -bdir $(BSIM_DIR) -u -g $(TOP_MOD) $(TOP_SRC)
$(SIM_EXE): $(BA)
@mkdir -p $(BSIM_DIR)
cd $(BSIM_DIR) && \
$(BSC) $(SIMFLAGS) -bdir . -e $(TOP_MOD) -o ../$@
.PHONY: bsim
bsim: $(SIM_EXE)
./$(SIM_EXE) -V $(BVCD)
.PHONY: bwave
bwave: bsim
gtkwave -A $(BVCD)
############################################################################
# Verilog RTL(.v→.v 依存で順序を強制し、階層を固定)
############################################################################
# 1) サブ .v を個別に生成(必ず mkX.v を出す)。依存解決のため -u を付与
$(RTL_DIR)/mk%.v: %.bsv
@mkdir -p $(RTL_DIR) $(VOBJ_DIR)
$(BSC) $(VLOG_FLAGS) -u -bdir $(VOBJ_DIR) -g mk$* -vdir $(RTL_DIR) $<
# 2) トップ .v は **サブ .v に依存**(= サブ→トップの順序を強制)
# 従来挙動どおり -u を付与(同一 bdir の .bo を参照)
$(TOP_V): $(SUB_V) $(TOP_SRC)
@mkdir -p $(RTL_DIR) $(VOBJ_DIR)
$(BSC) $(VLOG_FLAGS) -u -bdir $(VOBJ_DIR) -g $(TOP_MOD) -vdir $(RTL_DIR) $(TOP_SRC)
# 3) vexe はトップとサブを兄弟依存でリンク
$(V_EXE): $(TOP_V) $(SUB_V)
@mkdir -p $(VOBJ_DIR)
$(BSC) $(VLOG_FLAGS) -bdir $(VOBJ_DIR) -vsearch $(RTL_DIR) -e $(TOP_MOD) -o $@
# 並列実行時の順序ゆらぎを抑止(任意だが推奨)
.NOTPARALLEL: $(TOP_V) $(SUB_V) vsim vwave
.PHONY: vsim
vsim: $(V_EXE)
./$(V_EXE) +bscvcd=$(VVCD) +bscdumpvars
.PHONY: vwave
vwave: vsim
gtkwave -A $(VVCD)
############################################################################
# クリーン
############################################################################
.PHONY: clean
clean:
rm -f *.ba *.bo *.o *.exe *.vexe *.cxx *.h *.vcd core *~ *.so
rm -f $(SUB_V) $(TOP_V)
rm -rf $(RTL_DIR) $(BSIM_DIR) $(VOBJ_DIR)
Leave a Comment