summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-10-03 19:02:53 -0700
committerGabe Black <gabeblack@google.com>2018-10-16 00:51:48 +0000
commitd1a86fd7007dbdc6f6a5771c61ef45e72429e374 (patch)
treecb7c5675d2c76945afd55c63cf4729849963a5cf
parentd8721496c98efd699eeccafa07e04bb9ed02e4be (diff)
downloadgem5-d1a86fd7007dbdc6f6a5771c61ef45e72429e374.tar.xz
systemc: Increment the change stamp value before the timing phase.
It appears that events which are triggered during the timing phase are considered triggered in the following evaluation phase. The "triggered()" function on events is non-standard and not really explained anywhere, but this appears to work in practice. Change-Id: I2574dc4569bf148c55fbe2a4873d458fc507f2a5 Reviewed-on: https://gem5-review.googlesource.com/c/13293 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
-rw-r--r--src/systemc/core/scheduler.hh3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/systemc/core/scheduler.hh b/src/systemc/core/scheduler.hh
index 83585dd2d..14dee2e6f 100644
--- a/src/systemc/core/scheduler.hh
+++ b/src/systemc/core/scheduler.hh
@@ -287,7 +287,6 @@ class Scheduler
void
completeTimeSlot(TimeSlot *ts)
{
- _changeStamp++;
assert(ts == timeSlots.begin()->second);
timeSlots.erase(timeSlots.begin());
if (!runToTime && starved())
@@ -364,6 +363,7 @@ class Scheduler
bool inTiming() { return status() == StatusTiming; }
uint64_t changeStamp() { return _changeStamp; }
+ void stepChangeStamp() { _changeStamp++; }
void throwToScMain();
@@ -494,6 +494,7 @@ extern Scheduler scheduler;
inline void
Scheduler::TimeSlot::process()
{
+ scheduler.stepChangeStamp();
scheduler.status(StatusTiming);
try {