diff options
author | Gabe Black <gabeblack@google.com> | 2018-08-15 19:16:41 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-09-20 01:49:31 +0000 |
commit | 82958266d412e82c910b2ce35ac2a72e6c9fe358 (patch) | |
tree | addb317bf33d1619fefd887a334ed4b12224c43a /src/systemc/core | |
parent | e1e02e91e02da93c7fd95f24a9135f47802e23e8 (diff) | |
download | gem5-82958266d412e82c910b2ce35ac2a72e6c9fe358.tar.xz |
systemc: Fix the priority of the maximum time event.
Change-Id: I3e5e71165d06da77076f0e58012c575e24456182
Reviewed-on: https://gem5-review.googlesource.com/12209
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/core')
-rw-r--r-- | src/systemc/core/scheduler.hh | 17 |
1 files 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<Channel> 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<Tick, int> pendingTicks; |