summaryrefslogtreecommitdiff
path: root/src/systemc/tests/systemc/communication/sc_event_queue
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/tests/systemc/communication/sc_event_queue')
-rw-r--r--src/systemc/tests/systemc/communication/sc_event_queue/test01/golden/test01.log38
-rw-r--r--src/systemc/tests/systemc/communication/sc_event_queue/test01/test01.cpp88
2 files changed, 126 insertions, 0 deletions
diff --git a/src/systemc/tests/systemc/communication/sc_event_queue/test01/golden/test01.log b/src/systemc/tests/systemc/communication/sc_event_queue/test01/golden/test01.log
new file mode 100644
index 000000000..73b6d527c
--- /dev/null
+++ b/src/systemc/tests/systemc/communication/sc_event_queue/test01/golden/test01.log
@@ -0,0 +1,38 @@
+SystemC Simulation
+0 s delta 2: P awakes
+0 s delta 3: P awakes
+0 s delta 4: P awakes
+0 s delta 5: P awakes
+1 ns delta 6: P awakes
+1 ns delta 7: P awakes
+1 ns delta 8: P awakes
+1 ns delta 9: P awakes
+13 ns delta 11: P awakes
+15 ns delta 12: P awakes
+15 ns delta 12: xyz awakes
+15 ns delta 13: P awakes
+18 ns delta 14: P awakes
+20 ns delta 17: P awakes
+20 ns delta 18: P awakes
+21 ns delta 19: P awakes
+21 ns delta 20: P awakes
+40 ns delta 24: P awakes
+40 ns delta 25: P awakes
+40 ns delta 26: P awakes
+40 ns delta 27: P awakes
+41 ns delta 28: P awakes
+41 ns delta 29: P awakes
+41 ns delta 30: P awakes
+41 ns delta 31: P awakes
+60 ns delta 35: P awakes
+60 ns delta 36: P awakes
+61 ns delta 37: P awakes
+61 ns delta 38: P awakes
+80 ns delta 42: P awakes
+80 ns delta 43: P awakes
+80 ns delta 44: P awakes
+80 ns delta 45: P awakes
+81 ns delta 46: P awakes
+81 ns delta 47: P awakes
+81 ns delta 48: P awakes
+81 ns delta 49: P awakes
diff --git a/src/systemc/tests/systemc/communication/sc_event_queue/test01/test01.cpp b/src/systemc/tests/systemc/communication/sc_event_queue/test01/test01.cpp
new file mode 100644
index 000000000..85e52c703
--- /dev/null
+++ b/src/systemc/tests/systemc/communication/sc_event_queue/test01/test01.cpp
@@ -0,0 +1,88 @@
+#include <systemc.h>
+
+SC_MODULE(Rec) {
+ sc_event_queue_port E;
+
+ SC_CTOR(Rec) {
+ SC_METHOD(P);
+ sensitive << E;
+ dont_initialize();
+ }
+ void P() {
+ cout << sc_time_stamp()
+ << " delta " << sc_delta_count()
+ << ": P awakes\n";
+ }
+};
+
+SC_MODULE(Sender) {
+ sc_in<bool> Clock;
+ sc_event_queue_port E;
+
+ SC_CTOR(Sender) {
+ SC_METHOD(P);
+ sensitive << Clock.pos();
+ dont_initialize();
+ }
+ void P() {
+ // trigger in now (2x), now+1ns (2x)
+ E->notify( 0, SC_NS );
+ E->notify( 0, SC_NS );
+ E->notify( 1, SC_NS );
+ E->notify( 1, SC_NS );
+ }
+};
+
+SC_MODULE(xyz) {
+ SC_CTOR(xyz) {
+ SC_THREAD(P);
+ }
+ void P() {
+ wait(15, SC_NS);
+ cout << sc_time_stamp()
+ << " delta " << sc_delta_count()
+ << ": xyz awakes\n";
+ }
+};
+
+int sc_main (int agrc, char** argv)
+{
+ sc_event_queue E("E");
+
+ Rec R("Rec");
+ R.E(E);
+
+ sc_clock C1 ("C1", 20, SC_NS);
+ sc_clock C2 ("C2", 40, SC_NS);
+
+ xyz xyz_obj("xyz");
+
+ // Events at 0ns (2x), 1ns (2x), 20ns (2x), 21ns (2x), 40ns (2x), ...
+ Sender S1("S1");
+ S1.Clock(C1);
+ S1.E(E);
+
+ // Events at 0ns (2x), 1ns (2x), 40ns (2x), 41ns (2x), 80ns (2x), ...
+ Sender S2("S2");
+ S2.Clock(C2);
+ S2.E(E);
+
+ // Events at 3ns, 5ns (2x), 8ns
+ sc_start(10, SC_NS);
+ E.notify( 5,SC_NS );
+ E.notify( 3,SC_NS );
+ E.notify( 5,SC_NS );
+ E.notify( 8,SC_NS) ;
+
+ // Events would be at 40ns, 43ns (2x), 44ns but all are cancelled
+ sc_start(40, SC_NS);
+ E.notify( 3, SC_NS );
+ E.notify( 3, SC_NS );
+ E.notify( 4, SC_NS );
+ E.notify( SC_ZERO_TIME );
+ E.cancel_all();
+
+ sc_start(40, SC_NS);
+
+ return 0;
+}