(Experimental) Using On Premise FPGAs

FireSim now includes support for Vitis U250 FPGAs! This section describes a use case on how to setup FireSim for building/running Vitis simulations locally. This section assumes you are very familiar with the normal FireSim setup process, commandline, configuration files, and terminology.


First, install and setup Vitis/Vivado/XRT to use the U250.

Next, setup the FireSim repository.

  1. Clone the FireSim repository

  2. Use the scripts/machine-launch-script.sh to install Conda and the SW packages needed

  3. Continue with the FireSim setup as mentioned by Setting up the FireSim Repo with the following modifications:

    • Build your own RISC-V toolchain (see the options given by build-setup.sh)

    • Run firesim managerinit --platform vitis

Bitstream Build

  1. Add the following build recipe to your config_build_recipes.yaml file. This configuration is a simple singlecore Rocket configuration with a single DRAM channel and no debugging features. Future support will come with more DRAM channels, and the full suite of FireSim debugging features.

    DESIGN: FireSim
    TARGET_CONFIG: FireSimRocketConfig
    PLATFORM_CONFIG: BaseVitisConfig
    deploy_triplet: null
    post_build_hook: null
    metasim_customruntimeconfig: null
    bit_builder_recipe: bit-builder-recipes/vitis.yaml
  1. Modify the config_build.yaml to the following (leaving other sections intact). Note that you should modify default_build_dir appropriately. This sets up running builds locally using the externally provisioned build farm.

    base_recipe: build-farm-recipes/externally_provisioned.yaml
        default_build_dir: <PATH TO WHERE BUILDS SHOULD RUN>

    - firesim_rocket_singlecore_no_nic
  1. Run firesim buildbitstream

  2. If successful, you should see a firesim_rocket_singlecore_no_nic HWDB entry in deploy/build-hwdb-entries/. It should look something like this:

    xclbin: <PATH TO BUILT XCLBIN>
    deploy_triplet_override: FireSim-FireSimRocketConfig-BaseVitisConfig
    custom_runtime_config: null


If for some reason the buildbitstream failed, you can download a pre-built xclbin here: https://people.eecs.berkeley.edu/~abe.gonzalez/firesim_rocket_singlecore_no_nic.xclbin.

Running A Simulation

  1. Modify the config_runtime.yaml to the following (leaving other sections intact). Note that you should modify default_simulation_dir appropriately. This sets up running simulations locally using the externally provisioned run farm.

  base_recipe: run-farm-recipes/externally_provisioned.yaml
    default_simulation_dir: <PATH TO SIMULATION AREA>
        - localhost: one_fpga_spec
        - one_fpga_spec:
            num_fpgas: 1
            num_metasims: 0
            use_for_switch_only: false

    topology: no_net_config
    no_net_num_nodes: 1
    link_latency: 6405
    switching_latency: 10
    net_bandwidth: 200
    profile_interval: -1
    default_hw_config: firesim_rocket_singlecore_no_nic
    plusarg_passthrough: ""
  1. Leave or change the single node workload you want to run, and run firesim launchrunfarm, firesim infrasetup, firesim runworkload, firesim terminaterunfarm like normal.