38 typename TSOCKET_TYPE = tlm::tlm_target_socket<BUSWIDTH, TYPES, N, POL>,
39 typename ISOCKET_TYPE = tlm::tlm_initiator_socket<BUSWIDTH, TYPES, N, POL>>
41 public tlm::tlm_fw_transport_if<TYPES>,
42 public tlm::tlm_bw_transport_if<TYPES> {
44 using tlm_payload_type =
typename TYPES::tlm_payload_type;
45 using tlm_phase_type =
typename TYPES::tlm_phase_type;
46 using target_socket_type = TSOCKET_TYPE;
47 using initiator_socket_type = ISOCKET_TYPE;
51 target_socket_type
tsck{
"tsck"};
64 : sc_core::sc_module(nm) {
72 pv_isck = util::make_unique<initiator_socket_type>(sc_core::sc_gen_unique_name(
"pv_isck"));
81 av_isck = util::make_unique<initiator_socket_type>(sc_core::sc_gen_unique_name(
"av_isck"));
91 tlm::tlm_sync_enum nb_transport_fw(tlm_payload_type& trans, tlm_phase_type& phase, sc_core::sc_time& t) {
93 return (*av_isck)->nb_transport_fw(trans, phase, t);
94 trans.set_response_status(tlm::TLM_GENERIC_ERROR_RESPONSE);
95 return tlm::TLM_COMPLETED;
98 void b_transport(tlm_payload_type& trans, sc_core::sc_time& t) {
100 (*pv_isck)->b_transport(trans, t);
102 trans.set_response_status(tlm::TLM_GENERIC_ERROR_RESPONSE);
105 bool get_direct_mem_ptr(tlm_payload_type& trans, tlm_dmi& dmi_data) {
107 return (*pv_isck)->get_direct_mem_ptr(trans, dmi_data);
108 trans.set_response_status(tlm::TLM_GENERIC_ERROR_RESPONSE);
109 trans.set_dmi_allowed(
false);
113 unsigned int transport_dbg(tlm_payload_type& trans) {
115 return (*pv_isck)->transport_dbg(trans);
116 trans.set_response_status(tlm::TLM_GENERIC_ERROR_RESPONSE);
120 tlm::tlm_sync_enum nb_transport_bw(tlm_payload_type& trans, tlm_phase_type& phase, sc_core::sc_time& t) {
121 return tsck->nb_transport_bw(trans, phase, t);
124 void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, sc_dt::uint64 end_range) {
125 tsck->invalidate_direct_mem_ptr(start_range, end_range);
128 std::unique_ptr<initiator_socket_type> pv_isck;
129 std::unique_ptr<initiator_socket_type> av_isck;
142 typename TSOCKET_TYPE = tlm::tlm_target_socket<BUSWIDTH, TYPES, N, POL>,
143 typename ISOCKET_TYPE = tlm::tlm_initiator_socket<BUSWIDTH, TYPES, N, POL>>
145 public tlm::tlm_fw_transport_if<TYPES>,
146 public tlm::tlm_bw_transport_if<TYPES> {
148 using tlm_payload_type =
typename TYPES::tlm_payload_type;
149 using tlm_phase_type =
typename TYPES::tlm_phase_type;
150 using target_socket_type = TSOCKET_TYPE;
151 using initiator_socket_type = ISOCKET_TYPE;
155 initiator_socket_type
isck{
"isck"};
168 : sc_core::sc_module(nm) {
176 pv_tsck = util::make_unique<target_socket_type>(sc_core::sc_gen_unique_name(
"pv_tsck"));
177 pv_tsck->bind(*
this);
185 av_tsck = util::make_unique<target_socket_type>(sc_core::sc_gen_unique_name(
"av_tsck"));
186 av_tsck->bind(*
this);
195 tlm::tlm_sync_enum nb_transport_fw(tlm_payload_type& trans, tlm_phase_type& phase, sc_core::sc_time& t) {
196 return isck->nb_transport_fw(trans, phase, t);
199 void b_transport(tlm_payload_type& trans, sc_core::sc_time& t) {
isck->b_transport(trans, t); }
201 bool get_direct_mem_ptr(tlm_payload_type& trans, tlm_dmi& dmi_data) {
return isck->get_direct_mem_ptr(trans, dmi_data); }
203 unsigned int transport_dbg(tlm_payload_type& trans) {
return isck->transport_dbg(trans); }
205 tlm::tlm_sync_enum nb_transport_bw(tlm_payload_type& trans, tlm_phase_type& phase, sc_core::sc_time& t) {
207 return (*av_tsck)->nb_transport_bw(trans, phase, t);
208 trans.set_response_status(tlm::TLM_GENERIC_ERROR_RESPONSE);
209 return tlm::TLM_COMPLETED;
212 void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, sc_dt::uint64 end_range) {
214 (*pv_tsck)->invalidate_direct_mem_ptr(start_range, end_range);
217 std::unique_ptr<target_socket_type> pv_tsck{};
218 std::unique_ptr<target_socket_type> av_tsck{};