# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Ibex configurations files, holds the parameter sets that are tested under CI.
# Each configuration must specify the same set of parameters

# Two-stage pipeline without additional branch target ALU and 3 cycle multiplier
# (4 cycles for mulh), resulting in 2 stall cycles for mul (3 for mulh)
small:
  RV32E                    : 0
  RV32M                    : "cve2_pkg::RV32MFast"
  RV32B                    : "cve2_pkg::RV32BNone"
  RegFile                  : "cve2_pkg::RegFileFF"
  WritebackStage           : 0
  PMPEnable                : 0
  PMPGranularity           : 0
  PMPNumRegions            : 4

# Configuration to match that used in the OpenTitan project
opentitan:
  RV32E                    : 0
  RV32M                    : "cve2_pkg::RV32MSingleCycle"
  RV32B                    : "cve2_pkg::RV32BOTEarlGrey"
  RegFile                  : "cve2_pkg::RegFileFF"
  WritebackStage           : 1
  PMPEnable                : 1
  PMPGranularity           : 0
  PMPNumRegions            : 16

# ===============================
# * EXPERIMENTAL CONFIGURATIONS *
# ===============================

# Three-stage pipeline with additional branch traget ALU and 1 cycle multiplier
# (2 cycles for mulh) so mul does not stall (mulh stall 1 cycles). This is the
# maximum performance configuration.
experimental-maxperf:
  RV32E                    : 0
  RV32M                    : "cve2_pkg::RV32MSingleCycle"
  RV32B                    : "cve2_pkg::RV32BNone"
  RegFile                  : "cve2_pkg::RegFileFF"
  WritebackStage           : 1
  PMPEnable                : 0
  PMPGranularity           : 0
  PMPNumRegions            : 4

# experimental-maxperf config above plus PMP enabled with 16 regions.
experimental-maxperf-pmp:
  RV32E                    : 0
  RV32M                    : "cve2_pkg::RV32MSingleCycle"
  RV32B                    : "cve2_pkg::RV32BNone"
  RegFile                  : "cve2_pkg::RegFileFF"
  WritebackStage           : 1
  PMPEnable                : 1
  PMPGranularity           : 0
  PMPNumRegions            : 16

# experimental-maxperf-pmp config above with balanced bitmanip extension
experimental-maxperf-pmp-bmbalanced:
  RV32E                    : 0
  RV32M                    : "cve2_pkg::RV32MSingleCycle"
  RV32B                    : "cve2_pkg::RV32BBalanced"
  RegFile                  : "cve2_pkg::RegFileFF"
  WritebackStage           : 1
  PMPEnable                : 1
  PMPGranularity           : 0
  PMPNumRegions            : 16

# experimental-maxperf-pmp config above with full bitmanip extension
experimental-maxperf-pmp-bmfull:
  RV32E                    : 0
  RV32M                    : "cve2_pkg::RV32MSingleCycle"
  RV32B                    : "cve2_pkg::RV32BFull"
  RegFile                  : "cve2_pkg::RegFileFF"
  WritebackStage           : 1
  PMPEnable                : 1
  PMPGranularity           : 0
  PMPNumRegions            : 16

# experimental-maxperf with branch predictor switched on. This exists to allow
# easy use of Ibex with the branch predictor in particular for CI runs. The
# branch predictor will be enabled in all the 'maxperf' configs after further
# development.
experimental-branch-predictor:
  RV32E                    : 0
  RV32M                    : "cve2_pkg::RV32MSingleCycle"
  RV32B                    : "cve2_pkg::RV32BNone"
  RegFile                  : "cve2_pkg::RegFileFF"
  WritebackStage           : 1
  PMPEnable                : 0
  PMPGranularity           : 0
  PMPNumRegions            : 4

