Gabe Black has submitted this change and it was merged. ( https://gem5-review.googlesource.com/c/public/gem5/+/12444 )

Change subject: systemc: When sensitive to an event finder, find on all interfaces.
......................................................................

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 <[email protected]>
Maintainer: Gabe Black <[email protected]>
---
M src/systemc/core/process.hh
M src/systemc/ext/core/sc_event.hh
M src/systemc/ext/core/sc_port.hh
3 files changed, 13 insertions(+), 1 deletion(-)

Approvals:
  Gabe Black: Looks good to me, approved; Looks good to me, approved



diff --git a/src/systemc/core/process.hh b/src/systemc/core/process.hh
index 0d852af..2ec75dc 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 @@
     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));
+        }
     }
 };

diff --git a/src/systemc/ext/core/sc_event.hh b/src/systemc/ext/core/sc_event.hh
index a5ac2d4..e9748cb 100644
--- a/src/systemc/ext/core/sc_event.hh
+++ b/src/systemc/ext/core/sc_event.hh
@@ -64,6 +64,7 @@
   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>
@@ -80,6 +81,8 @@

     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
     {
diff --git a/src/systemc/ext/core/sc_port.hh b/src/systemc/ext/core/sc_port.hh
index b392359..50c45dc 100644
--- a/src/systemc/ext/core/sc_port.hh
+++ b/src/systemc/ext/core/sc_port.hh
@@ -42,6 +42,7 @@
 class BindInfo;
 class Module;
 class PendingSensitivityPort;
+class PendingSensitivityFinder;

 };

@@ -85,6 +86,7 @@

   private:
     friend class ::sc_gem5::PendingSensitivityPort;
+    friend class ::sc_gem5::PendingSensitivityFinder;
     friend class ::sc_gem5::Kernel;

     void _gem5Finalize();

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12444
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I92312e04e60fab7a7ea51c1ed687edabe9768205
Gerrit-Change-Number: 12444
Gerrit-PatchSet: 8
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-Reviewer: Andreas Sandberg <[email protected]>
Gerrit-Reviewer: Gabe Black <[email protected]>
Gerrit-Reviewer: Giacomo Travaglini <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: Matthias Jung <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to