diff options
author | Sascha Bischoff <Sascha.Bischoff@ARM.com> | 2014-03-23 11:11:40 -0400 |
---|---|---|
committer | Sascha Bischoff <Sascha.Bischoff@ARM.com> | 2014-03-23 11:11:40 -0400 |
commit | 548d47ea2c6f53de2daad78db3187efaf3fbd692 (patch) | |
tree | 6ebae38c72264d27d1d67fdadf902f02f5760b31 /src | |
parent | e18d0e04a2d44316bc9c9e09b74bcda5562e64cc (diff) | |
download | gem5-548d47ea2c6f53de2daad78db3187efaf3fbd692.tar.xz |
mem: CommMonitor trace warn on non-timing mode
Add a warning to the CommMonitor which will alert the user if they try
and record a trace when the system is not in timing mode.
Diffstat (limited to 'src')
-rw-r--r-- | src/mem/CommMonitor.py | 4 | ||||
-rw-r--r-- | src/mem/comm_monitor.cc | 10 | ||||
-rw-r--r-- | src/mem/comm_monitor.hh | 4 |
3 files changed, 17 insertions, 1 deletions
diff --git a/src/mem/CommMonitor.py b/src/mem/CommMonitor.py index 3f9106cc4..4e8cfe270 100644 --- a/src/mem/CommMonitor.py +++ b/src/mem/CommMonitor.py @@ -37,7 +37,9 @@ # Andreas Hansson from m5.params import * +from m5.proxy import * from MemObject import MemObject +from System import System # The communication monitor will most typically be used in combination # with periodic dumping and resetting of stats using schedStatEvent @@ -45,6 +47,8 @@ class CommMonitor(MemObject): type = 'CommMonitor' cxx_header = "mem/comm_monitor.hh" + system = Param.System(Parent.any, "System that the monitor belongs to.") + # one port in each direction master = MasterPort("Master port") slave = SlavePort("Slave port") diff --git a/src/mem/comm_monitor.cc b/src/mem/comm_monitor.cc index 655265c37..70b8a6451 100644 --- a/src/mem/comm_monitor.cc +++ b/src/mem/comm_monitor.cc @@ -55,7 +55,8 @@ CommMonitor::CommMonitor(Params* params) readAddrMask(params->read_addr_mask), writeAddrMask(params->write_addr_mask), stats(params), - traceStream(NULL) + traceStream(NULL), + system(params->system) { // If we are using a trace file, then open the file, if (params->trace_file != "") { @@ -106,6 +107,13 @@ CommMonitor::init() // make sure both sides of the monitor are connected if (!slavePort.isConnected() || !masterPort.isConnected()) fatal("Communication monitor is not connected on both sides.\n"); + + if (traceStream != NULL) { + // Check the memory mode. We only record something when in + // timing mode. Warn accordingly. + if (!system->isTimingMode()) + warn("%s: Not in timing mode. No trace will be recorded.", name()); + } } BaseMasterPort& diff --git a/src/mem/comm_monitor.hh b/src/mem/comm_monitor.hh index 9dcd065ca..c3a970940 100644 --- a/src/mem/comm_monitor.hh +++ b/src/mem/comm_monitor.hh @@ -46,6 +46,7 @@ #include "mem/mem_object.hh" #include "params/CommMonitor.hh" #include "proto/protoio.hh" +#include "sim/system.hh" /** * The communication monitor is a MemObject which can monitor statistics of @@ -418,6 +419,9 @@ class CommMonitor : public MemObject /** Output stream for a potential trace. */ ProtoOutputStream* traceStream; + + /** The system in which the monitor lives */ + System *system; }; #endif //__MEM_COMM_MONITOR_HH__ |