14#ifndef SIMICS_SYSTEMC_SIMICS2TLM_GASKET_FACTORY_H
15#define SIMICS_SYSTEMC_SIMICS2TLM_GASKET_FACTORY_H
18#include <tlm_utils/multi_passthrough_target_socket.h>
32template<
unsigned int BUSWIDTH,
typename TYPES>
34 const std::string& socket_name,
35 const simics::ConfObjectRef &simics_obj) {
36 std::string name =
"gasket_" + socket_name;
37 std::replace(name.begin(), name.end(),
'.',
'_');
39 const char* char_name = name.c_str();
40 if (sc_core::sc_find_object(char_name))
41 char_name = sc_core::sc_gen_unique_name(char_name);
52template<
unsigned int BUSWIDTH,
typename TYPES,
53 int N, sc_core::sc_port_policy POL>
55 tlm::tlm_initiator_socket<BUSWIDTH, TYPES, N, POL> *initiator_socket,
56 const simics::ConfObjectRef &simics_obj) {
57 FATAL_ERROR_IF(initiator_socket->name() == NULL,
58 "initiator socket not fully initialized, name missing");
59 auto gasket = internal::createGasket<BUSWIDTH, TYPES>(
60 initiator_socket->name(), simics_obj);
61 gasket->bind(*initiator_socket);
66template<
unsigned int BUSWIDTH,
typename TYPES,
67 int N, sc_core::sc_port_policy POL>
69 tlm::tlm_target_socket<BUSWIDTH, TYPES, N, POL> *target_socket,
70 const simics::ConfObjectRef &simics_obj) {
71 FATAL_ERROR_IF(target_socket->name() == NULL,
72 "target socket not fully initialized, name missing");
73 auto gasket = internal::createGasket<BUSWIDTH, TYPES>(
74 target_socket->name(), simics_obj);
75 gasket->bind(*target_socket);
81template<
typename MODULE,
unsigned int BUSWIDTH,
typename TYPES,
82 unsigned int N, sc_core::sc_port_policy POL>
84 tlm_utils::multi_passthrough_target_socket<
85 MODULE, BUSWIDTH, TYPES, N, POL> *target_socket,
86 const simics::ConfObjectRef &simics_obj) {
87 FATAL_ERROR_IF(target_socket->name() == NULL,
88 "target socket not fully initialized, name missing");
89 auto gasket = internal::createGasket<BUSWIDTH, TYPES>(
90 target_socket->name(), simics_obj);
91 gasket->bind(*target_socket);
97 const simics::ConfObjectRef &simics_obj);
103 const ConfObjectRef &simics_obj) = 0;
106template <
unsigned int BUSWIDTH,
typename TYPES,
int N = 1,
107 sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND>
110 typedef tlm::tlm_base_target_socket<BUSWIDTH,
111 tlm::tlm_fw_transport_if<TYPES>,
112 tlm::tlm_bw_transport_if<TYPES>,
116 const ConfObjectRef &simics_obj)
override {
121 auto gasket = internal::createGasket<BUSWIDTH, TYPES>(
122 socket->name(), simics_obj);
123 gasket->bind(*socket);
Definition: registry.h:86
Definition: gasket_factory.h:99
virtual ~GasketFactoryInterface()
Definition: gasket_factory.h:101
virtual GasketInterface::Ptr create(sc_core::sc_object *object, const ConfObjectRef &simics_obj)=0
Definition: gasket_factory.h:108
GasketInterface::Ptr create(sc_core::sc_object *object, const ConfObjectRef &simics_obj) override
Definition: gasket_factory.h:115
tlm::tlm_base_target_socket< BUSWIDTH, tlm::tlm_fw_transport_if< TYPES >, tlm::tlm_bw_transport_if< TYPES >, N, POL > Socket
Definition: gasket_factory.h:113
std::shared_ptr< GasketInterface > Ptr
Definition: gasket_interface.h:35
Core helper for sending a TLM2 transaction over a socket.
Definition: gasket.h:57
GasketInterface::Ptr createGasketByName(std::string socket_name, const simics::ConfObjectRef &simics_obj)
Factory for creating a Gasket and bind it to a target socket.