_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 simulation.

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.

SimBricks itself is modular: the core framework (orchestration, client, CLI, and the SimBricks protocol libraries) lives in the main repository, while each integrated simulator lives in its own component-* repository and is distributed as a set of installable packages. You only install the simulators you actually need.

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. Each integration lives in its own component repository and ships as conda packages.

  • 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:#

Each simulator integration lives in its own component repository and is distributed as a set of installable packages (see Installing SimBricks Packages (Conda Channel) for details on the packages and the sys-py / sim-py / sim-bin naming scheme).

Simulator

Simulates

Component Repository

Main Packages

QEMU

Fast host simulator

component-qemu

simbricks-qemu-sim-bin, simbricks-qemu-sim-py

gem5

Flexible and detailed host simulator

component-gem5

simbricks-gem5-sim-bin, simbricks-gem5-sim-py

ns-3

Flexible simulator for networks

component-ns3

simbricks-ns3-sim-bin, simbricks-ns3-sim-py

Basic network simulators (switch, wire, tap, packet generator)

Simple Ethernet networks

component-net-base

simbricks-net-base-sim-bin, simbricks-net-base-sim-py

Basic memory simulators (memory, interconnect, terminal)

Simple (disaggregated) memory

component-mem-base

simbricks-mem-base-sim-bin, simbricks-mem-base-sim-py

Intel i40e behavioral model

Intel X710 40G NIC

component-i40e

simbricks-i40e-sim-bm-bin, simbricks-i40e-sim-bm-py, simbricks-i40e-sys-py

Intel e1000 behavioral model

Intel e1000 1G NIC

component-e1000

simbricks-e1000-sim-bm-bin, simbricks-e1000-sim-bm-py, simbricks-e1000-sys-py

Corundum NIC (via Verilator)

Open-source FPGA-based NIC, simulated from its Verilog RTL

component-corundum

simbricks-corundum-sim-rtl-bin, simbricks-corundum-sim-rtl-py, simbricks-corundum-sys-py

FEMU

NVMe SSD simulator

component-femu

simbricks-femu-sim-bin, simbricks-femu-sim-py

Further simulators have been integrated with SimBricks in the past and can be integrated again with moderate effort, among them Simics (fast, closed-source host simulator supporting modern x86 ISA extensions like AVX), OMNeT++ INET (flexible network simulator), and the Intel Tofino SDK Simulator for Tofino P4 switches. If you are interested in one of these, or want to integrate your own simulator, check out Simulator Integration or reach out on https://join.slack.com/t/simbricks/shared_invite/zt-16y96155y-xspnVcm18EUkbUHDcSVonASlack.

Learn more about SimBricks#