scc 2025.09
SystemC components library
axi::pe::ace_target_pe Class Reference

#include <ace_target_pe.h>

Inheritance diagram for axi::pe::ace_target_pe:
Collaboration diagram for axi::pe::ace_target_pe:

Classes

struct  bw_intor_impl

Public Types

using payload_type = axi::axi_protocol_types::tlm_payload_type
using phase_type = axi::axi_protocol_types::tlm_phase_type

Public Member Functions

void b_transport (payload_type &trans, sc_core::sc_time &t) override
tlm::tlm_sync_enum nb_transport_fw (payload_type &trans, phase_type &phase, sc_core::sc_time &t) override
bool get_direct_mem_ptr (payload_type &trans, tlm::tlm_dmi &dmi_data) override
unsigned int transport_dbg (payload_type &trans) override
void set_operation_cb (std::function< unsigned(payload_type &trans)> cb)
 Set the operation callback function.
void operation_resp (payload_type &trans, unsigned clk_delay=0)
bool is_active ()
const sc_core::sc_event & tx_finish_event ()
tlm::tlm_sync_enum nb_transport_bw (payload_type &trans, phase_type &phase, sc_core::sc_time &t) override
void invalidate_direct_mem_ptr (sc_dt::uint64 start_range, sc_dt::uint64 end_range) override
 ace_target_pe (const sc_core::sc_module_name &nm, size_t transfer_width)
void set_bw_interface (axi::axi_bw_transport_if< axi_protocol_types > *ifs)
void snoop (payload_type &trans)

Public Attributes

sc_core::sc_in< bool > clk_i {"clk_i"}
axi::axi_initiator_socket< 64 > isckt_axi {"isckt_axi"}
sc_core::sc_port< tlm::scc::pe::intor_fw_nb, 1, sc_core::SC_ZERO_OR_MORE_BOUND > fw_o {"fw_o"}
sc_core::sc_export< tlm::scc::pe::intor_bw_nbbw_i {"bw_i"}
cci::cci_param< int > rd_resp_delay {"rd_resp_delay", 0}
 the latency between read request and response phase. Will be overwritten by the return of the callback function (if registered) -> RIV
cci::cci_param< int > wr_resp_delay {"wr_resp_delay", 0}
 the latency between write request and response phase. Will be overwritten by the return of the callback function (if registered) -> BV

Protected Member Functions

 ace_target_pe (ace_target_pe const &)=delete
 ace_target_pe (ace_target_pe &&)=delete
ace_target_peoperator= (ace_target_pe const &)=delete
ace_target_peoperator= (ace_target_pe &&)=delete
void end_of_elaboration () override
void start_of_simulation () override
void fsm_clk_method ()
fsm::fsm_handlecreate_fsm_handle () override
void setup_callbacks (fsm::fsm_handle *) override
unsigned operations_callback (payload_type &trans)
void nb_fw (payload_type &trans, const phase_type &phase)
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

axi::axi_bw_transport_if< axi_protocol_types > * socket_bw {nullptr}
std::function< unsigned(payload_type &trans)> operation_cb
sc_core::sc_fifo< payload_type * > rd_resp_fifo {1}
sc_core::sc_fifo< payload_type * > wr_resp_fifo {1}
sc_core::sc_fifo< std::tuple< fsm::fsm_handle *, axi::fsm::protocol_time_point_e > > wr_resp_beat_fifo {128}
sc_core::sc_fifo< std::tuple< fsm::fsm_handle *, axi::fsm::protocol_time_point_e > > rd_resp_beat_fifo {128}
scc::ordered_semaphore rd_resp {1}
scc::ordered_semaphore wr_resp_ch {1}
scc::ordered_semaphore rd_resp_ch {1}
sc_core::sc_clock * clk_if {nullptr}
std::unique_ptr< bw_intor_implbw_intor
std::array< unsigned, 3 > outstanding_cnt {{0, 0, 0}}
tlm_utils::peq_with_cb_and_phase< ace_target_pefw_peq {this, &ace_target_pe::nb_fw}
std::unordered_set< unsigned > active_rdresp_id
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

Additional Inherited Members

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

Detailed Description

the target protocol engine base class

Definition at line 41 of file ace_target_pe.h.

Member Typedef Documentation

◆ payload_type

using axi::pe::ace_target_pe::payload_type = axi::axi_protocol_types::tlm_payload_type

Definition at line 48 of file ace_target_pe.h.

◆ phase_type

