##############################################################################################
## RVCore (RISC-V Core Processor) vXXXX-XX-XXx        since  2018-08-07  ArchLab. TokyoTech ##
##############################################################################################
# Verilog HDL simulator
SIM = iverilog
#SIM = verilator

# General
TOPSOURCE    = top.v
OTHERSOURCE  = main.v uart.v debug.v
OTHERSOURCE += proc.v

FLAGS  = -DSERIAL_WCNT=2 -DNO_IP

ifdef BENCH
	FLAGS += -DMEMFILE=\"${BENCH}\" -DMEM_SIZE=1024*32 -DNO_SERIAL -DPROGRESS
endif

ifdef pipe
	FLAGS += -DPIPELINE
endif

ifdef simple
	FLAGS += -DD_SIMPLE_ALU -DD_SIMPLE_DMOUT -DD_SIMPLE_BTB
endif
ifdef optif
	FLAGS += -DD_SIMPLE_ALU -DD_SIMPLE_DMOUT
endif
ifdef optalu
	FLAGS += -DD_SIMPLE_BTB
endif

ifeq (${SIM},iverilog)
	FLAGS += -o simv
endif
ifeq (${SIM},verilator)
	FLAGS += --public --top-module top --clk CLK
	FLAGS += --x-assign 0 --x-initial 0
	FLAGS += --no-threads -O2
	FLAGS += -Wno-WIDTH
	FLAGS += --exe sim.cpp --cc
endif

.PHONY: all vex clean allclean run result
###############################################################################
all: rvcore

rvcore:
	${SIM} ${FLAGS} ${TOPSOURCE} ${OTHERSOURCE}
ifeq (${SIM},verilator)
	make -j -C obj_dir -f Vtop.mk Vtop
	cp obj_dir/Vtop simv
endif

pipe:
	make pipe=1

###############################################################################
run: simv
	./simv

###############################################################################
# dhrystone : NUMBER_OF_RUNS=2000
# coremark  : ITERATIONS=2 
###############################################################################
dhrystone:
	make BENCH="bench/dhrystone.mem"
coremark:
	make BENCH="bench/coremark.mem"

###############################################################################
clean:
	rm -rf obj_dir
	rm -f simv
	rm -f verify.txt trace.txt diff.txt
allclean:
	make clean
	rm -rf main.cache main.hw main.runs main.sim main.ip_user_files slurm-*.out

###############################################################################
