Files
Toooba/builds/Resources/Include_RISCY_Config.mk
Samuel Stark 02ee2bdee0 Move RVFI toggle into Include_RISCY_Config.mk
Previously, Makefiles had to add new include paths and -D defines manually when they wanted to include RVFI.
This caused hard-to-diagnose errors in repositories consuming Toooba that expected -D RVFI to work.
This commit makes Include_RISCY_Config.mk take an optional make-variable argument RVFI, which defaults to "false", and adds the relevant paths and -D defines if it is set to "true".
This does not cover RVFI_DII, which is a simulation-only extension to allow instruction injection.
This commit also includes fixes to the Makefiles in ./builds/ to use this interface properly.
2024-06-03 15:51:48 +01:00

162 lines
5.6 KiB
Makefile

### -*-Makefile-*-
# Copyright (c) 2018-2019 Bluespec, Inc. All Rights Reserved
# ================================================================
# Macros from RISCY_HOME/procs/RV64G_OOO/Makefile
PROC := RV64G_OOO
# core size
CORE_SIZE ?= SMALL
# cache size
CACHE_SIZE ?= LARGE
# always include perf counter
PERF_COUNT := true
# dram type in simulation: VC707 or AWSF1
SIM_DRAM_TYPE := AWSF1
# use Xilinx FPU IP cores
USE_XILINX_FPU ?= false
# default to not including RVFI at all.
# setting this to true enables debug-displaying of executed instructions using the RVFI trace format. See Core.bsv.
RVFI ?= false
# Adding "-D RVFI_DII", linking $(CORE_DIR)/src_Verifier/BSV-RVFI-DII/SocketPacketUtils/socket_packet_utils.c
# into simulation, and adding $(CORE_DIR)/src_Verifier to the include path allows injecting instructions
# *and* retrieving those RVFI traces over a socket, which is used for TestRIG. See <https://github.com/CTSRD-CHERI/TestRIG/blob/master/RVFI-DII.md>.
# See the builds/*_RVFI_DII_*/ Makefiles.
# default 1 core
CORE_NUM ?= 1
# TSO or WEAK
TSO_MM ?= true
# Lr upgrades line to E (no forward progress guarantee)
LR_UP_TO_E ?= false
# Forbid LLC from respoding a load (toS) request with E state
NO_LOAD_RESP_E ?= false
# Use self inv cache? (only for WEAK mm), value is the max hits in D$
SELF_INV_CACHE ?=
# self inv D$ in case of system inst or trap
SYSTEM_SELF_INV_L1D ?= false
# security
SECURITY ?= false
SECURE_LLC ?= false
SECURE_FLUSH ?= false
SECURE_NONE ?= false
SECURE_MSHR ?= false
SECURE_ARBITER ?= false
DISABLE_SECURE_BW ?= false
SIM_LOG_LLC_PARTITION_NUM ?=
SIM_LOG_LLC_MSHR_BANK_NUM ?=
SIM_LLC_ARBITER_NUM ?=
SIM_LLC_ARBITER_LAT ?=
# default check cache deadlock and rename error
CHECK_DEADLOCK ?= true
RENAME_DEBUG ?= false
INSTR_PREFETCHER_LOCATION ?= NONE
INSTR_PREFETCHER_TYPE ?= SINGLE_WINDOW_TARGET
DATA_PREFETCHER_LOCATION ?= L1
DATA_PREFETCHER_TYPE ?= STRIDE
# clk frequency depends on core size
ifneq (,$(filter $(CORE_SIZE),TINY SMALL BOOM MEDIUM))
USER_CLK_PERIOD ?= 24
else ifneq (,$(filter $(CORE_SIZE),SMALL_WIDE LARGE))
USER_CLK_PERIOD ?= 32
else ifneq (,$(filter $(CORE_SIZE),LARGE_WIDE))
USER_CLK_PERIOD ?= 40
else
$(error unsupported CORE_SIZE)
endif
ifeq (,$(filter $(CACHE_SIZE),TEST SMALL LARGE MC_1MB MC_2MB))
$(error unsupported CACHE_SIZE)
endif
ifeq (,$(filter $(INSTR_PREFETCHER_LOCATION),NONE L1 L1LL LL))
$(error unsupported INSTR_PREFETCHER_LOCATION)
endif
ifeq (,$(filter $(INSTR_PREFETCHER_TYPE),NEXT_LINE_ON_MISS NEXT_LINE_ON_ALL SINGLE_WINDOW MULTI_WINDOW SINGLE_WINDOW_TARGET MULTI_WINDOW_TARGET))
$(error unsupported INSTR_PREFETCHER_TYPE)
endif
ifeq (,$(filter $(DATA_PREFETCHER_LOCATION),NONE L1 L1LL LL))
$(error unsupported DATA_PREFETCHER_LOCATION)
endif
ifeq (,$(filter $(DATA_PREFETCHER_TYPE),MARKOV MARKOV_ON_HIT MARKOV_ON_HIT_2 BLOCK STRIDE STRIDE_ADAPTIVE))
$(error unsupported DATA_PREFETCHER_TYPE)
endif
# ================================================================
# These are taken from: RISCY_HOME/procs/scripts/Makefile.common
XILINX_FP_FMA_LATENCY = 3
XILINX_INT_MUL_LATENCY = 2
BSC_COMPILATION_FLAGS += \
-D CORE_$(CORE_SIZE) \
-D NUM_CORES=$(CORE_NUM) \
-D CACHE_$(CACHE_SIZE) \
-D XILINX_FP_FMA_LATENCY=$(XILINX_FP_FMA_LATENCY) \
-D XILINX_INT_MUL_LATENCY=$(XILINX_INT_MUL_LATENCY) \
-D USE_BSV_BRAM_SYNC_FIFO \
-D INSTR_PREFETCHER_IN_$(INSTR_PREFETCHER_LOCATION) \
-D INSTR_PREFETCHER_$(INSTR_PREFETCHER_TYPE) \
-D DATA_PREFETCHER_IN_$(DATA_PREFETCHER_LOCATION) \
-D DATA_PREFETCHER_$(DATA_PREFETCHER_TYPE) \
-D CAP128 \
-D MEM512 \
-D RISCV \
-D TSO_MM \
-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 NO_SPEC_TRAINING -D NO_SPEC_REDIRECT -D NO_SPEC_STRAIGHT_PATH -D SPEC_RSB_FIXUP -D MELTDOWN_CF \
-D CheriBusBytes=64 \
-D CheriMasterIDWidth=1 \
-D CheriTransactionIDWidth=6
# TODO:
# -D SELF_INV_CACHE -D L1D_MAX_HITS=$(SELF_INV_CACHE)
# -D SYSTEM_SELF_INV_L1D
# -D LR_UP_TO_E
# -D NO_LOAD_RESP_E
# various SECURITY related flags
# -D PERF_COUNT -D CHECK_DEADLOCK -D RENAME_DEBUG ...
# -D NO_SPEC_RSB_PUSH -D NO_SPEC_STL
# +RTS -K1G -RTS " --bscflags=" -steps-max-intervals 200 -check-assert
# ================================================================
# ================================================================
# Search path for bsc for .bsv files
CORE_DIR ?= $(REPO)
COREW_DIRS = $(CORE_DIR)/src_Core/Core:$(CORE_DIR)/src_Core/CPU:$(CORE_DIR)/src_Core/ISA:$(CORE_DIR)/src_Core/PLIC:$(CORE_DIR)/src_Core/Debug_Module:$(CORE_DIR)/src_Core/BSV_Additional_Libs:$(CORE_DIR)/src_Core/RISCY_OOO/procs/RV64G_OOO:$(CORE_DIR)/src_Core/RISCY_OOO/procs/lib:$(CORE_DIR)/src_Core/RISCY_OOO/coherence/src:$(CORE_DIR)/src_Core/RISCY_OOO/fpgautils/lib
WINDCORE_IFC_DIR ?= $(CORE_DIR)/libs/WindCoreInterface
CHERICAPLIB_DIR ?= $(CORE_DIR)/libs/cheri-cap-lib
TAG_CONTROLLER_DIR ?= $(CORE_DIR)/libs/TagController
RISCV_HPM_EVENTS_DIR ?= $(CORE_DIR)/libs/RISCV_HPM_Events
TAG_CONTROLLER_DIRS = $(TAG_CONTROLLER_DIR)/TagController:$(TAG_CONTROLLER_DIR)/TagController/CacheCore
BLUESTUFFDIR ?= $(CORE_DIR)/libs/BlueStuff
include $(BLUESTUFFDIR)/bluestuff.inc.mk # sets the BLUESTUFF_DIRS variable
# 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
BSC_PATH += -p +:$(BSC_CONTRIB_DIRS):$(WINDCORE_IFC_DIR):$(RISCV_HPM_EVENTS_DIR):$(CHERICAPLIB_DIR):$(TAG_CONTROLLER_DIRS):$(COREW_DIRS):$(BLUESTUFF_DIRS)
ifeq ($(RVFI),true)
BSC_COMPILATION_FLAGS += \
-D RVFI
BSC_PATH += -p +:$(CORE_DIR)/src_Verifier/BSV-RVFI-DII
endif