summaryrefslogtreecommitdiff
path: root/src/systemc/core/scheduler.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/core/scheduler.hh')
-rw-r--r--src/systemc/core/scheduler.hh14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/systemc/core/scheduler.hh b/src/systemc/core/scheduler.hh
index f55ff1f83..2bee0b090 100644
--- a/src/systemc/core/scheduler.hh
+++ b/src/systemc/core/scheduler.hh
@@ -275,6 +275,7 @@ class Scheduler
void
completeTimeSlot(TimeSlot *ts)
{
+ _changeStamp++;
assert(ts == timeSlots.begin()->second);
timeSlots.erase(timeSlots.begin());
if (!runToTime && starved())
@@ -327,6 +328,8 @@ class Scheduler
bool paused() { return _paused; }
bool stopped() { return _stopped; }
+ uint64_t changeStamp() { return _changeStamp; }
+
private:
typedef const EventBase::Priority Priority;
static Priority DefaultPriority = EventBase::Default_Pri;
@@ -388,9 +391,18 @@ class Scheduler
bool _stopped;
Tick maxTick;
- EventWrapper<Scheduler, &Scheduler::pause> maxTickEvent;
+ Tick lastReadyTick;
+ void
+ maxTickFunc()
+ {
+ if (lastReadyTick != getCurTick())
+ _changeStamp++;
+ pause();
+ }
+ EventWrapper<Scheduler, &Scheduler::maxTickFunc> maxTickEvent;
uint64_t _numCycles;
+ uint64_t _changeStamp;
Process *_current;