29class apb_initiator_b :
public sc_core::sc_module,
public tlm::tlm_bw_transport_if<tlm::tlm_base_protocol_types> {
31#if SYSTEMC_VERSION < 20250221
32 SC_HAS_PROCESS(apb_initiator_b);
34 using payload_type = tlm::tlm_generic_payload;
35 using phase_type = tlm::tlm_phase;
37 sc_core::sc_in<bool> clk_i{
"clk_i"};
39 tlm::tlm_sync_enum nb_transport_bw(payload_type& trans, phase_type& phase, sc_core::sc_time& t)
override;
41 void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, sc_dt::uint64 end_range)
override;
43 size_t get_transferwith_in_bytes()
const {
return transfer_width_in_bytes; }
53 void transport(payload_type& trans,
bool blocking);
55 apb_initiator_b(sc_core::sc_module_name nm, sc_core::sc_port_b<tlm::tlm_fw_transport_if<tlm::tlm_base_protocol_types>>& port,
56 size_t transfer_width,
bool coherent);
58 virtual ~apb_initiator_b();
60 apb_initiator_b() =
delete;
62 apb_initiator_b(apb_initiator_b
const&) =
delete;
64 apb_initiator_b(apb_initiator_b&&) =
delete;
66 apb_initiator_b& operator=(apb_initiator_b
const&) =
delete;
68 apb_initiator_b& operator=(apb_initiator_b&&) =
delete;
71 const size_t transfer_width_in_bytes;
73 sc_core::sc_port_b<tlm::tlm_fw_transport_if<tlm::tlm_base_protocol_types>>& socket_fw;
79 sc_core::sc_event any_tx_finished;
81 sc_core::sc_time clk_period{10, sc_core::SC_NS};
84 sc_core::sc_clock* clk_if{
nullptr};
85 void end_of_elaboration()
override { clk_if =
dynamic_cast<sc_core::sc_clock*
>(clk_i.get_interface()); }
87 unsigned m_clock_counter{0};
88 unsigned m_prev_clk_cnt{0};