_images/simbricks-text-horizontal.svg


SimBricks#


Website: https://www.simbricks.io/

Source Code: simbricks/simbricks

Slack: https://join.slack.com/t/simbricks/shared_invite/zt-16y96155y-xspnVcm18EUkbUHDcSVonA


About#

SimBricks is a platform for creating and simulating virtual prototypes of modern heterogeneous computer systems and enables meaningful end-to-end evaluations of such systems in simlation.

To create virtual prototypes of complete computer systems, rather than individual components, SimBricks modularly combines and connects battle-tested simulators for different components: machines (e.g. QEMU, gem5, Simics), hardware components (e.g. Verilator, Tofino, FEMU SSD), and networks (e.g. ns-3, OMNeT++). SimBricks simulations run unmodified full-system stacks, including applications, operating systems such as Linux, and hardware RTL.

SimBricks does not replace existing simulators for individual components, but instead enables users to connect together multiple existing simulators, even from different vendors and never designed to interoperate, into a complete system.

Key Features:

  • Easy: Easily create and execute virtual representations of your system through simple Python.

  • Fast: Efficient synchronization mechanisms in SimBricks enable fast simulation execution.

  • Full-System: Create full-system virtual prototypes with all components you would find in the real world using SimBricks.

  • Extensible: Easily integrate your component simulators.

  • Scalable: Create large-scale virtual prototypes with thousands of components.

To easily get started with using SimBricks check out our Quickstart guide.

Concrete use-cases for SimBricks:#

Modern hardware design increasingly relies on specialized accelerators and heterogeneous architectures. However, simulating these components in isolation often masks critical system-level bottlenecks, such as PCIe interconnect limitations, memory controller inefficiencies, or network latency. SimBricks addresses this visibility gap by providing a framework for comprehensive full-system virtual prototyping, allowing engineers to validate custom hardware behavior within a complete system context prior to physical tape-out.

The SimBricks architecture provides a modular simulation infrastructure that connects custom hardware models with virtualized off-the-shelf components, including standard CPUs, NICs, and network switches. By synchronizing these discrete simulators into a unified, deterministic environment, SimBricks enables developers to boot real operating systems, execute unmodified software stacks, and analyze end-to-end data flow across hardware-software boundaries. This hardware-software co-design approach supports a wide range of use cases:

  • Evaluating HW accelerators, from early design with simple behavioral models, to simulating complete Verilog implementations, both as part of complete systems with many instances of the accelerator and machines running full-blown operating systems and real applications

  • Testing network protocols, topologies, and communication stacks for real workloads in a potentially large system (we ran up to 1000 hosts so far)

  • Rapid RTL prototyping for FPGAs, no waiting for synthesis or fiddling with timing initially

  • Our paper paper provides a more detailed discussion of technical details and use-cases

Currently, SimBricks includes the following simulators:#

  • QEMU: Fast host simulator

  • gem5: Flexible and detailed host simulator

  • Simics: Fast, closed-source host simulator supporting modern x86 ISA extensions like AVX

  • ns-3: Flexible simulator for networks

  • OMNeT++ INET: Flexible simulator for networks

  • Intel Tofino SDK Simulator: Closed-source vendor-provided simulator for Tofino P4 switches

  • Verilator: Verilog RTL simulator

  • Corundum NIC: Open-source, high-performance FPGA-based NIC

  • FEMU: NVMe SSD simulator

Learn more about SimBricks#