scc 2025.09
SystemC components library
axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL > Class Template Reference

#include <simple_initiator.h>

Inheritance diagram for axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL >:
Collaboration diagram for axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL >:

Public Types

using base = simple_initiator_b
using payload_type = base::payload_type
using phase_type = base::phase_type
Public Types inherited from axi::pe::simple_initiator_b
using payload_type = axi::axi_protocol_types::tlm_payload_type
using phase_type = axi::axi_protocol_types::tlm_phase_type

Public Member Functions

 simple_ace_initiator (const sc_core::sc_module_name &nm, axi::ace_initiator_socket< BUSWIDTH, TYPES, N, POL > &socket)
 the constructor
 simple_ace_initiator (simple_ace_initiator const &)=delete
 simple_ace_initiator (simple_ace_initiator &&)=delete
simple_ace_initiatoroperator= (simple_ace_initiator const &)=delete
simple_ace_initiatoroperator= (simple_ace_initiator &&)=delete
void b_snoop (payload_type &trans, sc_core::sc_time &t) override
 forwarding function to the base class (due to inheritance)
tlm::tlm_sync_enum nb_transport_bw (payload_type &trans, phase_type &phase, sc_core::sc_time &t) override
 forwarding function to the base class (due to inheritance)
void invalidate_direct_mem_ptr (sc_dt::uint64 start_range, sc_dt::uint64 end_range) override
 forwarding function to the base class (due to inheritance)
Public Member Functions inherited from axi::pe::simple_initiator_b
void b_snoop (payload_type &trans, sc_core::sc_time &t)
tlm::tlm_sync_enum nb_transport_bw (payload_type &trans, phase_type &phase, sc_core::sc_time &t)
void invalidate_direct_mem_ptr (sc_dt::uint64 start_range, sc_dt::uint64 end_range)
void set_clock_period (sc_core::sc_time clk_period)
size_t get_transferwith_in_bytes () const
void transport (payload_type &trans, bool blocking) override
 The forward transport function. It behaves blocking and is re-entrant.
void set_snoop_cb (std::function< unsigned(payload_type &trans)> cb)
 Set the snoop callback function.
void snoop_resp (payload_type &trans, bool sync=false) override
 triggers a non-blocking snoop response if the snoop callback does not do so.
void add_protocol_cb (axi::fsm::protocol_time_point_e e, std::function< void(payload_type &, bool)> cb)
 register a callback for a certain time point

Additional Inherited Members

Public Attributes inherited from axi::pe::simple_initiator_b
sc_core::sc_in< bool > clk_i {"clk_i"}
sc_core::sc_export< tlm::scc::pe::intor_fw_bfw_i {"fw_i"}
sc_core::sc_port< tlm::scc::pe::intor_bw_b, 1, sc_core::SC_ZERO_OR_MORE_BOUND > bw_o {"bw_o"}
sc_core::sc_attribute< unsigned > wr_data_beat_delay {"wr_data_beat_delay", 0}
 the latency between between END(_PARTIAL)_REQ and BEGIN(_PARTIAL)_REQ (AWREADY to AWVALID and WREADY to WVALID)
sc_core::sc_attribute< unsigned > rd_data_accept_delay {"rd_data_accept_delay", 0}
 the latency between between BEGIN(_PARTIAL)_RESP and END(_PARTIAL)_RESP (RVALID to RREADY)
sc_core::sc_attribute< unsigned > wr_resp_accept_delay {"wr_resp_accept_delay", 0}
 the latency between between BEGIN_RESP and END_RESP (BVALID to BREADY)
sc_core::sc_attribute< unsigned > ack_resp_delay {"ack_resp_delay", 0}
 the latency between between BEGIN_RESP and END_RESP (BVALID to BREADY)
unsigned snoop_latency {1}
 the default snoop latency between request and response phase. Will be overwritten by the return of the callback function (if registered)
Protected Types inherited from axi::fsm::base
using payload_type = axi::axi_protocol_types::tlm_payload_type
 aliases used in the class
