OLD_sc_start_starvation.cpp revision 12855:588919e0e4aa
1
2// sc_start with event starvation policy
3
4#include <systemc>
5using namespace sc_core;
6using std::cout;
7using std::endl;
8
9SC_MODULE(Top)
10{
11  SC_CTOR(Top)
12  {
13    SC_THREAD(T);
14  }
15
16  sc_event ev;
17
18  void T()
19  {
20    ev.notify(150, SC_NS);
21  }
22};
23
24int sc_main(int argc, char* argv[])
25{
26  Top top("top");
27
28  sc_assert( sc_get_status() == SC_ELABORATION );
29  sc_assert( sc_time_stamp() == SC_ZERO_TIME );
30  sc_start(100, SC_NS);
31  sc_assert( sc_time_stamp() == sc_time(100, SC_NS) );
32
33  sc_start(10, SC_NS, SC_RUN_TO_TIME);
34  sc_assert( sc_time_stamp() == sc_time(110, SC_NS) );
35
36  sc_start(10, SC_NS, SC_EXIT_ON_STARVATION);
37  sc_assert( sc_time_stamp() == sc_time(110, SC_NS) );
38
39  sc_start(80, SC_NS, SC_EXIT_ON_STARVATION);
40  sc_assert( sc_time_stamp() == sc_time(150, SC_NS) );  // FAILS - time = 200 NS
41
42  sc_start();
43  sc_assert( sc_time_stamp() == sc_time(150, SC_NS) );
44  sc_assert( sc_get_status() == SC_PAUSED );
45
46  cout << endl << "Success" << endl;
47  return 0;
48}
49