mem: CommMonitor trace warn on non-timing mode
authorSascha Bischoff <Sascha.Bischoff@ARM.com>
Sun, 23 Mar 2014 15:11:40 +0000 (11:11 -0400)
committerSascha Bischoff <Sascha.Bischoff@ARM.com>
Sun, 23 Mar 2014 15:11:40 +0000 (11:11 -0400)
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.

src/mem/CommMonitor.py
src/mem/comm_monitor.cc
src/mem/comm_monitor.hh

index 3f9106cc44e47e28952ca1c5fde8b39533b37ffa..4e8cfe270aaf30677aa78b102d008d448cc14d96 100644 (file)
@@ -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")
index 655265c37d18b389e1affc4435b452a5acd50e16..70b8a645173b80048099a25c734ccc9d206e410d 100644 (file)
@@ -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&
index 9dcd065ca18cc16b454349a53afd6a59dd8959af..c3a97094057c06f15adaff8898fb85fa716a1883 100644 (file)
@@ -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__