diff options
author | Gabe Black <gabeblack@google.com> | 2018-08-29 23:02:21 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-10-03 00:15:57 +0000 |
commit | 420ab42e02e2a7c0c5aace5b330717cc014bd178 (patch) | |
tree | 9e2034fad19bac973716bc563cd4384d23125f62 /src/systemc/core | |
parent | 8fdda3b2d8eb12b3c26cce8f38ce6ea4f525fa69 (diff) | |
download | gem5-420ab42e02e2a7c0c5aace5b330717cc014bd178.tar.xz |
systemc: When sensitive to an event finder, find on all interfaces.
When a process is sensitive to an event finder and that finder is
attached to a port which is bound to multiple interfaces, the process
is supposed to be made sensitive to the event finder function's result
when called on each interface, not just the first one.
Change-Id: I92312e04e60fab7a7ea51c1ed687edabe9768205
Reviewed-on: https://gem5-review.googlesource.com/c/12444
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/process.hh | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/systemc/core/process.hh b/src/systemc/core/process.hh index 0d852afdb..2ec75dc06 100644 --- a/src/systemc/core/process.hh +++ b/src/systemc/core/process.hh @@ -37,6 +37,7 @@ #include "base/fiber.hh" #include "sim/eventq.hh" #include "systemc/core/bindinfo.hh" +#include "systemc/core/event.hh" #include "systemc/core/list.hh" #include "systemc/core/object.hh" #include "systemc/core/sched_event.hh" @@ -259,7 +260,13 @@ class PendingSensitivityFinder : public PendingSensitivity void finalize(Sensitivities &s) override { - s.push_back(new SensitivityEvent(process, &finder->find_event())); + const ::sc_core::sc_port_base *port = finder->port(); + int size = port->size(); + for (int i = 0; i < size; i++) { + ::sc_core::sc_interface *interface = port->_gem5Interface(i); + const ::sc_core::sc_event *event = &finder->find_event(interface); + s.push_back(new SensitivityEvent(process, event)); + } } }; |