using phase_type = axi::axi_protocol_types::tlm_phase_type
Protected Member Functions inherited from axi::pe::simple_initiator_b
 simple_initiator_b (const sc_core::sc_module_name &nm, sc_core::sc_port_b< axi::axi_fw_transport_if< axi_protocol_types > > &port, size_t transfer_width, bool coherent=false)
 simple_initiator_b (simple_initiator_b const &)=delete
 simple_initiator_b (simple_initiator_b &&)=delete
simple_initiator_boperator= (simple_initiator_b const &)=delete
simple_initiator_boperator= (simple_initiator_b &&)=delete
void fsm_clk_method ()
axi::fsm::fsm_handlecreate_fsm_handle () override
void setup_callbacks (axi::fsm::fsm_handle *) override
void process_snoop_resp ()
void end_of_elaboration () override
void cbpeq_cb ()
Protected Member Functions inherited from axi::fsm::base
 base (size_t transfer_width, bool coherent=false, axi::fsm::protocol_time_point_e wr_start=axi::fsm::RequestPhaseBeg)
 the constructor
virtual ~base ()
 the destructor
tlm::tlm_sync_enum nb_fw (payload_type &trans, phase_type const &phase, sc_core::sc_time &t)
 triggers the FSM based on TLM phases in the forward path. Should be called from np_transport_fw of the respective derived class
tlm::tlm_sync_enum nb_bw (payload_type &trans, phase_type const &phase, sc_core::sc_time &t)
 triggers the FSM based on TLM phases in the backward path. Should be called from np_transport_bw of the respective derived class
axi::fsm::fsm_handlefind_or_create (payload_type *gp=nullptr, bool ace=false)
 retrieve the FSM handle based on the transaction passed. If non exist one will be created
void process_fsm_event ()
 processes the fsm_event_queue and triggers FSM aligned
void process_fsm_clk_queue ()
 processes the fsm_clk_queue and triggers the FSM accordingly. Should be registered as rising-edge clock callback
void schedule (axi::fsm::protocol_time_point_e e, tlm::scc::tlm_gp_shared_ptr &gp, unsigned cycles)
 processes the fsm_sched_queue and propagates events to fsm_clk_queue. Should be registered as falling-edge clock callback
void schedule (axi::fsm::protocol_time_point_e e, payload_type *gp, unsigned cycles)
void schedule (axi::fsm::protocol_time_point_e e, tlm::scc::tlm_gp_shared_ptr &gp, sc_core::sc_time delay, bool syncronize=false)
 processes the fsm_sched_queue and propagates events to fsm_clk_queue. Should be registered as falling-edge clock callback
void schedule (axi::fsm::protocol_time_point_e e, payload_type *gp, sc_core::sc_time delay, bool syncronize=false)
void react (axi::fsm::protocol_time_point_e event, tlm::scc::tlm_gp_shared_ptr &trans)
 triggers the FSM with event and given transaction
void react (axi::fsm::protocol_time_point_e event, payload_type *trans)
void react (axi::fsm::protocol_time_point_e, axi::fsm::fsm_handle *)
Protected Attributes inherited from axi::pe::simple_initiator_b
unsigned thread_avail {0}
unsigned thread_active {0}
sc_core::sc_fifo< tlm::scc::tlm_gp_shared_ptr > dispatch_queue {"dispatch_queue"}
sc_core::sc_port_b< axi::axi_fw_transport_if< axi_protocol_types > > & socket_fw
std::deque< fsm::fsm_handle * > idle_proc
::scc::ordered_semaphore rd {1}
::scc::ordered_semaphore wr {1}
::scc::ordered_semaphore snp {1}
::scc::fifo_w_cb< std::tuple< axi::fsm::protocol_time_point_e, payload_type *, unsigned > > snp_resp_queue
sc_core::sc_process_handle snp_resp_queue_hndl
sc_core::sc_time clk_period {1, sc_core::SC_NS}
std::function< unsigned(payload_type &trans)> snoop_cb
std::array< std::function< void(payload_type &, bool)>, axi::fsm::CB_CNT > protocol_cb
sc_core::sc_clock * clk_if {nullptr}
scc::peq< std::tuple< axi::fsm::protocol_time_point_e, tlm::scc::tlm_gp_shared_ptr, bool > > cbpeq
Protected Attributes inherited from axi::fsm::base
::scc::peq< std::tuple< axi::fsm::protocol_time_point_e, payload_type *, bool > > fsm_event_queue
::scc::fifo_w_cb< std::tuple< axi::fsm::protocol_time_point_e, payload_type *, unsigned > > fsm_clk_queue
sc_core::sc_process_handle fsm_clk_queue_hndl
size_t transfer_width_in_bytes
const axi::fsm::protocol_time_point_e wr_start
const bool coherent
std::unordered_map< payload_type *, axi::fsm::fsm_handle * > active_fsm
std::deque< axi::fsm::fsm_handle * > idle_fsm
std::vector< std::unique_ptr< axi::fsm::fsm_handle > > allocated_fsm
std::string instance_name
sc_core::sc_event finish_evt

