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.
162 lines
5.6 KiB
Makefile
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 |