gem5/util/tlm
Matthias Jung 8723b08dbf misc: Coupling gem5 with SystemC TLM2.0
Transaction Level Modeling (TLM2.0) is widely used in industry for creating
virtual platforms (IEEE 1666 SystemC). This patch contains a standard compliant
implementation of an external gem5 port, that enables the usage of gem5 as a
TLM initiator component in SystemC based virtual platforms. Both TLM coding
paradigms loosely timed (b_transport) and aproximately timed (nb_transport) are
supported.

Compared to the original patch a TLM memory manager was added. Furthermore, the
transaction object was removed and for each TLM payload a PacketPointer that
points to the original gem5 packet is added as an TLM extension.  For event
handling single events are now created.

Committed by: Nilay Vaish <nilay@cs.wisc.edu>
2015-08-03 23:08:40 -05:00
..
main.cc misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
Makefile misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
README misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
run_gem5.sh misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
sc_ext.cc misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
sc_ext.hh misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
sc_mm.cc misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
sc_mm.hh misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
sc_port.cc misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
sc_port.hh misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
sc_target.cc misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
sc_target.hh misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
tgen.cfg misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00
tlm.py misc: Coupling gem5 with SystemC TLM2.0 2015-08-03 23:08:40 -05:00

This directory contains a demo of a coupling between gem5 and SystemC-TLM.
It is based on the gem5-systemc implementation in utils/systemc.
First a simple example with gem5's traffic generator is shown, later an full
system example.

Files:

    main.cc                -- demonstration top level
    sc_port.{cc,hh}        -- transactor that translates beween gem5 and tlm
    sc_mm.{cc,hh}          -- implementation of a tlm memory manager
    sc_ext.{cc,hh}         -- a TLM extension that carries the gem5 packet
    sc_target.{cc,hh}      -- an example TLM LT/AT memory module
    tlm.py                 -- simple gem5 configuration
    tgen.cfg               -- configuration file for the traceplayer

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}


I. Traffic Generator Setup
==========================

To 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 build/ARM/libgem5_opt.so
> cd util/systemc_tlm

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

Then edit the Makefile to set the paths for SystemC and run make

> make

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

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

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

The binary 'gem5.opt.sc', that has been created in the make step,
can now be used to load in the generated config 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 module use the -D flag:

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

To see more information about the port coupling use:

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

II. Full System Setup
=====================

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

> ../../build/ARM/gem5.opt ../../configs/example/fs.py --tlm-memory=memory \
  --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'" 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 conveniance a run_gem5.sh file holds all those commands