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