blob: 7e66cec9839e7f5a156c9b1c123cdc296333b324 [file] [log] [blame]
SHELL = /bin/bash
include Makefrag
V_SRC_DIR = src/main/verilog
V_TEST_DIR = src/test/verilog
CXX_TEST_DIR = src/test/cxx
SIM_DIR = sim
MEM_DIR = src/test/inputs
OUT_DIR = output
VERILATOR = verilator
VERILATOR_OPTS = \
-Wall \
-Wno-WIDTH \
-Wno-UNUSED \
-Wno-BLKSEQ \
--cc \
-I$(V_SRC_DIR) \
+1364-2001ext+v \
-Wno-fatal \
--Mdir sim \
--trace \
VERILATOR_MAKE_OPTS = OPT_FAST="-O3"
VCS = vcs -full64
VCS_OPTS = -PP -notice -line +lint=all,noVCDE,noUI +v2k -timescale=1ns/10ps -quiet \
+define+DEBUG -debug_pp \
+incdir+$(V_SRC_DIR) -Mdirectory=$(SIM_DIR)/csrc \
+vc+list -CC "-I$(VCS_HOME)/include" \
-CC "-std=c++11" \
MAX_CYCLES = 1000000
SIMV_OPTS = -k $(OUT_DIR)/ucli.key -q
DESIGN_SRCS = $(addprefix $(V_SRC_DIR)/, \
vscale_core.v \
vscale_hasti_bridge.v \
vscale_pipeline.v \
vscale_ctrl.v \
vscale_regfile.v \
vscale_src_a_mux.v \
vscale_src_b_mux.v \
vscale_imm_gen.v \
vscale_alu.v \
vscale_mul_div.v \
vscale_csr_file.v \
vscale_PC_mux.v \
)
SIM_SRCS = $(addprefix $(V_TEST_DIR)/, \
vscale_sim_top.v \
vscale_dp_hasti_sram.v \
)
VCS_TOP = $(V_TEST_DIR)/vscale_hex_tb.v
VERILATOR_CPP_TB = $(CXX_TEST_DIR)/vscale_hex_tb.cpp
VERILATOR_TOP = $(V_TEST_DIR)/vscale_verilator_top.v
HDRS = $(addprefix $(V_SRC_DIR)/, \
vscale_ctrl_constants.vh \
rv32_opcodes.vh \
vscale_alu_ops.vh \
vscale_md_constants.vh \
vscale_hasti_constants.vh \
vscale_csr_addr_map.vh \
)
TEST_VPD_FILES = $(addprefix $(OUT_DIR)/,$(addsuffix .vpd,$(RV32_TESTS)))
VERILATOR_VCD_FILES = $(addprefix $(OUT_DIR)/,$(addsuffix .verilator.vcd,$(RV32_TESTS)))
default: $(SIM_DIR)/simv
run-asm-tests: $(TEST_VPD_FILES)
verilator-sim: $(SIM_DIR)/Vvscale_verilator_top
verilator-run-asm-tests: $(VERILATOR_VCD_FILES)
$(OUT_DIR)/%.vpd: $(MEM_DIR)/%.hex $(SIM_DIR)/simv
mkdir -p output
$(SIM_DIR)/simv $(SIMV_OPTS) +max-cycles=$(MAX_CYCLES) +loadmem=$< +vpdfile=$@ && [ $$PIPESTATUS -eq 0 ]
$(OUT_DIR)/%.verilator.vcd: $(MEM_DIR)/%.hex $(SIM_DIR)/Vvscale_verilator_top
mkdir -p output
$(SIM_DIR)/Vvscale_verilator_top +max-cycles=$(MAX_CYCLES) +loadmem=$< --vcdfile=$@ && [ $$PIPESTATUS -eq 0 ]
$(SIM_DIR)/simv: $(VCS_TOP) $(SIM_SRCS) $(DESIGN_SRCS) $(HDRS)
mkdir -p sim
$(VCS) $(VCS_OPTS) -o $@ $(VCS_TOP) $(SIM_SRCS) $(DESIGN_SRCS)
$(SIM_DIR)/Vvscale_verilator_top: $(VERILATOR_TOP) $(SIM_SRCS) $(DESIGN_SRCS) $(HDRS) $(VERILATOR_CPP_TB)
$(VERILATOR) $(VERILATOR_OPTS) $(VERILATOR_TOP) $(SIM_SRCS) $(DESIGN_SRCS) --exe ../$(VERILATOR_CPP_TB)
cd sim; make $(VERILATOR_MAKE_OPTS) -f Vvscale_verilator_top.mk Vvscale_verilator_top__ALL.a
cd sim; make $(VERILATOR_MAKE_OPTS) -f Vvscale_verilator_top.mk Vvscale_verilator_top
clean:
rm -rf $(SIM_DIR)/* $(OUT_DIR)/*
.PHONY: clean run-asm-tests verilator-run-asm-tests