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.
SystemC (http://www.systemc.org) 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 simulator:
- A clear separation between various simulation domains can be achieved.
- When spread accross multiple computers or CPUs, the simulation speed can benefit significantly.
Spreading such a simulation accross multiple and basically independent simulators is not trivial because all simulators need to be synchronized all the time.
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.
Library Status:
- 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 here 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 SystemCTM“. It describes various aspects of the new library in more detail and can be downloaded from here or from the general publications section.
For the first time, the library is also available for free download (see below). - 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.
Availability:
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 combinations:
Revision 1.1.0:
gcc-2.X | gcc-3.X | |
(gcc-2.96) | (gcc-3.4.2) | |
SystemC 2.0.1 | X | X |
SystemC 2.1beta11 | X | X |
Revision 1.1.1:
gcc-2.X | gcc-3.X | |
(gcc-2.95.3) | (gcc-3.4.2) | |
SystemC 2.1.v1 | X | X |
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 x86 Linux!
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.
Downloadable Files:
User Manual for Rev. 1.1.0 as PDF or gzipped PostScript.
User Manual for Rev. 1.1.1 as PDF.
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)
For other inquiries you can contact me via email.