Jump to content

Jarodw

Members
  • Content Count

    3
  • Joined

  • Last visited

About Jarodw

  • Rank
    Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Thanks Philipp, I also saw the bug regarding optionally unbound sockets in SystemC 2.3.1 which we also encountered, so I thought I tried my luck with 2.3.2. We will stick to 2.3.0 until the issue is fixed.
  2. Thanks Roman. Is there a way that I can see the progress of this bug? We use multi passthrough socket a lot.
  3. I just downloaded the SystemC 2.3.2 and found that the same design works in 2.3.0 but doesn't work in 2.3.2. The design utilizes the hierarchical bind as: initiator->parent_target->target It reports error with SystemC 2.3.2: Error: /OSCI_TLM-2/multi_socket: parent_target.multi_passthrough_target_socket_0: Call to b_transport without a registered callback for b_transport The b_transport is registered for target but not for parent_target. This used to be work fine in 2.3.0. Am I missing something here? Full code: #include <systemc.h> #include <tlm.h> #include "tlm_utils/multi_passthrough_initiator_socket.h" #include "tlm_utils/multi_passthrough_target_socket.h" #define SC_INCLUDE_DYNAMIC_PROCESSES using namespace std; using namespace sc_core; using namespace tlm; class target : public sc_module { public: target( sc_module_name module_name ) { cout << "Construct target" << endl; t00.register_b_transport(this, &target::b_transport); } tlm_utils::multi_passthrough_target_socket<target> t00; void b_transport(int ID, tlm::tlm_generic_payload& bp, sc_time& delay) { cout << "Calling t00 b_transport" << endl; } }; class parent_target : public sc_module { public: parent_target( sc_module_name module_name ) { cout << "Construct parent_target" << endl; p_target = new target("target"); t0.bind(p_target->t00); } tlm_utils::multi_passthrough_target_socket<parent_target> t0; target *p_target; }; class initator : public sc_module { public: initator( sc_module_name module_name ) { cout << "Construct initator" << endl; SC_THREAD(thread0); } tlm_utils::multi_passthrough_initiator_socket<initator> i0; SC_HAS_PROCESS(initator); void thread0 (void) { cout << "Enter thread0" << endl; tlm_generic_payload p0; sc_time delay = SC_ZERO_TIME; i0->b_transport(p0, delay); cout << "Exit thread0" << endl; } }; int sc_main(int argc, char* argv[]) { initator m_initator("initator"); parent_target m_parent_target("parent_target"); m_initator.i0.bind(m_parent_target.t0); sc_start(); return (0); }
×