test235a.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 (correct 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_ONE_OR_MORE_BOUND> p2;
13  sc_port<sc_signal_in_if<int>,2,SC_ONE_OR_MORE_BOUND> p3;
14  sc_port<sc_signal_in_if<int>,0,SC_ONE_OR_MORE_BOUND> p4;
15  sc_port<sc_signal_in_if<int>,2,SC_ZERO_OR_MORE_BOUND> p5;
16  sc_port<sc_signal_in_if<int>,2,SC_ZERO_OR_MORE_BOUND> p6;
17  sc_port<sc_signal_in_if<int>,2,SC_ZERO_OR_MORE_BOUND> p7;
18  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p8;
19  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p9;
20  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p10;
21  sc_port<sc_signal_in_if<int>,1,SC_ALL_BOUND> p11;
22  sc_port<sc_signal_in_if<int>,3,SC_ALL_BOUND> p12;
23
24  sc_port<sc_signal_in_if<int>,2,SC_ALL_BOUND> p1_all_2;
25  sc_port<sc_signal_in_if<int>,2,SC_ALL_BOUND> p2_all_2;
26  sc_port<sc_signal_in_if<int>,2,SC_ALL_BOUND> p3_all_2;
27  sc_port<sc_signal_in_if<int>,5,SC_ALL_BOUND> p4_all_5;
28  sc_port<sc_signal_in_if<int>,2,SC_ALL_BOUND> p5_all_2;
29
30  sc_port<sc_signal_in_if<int>,2,SC_ZERO_OR_MORE_BOUND> p6_zero;
31  sc_port<sc_signal_in_if<int>,2,SC_ZERO_OR_MORE_BOUND> p7_one;
32  sc_port<sc_signal_in_if<int>,2,SC_ZERO_OR_MORE_BOUND> p8_two;
33
34  SC_CTOR(M)
35    : p1("p1"),
36      p2("p2"),
37      p3("p3"),
38      p4("p4"),
39      p5("p5"),
40      p6("p6"),
41      p7("p7"),
42      p8("p8"),
43      p9("p9"),
44      p10("p10"),
45      p11("p11"),
46      p12("p12"),
47      p1_all_2("p1_all_2"),
48      p2_all_2("p2_all_2"),
49      p3_all_2("p3_all_2"),
50      p4_all_5("p4_all_5"),
51      p5_all_2("p5_all_2"),
52      p6_zero("p6_zero"),
53      p7_one("p7_one"),
54      p8_two("p8_two")
55  {}
56  void end_of_elaboration()
57  {
58    sc_assert(p1.size() == 1);
59    sc_assert(p2.size() == 1);
60    sc_assert(p3.size() == 2);
61    sc_assert(p4.size() == 3);
62    sc_assert(p5.size() == 0);
63    sc_assert(p6.size() == 1);
64    sc_assert(p7.size() == 2);
65    sc_assert(p8.size() == 0);
66    sc_assert(p9.size() == 1);
67    sc_assert(p10.size() == 2);
68    sc_assert(p11.size() == 1);
69    sc_assert(p12.size() == 3);
70
71    sc_assert(p1_all_2.size() == 2);
72    sc_assert(p2_all_2.size() == 2);
73    sc_assert(p3_all_2.size() == 2);
74    sc_assert(p4_all_5.size() == 5);
75    sc_assert(p5_all_2.size() == 2);
76
77    sc_assert(p6_zero.size() == 0);
78    sc_assert(p7_one.size() == 1);
79    sc_assert(p8_two.size() == 2);
80  }
81};
82
83SC_MODULE(Top)
84{
85  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p1_twice;
86  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p2_once;
87  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p3_once;
88  sc_port<sc_signal_in_if<int>,0,SC_ZERO_OR_MORE_BOUND> p4_unbound;
89
90  M *m;
91  sc_signal<int> sig1, sig2, sig3, sig4;
92
93  SC_CTOR(Top)
94  {
95    m = new M("m");
96    m->p1(sig1);
97
98    m->p2(sig1);
99
100    m->p3(sig1);
101    m->p3(sig2);
102
103    m->p4(sig1);
104    m->p4(sig2);
105    m->p4(sig3);
106
107    m->p6(sig3);
108
109    m->p7(sig1);
110    m->p7(sig2);
111
112    m->p9(sig1);
113
114    m->p10(sig1);
115    m->p10(sig2);
116
117    m->p11(sig1);
118
119    m->p12(sig1);
120    m->p12(sig2);
121    m->p12(sig3);
122
123    m->p1_all_2(p1_twice);
124
125    m->p2_all_2(p2_once);
126    m->p2_all_2(p3_once);
127
128    m->p3_all_2(sig1);
129    m->p3_all_2(p2_once);
130
131    m->p4_all_5(p2_once);
132    m->p4_all_5(sig1);
133    m->p4_all_5(p1_twice);
134    m->p4_all_5(p3_once);
135    m->p4_all_5(p4_unbound);
136
137    m->p5_all_2(p2_once);
138    m->p5_all_2(p4_unbound);
139
140    m->p6_zero(p4_unbound);
141
142    m->p7_one(p2_once);
143
144    m->p8_two(p2_once);
145  }
146  void before_end_of_elaboration()
147  {
148    m->p5_all_2(p4_unbound);
149    m->p5_all_2(p3_once);
150    m->p5_all_2(p4_unbound);
151
152    m->p6_zero(p4_unbound);
153
154    m->p8_two(sig1);
155  }
156};
157
158int sc_main(int argc, char* argv[])
159{
160  cout << "Should be silent..." << endl;
161
162  sc_signal<int> sig1, sig2, sig3, sig4;
163
164  Top top("top");
165  top.p1_twice(sig1);
166  top.p1_twice(sig2);
167
168  top.p2_once(sig3);
169  top.p3_once(sig4);
170
171  sc_start(1, SC_NS);
172
173  cout << endl << "Success" << endl;
174  return 0;
175}
176