diff options
author | Gabe Black <gabeblack@google.com> | 2018-05-24 01:37:55 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-08-08 10:09:54 +0000 |
commit | 16fa8d7cc8c92f5ab879e4cf9c6c0bbb3567860f (patch) | |
tree | 7b6faaacb4574a555e561534aa4a8508c0624c32 /src/systemc/tests/systemc/communication/sc_event_queue/test01 | |
parent | 7235d3b5211d0ba8f528d930a4c1e7ad62eec51a (diff) | |
download | gem5-16fa8d7cc8c92f5ab879e4cf9c6c0bbb3567860f.tar.xz |
systemc: Import tests from the Accellera systemc distribution.
Change-Id: Iad76b398949a55d768a34d027a2d8e3739953da6
Reviewed-on: https://gem5-review.googlesource.com/10845
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/tests/systemc/communication/sc_event_queue/test01')
-rw-r--r-- | src/systemc/tests/systemc/communication/sc_event_queue/test01/golden/test01.log | 38 | ||||
-rw-r--r-- | src/systemc/tests/systemc/communication/sc_event_queue/test01/test01.cpp | 88 |
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; +} |