This directory contains a demo of a coupling between gem5 and SystemC-TLM.  It
is based on the gem5-systemc implementation in utils/systemc. This Readme gives
an overall overview (I), describes the source files in this directory (II),
explains the build steps (III), shows how to run example simulations (IV-VI)
and lists known issues (VII).


I. Overview
===========

The sources in this directory provide three SystemC modules that manage the
SystemC/gem5 co-simulation: Gem5SimControl, Gem5MasterTransactor, and
Gem5SlaveTransactor. They also implement gem5's ExternalMaster::Port interface
(SCMasterPort) and ExternalSlave::Port interface (SCSlavePort).

**SCMasterPort** and **Gem5MasterTransactor** together form a TLM-to-gem5
bridge. SCMasterPort implements gem5's ExternalMaster::Port interface and forms
the gem5 end of the bridge. Gem5MasterTransactor is a SystemC module that
provides a target socket and represents the TLM side of the bridge. All TLM
requests send to this target socket, are translated to gem5 requests and
forwarded to the gem5 world through the SCMasterPort. Then the gem5 world
handles the request and eventually issues a response. When the response arrives
at the SCMasterPort it gets translated back into a TLM response and forwarded
to the TLM world through target socket of the Gem5MasterTransactor.
SCMasterPort and Gem5MasterTransactor are bound to each other by configuring
them for the same port name.

**SCSlavePort** and **Gem5SlaveTransactor** together form a gem5-to-TLM bridge.
Gem5SlaveTransactor is a SystemC module that provides a initiator socket and
represents the TLM end of the bridge. SCSlavePort implements gem5's
ExternalSlave::Port interface and forms the gem5 side of the bridge. All gem5
requests sent to the SCSlavePort, are translated to TLM requests and forwarded
to the TLM world through the initiator socket of the Gem5SlaveTransactor. Then
the TLM world handles the request and eventually issues a response. When the
response arrives at the Gem5SlaveTransactor it gets translated back into a
gem5 response and forwarded to the gem5 world through the SCSlavePort. SCSLavePort
and Gem5SlaveTransactor are bound to each other by configuring them for the
same port name.

**Gem5SimControl** is the central SystemC module that represents the complete
gem5 world. It is responsible for instantiating all gem5 objects according to a
given configuration file, for configuring the simulation and for maintaining
the gem5 event queue. It also keeps track of all SCMasterPort and SCSlavePort
and responsible for connecting all Gem5MasterTransactor and Gem5SlaveTransactor
modules to their gem5 counterparts. This module must be instantiated exactly
once in order to run a gem5 simulation from within an SystemC environment.


II. Files
=========

    sc_slave_port.{cc,hh}     -- Implements SCSlavePort
    sc_master_port.{cc,hh}    -- Implements SCMasterPort
    sc_mm.{cc,hh}             -- Implementation of a TLM memory manager
    sc_ext.{cc,hh}            -- TLM extension that carries a gem5 packet
    sc_peq.{cc,hh}            -- TLM PEQ for scheduling gem5 events
    sim_control.{cc,hh}       -- Implements Gem5SimControl
    slave_transactor.{cc,hh}  -- Implements Gem5SlaveTransactor
    master_transactor.{cc,hh} -- Implements Gem5MasterTransactor

    example/common/cli_parser.{cc,hh}     -- Simple cli argument parser
    example/common/report_hanlder.{cc,hh} -- Custom SystemC report handler

    example/slave_port/main.cc           -- demonstration of the slave port
    example/slave_port/sc_target.{cc,hh} -- an example TLM LT/AT memory module
    example/slave_port/tlm.py            -- simple gem5 configuration
    example/slave_port/tlm_elastic.py    -- gem5 configuration with an elastic
                                            trace replayer
    example/slave_port/tgen.cfg          -- elastic traceplayer configuration

    example/master_port/main.cc          -- demonstration of the master port
    example/master_port/traffic_generator.{cc/hh}
                                         -- an example traffic generator module
    example/master_port/tlm.py           -- simple gem5 configuration

