summaryrefslogtreecommitdiff
path: root/src/sim
diff options
context:
space:
mode:
Diffstat (limited to 'src/sim')
-rw-r--r--src/sim/core.cc31
-rw-r--r--src/sim/core.hh5
2 files changed, 34 insertions, 2 deletions
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 <string>
#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<double>(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);