# UCB use only -include $(base_dir)/Makefrag-refchip MODEL := Top CXX := g++ CXXFLAGS := -O1 SBT := java -Xmx2048M -Xss8M -XX:MaxPermSize=128M -jar sbt-launch.jar 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 riscv-dis) ifneq ($(which_disasm),) disasm := 3>&1 1>&2 2>&3 | $(which_disasm) $(DISASM_EXTENSION) > endif timeout_cycles = 100000000 #-------------------------------------------------------------------- # Verilog Generation #-------------------------------------------------------------------- $(generated_dir)/$(MODEL).v: $(chisel_srcs) cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate $(MODEL) --backend $(BACKEND) --targetDir $(generated_dir) --noInlineMem --configInstance rocketchip.$(CONFIG) --configDump" cd $(generated_dir) && \ if [ -a $(MODEL).conf ]; then \ $(mem_gen) $(generated_dir)/$(MODEL).conf >> $(generated_dir)/$(MODEL).v; \ fi $(generated_dir)/consts.vh: $(generated_dir)/rocketchip.$(CONFIG).prm echo "\`ifndef CONST_VH" > $@ echo "\`define CONST_VH" >> $@ sed -r 's/\(([A-Za-z0-9_]+),([A-Za-z0-9_]+)\)/`define \1 \2/' $< >> $@ echo "\`endif // CONST_VH" >> $@ $(generated_dir)/memdessertMemDessert.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) --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-structural \ rv64si-p-coreid \ rv64si-p-csr \ rv64si-pm-ipi \ rv64ui-pm-lrsc \ 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-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 \ #vec-vvadd.riscv \ #vec-cmplxmult.riscv \ #vec-matmul.riscv \ #mt-vvadd.riscv \ #mt-matmul.riscv \ #-------------------------------------------------------------------- # Multi-threaded Benchmark Tests #-------------------------------------------------------------------- test_mt_bmark_dir = $(base_dir)/riscv-tools/riscv-tests/mt mt_bmarks = \ ab_matmul.riscv \ ab_vvadd.riscv \ ad_matmul.riscv \ ad_vvadd.riscv \ ae_matmul.riscv \ ae_vvadd.riscv \ af_matmul.riscv \ af_vvadd.riscv \ ag_matmul.riscv \ ag_vvadd.riscv \ ai_matmul.riscv \ ai_vvadd.riscv \ aj_vvadd.riscv \ ak_matmul.riscv \ ak_vvadd.riscv \ al_matmul.riscv \ al_vvadd.riscv \ am_matmul.riscv \ am_vvadd.riscv \ an_matmul.riscv \ ap_matmul.riscv \ ap_vvadd.riscv \ aq_matmul.riscv \ aq_vvadd.riscv \ ar_matmul.riscv \ ar_vvadd.riscv \ as_matmul.riscv \ as_vvadd.riscv \ at_matmul.riscv \ at_vvadd.riscv \ av_matmul.riscv \ av_vvadd.riscv \ ay_matmul.riscv \ ay_vvadd.riscv \ az_matmul.riscv \ az_vvadd.riscv \ ba_matmul.riscv \ ba_vvadd.riscv \ bb_matmul.riscv \ bb_vvadd.riscv \ bc_matmul.riscv \ bc_vvadd.riscv \ be_matmul.riscv \ be_vvadd.riscv \ bf_matmul.riscv \ bf_vvadd.riscv \ bh_matmul.riscv \ bh_vvadd.riscv \ bj_matmul.riscv \ bj_vvadd.riscv \ bk_matmul.riscv \ bk_vvadd.riscv \ bm_matmul.riscv \ bm_vvadd.riscv \ bn_matmul.riscv \ bn_vvadd.riscv \ bo_matmul.riscv \ bo_vvadd.riscv \ bp_matmul.riscv \ bp_vvadd.riscv \ br_matmul.riscv \ br_vvadd.riscv \ bs_matmul.riscv \ bs_vvadd.riscv \ bt_matmul.riscv \ bt_vvadd.riscv \ #-------------------------------------------------------------------- # Build Tests #-------------------------------------------------------------------- %.hex: $(MAKE) -C $(dir $@) $(notdir $@) %.riscv.hex: % $(MAKE) -C $(dir $@) $(notdir $@) $(addprefix $(output_dir)/, $(addsuffix .hex, $(asm_p_tests) $(asm_v_tests) $(vecasm_p_tests) $(vecasm_v_tests) $(vecasm_pt_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 $< $@