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

Change subject: systemc: Implement next_trigger and wait.
......................................................................

systemc: Implement next_trigger and wait.

These set up dynamic sensitivity.

Change-Id: I6cf2c2e4f93fe001eb7df8377753d51846b57d32
Reviewed-on: https://gem5-review.googlesource.com/11714
Reviewed-by: Gabe Black <[email protected]>
Maintainer: Gabe Black <[email protected]>
---
M src/systemc/core/sc_module.cc
1 file changed, 61 insertions(+), 32 deletions(-)

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



diff --git a/src/systemc/core/sc_module.cc b/src/systemc/core/sc_module.cc
index 90139a1..20cc4d2 100644
--- a/src/systemc/core/sc_module.cc
+++ b/src/systemc/core/sc_module.cc
@@ -421,31 +421,36 @@
 void
 next_trigger()
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(nullptr);
 }

 void
-next_trigger(const sc_event &)
+next_trigger(const sc_event &e)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(new ::sc_gem5::SensitivityEvent(p, &e));
 }

 void
-next_trigger(const sc_event_or_list &)
+next_trigger(const sc_event_or_list &eol)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(new ::sc_gem5::SensitivityEventOrList(p, &eol));
 }

 void
-next_trigger(const sc_event_and_list &)
+next_trigger(const sc_event_and_list &eal)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(new ::sc_gem5::SensitivityEventAndList(p, &eal));
 }

 void
-next_trigger(const sc_time &)
+next_trigger(const sc_time &t)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(new ::sc_gem5::SensitivityTimeout(p, t));
 }

 void
@@ -455,9 +460,10 @@
 }

 void
-next_trigger(const sc_time &, const sc_event &)
+next_trigger(const sc_time &t, const sc_event &e)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(new ::sc_gem5::SensitivityTimeoutAndEvent(p, t, &e));
 }

 void
@@ -467,9 +473,11 @@
 }

 void
-next_trigger(const sc_time &, const sc_event_or_list &)
+next_trigger(const sc_time &t, const sc_event_or_list &eol)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(
+            new ::sc_gem5::SensitivityTimeoutAndEventOrList(p, t, &eol));
 }

 void
@@ -479,9 +487,11 @@
 }

 void
-next_trigger(const sc_time &, const sc_event_and_list &)
+next_trigger(const sc_time &t, const sc_event_and_list &eal)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(
+            new ::sc_gem5::SensitivityTimeoutAndEventAndList(p, t, &eal));
 }

 void
@@ -501,37 +511,48 @@
 void
 wait()
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(nullptr);
+    sc_gem5::scheduler.yield();
 }

 void
-wait(int)
+wait(int n)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    for (int i = 0; i < n; i++)
+        wait();
 }

 void
-wait(const sc_event &)
+wait(const sc_event &e)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(new ::sc_gem5::SensitivityEvent(p, &e));
+    sc_gem5::scheduler.yield();
 }

 void
-wait(const sc_event_or_list &)
+wait(const sc_event_or_list &eol)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(new ::sc_gem5::SensitivityEventOrList(p, &eol));
+    sc_gem5::scheduler.yield();
 }

 void
-wait(const sc_event_and_list &)
+wait(const sc_event_and_list &eal)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(new ::sc_gem5::SensitivityEventAndList(p, &eal));
+    sc_gem5::scheduler.yield();
 }

 void
-wait(const sc_time &)
+wait(const sc_time &t)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(new ::sc_gem5::SensitivityTimeout(p, t));
+    sc_gem5::scheduler.yield();
 }

 void
@@ -541,9 +562,11 @@
 }

 void
-wait(const sc_time &, const sc_event &)
+wait(const sc_time &t, const sc_event &e)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(new ::sc_gem5::SensitivityTimeoutAndEvent(p, t, &e));
+    sc_gem5::scheduler.yield();
 }

 void
@@ -553,9 +576,12 @@
 }

 void
-wait(const sc_time &, const sc_event_or_list &)
+wait(const sc_time &t, const sc_event_or_list &eol)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(
+            new ::sc_gem5::SensitivityTimeoutAndEventOrList(p, t, &eol));
+    sc_gem5::scheduler.yield();
 }

 void
@@ -565,9 +591,12 @@
 }

 void
-wait(const sc_time &, const sc_event_and_list &)
+wait(const sc_time &t, const sc_event_and_list &eal)
 {
-    warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+    sc_gem5::Process *p = sc_gem5::scheduler.current();
+    p->setDynamic(
+            new ::sc_gem5::SensitivityTimeoutAndEventAndList(p, t, &eal));
+    sc_gem5::scheduler.yield();
 }

 void

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/11714
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: I6cf2c2e4f93fe001eb7df8377753d51846b57d32
Gerrit-Change-Number: 11714
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