diff options
Diffstat (limited to 'src/systemc/ext/tlm_core/tlm_2/tlm_sockets/tlm_initiator_socket.h')
-rw-r--r-- | src/systemc/ext/tlm_core/tlm_2/tlm_sockets/tlm_initiator_socket.h | 362 |
1 files changed, 163 insertions, 199 deletions
diff --git a/src/systemc/ext/tlm_core/tlm_2/tlm_sockets/tlm_initiator_socket.h b/src/systemc/ext/tlm_core/tlm_2/tlm_sockets/tlm_initiator_socket.h index b703ec210..93ed2fddb 100644 --- a/src/systemc/ext/tlm_core/tlm_2/tlm_sockets/tlm_initiator_socket.h +++ b/src/systemc/ext/tlm_core/tlm_2/tlm_sockets/tlm_initiator_socket.h @@ -17,224 +17,188 @@ *****************************************************************************/ -#ifndef TLM_CORE_TLM_INITIATOR_SOCKET_H_INCLUDED_ -#define TLM_CORE_TLM_INITIATOR_SOCKET_H_INCLUDED_ +#ifndef __SYSTEMC_EXT_TLM_CORE_TLM_2_TLM_SOCKETS_TLM_INITIATOR_SOCKET_H__ +#define __SYSTEMC_EXT_TLM_CORE_TLM_2_TLM_SOCKETS_TLM_INITIATOR_SOCKET_H__ #include "tlm_core/tlm_2/tlm_sockets/tlm_base_socket_if.h" #include "tlm_core/tlm_2/tlm_2_interfaces/tlm_fw_bw_ifs.h" -#if defined(__clang__) || \ - (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) -// ignore warning about deliberately hidden "bind()" overloads -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Woverloaded-virtual" -#endif - -namespace tlm { +namespace tlm +{ -template <unsigned int BUSWIDTH = 32, - typename FW_IF = tlm_fw_transport_if<>, - typename BW_IF = tlm_bw_transport_if<> > +template <unsigned int BUSWIDTH=32, + typename FW_IF=tlm_fw_transport_if<>, + typename BW_IF=tlm_bw_transport_if<>> class tlm_base_initiator_socket_b { -public: - virtual ~tlm_base_initiator_socket_b() {} - - 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 BW_IF const & get_base_interface() const = 0; - virtual sc_core::sc_export<BW_IF> & get_base_export() = 0; - virtual sc_core::sc_export<BW_IF> const & get_base_export() const = 0; + public: + virtual ~tlm_base_initiator_socket_b() {} + + 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 BW_IF const &get_base_interface() const = 0; + virtual sc_core::sc_export<BW_IF> &get_base_export() = 0; + virtual sc_core::sc_export<BW_IF> const &get_base_export() const = 0; }; +template <unsigned int BUSWIDTH, typename FW_IF, typename BW_IF> +class tlm_base_target_socket_b; -template <unsigned int BUSWIDTH, - typename FW_IF, - typename BW_IF> class tlm_base_target_socket_b; - -template <unsigned int BUSWIDTH, - typename FW_IF, - typename BW_IF, - int N, - sc_core::sc_port_policy POL> class tlm_base_target_socket; - -template <unsigned int BUSWIDTH = 32, - typename FW_IF = tlm_fw_transport_if<>, - typename BW_IF = tlm_bw_transport_if<>, - int N = 1, - sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND> -class tlm_base_initiator_socket : public tlm_base_socket_if, - public tlm_base_initiator_socket_b<BUSWIDTH, FW_IF, BW_IF>, - public sc_core::sc_port<FW_IF, N, POL> +template <unsigned int BUSWIDTH, typename FW_IF, typename BW_IF, int N, + sc_core::sc_port_policy POL> +class tlm_base_target_socket; + +template <unsigned int BUSWIDTH=32, typename FW_IF=tlm_fw_transport_if<>, + typename BW_IF=tlm_bw_transport_if<>, int N=1, + sc_core::sc_port_policy POL=sc_core::SC_ONE_OR_MORE_BOUND> +class tlm_base_initiator_socket : + public tlm_base_socket_if, + public tlm_base_initiator_socket_b<BUSWIDTH, FW_IF, BW_IF>, + public sc_core::sc_port<FW_IF, N, POL> { -public: - typedef FW_IF fw_interface_type; - typedef BW_IF bw_interface_type; - typedef sc_core::sc_port<fw_interface_type,N,POL> port_type; - - typedef sc_core::sc_export<bw_interface_type> export_type; - - typedef tlm_base_target_socket_b<BUSWIDTH, - fw_interface_type, - bw_interface_type> base_target_socket_type; - typedef tlm_base_initiator_socket_b<BUSWIDTH, - fw_interface_type, - bw_interface_type> base_type; - - template <unsigned int, typename, typename, int, sc_core::sc_port_policy> - friend class tlm_base_target_socket; - -public: - tlm_base_initiator_socket() - : port_type(sc_core::sc_gen_unique_name("tlm_base_initiator_socket")) - , m_export(sc_core::sc_gen_unique_name("tlm_base_initiator_socket_export")) - { - } - - explicit tlm_base_initiator_socket(const char* name) - : port_type(name) - , m_export(sc_core::sc_gen_unique_name((std::string(name) + "_export").c_str())) - { - } - - virtual const char* kind() const - { - return "tlm_base_initiator_socket"; - } - - // - // Bind initiator socket to target socket - // - Binds the port of the initiator socket to the export of the target - // socket - // - Binds the port of the target socket to the export of the initiator - // socket - // - virtual void bind(base_target_socket_type& s) - { - // initiator.port -> target.export - (get_base_port())(s.get_base_interface()); - // target.port -> initiator.export - (s.get_base_port())(get_base_interface()); - } - - void operator() (base_target_socket_type& s) - { - bind(s); - } - - // - // Bind initiator socket to initiator socket (hierarchical bind) - // - Binds both the export and the port - // - virtual void bind(base_type& s) - { - // port - (get_base_port())(s.get_base_port()); - // export - (s.get_base_export())(get_base_export()); - } - - void operator() (base_type& s) - { - bind(s); - } - - // - // Bind interface to socket - // - Binds the interface to the export of this socket - // - virtual void bind(bw_interface_type& ifs) - { - (get_base_export())(ifs); - } - - void operator() (bw_interface_type& s) - { - bind(s); - } - - // Implementation of tlm_base_socket_if functions - virtual sc_core::sc_port_base & get_port_base() - { return *this; } - virtual sc_core::sc_port_base const & get_port_base() const - { return *this; } - virtual sc_core::sc_export_base & get_export_base() - { return m_export; } - virtual sc_core::sc_export_base const & get_export_base() const - { return m_export; } - virtual unsigned int get_bus_width() const - { return BUSWIDTH; } - virtual tlm_socket_category get_socket_category() const - { return TLM_INITIATOR_SOCKET; } - - // Implementation of tlm_base_target_socket_b functions - virtual sc_core::sc_port_b<FW_IF> & get_base_port() - { return *this; } - virtual sc_core::sc_port_b<FW_IF> const & get_base_port() const - { return *this; } - - virtual BW_IF & get_base_interface() - { return m_export; } - virtual BW_IF const & get_base_interface() const - { return m_export; } - - virtual sc_core::sc_export<BW_IF> & get_base_export() - { return m_export; } - virtual sc_core::sc_export<BW_IF> const & get_base_export() const - { return m_export; } - -protected: - export_type m_export; + public: + typedef FW_IF fw_interface_type; + typedef BW_IF bw_interface_type; + typedef sc_core::sc_port<fw_interface_type, N, POL> port_type; + + typedef sc_core::sc_export<bw_interface_type> export_type; + + typedef tlm_base_target_socket_b< + BUSWIDTH, fw_interface_type, bw_interface_type> + base_target_socket_type; + typedef tlm_base_initiator_socket_b< + BUSWIDTH, fw_interface_type, bw_interface_type> base_type; + + template <unsigned int, typename, typename, int, sc_core::sc_port_policy> + friend class tlm_base_target_socket; + + public: + tlm_base_initiator_socket() : + port_type(sc_core::sc_gen_unique_name("tlm_base_initiator_socket")), + m_export(sc_core::sc_gen_unique_name( + "tlm_base_initiator_socket_export")) + {} + + explicit tlm_base_initiator_socket(const char *name) : port_type(name), + m_export(sc_core::sc_gen_unique_name( + (std::string(name) + "_export").c_str())) + {} + + virtual const char* kind() const { return "tlm_base_initiator_socket"; } + + // + // Bind initiator socket to target socket + // - Binds the port of the initiator socket to the export of the target + // socket + // - Binds the port of the target socket to the export of the initiator + // socket + // + virtual void + bind(base_target_socket_type &s) + { + // initiator.port -> target.export + (get_base_port())(s.get_base_interface()); + // target.port -> initiator.export + (s.get_base_port())(get_base_interface()); + } + + void operator () (base_target_socket_type &s) { bind(s); } + + // + // Bind initiator socket to initiator socket (hierarchical bind) + // - Binds both the export and the port + // + virtual void + bind(base_type &s) + { + // port + (get_base_port())(s.get_base_port()); + // export + (s.get_base_export())(get_base_export()); + } + + void operator() (base_type &s) { bind(s); } + + // + // Bind interface to socket + // - Binds the interface to the export of this socket + // + virtual void bind(bw_interface_type &ifs) { (get_base_export())(ifs); } + void operator() (bw_interface_type &s) { bind(s); } + + // Implementation of tlm_base_socket_if functions + virtual sc_core::sc_port_base &get_port_base() { return *this; } + virtual sc_core::sc_port_base const & + get_port_base() const + { + return *this; + } + virtual sc_core::sc_export_base &get_export_base() { return m_export; } + virtual sc_core::sc_export_base const & + get_export_base() const + { + return m_export; + } + virtual unsigned int get_bus_width() const { return BUSWIDTH; } + virtual tlm_socket_category + get_socket_category() const + { + return TLM_INITIATOR_SOCKET; + } + + // Implementation of tlm_base_target_socket_b functions + virtual sc_core::sc_port_b<FW_IF> &get_base_port() { return *this; } + virtual sc_core::sc_port_b<FW_IF> const & + get_base_port() const + { + return *this; + } + + virtual BW_IF &get_base_interface() { return m_export; } + virtual BW_IF const &get_base_interface() const { return m_export; } + + virtual sc_core::sc_export<BW_IF> &get_base_export() { return m_export; } + virtual sc_core::sc_export<BW_IF> const & + get_base_export() const + { + return m_export; + } + + protected: + export_type m_export; }; // // Convenience socket classes // -template <unsigned int BUSWIDTH = 32, - typename TYPES = tlm_base_protocol_types, - int N = 1, - sc_core::sc_port_policy POL = sc_core::SC_ONE_OR_MORE_BOUND> -class tlm_initiator_socket : - public tlm_base_initiator_socket<BUSWIDTH, - tlm_fw_transport_if<TYPES>, - tlm_bw_transport_if<TYPES>, - N, POL> +template <unsigned int BUSWIDTH=32, typename TYPES=tlm_base_protocol_types, + int N=1, sc_core::sc_port_policy POL=sc_core::SC_ONE_OR_MORE_BOUND> +class tlm_initiator_socket : public tlm_base_initiator_socket< + BUSWIDTH, tlm_fw_transport_if<TYPES>, + tlm_bw_transport_if<TYPES>, N, POL> { -public: - tlm_initiator_socket() : - tlm_base_initiator_socket<BUSWIDTH, - tlm_fw_transport_if<TYPES>, - tlm_bw_transport_if<TYPES>, - N, POL>() - { - } - - explicit tlm_initiator_socket(const char* name) : - tlm_base_initiator_socket<BUSWIDTH, - tlm_fw_transport_if<TYPES>, - tlm_bw_transport_if<TYPES>, - N, POL>(name) - { - } - - virtual const char* kind() const - { - return "tlm_initiator_socket"; - } - - virtual sc_core::sc_type_index get_protocol_types() const - { - return typeid(TYPES); - } + public: + tlm_initiator_socket() : tlm_base_initiator_socket< + BUSWIDTH, tlm_fw_transport_if<TYPES>, + tlm_bw_transport_if<TYPES>, N, POL>() + {} + + explicit tlm_initiator_socket(const char *name) : + tlm_base_initiator_socket<BUSWIDTH, tlm_fw_transport_if<TYPES>, + tlm_bw_transport_if<TYPES>, N, POL>(name) + {} + + virtual const char *kind() const { return "tlm_initiator_socket"; } + + virtual sc_core::sc_type_index + get_protocol_types() const + { + return typeid(TYPES); + } }; } // namespace tlm -#if defined(__clang__) || \ - (defined(__GNUC__) && ((__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006)) -#pragma GCC diagnostic pop -#endif - -#endif // TLM_CORE_TLM_INITIATOR_SOCKET_H_INCLUDED_ +#endif /* __SYSTEMC_EXT_TLM_CORE_TLM_2_TLM_SOCKETS_TLM_INITIATOR_SOCKET_H__ */ |