Detailed Description

template<unsigned int BUSWIDTH = 32, typename TYPES = axi::axi_protocol_types, int N = 1, sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND>
class axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL >

the ACE initiator socket protocol engine adapted to a particular initiator socket configuration

Definition at line 234 of file simple_initiator.h.

Member Typedef Documentation

◆ base

template<unsigned int BUSWIDTH = 32, typename TYPES = axi::axi_protocol_types, int N = 1, sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND>
using axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL >::base = simple_initiator_b

Definition at line 236 of file simple_initiator.h.

◆ payload_type

template<unsigned int BUSWIDTH = 32, typename TYPES = axi::axi_protocol_types, int N = 1, sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND>
using axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL >::payload_type = base::payload_type

Definition at line 238 of file simple_initiator.h.

◆ phase_type

template<unsigned int BUSWIDTH = 32, typename TYPES = axi::axi_protocol_types, int N = 1, sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND>
using axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL >::phase_type = base::phase_type

Definition at line 239 of file simple_initiator.h.

Constructor & Destructor Documentation

◆ simple_ace_initiator()

template<unsigned int BUSWIDTH = 32, typename TYPES = axi::axi_protocol_types, int N = 1, sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND>
axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL >::simple_ace_initiator ( const sc_core::sc_module_name & nm,
axi::ace_initiator_socket< BUSWIDTH, TYPES, N, POL > & socket )
inline

the constructor

Parameters
socketreference to the initiator socket used to send and receive transactions

Definition at line 245 of file simple_initiator.h.

Member Function Documentation

◆ b_snoop()

template<unsigned int BUSWIDTH = 32, typename TYPES = axi::axi_protocol_types, int N = 1, sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND>
void axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL >::b_snoop ( payload_type & trans,
sc_core::sc_time & t )
inlineoverridevirtual

forwarding function to the base class (due to inheritance)

Parameters
trans
t

Implements axi::bw_blocking_transport_if< axi::axi_protocol_types::tlm_payload_type >.

Definition at line 266 of file simple_initiator.h.

◆ invalidate_direct_mem_ptr()

template<unsigned int BUSWIDTH = 32, typename TYPES = axi::axi_protocol_types, int N = 1, sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND>
void axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL >::invalidate_direct_mem_ptr ( sc_dt::uint64 start_range,
sc_dt::uint64 end_range )
inlineoverride

forwarding function to the base class (due to inheritance)

Parameters
start_range
end_range

Definition at line 282 of file simple_initiator.h.

◆ nb_transport_bw()

template<unsigned int BUSWIDTH = 32, typename TYPES = axi::axi_protocol_types, int N = 1, sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND>
tlm::tlm_sync_enum axi::pe::simple_ace_initiator< BUSWIDTH, TYPES, N, POL >::nb_transport_bw ( payload_type & trans,
phase_type & phase,
sc_core::sc_time & t )
inlineoverride

forwarding function to the base class (due to inheritance)

Parameters
trans
phase
t
Returns

Definition at line 274 of file simple_initiator.h.


The documentation for this class was generated from the following file:
  • /home/eyck/Projects/MINRES/SystemC-Components/third_party/axi_chi/axi/pe/simple_initiator.h