From 3fb91393a67515a008dae0346689ffffe5180ab8 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 7 Nov 2018 17:34:11 -0800 Subject: sim: Push the global frequency management code into C++. That makes it available when python is left out, and makes it available to c++ code without having to call back into python. Change-Id: If82e7e8eff526f2b957f84afe046e1d56fed4aa2 Reviewed-on: https://gem5-review.googlesource.com/c/14055 Reviewed-by: Srikant Bharadwaj Reviewed-by: Andreas Sandberg Reviewed-by: Jason Lowe-Power Maintainer: Andreas Sandberg --- src/sim/core.cc | 31 +++++++++++++++++++++++++++++-- src/sim/core.hh | 5 +++++ 2 files changed, 34 insertions(+), 2 deletions(-) (limited to 'src/sim') diff --git a/src/sim/core.cc b/src/sim/core.cc index 514c4c557..cb9051f38 100644 --- a/src/sim/core.cc +++ b/src/sim/core.cc @@ -37,6 +37,8 @@ #include #include "base/callback.hh" +#include "base/cprintf.hh" +#include "base/logging.hh" #include "base/output.hh" #include "sim/eventq.hh" @@ -69,11 +71,23 @@ Tick ps; } // namespace SimClock +namespace { + +bool _clockFrequencyFixed = false; + +// Default to 1 THz (1 Tick == 1 ps) +Tick _ticksPerSecond = 1e12; + +} // anonymous namespace + void -setClockFrequency(Tick ticksPerSecond) +fixClockFrequency() { + if (_clockFrequencyFixed) + return; + using namespace SimClock; - Frequency = ticksPerSecond; + Frequency = _ticksPerSecond; Float::s = static_cast(Frequency); Float::ms = Float::s / 1.0e3; Float::us = Float::s / 1.0e6; @@ -91,7 +105,20 @@ setClockFrequency(Tick ticksPerSecond) Int::ns = Int::us / 1000; Int::ps = Int::ns / 1000; + cprintf("Global frequency set at %d ticks per second\n", _ticksPerSecond); + + _clockFrequencyFixed = true; +} +bool clockFrequencyFixed() { return _clockFrequencyFixed; } + +void +setClockFrequency(Tick tps) +{ + panic_if(_clockFrequencyFixed, + "Global frequency already fixed at %f ticks/s.", _ticksPerSecond); + _ticksPerSecond = tps; } +Tick getClockFrequency() { return _ticksPerSecond; } void setOutputDir(const string &dir) diff --git a/src/sim/core.hh b/src/sim/core.hh index 281fe61f5..8e464548f 100644 --- a/src/sim/core.hh +++ b/src/sim/core.hh @@ -91,7 +91,12 @@ extern Tick ps; ///< picosecond } // namespace Int } // namespace SimClock /** @} */ + +void fixClockFrequency(); +bool clockFrequencyFixed(); + void setClockFrequency(Tick ticksPerSecond); +Tick getClockFrequency(); // Ticks per second. void setOutputDir(const std::string &dir); -- cgit v1.2.3