summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSascha Bischoff <Sascha.Bischoff@ARM.com>2014-03-23 11:11:40 -0400
committerSascha Bischoff <Sascha.Bischoff@ARM.com>2014-03-23 11:11:40 -0400
commit548d47ea2c6f53de2daad78db3187efaf3fbd692 (patch)
tree6ebae38c72264d27d1d67fdadf902f02f5760b31 /src
parente18d0e04a2d44316bc9c9e09b74bcda5562e64cc (diff)
downloadgem5-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.py4
-rw-r--r--src/mem/comm_monitor.cc10
-rw-r--r--src/mem/comm_monitor.hh4
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__