test235b.cpp revision 12855:588919e0e4aa
1#include <systemc>
2using namespace sc_core;
3using namespace sc_dt;
4using std::cout;
5using std::endl;
6
7// 35) Port policy (incorrect binding)
8
9SC_MODULE(M)
10{
11  sc_port<sc_signal_in_if<int>,1,SC_ONE_OR_MORE_BOUND> p1;
12  sc_port<sc_signal_in_if<int>,2,SC_ALL_BOUND> p2;
13  sc_port<sc_signal_in_if<int>,2,SC_ZERO_OR_MORE_BOUND> p3;
14  sc_port<sc_signal_in_if<int>,1,SC_ONE_OR_MORE_BOUND> p4;
15  sc_port<sc_signal_in_if<int>,5,SC_ALL_BOUND> p5;
16  sc_port<sc_signal_in_if<int>,5,SC_ALL_BOUND> p6;
17  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p7;
18
19  SC_CTOR(M)
20    : p1("p1"),
21      p2("p2"),
22      p3("p3"),
23      p4("p4"),
24      p5("p5"),
25      p6("p6"),
26      p7("p7")
27  {}
28  void end_of_elaboration()
29  {
30    sc_assert(p1.size() == 0);
31    sc_assert(p2.size() == 1);
32    sc_assert(p3.size() == 3);
33    sc_assert(p4.size() == 2);
34    sc_assert(p5.size() == 6);
35    sc_assert(p6.size() == 0);
36    sc_assert(p7.size() == 2);
37  }
38};
39
40SC_MODULE(Top)
41{
42  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p0_unbound;
43  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p1_once;
44  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p2_twice;
45
46  M *m;
47  sc_signal<int> sig1, sig2, sig3, sig4;
48
49  SC_CTOR(Top)
50  {
51    m = new M("m");
52    m->p1(p0_unbound);
53
54    m->p2(p1_once);
55
56    m->p3(p1_once);
57    m->p3(p2_twice);
58
59    m->p4(p2_twice);
60
61    m->p5(sig1);
62    m->p5(p1_once);
63    m->p5(sig2);
64    m->p5(p2_twice);
65    m->p5(sig3);
66
67    m->p7(sig1);
68    m->p7(sig1);
69  }
70};
71
72int sc_main(int argc, char* argv[])
73{
74  cout << "Should be 7 errors but no aborts ..." << endl;
75
76  sc_report_handler::set_actions(SC_ERROR, SC_DISPLAY);
77
78  sc_signal<int> sig1, sig2, sig3, sig4;
79
80  Top top("top");
81  top.p1_once(sig1);
82
83  top.p2_twice(sig2);
84  top.p2_twice(sig3);
85
86  sc_start(1, SC_NS);
87
88  sc_assert(sc_report_handler::get_count(SC_ERROR) == 7);
89
90  cout << endl << "Success" << endl;
91  return 0;
92}
93