Other Files will be used from utils/systemc example:

    sc_logger.{cc,hh},
    sc_module.{cc,hh},
    sc_gem5_control.{cc,hh},
    stats.{cc,hh}


III. Build
==========

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

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

Note: For MAC / OSX this command should be used:
> scons --with-cxx-config --without-python --without-tcmalloc \
>       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/"

The build system finds your SystemC installation using pkg-config. Make sure
that pkg-config is installed and your systemc.pc is within your
PKG_CONFIG_PATH. You can add SystemC to the PKG_CONFIG_PATH using the following
command:
> export PKG_CONFIG_PATH="/path/to/systemc/lib-<arch>/pkgconfig/:$PKG_CONFIG_PATH"

To build one of the examples:

> cd examples/{master,slave}_port
> scons
> cd ../../


IV. Simple Examples
===================

> cd examples/{master,slave}_port

In order to run our example simulation, we first need to create a config.ini
that represents the gem5 configuration. We do so by starting gem5 with the
desired python configuration script.

> ../../../../build/ARM/gem5.opt ./tlm.py

The message "fatal: Can't find port handler type 'tlm_{master,slave}'" is okay.
The configuration will be stored in the m5out/ directory

The build step creates a binary gem5.opt.sc in the example directory.  It can
now be used to load in the generated configuration file from the previous
normal gem5 run.

Try:

> ./gem5.opt.sc m5out/config.ini -e 1000000

It should run a simulation for 1us.

To see more information what happens inside the TLM modules use the -v flag:

> ./gem5.opt.sc m5out/config.ini -e 1000000 -v

To see more information about the port coupling use:

> ./gem5.opt.sc m5out/config.ini -e 1000000 -d ExternalPort


V. Full System Setup
=====================

Apart from the simple examples, there is a full system example that uses
the gem5-to-TLM bridge.

>cd examples/slave_port

Build gem5 as described in Section III. Then, make a config file for the
C++-configured gem5 using normal gem5

> ../../../../build/ARM/gem5.opt ../../../../configs/example/fs.py   \
  --tlm-memory=transactor --cpu-type=timing --num-cpu=1              \
  --mem-type=SimpleMemory --mem-size=512MB --mem-channels=1 --caches \
  --l2cache --machine-type=VExpress_EMM                              \
  --dtb-filename=vexpress.aarch32.ll_20131205.0-gem5.1cpu.dtb        \
  --kernel=vmlinux.aarch32.ll_20131205.0-gem5                        \
  --disk-image=linux-aarch32-ael.img

The message "fatal: Can't find port handler type 'tlm_slave'" is okay.
The configuration will be stored in the m5out/ directory

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

Try:

> ./gem5.opt.sc m5out/config.ini -o 2147483648

The parameter -o specifies the begining of the memory region (0x80000000).
The system should boot now.

For convenience a run_gem5.sh file holds all those commands


VI. Elastic Trace Setup
========================

Elastic traces can also be replayed into the SystemC world.
For more information on elastic traces please refer to:

 - http://www.gem5.org/TraceCPU

 - Exploring System Performance using Elastic Traces:
   Fast, Accurate and Portable
   R. Jagtap, S. Diestelhorst, A. Hansson, M. Jung, N. Wehn.
   IEEE International Conference on Embedded Computer Systems Architectures
   Modeling and Simulation (SAMOS), July, 2016, Samos Island, Greece.

Similar IV. the simulation can be set up with this command:

> ../../../../build/ARM/gem5.opt ./tlm_elastic.py

Then:

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


VII. Knwon issues
=================

* For some toolchains, compiling libgem5 with tcmalloc leads to errors
  ('tcmalloc Attempt to free invalid pointer xxx') when linking libgem5 into a
  SystemC application.
* When SystemC was build with --enable-pthreads, SystemC applications linked
