gem5/util/systemc
Matthias Jung 63bb17e4bd misc: fixes deprecated sc_time function for SystemC 2.3.1
The non-standard sc_time constructors

- sc_time( uint64, bool scale )
- sc_time( double, bool scale )

have been deprecated in SystemC 2.3.1 and a warning is issued when being
used. Insted the new 'sc_time::from_value' function is used to omit the
warning message.

Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
2017-01-09 09:34:36 -06:00
..
main.cc misc: fix a compile error due to incompability with SystemC 2.3.1 2016-07-01 09:50:18 -05:00
Makefile config: Fix to SystemC example's event handling 2014-12-02 06:08:09 -05:00
README misc: Documentation Update 2017-01-09 09:33:42 -06:00
sc_gem5_control.cc base: remove Trace::enabled flag 2015-09-30 15:21:55 -05:00
sc_gem5_control.hh config: SystemC Gem5Control top level additions 2014-12-02 06:08:06 -05:00
sc_logger.cc config: Fix to SystemC example's event handling 2014-12-02 06:08:09 -05:00
sc_logger.hh sim: SystemC hosting 2014-10-16 05:49:54 -04:00
sc_module.cc misc: fixes deprecated sc_time function for SystemC 2.3.1 2017-01-09 09:34:36 -06:00
sc_module.hh config: Fix to SystemC example's event handling 2014-12-02 06:08:09 -05:00
stats.cc misc: Separate stats file for SystemC-gem5 co-simulation 2016-07-01 09:30:15 -05:00
stats.hh misc: Separate stats file for SystemC-gem5 co-simulation 2016-07-01 09:30:15 -05:00

This directory contains a demo of C++ configuration of gem5.  The intention
is to provide a mechanism to allow pre-generated config.ini files generated
by Python-based gem5 to be reloaded in library-base versions of gem5
embedded in other systems using C++ calls for simulation control.

This directory contain a demo of hosting a C++ configured version of gem5
onto SystemC's event loop.  The hosting is achieved by replacing 'simulate'
with a SystemC object which implements an event loop using SystemC scheduler
mechanisms.

The sc_... files here should probably be hosted in a diferent directory and
buildable as a library.

Files:

    main.cc                 -- demonstration top level
    sc_logger.{cc,hh}       -- rehosting of DPRINTF onto SC_REPORT
    sc_module.{cc,hh}       -- SystemC simulation loop base class
    sc_gem5_control.{cc,hh} -- Alternative extra wrapping to allow gem5
                                Systems to be instantiated as single
                                sc_module objects.
    stats.{cc,hh}           -- Stats dumping (copied from util/cxx_config)

Read main.cc for more details of the implementation and sc_... files for

To build:

First build gem5 as a library with cxx-config support and (optionally)
without python.  Also build a normal gem5 (cxx-config not needed, Python
needed):

> cd ../..
> scons build/ARM/gem5.opt
> scons --with-cxx-config --without-python build/ARM/libgem5_opt.so
> cd util/systemc

Note: For MAC / OSX this command should be used:
> scons --with-cxx-config --without-python build/ARM/libgem5_opt.dylib

Set a proper LD_LIBRARY_PATH e.g. for bash:
> export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/gem5/build/ARM/"

or for MAC / OSX:
> export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/path/to/gem5/build/ARM/"


Then edit the Makefile to set the paths for SystemC, e.g:

    Linux:
    SYSTEMC_INC = /opt/systemc/include
    SYSTEMC_LIB = /opt/systemc/lib-linux64

    MAC / OSX:
    SYSTEMC_INC = /opt/systemc/include
    SYSTEMC_LIB = /opt/systemc/lib-macosx64

Then run make:

> make

Make a config file for the C++-configured gem5 using normal gem5

> ../../build/ARM/gem5.opt ../../configs/example/se.py -c \
>       ../../tests/test-progs/hello/bin/arm/linux/hello

The binary 'gem5.opt.cxx' can now be used to load in the generated config
file from the previous normal gem5 run.

Try:

> ./gem5.opt.cxx m5out/config.ini

This should print:

> Hello world!

The .ini file can also be read by the Python .ini file reader example:

> ../../build/ARM/gem5.opt ../../configs/example/read_ini.py m5out/config.ini

If you are interested in SystemC Transaction Level Modeling (TLM2) please have
a look into /util/tlm.