2.2. FPGA-Accelerated Simulation¶
FireSim is an open-source cycle-accurate FPGA-accelerated full-system hardware simulation platform that runs on cloud FPGAs (Amazon EC2 F1). FireSim allows RTL-level simulation at orders-of-magnitude faster speeds than software RTL simulators. FireSim also provides additional device models to allow full-system simulation, including memory models and network models.
FireSim currently supports running only on Amazon EC2 F1 FPGA-enabled virtual instances. In order to simulate your Chipyard design using FireSim, if you have not already, follow the initial EC2 setup instructions as detailed in the FireSim documentation. Then clone Chipyard onto your FireSim manager instance, and setup your Chipyard repository as you would normally.
Next, initalize FireSim as a library in Chipyard by running:
# At the root of your chipyard repo ./scripts/firesim-setup.sh --fast
firesim-setup.sh initializes additional submodules and then invokes
build-setup.sh script adding
--library to properly
initialize FireSim as a library submodule in chipyard. You may run
./sims/firesim/build-setup.sh --help to see more options.
Finally, source the following environment at the root of the firesim directory:
cd sims/firesim # (Recommended) The default manager environment (includes env.sh) source sourceme-f1-manager.sh
Every time you want to use FireSim with a fresh shell, you must source this
At this point you’re ready to use FireSim with Chipyard. If you’re not already familiar with FireSim, please return to the FireSim Docs, and proceed with the rest of the tutorial.
2.2.2. Running your Design in FireSim¶
Converting a Chipyard config (one in
chipyard/src/main/scala to run in FireSim is simple. We are using the same target (top) RTL, and only need to specify a new set of connection behaviors for the IOs of that module. Simply create a matching config within
generators/firechip/src/main/scala/TargetConfigs that inherits your config defined in
class FireSimRocketConfig extends Config( new WithDefaultFireSimBridges ++ new WithDefaultMemModel ++ new WithFireSimConfigTweaks ++ new chipyard.RocketConfig)
Only 3 additional config fragments are needed.
WithFireSimConfigTweaksmodifies your design to better fit the FireSim usage model. For example, FireSim designs typically include a UART. Technically, adding this in is optional, but strongly recommended.
WithDefaultMemModelsets the external memory model in the FireSim simulation. See the FireSim documentation for details.
IOBinderskey to use FireSim’s Bridge system, which can drive target IOs with software bridge models running on the simulation host. See the FireSim documentation for details.