using axi::pe::ace_target_pe::phase_type = axi::axi_protocol_types::tlm_phase_type

Definition at line 49 of file ace_target_pe.h.

Constructor & Destructor Documentation

◆ ace_target_pe()

ace_target_pe::ace_target_pe ( const sc_core::sc_module_name & nm,
size_t transfer_width )
explicit

the constructor. Protected as it should only be called by derived classes

Parameters
port
transfer_width

Definition at line 59 of file ace_target_pe.cpp.

Member Function Documentation

◆ b_transport()

void ace_target_pe::b_transport ( payload_type & trans,
sc_core::sc_time & t )
override

Definition at line 88 of file ace_target_pe.cpp.

◆ create_fsm_handle()

fsm_handle * ace_target_pe::create_fsm_handle ( )
overrideprotectedvirtual
See also
base::create_fsm_handle()

Implements axi::fsm::base.

Definition at line 121 of file ace_target_pe.cpp.

◆ end_of_elaboration()

void ace_target_pe::end_of_elaboration ( )
overrideprotected

Definition at line 75 of file ace_target_pe.cpp.

◆ fsm_clk_method()

void axi::pe::ace_target_pe::fsm_clk_method ( )
inlineprotected

Definition at line 145 of file ace_target_pe.h.

◆ get_direct_mem_ptr()

bool ace_target_pe::get_direct_mem_ptr ( payload_type & trans,
tlm::tlm_dmi & dmi_data )
override

Definition at line 114 of file ace_target_pe.cpp.

◆ invalidate_direct_mem_ptr()

void axi::pe::ace_target_pe::invalidate_direct_mem_ptr ( sc_dt::uint64 start_range,
sc_dt::uint64 end_range )
inlineoverride

Definition at line 114 of file ace_target_pe.h.

◆ is_active()

bool axi::pe::ace_target_pe::is_active ( )
inline

returns true if any transaction is still in flight

Returns

Definition at line 100 of file ace_target_pe.h.

◆ nb_fw()

void axi::pe::ace_target_pe::nb_fw ( payload_type & trans,
const phase_type & phase )
inlineprotected

Definition at line 169 of file ace_target_pe.h.

◆ nb_transport_bw()

tlm::tlm_sync_enum axi::pe::ace_target_pe::nb_transport_bw ( payload_type & trans,
phase_type & phase,
sc_core::sc_time & t )
inlineoverride

Definition at line 109 of file ace_target_pe.h.

◆ nb_transport_fw()

tlm_sync_enum ace_target_pe::nb_transport_fw ( payload_type & trans,
phase_type & phase,
sc_core::sc_time & t )
override

Definition at line 98 of file ace_target_pe.cpp.

◆ operation_resp()

void axi::pe::ace_target_pe::operation_resp ( payload_type & trans,
unsigned clk_delay = 0 )

start the response from an operation callback if latency is not set by the callback

Parameters
trans
sync

◆ set_bw_interface()

void axi::pe::ace_target_pe::set_bw_interface ( axi::axi_bw_transport_if< axi_protocol_types > * ifs)
inline

Definition at line 126 of file ace_target_pe.h.

◆ set_operation_cb()

void axi::pe::ace_target_pe::set_operation_cb ( std::function< unsigned(payload_type &trans)> cb)
inline

Set the operation callback function.

This callback is invoked once a transaction arrives. This function is not allowed to block and returns the latency of the operation i.e. the duration until the reponse phase starts

Todo
refine API
Parameters
cbthe callback function

Definition at line 87 of file ace_target_pe.h.

◆ setup_callbacks()

void ace_target_pe::setup_callbacks ( fsm::fsm_handle * fsm_hndl)
overrideprotectedvirtual
See also
base::setup_callbacks(fsm::fsm_handle*)

Implements axi::fsm::base.

Definition at line 123 of file ace_target_pe.cpp.

◆ snoop()

void ace_target_pe::snoop ( payload_type & trans)

Definition at line 180 of file ace_target_pe.cpp.

◆ start_of_simulation()

void ace_target_pe::start_of_simulation ( )
overrideprotected

Definition at line 77 of file ace_target_pe.cpp.

◆ transport_dbg()

unsigned int ace_target_pe::transport_dbg ( payload_type & trans)
override

Definition at line 119 of file ace_target_pe.cpp.

◆ tx_finish_event()

const sc_core::sc_event & axi::pe::ace_target_pe::tx_finish_event ( )
inline

get the event being notfied upon the finishing of a transaction

