Simulation of computer architectures is hard. Harnessing the underlying infrastructure must be easy.
Simo is a C++ library that allows to simulate computer systems. It uses a discrete-event system where a cycle-based approach is encouraged. This library has been created after years of experience with computer systems simulators (both in research and in industry) and it tries to create something that it is missing: a simple, easy to use library that does what you need.
GitHub Pages stores Doxygen documentation and guides (Markdown files inside docs folder).
Assuming nix:
git clone https://github.com/fusiled/Simo
cd Simo
nix buildThe build is going to be accessible in the result folder.
Clone Simo and initialize the submodules:
Build dependencies:
- Clang (recommended)
- CMake >= 3.31.0
- Boost (Boost.Test, Boost.TypeIndex)
- Glaze
- Doxygen (for documentation)
The build will produce libSimo (core library) and SimoSim (a general purpose
executable to run simulations).
The nix flake simplifies the setup of the dependencies. With nix installed you can:
- Build the package with
nix build. The build will be accessible in theresultfolder. - Run
nix developto enter a virtual environment with all the required tools installed. The GitHub actions run entering the virtual environment ofnix develop.
Look inside docs/guided_examples .
- Loading components from shared objects at runtime (examples)
Simulators publicly available pretends to be easy to use, but in practice they are not. More information in docs.
Contributions are welcome. Contributions MUST be:
- Easy to understand
- Easy to maintain
This can be achieved with:
- Simple logic and simple code
- Good documented code
- Proper unit-testing coverage
You can see this guide on how to use nix binaries to build in CLion.
- Create a collector with periodic window collection functionality
- More documentation and examples
- Benchmark Simo against Gem5 and SystemC