Distributed Simulation with SystemCTM
Actually, this is a spin-off of another big project. For that project
I need a more or less complex realtime simulator that incorporates
various simulation domains. These things cover the simulation of
physical processes, electronic hardware and protocol issues, software
components, and last but not least interactive front-ends including 3D-rendering.
Instead of developing everything from the scratch, it has been decided
to use SystemC as a framework for most of the simulator modules.
is a rather new approach for describing and simulating digital systems.
Even more, it allows some kind of software/hardware co-design.
SystemC is not a hardware description language (HDL) such as
VHDL or Verilog. Instead, it is represented by a C++ class
library that is providing the required functionality.
This makes SystemC unique when compared with other system description
languages such as VHDL: All the power known from C/C++ and associated
libraries can be used within a simulation framework.
There are two primary reasons for distributing such an interdisciplinary
Spreading such a simulation accross multiple and basically independent
simulators is not trivial because all simulators need to be synchronized
all the time.
- A clear separation between various simulation domains can
- When spread accross multiple computers or CPUs, the
simulation speed can benefit significantly.
In order to remove the sychronization from the actual simulation model
description, there has been developed a small C++ library picking up
this job. This library is used in junction with the SystemC class
library without any changes of SystemC itself. Once set up at the
beginning of the simulation, this library is working silently in background.
The synchronization is following the so-called
conservative distributed simulation paradigm. In the elaboration
phase of the SystemC application the programmer has to configure the distributed
system setup by making use of a very small set of functions.
This also includes the specification of update cycles for each signal that is
to be brought out of a simulation kernel. I call this explicit lookahead.
Although there are some known odds with conservative distributed simulation
and the explicit lookahead, this combination fits almost perfectly the targeted
class of RTL (register transfer level) model simulations that is based on the
simulation of discrete and constant time
steps. Of course, the actual simulation model description follows exactly
the same style that is used for normal SystemC RTL models.
More information about the synchronization library and an example how
to use it can by found in the paper
"Conservative Distributed Discrete Event Simulation with SystemC using Explicit Lookahead"
which I've written. It is available for download in the
publications section of this website.
- December 2005:
The synchronization library has been released for SystemC 2.1.v1.
See below for details.
- February 2005:
Some results from synchronization library benchmarks have been
summarized and published in a paper
"Benchmarking the Distributed SystemCTM Synchronization Library Rev. 1.1.0".
It can be downloaded from
or from the general publications section.
This paper discusses a synthetic benchmark as well as an exemplary
model based on the OpenRISC processor.
- November 2004:
A major breakthrough has been achieved and the library in its revision
1.1.0 has been significantly improved in comparision to the early test
versions. In fact, the synchronization library is ready for production
use. Though, there is still plenty of room for improvements.
There has been written a paper "A First Mature Revision of a
Synchronization Library for Distributed RTL Simulation in
It describes various aspects of the new
library in more detail and can be downloaded from
or from the general publications section.
For the first time, the library is also available for free download
- February 2004:
The current revision (0.7) allows to connect an arbitrary number
of SystemC simulation kernels. So far, the only supported communication
medium is TCP/IP. Later on, perhaps Shared Memory for SMP machines and/or
MPI for high-speed cluster interconnects might be supported as well.
Currently there are also some odds that are in work to be solved.
So it is only possible to synchronize signals of the type double.
Also, the simulation time management is fixed to micro seconds. These
are some minor issues to be dealt with in the near future.
The synchronization library is publicly available in form of precompiled
library binaries. Because of some compatibility issues, there are
provided libraries for the following different SystemC/gcc version
Notice that revision 1.1.1 does contain no functional differences and/or
bug fixes in comparision to revision 1.1.0. It is just a separate release
for SystemC 2.1.v1.
The gcc version in brackets shows the actual gcc that has been used for
compilation. Using other gcc versions should be no problem as long as the
major version is not changed. There is distributed only a single
tar-archive that is containing all precompiled libraries (see below).
Notice that the synchronization library is exclusively available for
Apart from the papers that have been mentioned above, there is also
provided an extensive user manual. It includes installation instructions
as well as various additional information.
For other inquiries you can contact me via
- User Manual for Rev. 1.1.0 as
- User Manual for Rev. 1.1.1 as
Note that the PDF-version is included in the official tarballs as well.
- The library tarball including PDF user manual, precompiled
static library archives for different gcc/SystemC versions as described
above, and a small example:
systemc_sync-1.1.0.tar.bz2 (approx. 400kB)
systemc_sync-1.1.1.tar.bz2 (approx. 400kB)