systemc: Clamp the time of events to the present.
authorGabe Black <gabeblack@google.com>
Tue, 28 Aug 2018 06:18:18 +0000 (23:18 -0700)
committerGabe Black <gabeblack@google.com>
Wed, 3 Oct 2018 00:12:18 +0000 (00:12 +0000)
If systemc attempts to schedule an event in the past, schedule it for
right now instead. Still preserve the difference between delta and
timed events. This scheme doesn't really make a lot of sense (why not
just disallow scheduling events in the past?) but this will approximate
what I think the correct behavior is. What's probably supposed to
happen is that events in the past are executed from most past to most
present until they catch up with now, and then now advances as normal.
Our approach is simpler, but won't preserve ordering between multiple
events scheduled in the past.

Change-Id: I73c1e581c532530178458f044674613a4f4ea3be
Reviewed-on: https://gem5-review.googlesource.com/c/12277
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/systemc/core/scheduler.hh

index ff8434bef54afeabae9c0c05f13ab9a6146e962e..2da8da470ab104cf43d1bda5d3cf172e3f6357a2 100644 (file)
@@ -215,6 +215,9 @@ class Scheduler
     schedule(ScEvent *event, const ::sc_core::sc_time &delay)
     {
         Tick tick = delayed(delay);
+        if (tick < getCurTick())
+            tick = getCurTick();
+
         event->schedule(tick);
 
         // Delta notification/timeout.