gem5 v24.0.0.0
Loading...
Searching...
No Matches
initiator_socket.hh
Go to the documentation of this file.
1/*****************************************************************************
2
3 Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
4 more contributor license agreements. See the NOTICE file distributed
5 with this work for additional information regarding copyright ownership.
6 Accellera licenses this file to you under the Apache License, Version 2.0
7 (the "License"); you may not use this file except in compliance with the
8 License. You may obtain a copy of the License at
9
10 http://www.apache.org/licenses/LICENSE-2.0
11
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15 implied. See the License for the specific language governing
16 permissions and limitations under the License.
17
18 *****************************************************************************/
19
20#ifndef __SYSTEMC_EXT_TLM_CORE_2_SOCKETS_INITIATOR_SOCKET_HH__
21#define __SYSTEMC_EXT_TLM_CORE_2_SOCKETS_INITIATOR_SOCKET_HH__
22
23#include <typeindex>
24
26#include "base_socket_if.hh"
27
28namespace tlm
29{
30
31template <unsigned int BUSWIDTH=32,
32 typename FW_IF=tlm_fw_transport_if<>,
33 typename BW_IF=tlm_bw_transport_if<>>
34class tlm_base_initiator_socket_b
35{
36 public:
38
40 virtual sc_core::sc_port_b<FW_IF> const &get_base_port() const = 0;
41 virtual BW_IF &get_base_interface() = 0;
42 virtual BW_IF const &get_base_interface() const = 0;
44 virtual sc_core::sc_export<BW_IF> const &get_base_export() const = 0;
45};
46
47template <unsigned int BUSWIDTH, typename FW_IF, typename BW_IF>
49
50template <unsigned int BUSWIDTH, typename FW_IF, typename BW_IF, int N,
53
54// The overloaded virtual is intended in SystemC, so we'll disable the warning.
55// Please check section 9.3 of SystemC 2.3.1 release note for more details.
56#pragma GCC diagnostic push
57#pragma GCC diagnostic ignored "-Woverloaded-virtual"
58template <unsigned int BUSWIDTH=32, typename FW_IF=tlm_fw_transport_if<>,
59 typename BW_IF=tlm_bw_transport_if<>, int N=1,
60 sc_core::sc_port_policy POL=sc_core::SC_ONE_OR_MORE_BOUND>
62 public tlm_base_socket_if,
63 public tlm_base_initiator_socket_b<BUSWIDTH, FW_IF, BW_IF>,
64 public sc_core::sc_port<FW_IF, N, POL>
65{
66 public:
67 typedef FW_IF fw_interface_type;
68 typedef BW_IF bw_interface_type;
70
72
78
79 template <unsigned int, typename, typename, int, sc_core::sc_port_policy>
81
82 public:
84 port_type(sc_core::sc_gen_unique_name("tlm_base_initiator_socket")),
85 m_export(sc_core::sc_gen_unique_name(
86 "tlm_base_initiator_socket_export"))
87 {}
88
89 explicit tlm_base_initiator_socket(const char *name) : port_type(name),
90 m_export(sc_core::sc_gen_unique_name(
91 (std::string(name) + "_export").c_str()))
92 {}
93
94 virtual const char* kind() const { return "tlm_base_initiator_socket"; }
95
96 //
97 // Bind initiator socket to target socket
98 // - Binds the port of the initiator socket to the export of the target
99 // socket
100 // - Binds the port of the target socket to the export of the initiator
101 // socket
102 //
103 virtual void
105 {
106 // initiator.port -> target.export
107 (get_base_port())(s.get_base_interface());
108 // target.port -> initiator.export
109 (s.get_base_port())(get_base_interface());
110 }
111
113
114 //
115 // Bind initiator socket to initiator socket (hierarchical bind)
116 // - Binds both the export and the port
117 //
118 virtual void
120 {
121 // port
122 (get_base_port())(s.get_base_port());
123 // export
124 (s.get_base_export())(get_base_export());
125 }
126
127 void operator() (base_type &s) { bind(s); }
128
129 //
130 // Bind interface to socket
131 // - Binds the interface to the export of this socket
132 //
133 virtual void bind(bw_interface_type &ifs) { (get_base_export())(ifs); }
135
136 // Implementation of tlm_base_socket_if functions
137 virtual sc_core::sc_port_base &get_port_base() { return *this; }
138 virtual sc_core::sc_port_base const &
140 {
141 return *this;
142 }
144 virtual sc_core::sc_export_base const &
146 {
147 return m_export;
148 }
149 virtual unsigned int get_bus_width() const { return BUSWIDTH; }
150 virtual tlm_socket_category
152 {
154 }
155
156 // Implementation of tlm_base_target_socket_b functions
157 virtual sc_core::sc_port_b<FW_IF> &get_base_port() { return *this; }
158 virtual sc_core::sc_port_b<FW_IF> const &
160 {
161 return *this;
162 }
163
164 virtual BW_IF &get_base_interface() { return m_export; }
165 virtual BW_IF const &get_base_interface() const { return m_export; }
166
168 virtual sc_core::sc_export<BW_IF> const &
170 {
171 return m_export;
172 }
173
174 protected:
176};
177#pragma GCC diagnostic pop
178
179//
180// Convenience socket classes
181//
182
183template <unsigned int BUSWIDTH=32, typename TYPES=tlm_base_protocol_types,
186 BUSWIDTH, tlm_fw_transport_if<TYPES>,
187 tlm_bw_transport_if<TYPES>, N, POL>
188{
189 public:
191 BUSWIDTH, tlm_fw_transport_if<TYPES>,
192 tlm_bw_transport_if<TYPES>, N, POL>()
193 {}
194
195 explicit tlm_initiator_socket(const char *name) :
197 tlm_bw_transport_if<TYPES>, N, POL>(name)
198 {}
199
200 virtual const char *kind() const { return "tlm_initiator_socket"; }
201
202 virtual std::type_index
204 {
205 return typeid(TYPES);
206 }
207};
208
209} // namespace tlm
210
211#endif /* __SYSTEMC_EXT_TLM_CORE_2_SOCKETS_INITIATOR_SOCKET_HH__ */
virtual sc_core::sc_export< BW_IF > const & get_base_export() const =0
virtual sc_core::sc_export< BW_IF > & get_base_export()=0
virtual BW_IF const & get_base_interface() const =0
virtual sc_core::sc_port_b< FW_IF > & get_base_port()=0
virtual sc_core::sc_port_b< FW_IF > const & get_base_port() const =0
virtual BW_IF & get_base_interface()=0
virtual void bind(base_type &s)
virtual BW_IF const & get_base_interface() const
sc_core::sc_export< bw_interface_type > export_type
virtual sc_core::sc_export< BW_IF > & get_base_export()
tlm_base_initiator_socket_b< BUSWIDTH, fw_interface_type, bw_interface_type > base_type
tlm_base_initiator_socket(const char *name)
virtual sc_core::sc_port_base & get_port_base()
virtual void bind(base_target_socket_type &s)
virtual void bind(bw_interface_type &ifs)
virtual sc_core::sc_port_b< FW_IF > const & get_base_port() const
sc_core::sc_port< fw_interface_type, N, POL > port_type
tlm_base_target_socket_b< BUSWIDTH, fw_interface_type, bw_interface_type > base_target_socket_type
virtual sc_core::sc_export_base const & get_export_base() const
virtual sc_core::sc_export_base & get_export_base()
virtual sc_core::sc_port_base const & get_port_base() const
virtual unsigned int get_bus_width() const
virtual tlm_socket_category get_socket_category() const
virtual const char * kind() const
virtual sc_core::sc_export< BW_IF > const & get_base_export() const
void operator()(base_target_socket_type &s)
virtual sc_core::sc_port_b< FW_IF > & get_base_port()
virtual const char * kind() const
tlm_initiator_socket(const char *name)
virtual std::type_index get_protocol_types() const
sc_port_policy
Definition sc_port.hh:68
@ SC_ONE_OR_MORE_BOUND
Definition sc_port.hh:69
Overload hash function for BasicBlockRange type.
Definition binary32.hh:81
tlm_socket_category
@ TLM_INITIATOR_SOCKET
const std::string & name()
Definition trace.cc:48

Generated on Tue Jun 18 2024 16:24:07 for gem5 by doxygen 1.11.0