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