f05cb84ed1
This patch adds a connector that allows gem5 to be used as a component in SST (Structural Simulation Toolkit, sst-simulator.org). At a high level, this allows memory traffic to pass between the two simulators. SST Links are roughly analogous to gem5 Ports, although Links do not have a notion of master and slave. This distinction is important to gem5, so when connecting a gem5 CPU to an SST cache, an ExternalSlave must be used, and similarly when connecting the memory side of SST cache to a gem5 port (for memory <-> I/O), an ExternalMaster must be used. These connectors handle the administrative aspects of gem5 (initialization, simulation, shutdown) as well as translating SST's MemEvents into gem5 Packets and vice-versa.
65 lines
2.4 KiB
Text
65 lines
2.4 KiB
Text
This directory contains a connector that allows gem5 to be used as a
|
|
component in SST (Structural Simulation Toolkit, sst-simulator.org). More
|
|
specifically, it creates a .so that wraps the libgem5_*.so library. At a
|
|
high level, this allows memory traffic to pass between the two simulators.
|
|
SST Links are roughly analogous to gem5 Ports, although Links do not have
|
|
a notion of master and slave. This distinction is important to gem5, so
|
|
when connecting a gem5 CPU to an SST cache, an ExternalSlave must be used,
|
|
and similarly when connecting the memory side of SST cache to a gem5 port
|
|
(for memory <-> I/O), an ExternalMaster must be used.
|
|
|
|
The connector handles the administrative aspects of gem5
|
|
(initialization, simulation, shutdown) as well as translating
|
|
SST's MemEvents into gem5 Packets and vice-versa.
|
|
|
|
Step-by-step instructions:
|
|
|
|
0. install SST and its dependencies
|
|
|
|
Note: the Makefile assumes you installed from an SVN checkout, not a release.
|
|
If you install a release, modify SST_VERSION at the top of the Makefile.
|
|
|
|
0b. set/append to the PKG_CONFIG_PATH variable the path where SST installed
|
|
its pkgconfig, if not in a system-wide location.
|
|
|
|
Then from gem5 root:
|
|
|
|
1. build gem5 library:
|
|
% scons build/ARM/libgem5_opt.so
|
|
|
|
Note: if you would rather use a fast, debug, etc. variant instead,
|
|
modify GEM5_LIB at the top of the Makefile.
|
|
|
|
2. build gem5 SST component:
|
|
% make -C ext/sst
|
|
|
|
3. run SST like so:
|
|
% sst --add-lib-path <path to ./ext/sst> <config script, e.g. ext/sst/*.py>
|
|
|
|
===========
|
|
|
|
Note: if you want to use an arch other than ARM (not tested/supported),
|
|
tweak the Makefile to get includes from that build directory instead.
|
|
|
|
===========
|
|
|
|
This directory provides:
|
|
1. an SST "Component" for gem5;
|
|
2. a class that implements gem5's "ExternalMaster" interface to connect with
|
|
SST "Link"s exchanging "memEvents"
|
|
(sst/elements/memHierarchy stuff - caches, memories, etc.)
|
|
This lets gem5 receive packets from SST, as in
|
|
an SST LL$ (a master external to gem5) <-> I/O devices.
|
|
3. a class that implements gem5's "ExternalSlave" interface to connect with
|
|
SST "Link"s exchanging "memEvents" once again with the packet flow reversed:
|
|
gem5 CPU <-> SST L1 cache (a slave external to gem5)
|
|
4. an example configuration that uses both as follows:
|
|
gem5 CPUs
|
|
^
|
|
| [ExternalSlave]
|
|
v
|
|
SST cache hierarchy <-> SST memory
|
|
^
|
|
| [ExternalMaster]
|
|
v
|
|
gem5 I/O devices (terminal, disk, etc.)
|