#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"
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));
+ }
}
};
public:
// Should be "implementation defined" but used in the tests.
virtual const sc_event &find_event(sc_interface *if_p=NULL) const = 0;
+ virtual const sc_port_base *port() const = 0;
};
template <class IF>
virtual ~sc_event_finder_t() {}
+ const sc_port_base *port() const { return _port; }
+
const sc_event &
find_event(sc_interface *if_p=NULL) const override
{
class BindInfo;
class Module;
class PendingSensitivityPort;
+class PendingSensitivityFinder;
};
private:
friend class ::sc_gem5::PendingSensitivityPort;
+ friend class ::sc_gem5::PendingSensitivityFinder;
friend class ::sc_gem5::Kernel;
void _gem5Finalize();