Files
Toooba/src_SSITH_P3/Makefile
2022-08-15 16:18:23 +00:00

179 lines
6.5 KiB
Makefile

### -*-Makefile-*-
# ================================================================
.PHONY: help
help:
@echo ' make compile Recompile Core (CPU, caches) into Verilog_RTL'
@echo ' NOTE: needs Bluespec bsc compiler'
@echo ' make tagsparams Generates the CHERI tag controller parameters source file'
@echo ''
@echo ' make clean Remove intermediate build-files'
@echo ' make full_clean Restore this directory to pristine state'
.PHONY: compile
compile: compile_sim compile_synth
# ================================================================
REPO ?= $(CURDIR)/..
ARCH ?= RV64ACDFIMSUxCHERI
# ================================================================
# RISC-V config macros passed into Bluespec 'bsc' compiler
BSC_COMPILATION_FLAGS += \
-D RV64 \
-D ISA_PRIV_M -D ISA_PRIV_S -D ISA_PRIV_U \
-D SV39 \
-D ISA_I -D ISA_M -D ISA_A -D ISA_F -D ISA_D -D ISA_FD_DIV -D ISA_C \
-D CheriBusBytes=8 \
-D CheriMasterIDWidth=1 \
-D CheriTransactionIDWidth=6 \
-D PERFORMANCE_MONITORING \
-D SHIFT_BARREL \
-D MULT_SERIAL \
-D Near_Mem_Caches \
-D FABRIC64 \
-D CAP128 \
-D MEM64 \
-D RISCV \
-D NO_SPEC_TRAINING -D NO_SPEC_REDIRECT -D NO_SPEC_STRAIGHT_PATH -D SPEC_RSB_FIXUP -D NO_SPEC_RSB_PUSH -D NO_SPEC_STL \
-D TSO_MM \
-D INCLUDE_GDB_CONTROL \
-D BRVF_TRACE \
-D XILINX_BSCAN -D JTAG_TAP
#-D MELTDOWN_CF \
#-D NO_SPEC_TRAINING -D NO_SPEC_REDIRECT -D NO_SPEC_STRAIGHT_PATH -D SPEC_RSB_FIXUP -D NO_SPEC_STL \
#-D NO_SPEC_TRAINING -D NO_SPEC_REDIRECT -D NO_SPEC_STRAIGHT_PATH -D SPEC_RSB_FIXUP -D NO_SPEC_RSB_PUSH -D NO_SPEC_STL \
#-D NO_SPEC_STRAIGHT_PATH -D SPEC_RSB_FIXUP \
# Synth only BSC_COMPILATION_FLAGS
SYNTH_BSC_OPTIONS = -D XILINX_XCVU9P
# Sim only BSC_COMPILATION_FLAGS
SIM_BSC_OPTIONS = -D BSIM
# Set number of cores for RISCY config
CORE_NUM = 2
# Only used if we don't have INCLUDE_GDB_CONTROL
# -D EXTERNAL_DEBUG_MODULE
include $(REPO)/builds/Resources/Include_RISCY_Config.mk
# ================================================================
# Search path for bsc for .bsv files
COREDIR ?= $(REPO)
COREW_DIRS = $(CURDIR)/src_BSV:$(COREDIR)/src_Core/Core:$(COREDIR)/src_Core/CPU:$(COREDIR)/src_Core/ISA:$(COREDIR)/src_Core/PLIC:$(COREDIR)/src_Core/Debug_Module:$(COREDIR)/src_Core/BSV_Additional_Libs:$(COREDIR)/src_Core/RISCY_OOO/procs/RV64G_OOO:$(COREDIR)/src_Core/RISCY_OOO/procs/lib:$(COREDIR)/src_Core/RISCY_OOO/coherence/src:$(COREDIR)/src_Core/RISCY_OOO/fpgautils/lib
WINDCOREIFCDIR ?= $(COREDIR)/libs/WindCoreInterface
CHERICAPLIBDIR ?= $(COREDIR)/libs/cheri-cap-lib
TAGCONTROLLERDIR ?= $(COREDIR)/libs/TagController
RISCVHPMEVENTSDIR ?= $(COREDIR)/libs/RISCV_HPM_Events
TAGCONTROLLER_DIRS = $(TAGCONTROLLERDIR)/TagController:$(TAGCONTROLLERDIR)/TagController/CacheCore
BLUESTUFFDIR ?= $(COREDIR)/libs/BlueStuff
BLUEAXI4DIR = $(BLUESTUFFDIR)/BlueAXI4
BLUEAXI4DIRS = $(BLUEAXI4DIR):$(BLUEAXI4DIR)/AXI4:$(BLUEAXI4DIR)/AXI4Lite:$(BLUEAXI4DIR)/AXI4Stream:$(BLUEAXI4DIR)/BlueUnixBridges
BLUEUNIXBRIDGESDIR = $(BLUEAXI4DIR)/BlueUnixBridges
BLUEBASICSDIR = $(BLUESTUFFDIR)/BlueBasics
BLUEUTILSDIR = $(BLUESTUFFDIR)/BlueUtils
BLUESTUFF_DIRS = $(BLUESTUFFDIR):$(BLUEAXI4DIRS):$(BLUEBASICSDIR):$(BLUEUTILSDIR):$(BLUESTUFFDIR)/Stratix10ChipID
# search path for bsc imports
ifdef BSC_CONTRIB_DIR
BSC_CONTRIB_LIB_DIR = $(BSC_CONTRIB_DIR)/lib/Libraries
else
BSC_CONTRIB_LIB_DIR = %/Libraries
endif
BSC_CONTRIB_DIRS = $(BSC_CONTRIB_LIB_DIR)/Bus
BSVPATH = +:$(BSC_CONTRIB_DIRS):$(WINDCOREIFCDIR):$(RISCVHPMEVENTSDIR):$(CHERICAPLIBDIR):$(TAGCONTROLLER_DIRS):$(COREW_DIRS):$(BLUESTUFF_DIRS)
BSC_PATH = -p $(BSVPATH)
# ----------------
# Top-level file and module
TOPFILE = src_BSV/P3_Core.bsv
TOPMODULE = mkP3_Core
# ================================================================
# More bsc compilation flags
BSC_COMPILATION_FLAGS += \
-keep-fires -aggressive-conditions \
-no-warn-action-shadowing \
-suppress-warnings G0020 \
+RTS -K128M -RTS -show-range-conflict \
-unspecified-to X -opt-undetermined-vals \
-steps-max-intervals 10000000 \
-steps-warn-interval 1000000
# ================================================================
# Generate Bluespec CHERI tag controller source file
CAPSIZE = 128
TAGS_STRUCT = 0 64
TAGS_ALIGN = 32
.PHONY: tagsparams
tagsparams: src_BSV/TagTableStructure.bsv
src_BSV/TagTableStructure.bsv: $(REPO)/libs/TagController/tagsparams.py
@echo "INFO: Re-generating CHERI tag controller parameters"
$^ -v -c $(CAPSIZE) -s $(TAGS_STRUCT:"%"=%) -a $(TAGS_ALIGN) --data-store-base-addr 0xc0000000 -b $@ 0xbfff8000 0x17ffff000
@echo "INFO: Re-generated CHERI tag controller parameters"
.PHONY: generate_hpm_vector
generate_hpm_vector: GenerateHPMVector.bsv
GenerateHPMVector.bsv: $(RISCVHPMEVENTSDIR)/parse_counters.py
@echo "INFO: Re-generating GenerateHPMVector bluespec file"
$^ $(RISCVHPMEVENTSDIR)/counters.yaml -m ProcTypes -b $@
@echo "INFO: Re-generated GenerateHPMVector bluespec file"
.PHONY: stat_counters
stat_counters: StatCounters.bsv
StatCounters.bsv: $(RISCVHPMEVENTSDIR)/parse_counters.py
@echo "INFO: Re-generating HPM events struct bluepsec file"
$^ $(RISCVHPMEVENTSDIR)/counters.yaml -m ProcTypes -s $@
@echo "INFO: Re-generated HPM events struct bluespec file"
compile_sim: tagsparams stat_counters generate_hpm_vector
compile_synth: tagsparams stat_counters generate_hpm_vector
# ================================================================
# Generate Verilog RTL from BSV sources (needs Bluespec 'bsc' compiler)
BUILD_DIRS_SYNTH = -bdir build_dir_synth -info-dir build_dir_synth
BUILD_DIRS_SIM = -bdir build_dir_sim -info-dir build_dir_sim
build_dir_synth:
mkdir -p $@
build_dir_sim:
mkdir -p $@
Verilog_RTL:
mkdir -p $@
Verilog_RTL_sim:
mkdir -p $@
.PHONY: compile_synth
compile_synth: | build_dir_synth Verilog_RTL
@echo "INFO: Generating RTL into Verilog_RTL for synthesis ..."
bsc -u -elab -verilog -vdir Verilog_RTL $(BUILD_DIRS_SYNTH) $(BSC_COMPILATION_FLAGS) $(SYNTH_BSC_OPTIONS) $(BSC_PATH) $(TOPFILE)
@echo "INFO: Generated Synth RTL into Verilog_RTL"
.PHONY: compile_sim
compile_sim: | build_dir_sim Verilog_RTL_sim
@echo "INFO: Generating RTL into Verilog_RTL_sim for simulation ..."
bsc -u -elab -verilog -vdir Verilog_RTL_sim $(BUILD_DIRS_SIM) $(BSC_COMPILATION_FLAGS) $(SIM_BSC_OPTIONS) $(BSC_PATH) $(TOPFILE)
# ================================================================
.PHONY: clean
clean:
rm -r -f *~ Makefile_* build_dir_sim build_dir_synth src_BSV/TagTableStructure.bsv
.PHONY: full_clean
full_clean: clean
rm -r -f *.log Verilog_RTL Verilog_RTL_sim
# ================================================================