diff options
Diffstat (limited to 'src/systemc/core/scheduler.hh')
-rw-r--r-- | src/systemc/core/scheduler.hh | 14 |
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; |