From 82958266d412e82c910b2ce35ac2a72e6c9fe358 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 15 Aug 2018 19:16:41 -0700 Subject: systemc: Fix the priority of the maximum time event. Change-Id: I3e5e71165d06da77076f0e58012c575e24456182 Reviewed-on: https://gem5-review.googlesource.com/12209 Reviewed-by: Gabe Black Maintainer: Gabe Black --- src/systemc/core/scheduler.hh | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/systemc/core/scheduler.hh b/src/systemc/core/scheduler.hh index 0c755eda4..983c53fde 100644 --- a/src/systemc/core/scheduler.hh +++ b/src/systemc/core/scheduler.hh @@ -129,11 +129,14 @@ typedef NodeList ChannelList; * MAX RUN TIME * * When sc_start is called, it's possible to pass in a maximum time the - * simulation should run to, at which point sc_pause is implicitly called. - * That's implemented by scheduling an event at the max time with a priority - * which is lower than all the others so that it happens only if time would - * advance. When that event triggers, it calls the same function as the pause - * event. + * simulation should run to, at which point sc_pause is implicitly called. The + * simulation is supposed to run up to the latest timed notification phase + * which is less than or equal to the maximum time. In other words it should + * run timed notifications at the maximum time, but not the subsequent evaluate + * phase. That's implemented by scheduling an event at the max time with a + * priority which is lower than all the others except the ready event. Timed + * notifications will happen before it fires, but it will override any ready + * event and prevent the evaluate phase from starting. */ class Scheduler @@ -279,9 +282,9 @@ class Scheduler static Priority StopPriority = DefaultPriority - 1; static Priority PausePriority = DefaultPriority + 1; - static Priority ReadyPriority = DefaultPriority + 2; + static Priority MaxTickPriority = DefaultPriority + 2; + static Priority ReadyPriority = DefaultPriority + 3; static Priority StarvationPriority = ReadyPriority; - static Priority MaxTickPriority = DefaultPriority + 3; EventQueue *eq; std::map pendingTicks; -- cgit v1.2.3