MODEL := Top FPGAMODEL := FPGATop 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 $(base_dir)/hwacha/$(src_path)/*.scala disasm := 2> which_disasm := $(shell which riscv-dis) ifneq ($(which_disasm),) disasm := 3>&1 1>&2 2>&3 | $(which_disasm) --extension=hwacha > endif timeout_cycles = 100000000 #-------------------------------------------------------------------- # Verilog Generation #-------------------------------------------------------------------- # VLSI Backend $(generated_dir)/$(MODEL).v: $(chisel_srcs) cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate $(MODEL) --backend rocketchip.RocketChipBackend --targetDir $(generated_dir) --noInlineMem --configInstance rocketchip.DefaultVLSIConfig" cd $(generated_dir) && \ if [ -a $(MODEL).conf ]; then \ sed -i 's*^*$(vlsi_mem_gen) *' $(MODEL).conf && \ sed -i 's*$$* >> $(MODEL).v*' $(MODEL).conf && \ sh $(MODEL).conf; \ fi # FPGA Backend $(generated_dir)/$(FPGAMODEL).v: $(chisel_srcs) cd $(base_dir) && mkdir -p $(generated_dir) && $(SBT) "project rocketchip" "elaborate $(FPGAMODEL) --backend fpga --targetDir $(generated_dir) --configInstance rocketchip.DefaultFPGAConfig" $(generated_dir)/$(FPGAMODEL)Mem.v: $(generated_dir)/$(FPGAMODEL).conf $(mem_gen) $(mem_gen) $(generated_dir)/$(FPGAMODEL).conf > $(generated_dir)/$(FPGAMODEL)Mem.v $(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.DefaultVLSIConfig" #-------------------------------------------------------------------- # 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 \ vecasm_p_tests = \ rv64uv-p-wakeup \ rv64uv-p-fence \ rv64uv-p-utidx \ rv64uv-p-vmsv \ rv64uv-p-vmvv \ rv64uv-p-vfmvv \ rv64uv-p-vfmsv_d \ rv64uv-p-vfmsv_s \ rv64uv-p-vsetcfg \ rv64uv-p-vsetcfgi \ rv64uv-p-vsetvl \ rv64uv-p-keepcfg \ rv64uv-p-movz \ rv64uv-p-movn \ rv64uv-p-fmovz \ rv64uv-p-fmovn \ rv64uv-p-ld \ rv64uv-p-lw \ rv64uv-p-lwu \ rv64uv-p-lh \ rv64uv-p-lhu \ rv64uv-p-lb \ rv64uv-p-lbu \ rv64uv-p-sd \ rv64uv-p-sw \ rv64uv-p-sh \ rv64uv-p-sb \ rv64uv-p-fld \ rv64uv-p-flw \ rv64uv-p-fsd \ rv64uv-p-fsw \ rv64uv-p-fcvt \ rv64uv-p-vvadd_d \ rv64uv-p-vvadd_fw \ rv64uv-p-vvadd_fd \ rv64uv-p-vvadd_w \ rv64uv-p-vvmul_d \ rv64uv-p-amoadd_d \ rv64uv-p-amoand_d \ rv64uv-p-amoor_d \ rv64uv-p-amoxor_d \ rv64uv-p-amomax_d \ rv64uv-p-amomin_d \ rv64uv-p-amomaxu_d \ rv64uv-p-amominu_d \ rv64uv-p-amoswap_d \ rv64uv-p-amoadd_w \ rv64uv-p-amoand_w \ rv64uv-p-amoor_w \ rv64uv-p-amoxor_w \ rv64uv-p-amomax_w \ rv64uv-p-amomin_w \ rv64uv-p-amomaxu_w \ rv64uv-p-amominu_w \ rv64uv-p-amoswap_w \ rv64uv-p-imul \ rv64uv-p-fma \ rv64uv-p-fma_many \ rv64ui-p-vec-mul \ rv64ui-p-vec-mulw \ rv64ui-p-vec-mulh \ rv64ui-p-vec-mulhu \ rv64ui-p-vec-mulhsu \ rv64ui-p-vec-addi \ rv64ui-p-vec-add \ rv64ui-p-vec-addiw \ rv64ui-p-vec-addw \ rv64ui-p-vec-and \ rv64ui-p-vec-andi \ rv64ui-p-vec-lui \ rv64ui-p-vec-or \ rv64ui-p-vec-ori \ rv64ui-p-vec-slt \ rv64ui-p-vec-sltu \ rv64ui-p-vec-slti \ rv64ui-p-vec-sltiu \ rv64ui-p-vec-slli \ rv64ui-p-vec-sll \ rv64ui-p-vec-slliw \ rv64ui-p-vec-sllw \ rv64ui-p-vec-srai \ rv64ui-p-vec-sra \ rv64ui-p-vec-sraiw \ rv64ui-p-vec-sraw \ rv64ui-p-vec-srli \ rv64ui-p-vec-srl \ rv64ui-p-vec-srliw \ rv64ui-p-vec-srlw \ rv64ui-p-vec-sub \ rv64ui-p-vec-subw \ rv64ui-p-vec-xor \ rv64ui-p-vec-xori \ rv64uf-p-vec-fadd \ rv64uf-p-vec-fsgnj \ rv64uf-p-vec-fmin \ rv64uf-p-vec-fmadd \ rv64uf-p-vec-fcvt_w \ rv64uf-p-vec-fcvt \ rv64uf-p-vec-fcmp \ rv64sv-p-illegal_cfg_nxpr \ rv64sv-p-illegal_cfg_nfpr \ rv64sv-p-illegal_inst \ rv64sv-p-illegal_tvec_regid \ rv64sv-p-illegal_vt_inst \ rv64sv-p-illegal_vt_regid \ rv64sv-p-ma_utld \ rv64sv-p-ma_utsd \ rv64sv-p-ma_vld \ rv64sv-p-ma_vsd \ rv64sv-p-ma_vt_inst \ rv64sv-p-privileged_inst \ vecasm_v_tests = \ rv64uv-v-wakeup \ rv64uv-v-fence \ rv64uv-v-utidx \ rv64uv-v-vmsv \ rv64uv-v-vmvv \ rv64uv-v-vfmvv \ rv64uv-v-vfmsv_d \ rv64uv-v-vfmsv_s \ rv64uv-v-vsetcfg \ rv64uv-v-vsetcfgi \ rv64uv-v-vsetvl \ rv64uv-v-keepcfg \ rv64uv-v-movz \ rv64uv-v-movn \ rv64uv-v-fmovz \ rv64uv-v-fmovn \ rv64uv-v-ld \ rv64uv-v-lw \ rv64uv-v-lwu \ rv64uv-v-lh \ rv64uv-v-lhu \ rv64uv-v-lb \ rv64uv-v-lbu \ rv64uv-v-sd \ rv64uv-v-sw \ rv64uv-v-sh \ rv64uv-v-sb \ rv64uv-v-fld \ rv64uv-v-flw \ rv64uv-v-fsd \ rv64uv-v-fsw \ rv64uv-v-fcvt \ rv64uv-v-vvadd_d \ rv64uv-v-vvadd_fw \ rv64uv-v-vvadd_fd \ rv64uv-v-vvadd_w \ rv64uv-v-vvmul_d \ rv64uv-v-amoadd_d \ rv64uv-v-amoswap_d \ rv64uv-v-amoand_d \ rv64uv-v-amoor_d \ rv64uv-v-amomax_d \ rv64uv-v-amomin_d \ rv64uv-v-amomaxu_d \ rv64uv-v-amominu_d \ rv64uv-v-amoadd_w \ rv64uv-v-amoswap_w \ rv64uv-v-amoand_w \ rv64uv-v-amoor_w \ rv64uv-v-amomax_w \ rv64uv-v-amomin_w \ rv64uv-v-amomaxu_w \ rv64uv-v-amominu_w \ rv64uv-v-imul \ rv64uv-v-fma \ rv64uv-v-fma_many \ rv64ui-v-vec-mul \ rv64ui-v-vec-mulw \ rv64ui-v-vec-mulh \ rv64ui-v-vec-mulhu \ rv64ui-v-vec-mulhsu \ rv64ui-v-vec-addi \ rv64ui-v-vec-add \ rv64ui-v-vec-addiw \ rv64ui-v-vec-addw \ rv64ui-v-vec-and \ rv64ui-v-vec-andi \ rv64ui-v-vec-lui \ rv64ui-v-vec-or \ rv64ui-v-vec-ori \ rv64ui-v-vec-slt \ rv64ui-v-vec-sltu \ rv64ui-v-vec-slti \ rv64ui-v-vec-sltiu \ rv64ui-v-vec-slli \ rv64ui-v-vec-sll \ rv64ui-v-vec-slliw \ rv64ui-v-vec-sllw \ rv64ui-v-vec-srai \ rv64ui-v-vec-sra \ rv64ui-v-vec-sraiw \ rv64ui-v-vec-sraw \ rv64ui-v-vec-srli \ rv64ui-v-vec-srl \ rv64ui-v-vec-srliw \ rv64ui-v-vec-srlw \ rv64ui-v-vec-sub \ rv64ui-v-vec-subw \ rv64ui-v-vec-xor \ rv64ui-v-vec-xori \ rv64uf-v-vec-fadd \ rv64uf-v-vec-fsgnj \ rv64uf-v-vec-fmin \ rv64uf-v-vec-fmadd \ rv64uf-v-vec-fcvt_w \ rv64uf-v-vec-fcvt \ rv64uf-v-vec-fcmp \ vecasm_pt_tests = \ rv64uv-pt-wakeup \ rv64uv-pt-fence \ rv64uv-pt-vvadd_d \ rv64uv-pt-vvadd_fw \ rv64uv-pt-vvadd_fd \ rv64uv-pt-vvadd_w \ rv64uv-pt-vvmul_d \ rv64uv-pt-fcvt \ rv64uv-pt-utidx \ rv64uv-pt-vmvv \ rv64uv-pt-vmsv \ rv64uv-pt-vfmvv \ rv64uv-pt-vfmsv_d \ rv64uv-pt-vfmsv_s \ rv64uv-pt-vsetcfg \ rv64uv-pt-vsetcfgi \ rv64uv-pt-vsetvl \ rv64uv-pt-keepcfg \ rv64uv-pt-movz \ rv64uv-pt-movn \ rv64uv-pt-fmovz \ rv64uv-pt-fmovn \ rv64uv-pt-ld \ rv64uv-pt-lw \ rv64uv-pt-lwu \ rv64uv-pt-lh \ rv64uv-pt-lhu \ rv64uv-pt-lb \ rv64uv-pt-lbu \ rv64uv-pt-sd \ rv64uv-pt-sw \ rv64uv-pt-sh \ rv64uv-pt-sb \ rv64uv-pt-fld \ rv64uv-pt-flw \ rv64uv-pt-fsd \ rv64uv-pt-fsw \ rv64uv-pt-amoadd_d \ rv64uv-pt-amoswap_d \ rv64uv-pt-amoand_d \ rv64uv-pt-amoor_d \ rv64uv-pt-amomax_d \ rv64uv-pt-amomin_d \ rv64uv-pt-amomaxu_d \ rv64uv-pt-amominu_d \ rv64uv-pt-amoadd_w \ rv64uv-pt-amoswap_w \ rv64uv-pt-amoand_w \ rv64uv-pt-amoor_w \ rv64uv-pt-amomax_w \ rv64uv-pt-amomin_w \ rv64uv-pt-amomaxu_w \ rv64uv-pt-amominu_w \ rv64uv-pt-imul \ rv64uv-pt-fma \ rv64uv-pt-fma_many \ rv64ui-pt-vec-mul \ rv64ui-pt-vec-mulw \ rv64ui-pt-vec-mulh \ rv64ui-pt-vec-mulhu \ rv64ui-pt-vec-mulhsu \ rv64ui-pt-vec-addi \ rv64ui-pt-vec-add \ rv64ui-pt-vec-addiw \ rv64ui-pt-vec-addw \ rv64ui-pt-vec-and \ rv64ui-pt-vec-andi \ rv64ui-pt-vec-lui \ rv64ui-pt-vec-or \ rv64ui-pt-vec-ori \ rv64ui-pt-vec-slt \ rv64ui-pt-vec-sltu \ rv64ui-pt-vec-slti \ rv64ui-pt-vec-sltiu \ rv64ui-pt-vec-slli \ rv64ui-pt-vec-sll \ rv64ui-pt-vec-slliw \ rv64ui-pt-vec-sllw \ rv64ui-pt-vec-srai \ rv64ui-pt-vec-sra \ rv64ui-pt-vec-sraiw \ rv64ui-pt-vec-sraw \ rv64ui-pt-vec-srli \ rv64ui-pt-vec-srl \ rv64ui-pt-vec-srliw \ rv64ui-pt-vec-srlw \ rv64ui-pt-vec-sub \ rv64ui-pt-vec-subw \ rv64ui-pt-vec-xor \ rv64ui-pt-vec-xori \ rv64uf-pt-vec-fadd \ rv64uf-pt-vec-fsgnj \ rv64uf-pt-vec-fmin \ rv64uf-pt-vec-fmadd \ rv64uf-pt-vec-fcvt_w \ rv64uf-pt-vec-fcvt \ rv64uf-pt-vec-fcmp \ #-------------------------------------------------------------------- # 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 $< $@