# UCB use only -include $(base_dir)/Makefrag-boomchip -include $(base_dir)/Makefrag-hwachachip # check RISCV environment variable ifndef RISCV $(error Please set environment variable RISCV. Please take a look at README) endif MODEL := Top CXX := g++ CXXFLAGS := -O1 SBT := java -Xmx2048M -Xss8M -XX:MaxPermSize=128M -jar sbt-launch.jar SHELL := /bin/bash src_path = src/main/scala chisel_srcs = $(base_dir)/$(src_path)/*.scala $(base_dir)/rocket/$(src_path)/*.scala $(base_dir)/uncore/$(src_path)/*.scala $(SRC_EXTENSION) disasm := 2> which_disasm := $(shell which spike-dasm) ifneq ($(which_disasm),) disasm := 3>&1 1>&2 2>&3 | $(which_disasm) $(DISASM_EXTENSION) > endif timeout_cycles = 100000000 #-------------------------------------------------------------------- # Verilog Generation #-------------------------------------------------------------------- $(generated_dir)/$(MODEL).$(CONFIG).v: $(chisel_srcs) cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate $(MODEL) --backend $(BACKEND) --targetDir $(generated_dir) --W0W --configDump --noInlineMem --configInstance rocketchip.$(CONFIG)" cd $(generated_dir) && \ if [ -a $(MODEL).$(CONFIG).conf ]; then \ $(mem_gen) $(generated_dir)/$(MODEL).$(CONFIG).conf >> $(generated_dir)/$(MODEL).$(CONFIG).v; \ fi $(generated_dir)/consts.$(CONFIG).vh: $(generated_dir)/$(MODEL).$(CONFIG).v echo "\`ifndef CONST_VH" > $@ echo "\`define CONST_VH" >> $@ sed -r 's/\(([A-Za-z0-9_]+),([A-Za-z0-9_]+)\)/`define \1 \2/' $(patsubst %.v,%.prm,$<) >> $@ echo "\`endif // CONST_VH" >> $@ $(generated_dir)/memdessertMemDessert.$(CONFIG).v: $(base_dir)/$(src_path)/*.scala $(base_dir)/uncore/$(src_path)/*.scala cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate MemDessert --backend v --targetDir $(generated_dir) --W0W --moduleNamePrefix memdessert --configInstance rocketchip.$(CONFIG)" #-------------------------------------------------------------------- # DRAMSim2 #-------------------------------------------------------------------- DRAMSIM_OBJS := $(patsubst %.cpp,%.o,$(wildcard $(base_dir)/dramsim2/*.cpp)) $(DRAMSIM_OBJS): %.o: %.cpp $(CXX) $(CXXFLAGS) -DNO_STORAGE -DNO_OUTPUT -Dmain=nomain -c -o $@ $< $(sim_dir)/libdramsim.a: $(DRAMSIM_OBJS) ar rcs $@ $^ #-------------------------------------------------------------------- # ISA Tests #-------------------------------------------------------------------- tests_isa_dir = $(base_dir)/riscv-tools/riscv-tests/isa asm_p_tests = \ rv64ui-p-add \ rv64ui-p-addi \ rv64ui-p-amoadd_d \ rv64ui-p-amoadd_w \ rv64ui-p-amoand_d \ rv64ui-p-amoand_w \ rv64ui-p-amoor_d \ rv64ui-p-amoor_w \ rv64ui-p-amoxor_d \ rv64ui-p-amoxor_w \ rv64ui-p-amoswap_d \ rv64ui-p-amoswap_w \ rv64ui-p-amomax_d \ rv64ui-p-amomax_w \ rv64ui-p-amomaxu_d \ rv64ui-p-amomaxu_w \ rv64ui-p-amomin_d \ rv64ui-p-amomin_w \ rv64ui-p-amominu_d \ rv64ui-p-amominu_w \ rv64ui-p-auipc \ rv64ui-p-fence_i \ rv64ui-p-sb \ rv64ui-p-sd \ rv64ui-p-sh \ rv64ui-p-sw \ rv64ui-p-addiw \ rv64ui-p-addw \ rv64ui-p-and \ rv64ui-p-andi \ rv64ui-p-beq \ rv64ui-p-bge \ rv64ui-p-bgeu \ rv64ui-p-blt \ rv64ui-p-bltu \ rv64ui-p-bne \ rv64ui-p-div \ rv64ui-p-divu \ rv64ui-p-divuw \ rv64ui-p-divw \ rv64ui-p-j \ rv64ui-p-jal \ rv64ui-p-jalr \ rv64ui-p-lb \ rv64ui-p-lbu \ rv64ui-p-ld \ rv64ui-p-lh \ rv64ui-p-lhu \ rv64ui-p-lui \ rv64ui-p-lw \ rv64ui-p-lwu \ rv64ui-p-mul \ rv64ui-p-mulh \ rv64ui-p-mulhsu \ rv64ui-p-mulhu \ rv64ui-p-mulw \ rv64ui-p-or \ rv64ui-p-ori \ rv64ui-p-rem \ rv64ui-p-remu \ rv64ui-p-remuw \ rv64ui-p-remw \ rv64ui-p-simple \ rv64ui-p-sll \ rv64ui-p-slli \ rv64ui-p-slliw \ rv64ui-p-sllw \ rv64ui-p-slt \ rv64ui-p-slti \ rv64ui-p-sltiu \ rv64ui-p-sltu \ rv64ui-p-sra \ rv64ui-p-srai \ rv64ui-p-sraiw \ rv64ui-p-sraw \ rv64ui-p-srliw \ rv64ui-p-srlw \ rv64ui-p-sub \ rv64ui-p-subw \ rv64ui-p-xor \ rv64ui-p-xori \ rv64uf-p-ldst \ rv64uf-p-move \ rv64uf-p-fsgnj \ rv64uf-p-fcmp \ rv64uf-p-fcvt \ rv64uf-p-fcvt_w \ rv64uf-p-fclass \ rv64uf-p-fadd \ rv64uf-p-fmin \ rv64uf-p-fmadd \ rv64uf-p-fdiv \ rv64uf-p-structural \ rv64si-p-csr \ rv64si-p-wfi \ rv64si-p-illegal \ rv64si-p-ma_fetch \ rv64si-p-ma_addr \ rv64si-p-scall \ rv64si-p-sbreak \ rv64ui-pm-lrsc \ rv64mi-p-csr \ rv64mi-p-mcsr \ rv64mi-p-wfi \ rv64mi-p-dirty \ rv64mi-p-illegal \ rv64mi-p-ma_addr \ rv64mi-p-ma_fetch \ rv64mi-pm-ipi \ rv64mi-p-sbreak \ rv64mi-p-scall \ rv64mi-p-timer \ asm_pt_tests = \ rv64ui-pt-add \ rv64ui-pt-addi \ rv64ui-pt-amoadd_d \ rv64ui-pt-amoadd_w \ rv64ui-pt-amoand_d \ rv64ui-pt-amoand_w \ rv64ui-pt-amoor_d \ rv64ui-pt-amoor_w \ rv64ui-pt-amoxor_d \ rv64ui-pt-amoxor_w \ rv64ui-pt-amoswap_d \ rv64ui-pt-amoswap_w \ rv64ui-pt-amomax_d \ rv64ui-pt-amomax_w \ rv64ui-pt-amomaxu_d \ rv64ui-pt-amomaxu_w \ rv64ui-pt-amomin_d \ rv64ui-pt-amomin_w \ rv64ui-pt-amominu_d \ rv64ui-pt-amominu_w \ rv64ui-pt-auipc \ rv64ui-pt-fence_i \ rv64ui-pt-sb \ rv64ui-pt-sd \ rv64ui-pt-sh \ rv64ui-pt-sw \ rv64ui-pt-addiw \ rv64ui-pt-addw \ rv64ui-pt-and \ rv64ui-pt-andi \ rv64ui-pt-beq \ rv64ui-pt-bge \ rv64ui-pt-bgeu \ rv64ui-pt-blt \ rv64ui-pt-bltu \ rv64ui-pt-bne \ rv64ui-pt-div \ rv64ui-pt-divu \ rv64ui-pt-divuw \ rv64ui-pt-divw \ rv64ui-pt-j \ rv64ui-pt-jal \ rv64ui-pt-jalr \ rv64ui-pt-lb \ rv64ui-pt-lbu \ rv64ui-pt-ld \ rv64ui-pt-lh \ rv64ui-pt-lhu \ rv64ui-pt-lui \ rv64ui-pt-lw \ rv64ui-pt-lwu \ rv64ui-pt-mul \ rv64ui-pt-mulh \ rv64ui-pt-mulhsu \ rv64ui-pt-mulhu \ rv64ui-pt-mulw \ rv64ui-pt-or \ rv64ui-pt-ori \ rv64ui-pt-rem \ rv64ui-pt-remu \ rv64ui-pt-remuw \ rv64ui-pt-remw \ rv64ui-pt-simple \ rv64ui-pt-sll \ rv64ui-pt-slli \ rv64ui-pt-slliw \ rv64ui-pt-sllw \ rv64ui-pt-slt \ rv64ui-pt-slti \ rv64ui-pt-sltiu \ rv64ui-pt-sltu \ rv64ui-pt-sra \ rv64ui-pt-srai \ rv64ui-pt-sraiw \ rv64ui-pt-sraw \ rv64ui-pt-srliw \ rv64ui-pt-srlw \ rv64ui-pt-sub \ rv64ui-pt-subw \ rv64ui-pt-xor \ rv64ui-pt-xori \ rv64uf-pt-ldst \ rv64uf-pt-move \ rv64uf-pt-fsgnj \ rv64uf-pt-fcmp \ rv64uf-pt-fcvt \ rv64uf-pt-fcvt_w \ rv64uf-pt-fclass \ rv64uf-pt-fadd \ rv64uf-pt-fmin \ rv64uf-pt-fmadd \ rv64uf-pt-fdiv \ rv64uf-pt-structural \ asm_v_tests = \ rv64ui-v-add \ rv64ui-v-addi \ rv64ui-v-amoadd_d \ rv64ui-v-amoadd_w \ rv64ui-v-amoand_d \ rv64ui-v-amoand_w \ rv64ui-v-amoor_d \ rv64ui-v-amoor_w \ rv64ui-v-amoxor_d \ rv64ui-v-amoxor_w \ rv64ui-v-amoswap_d \ rv64ui-v-amoswap_w \ rv64ui-v-amomax_d \ rv64ui-v-amomax_w \ rv64ui-v-amomaxu_d \ rv64ui-v-amomaxu_w \ rv64ui-v-amomin_d \ rv64ui-v-amomin_w \ rv64ui-v-amominu_d \ rv64ui-v-amominu_w \ rv64ui-v-auipc \ rv64ui-v-fence_i \ rv64ui-v-sb \ rv64ui-v-sd \ rv64ui-v-sh \ rv64ui-v-sw \ rv64ui-v-addiw \ rv64ui-v-addw \ rv64ui-v-and \ rv64ui-v-andi \ rv64ui-v-beq \ rv64ui-v-bge \ rv64ui-v-bgeu \ rv64ui-v-blt \ rv64ui-v-bltu \ rv64ui-v-bne \ rv64ui-v-div \ rv64ui-v-divu \ rv64ui-v-divuw \ rv64ui-v-divw \ rv64ui-v-j \ rv64ui-v-jal \ rv64ui-v-jalr \ rv64ui-v-lb \ rv64ui-v-lbu \ rv64ui-v-ld \ rv64ui-v-lh \ rv64ui-v-lhu \ rv64ui-v-lui \ rv64ui-v-lw \ rv64ui-v-lwu \ rv64ui-v-mul \ rv64ui-v-mulh \ rv64ui-v-mulhsu \ rv64ui-v-mulhu \ rv64ui-v-mulw \ rv64ui-v-or \ rv64ui-v-ori \ rv64ui-v-rem \ rv64ui-v-remu \ rv64ui-v-remuw \ rv64ui-v-remw \ rv64ui-v-sll \ rv64ui-v-slli \ rv64ui-v-slliw \ rv64ui-v-sllw \ rv64ui-v-slt \ rv64ui-v-slti \ rv64ui-v-sltiu \ rv64ui-v-sltu \ rv64ui-v-sra \ rv64ui-v-srai \ rv64ui-v-sraiw \ rv64ui-v-sraw \ rv64ui-v-srliw \ rv64ui-v-srlw \ rv64ui-v-sub \ rv64ui-v-subw \ rv64ui-v-xor \ rv64ui-v-xori \ rv64uf-v-ldst \ rv64uf-v-move \ rv64uf-v-fsgnj \ rv64uf-v-fcmp \ rv64uf-v-fcvt \ rv64uf-v-fcvt_w \ rv64uf-v-fclass \ rv64uf-v-fadd \ rv64uf-v-fmin \ rv64uf-v-fmadd \ rv64uf-v-fdiv \ rv64uf-v-structural \ #-------------------------------------------------------------------- # Benchmark Tests #-------------------------------------------------------------------- tests_bmark_dir = $(base_dir)/riscv-tools/riscv-tests/benchmarks bmarks = \ median.riscv \ multiply.riscv \ qsort.riscv \ towers.riscv \ vvadd.riscv \ mm.riscv \ dhrystone.riscv \ spmv.riscv \ mt-vvadd.riscv \ mt-matmul.riscv \ #vec-vvadd.riscv \ #vec-cmplxmult.riscv \ #vec-matmul.riscv \ #-------------------------------------------------------------------- # Multi-threaded Benchmark Tests #-------------------------------------------------------------------- test_mt_bmark_dir = $(base_dir)/riscv-tools/riscv-tests/mt mt_bmarks = \ vvadd0.riscv \ vvadd1.riscv \ vvadd2.riscv \ vvadd3.riscv \ vvadd4.riscv \ ad_matmul.riscv \ ae_matmul.riscv \ af_matmul.riscv \ ag_matmul.riscv \ ai_matmul.riscv \ ak_matmul.riscv \ al_matmul.riscv \ am_matmul.riscv \ an_matmul.riscv \ ap_matmul.riscv \ aq_matmul.riscv \ ar_matmul.riscv \ at_matmul.riscv \ av_matmul.riscv \ ay_matmul.riscv \ az_matmul.riscv \ bb_matmul.riscv \ bc_matmul.riscv \ bf_matmul.riscv \ bh_matmul.riscv \ bj_matmul.riscv \ bk_matmul.riscv \ bm_matmul.riscv \ bo_matmul.riscv \ br_matmul.riscv \ bs_matmul.riscv \ ce_matmul.riscv \ cf_matmul.riscv \ cg_matmul.riscv \ ci_matmul.riscv \ ck_matmul.riscv \ cl_matmul.riscv \ cm_matmul.riscv \ cs_matmul.riscv \ cv_matmul.riscv \ cy_matmul.riscv \ dc_matmul.riscv \ df_matmul.riscv \ dm_matmul.riscv \ do_matmul.riscv \ dr_matmul.riscv \ ds_matmul.riscv \ du_matmul.riscv \ dv_matmul.riscv \ #-------------------------------------------------------------------- # Build Tests #-------------------------------------------------------------------- %.hex: $(MAKE) -C $(dir $@) $(notdir $@) %.riscv.hex: % $(MAKE) -C $(dir $@) $(notdir $@) $(addprefix $(output_dir)/, $(addsuffix .hex, $(asm_p_tests) $(asm_pt_tests) $(asm_v_tests))): $(output_dir)/%.hex: $(tests_isa_dir)/%.hex mkdir -p $(output_dir) ln -fs $< $@ $(addprefix $(output_dir)/, $(addsuffix .hex, $(bmarks))): $(output_dir)/%.hex: $(tests_bmark_dir)/%.hex mkdir -p $(output_dir) ln -fs $< $@ $(addprefix $(output_dir)/, $(addsuffix .hex, $(mt_bmarks))): $(output_dir)/%.hex: $(test_mt_bmark_dir)/%.hex mkdir -p $(output_dir) ln -fs $< $@ $(addprefix $(output_dir)/, $(asm_p_tests) $(asm_pt_tests) $(asm_v_tests)): $(output_dir)/%: $(tests_isa_dir)/% mkdir -p $(output_dir) ln -fs $< $@ $(addprefix $(output_dir)/, $(bmarks)): $(output_dir)/%: $(tests_bmark_dir)/% mkdir -p $(output_dir) ln -fs $< $@ $(addprefix $(output_dir)/, $(mt_bmarks)): $(output_dir)/%: $(test_mt_bmark_dir)/% mkdir -p $(output_dir) ln -fs $< $@