Ibex Configurations

The ibex_top module has a large number of top-level parameters which configure the core (see Core Integration). This gives rise to a huge number of possible Ibex core configurations. To manage this complexity a number of named configurations is provided in the ibex_configs.yml file. A subset of these are ‘supported configurations’ which are the focus of verification and development activities.

Configuration Tool

A tool util/ibex_config.py is provided to work with the named configurations. This tool provides command line options to set Ibex parameters for various EDA tools for a named configuration. Various Ibex flows (e.g. the DV flow) use this tool internally and can be provided with a configuration name from util/ibex_config.py to work with.

Here is an example of using the configuration tool to get the FuseSoC options required to build the opentitan configuration.

# Request FuseSoC options required to build the 'opentitan' Ibex configuration.
./util/ibex_config.py opentitan fusesoc_opts

# The output of the tool
--RV32E=0 --RV32M=ibex_pkg::RV32MSingleCycle --RV32B=ibex_pkg::RV32BOTEarlGrey --RegFile=ibex_pkg::RegFileFF --BranchTargetALU=1 --WritebackStage=1 --ICache=1 --ICacheECC=1 --ICacheScramble=1 --BranchPredictor=0 --DbgTriggerEn=1 --SecureIbex=1 --PMPEnable=1 --PMPGranularity=0 --PMPNumRegions=16 --MHPMCounterNum=10 --MHPMCounterWidth=32

For further information about using the tool check the help provided on the command line.

# Get help on using ibex_config.py
./util/ibex_config.py -h

Supported Configurations

The current set of supported configurations are:

  • small - RV32IMC with two stage pipeline and 3 cycle multiplier

  • opentitan - The configuration used by the OpenTitan project

  • maxperf - RV32IMC with three stage pipeline and single cycle multiplier, maximum performance (using stable features) configuration.

  • maxperf-pmp-bmbalanced - maxperf configuration with PMP and the ‘balanced’ bit-manipulation configuration (Core Integration for details).