From 420ab42e02e2a7c0c5aace5b330717cc014bd178 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 29 Aug 2018 23:02:21 -0700 Subject: 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 Maintainer: Gabe Black --- src/systemc/core/process.hh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/systemc/core') 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)); + } } }; -- cgit v1.2.3