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 |
|---|---|---|---|
Fast host simulator |
|
||
Flexible and detailed host simulator |
|
||
Flexible simulator for networks |
|
||
Basic network simulators (switch, wire, tap, packet generator) |
Simple Ethernet networks |
|
|
Basic memory simulators (memory, interconnect, terminal) |
Simple (disaggregated) memory |
|
|
Intel i40e behavioral model |
Intel X710 40G NIC |
|
|
Intel e1000 behavioral model |
Intel e1000 1G NIC |
|
|
Corundum NIC (via Verilator) |
Open-source FPGA-based NIC, simulated from its Verilog RTL |
|
|
NVMe SSD simulator |
|
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.