Returns
reference to sc_event

Definition at line 106 of file ace_target_pe.h.

Member Data Documentation

◆ active_rdresp_id

std::unordered_set<unsigned> axi::pe::ace_target_pe::active_rdresp_id
protected

Definition at line 174 of file ace_target_pe.h.

◆ bw_i

sc_core::sc_export<tlm::scc::pe::intor_bw_nb> axi::pe::ace_target_pe::bw_i {"bw_i"}

Definition at line 58 of file ace_target_pe.h.

◆ bw_intor

std::unique_ptr<bw_intor_impl> axi::pe::ace_target_pe::bw_intor
protected

Definition at line 166 of file ace_target_pe.h.

◆ clk_i

sc_core::sc_in<bool> axi::pe::ace_target_pe::clk_i {"clk_i"}

Definition at line 51 of file ace_target_pe.h.

◆ clk_if

sc_core::sc_clock* axi::pe::ace_target_pe::clk_if {nullptr}
protected

Definition at line 165 of file ace_target_pe.h.

◆ fw_o

sc_core::sc_port<tlm::scc::pe::intor_fw_nb, 1, sc_core::SC_ZERO_OR_MORE_BOUND> axi::pe::ace_target_pe::fw_o {"fw_o"}

Definition at line 56 of file ace_target_pe.h.

◆ fw_peq

tlm_utils::peq_with_cb_and_phase<ace_target_pe> axi::pe::ace_target_pe::fw_peq {this, &ace_target_pe::nb_fw}
protected

Definition at line 173 of file ace_target_pe.h.

◆ isckt_axi

axi::axi_initiator_socket<64> axi::pe::ace_target_pe::isckt_axi {"isckt_axi"}

Definition at line 54 of file ace_target_pe.h.

◆ operation_cb

std::function<unsigned(payload_type& trans)> axi::pe::ace_target_pe::operation_cb
protected

Definition at line 158 of file ace_target_pe.h.

◆ outstanding_cnt

std::array<unsigned, 3> axi::pe::ace_target_pe::outstanding_cnt {{0, 0, 0}}
protected

Definition at line 167 of file ace_target_pe.h.

◆ rd_resp

scc::ordered_semaphore axi::pe::ace_target_pe::rd_resp {1}
protected

Definition at line 163 of file ace_target_pe.h.

◆ rd_resp_beat_fifo

sc_core::sc_fifo<std::tuple<fsm::fsm_handle*, axi::fsm::protocol_time_point_e> > axi::pe::ace_target_pe::rd_resp_beat_fifo {128}
protected

Definition at line 162 of file ace_target_pe.h.

◆ rd_resp_ch

scc::ordered_semaphore axi::pe::ace_target_pe::rd_resp_ch {1}
protected

Definition at line 163 of file ace_target_pe.h.

◆ rd_resp_delay

cci::cci_param<int> axi::pe::ace_target_pe::rd_resp_delay {"rd_resp_delay", 0}

the latency between read request and response phase. Will be overwritten by the return of the callback function (if registered) -> RIV

Definition at line 63 of file ace_target_pe.h.

◆ rd_resp_fifo

sc_core::sc_fifo<payload_type*> axi::pe::ace_target_pe::rd_resp_fifo {1}
protected

Definition at line 159 of file ace_target_pe.h.

◆ socket_bw

axi::axi_bw_transport_if<axi_protocol_types>* axi::pe::ace_target_pe::socket_bw {nullptr}
protected

Definition at line 157 of file ace_target_pe.h.

◆ wr_resp_beat_fifo

sc_core::sc_fifo<std::tuple<fsm::fsm_handle*, axi::fsm::protocol_time_point_e> > axi::pe::ace_target_pe::wr_resp_beat_fifo {128}
protected

Definition at line 161 of file ace_target_pe.h.

◆ wr_resp_ch

scc::ordered_semaphore axi::pe::ace_target_pe::wr_resp_ch {1}
protected

Definition at line 163 of file ace_target_pe.h.

◆ wr_resp_delay

cci::cci_param<int> axi::pe::ace_target_pe::wr_resp_delay {"wr_resp_delay", 0}

the latency between write request and response phase. Will be overwritten by the return of the callback function (if registered) -> BV

Definition at line 68 of file ace_target_pe.h.

◆ wr_resp_fifo

sc_core::sc_fifo<payload_type*> axi::pe::ace_target_pe::wr_resp_fifo {1}
protected

Definition at line 159 of file ace_target_pe.h.


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