systemc: Change how the default timescale is set.
authorGabe Black <gabeblack@google.com>
Sat, 22 Sep 2018 15:09:31 +0000 (08:09 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 16 Oct 2018 00:33:05 +0000 (00:33 +0000)
The spec says that the default timescale should be 1 PS, but the
Accellera implementation uses the time resolution.

Change-Id: I7b307a33ef0856e9c19d81e401b15691275d4978
Reviewed-on: https://gem5-review.googlesource.com/c/12975
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/systemc/utils/tracefile.cc

index 25d7ea6f3e65128bdf3d0f18e6dacc6bdc105d85..cf771463b912b4bb92e89da44d13ac030d7508ab 100644 (file)
@@ -37,6 +37,7 @@
 #include "sim/core.hh"
 #include "systemc/core/time.hh"
 #include "systemc/ext/core/sc_main.hh"
+#include "systemc/ext/core/sc_time.hh"
 #include "systemc/ext/utils/functions.hh"
 
 namespace sc_gem5
@@ -44,7 +45,7 @@ namespace sc_gem5
 
 TraceFile::TraceFile(const std::string &name) :
     _os(simout.create(name, true, true)), timeUnitTicks(0),
-    timeUnitValue(1.0), timeUnitUnit(::sc_core::SC_PS), _traceDeltas(false)
+    timeUnitValue(0.0), timeUnitUnit(::sc_core::SC_PS), _traceDeltas(false)
 {}
 
 TraceFile::~TraceFile()
@@ -76,7 +77,14 @@ TraceFile::set_time_unit(double d, ::sc_core::sc_time_unit tu)
 void
 TraceFile::finalizeTime()
 {
-    timeUnitTicks = ::sc_core::sc_time(timeUnitValue, timeUnitUnit).value();
+    ::sc_core::sc_time time;
+    if (timeUnitValue == 0.0) {
+        // The time scale was never set. Use the global time resolution.
+        time = ::sc_core::sc_get_time_resolution();
+    } else {
+        time = ::sc_core::sc_time(timeUnitValue, timeUnitUnit);
+    }
+    timeUnitTicks = time.value();
 }
 
 } // namespace sc_gem5