// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
  // Sim modes are collection of build_opts and run_opts
  // These are only set on the command line
  // These are different from the build modes in the sense that these collection of
  // options are appended to actual build_modes
  build_modes: [
    {
      name: gui
      is_sim_mode: 1
      en_build_modes: ["{tool}_gui"]
    }
    {
      name: waves
      is_sim_mode: 1
      en_build_modes: ["{tool}_waves"]
    }
    {
      name: waves_off
      is_sim_mode: 1
      en_build_modes: ["{tool}_waves_off"]
    }
    {
      name: cov
      is_sim_mode: 1
      en_build_modes: ["{tool}_cov"]
      // This plusarg is retrieved in `hw/dv/sv/dv_lib/dv_base_test.sv`. If not set, the coverage
      // collection components are not created.
      run_opts: ["+en_cov=1"]
    }
    {
      name: profile
      is_sim_mode: 1
      en_build_modes: ["{tool}_profile"]
    }
    {
      name: xprop
      is_sim_mode: 1
      en_build_modes: ["{tool}_xprop"]
    }
    {
      name: loopdetect
      is_sim_mode: 1
      en_build_modes: ["{tool}_loopdetect"]
    }
    // Enables randomization of testbench / RTL build.
    //
    // Build randomization is achieved by passing `--build-seed <optional-seed>` on the dvsim
    // command-line. If not passed, the build is not randomized. Build randomization is achieved
    // in two ways. One of them is setting the pre-processor macro `BUILD_SEED` to the seed value,
    // which is done below. The SystemVerilog testbench sources can use the `BUILD_SEED` macro
    // value to set some design constants (such as parameters) upon instantiation. The `BUILD_SEED`,
    // if not set externally (by passing the --build-seed switch) is set to 1 in 
    // `hw/dv/sv/dv_utils/dv_macros.svh`. The other way is by passing the {seed} value to utility 
    // scripts that generate packages that contain randomized constants. These utility scripts can 
    // be invoked as a `pre_build_cmd`, wrapped within the `build_seed` sim mode in the DUT 
    // simulation configuration Hjson file. All forms of build randomization must be wrapped within
    // this `build_seed` sim mode. They will all use the same {seed} value, which allows us to 
    // deterministically reproduce failures. The `--build-seed` switch is expected to be passed 
    // when running the nightly regressions. The `seed` value set by dvsim is a 32-bit unsigned 
    // integer (unless specified on the command-line).
    {
      name: build_seed
      is_sim_mode: 1
      build_opts: ["+define+BUILD_SEED={seed}"]
    }
  ]

  run_modes: [
    {
      name: uvm_trace
      run_opts: ["+UVM_PHASE_TRACE", "+UVM_CONFIG_DB_TRACE", "+UVM_OBJECTION_TRACE"]
    }
  ]
}
