diff options
Diffstat (limited to 'src/systemc/ext/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels')
2 files changed, 184 insertions, 198 deletions
diff --git a/src/systemc/ext/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_put_get_imp.h b/src/systemc/ext/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_put_get_imp.h index 36dbd21d6..8335cc85c 100644 --- a/src/systemc/ext/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_put_get_imp.h +++ b/src/systemc/ext/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_put_get_imp.h @@ -17,98 +17,99 @@ *****************************************************************************/ -// -// To the LRM writer : these classes are purely artifacts of the implementation. -// - -#ifndef __TLM_PUT_GET_IMP_H__ -#define __TLM_PUT_GET_IMP_H__ +#ifndef \ + __TLM_1_TLM_REQ_RSP_TLM_CHANNELS_TLM_REQ_RSP_CHANNELS_TLM_PUT_GET_IMP_H__ +#define \ + __TLM_1_TLM_REQ_RSP_TLM_CHANNELS_TLM_REQ_RSP_CHANNELS_TLM_PUT_GET_IMP_H__ #include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_master_slave_ifs.h" -namespace tlm { - -template < typename PUT_DATA , typename GET_DATA> -class tlm_put_get_imp : - private virtual tlm_put_if< PUT_DATA > , - private virtual tlm_get_peek_if< GET_DATA > +namespace tlm { -public: - tlm_put_get_imp( tlm_put_if<PUT_DATA> &p , - tlm_get_peek_if<GET_DATA> &g ) : - put_fifo( p ) , get_fifo( g ) {} - - // put interface - - void put( const PUT_DATA &t ) { put_fifo.put( t ); } - - bool nb_put( const PUT_DATA &t ) { return put_fifo.nb_put( t ); } - bool nb_can_put( tlm_tag<PUT_DATA> *t = 0 ) const { - return put_fifo.nb_can_put( t ); - } - const sc_core::sc_event &ok_to_put( tlm_tag<PUT_DATA> *t = 0 ) const { - return put_fifo.ok_to_put( t ); - } - - // get interface - - GET_DATA get( tlm_tag<GET_DATA> * = 0 ) { return get_fifo.get(); } - - bool nb_get( GET_DATA &t ) { return get_fifo.nb_get( t ); } - - bool nb_can_get( tlm_tag<GET_DATA> *t = 0 ) const { - return get_fifo.nb_can_get( t ); - } - - virtual const sc_core::sc_event &ok_to_get( tlm_tag<GET_DATA> *t = 0 ) const { - return get_fifo.ok_to_get( t ); - } - // peek interface - - GET_DATA peek( tlm_tag<GET_DATA> * = 0 ) const { return get_fifo.peek(); } - - bool nb_peek( GET_DATA &t ) const { return get_fifo.nb_peek( t ); } - - bool nb_can_peek( tlm_tag<GET_DATA> *t = 0 ) const { - return get_fifo.nb_can_peek( t ); - } - - virtual const sc_core::sc_event &ok_to_peek( tlm_tag<GET_DATA> *t = 0 ) const { - return get_fifo.ok_to_peek( t ); - } - -private: - tlm_put_if<PUT_DATA> &put_fifo; - tlm_get_peek_if<GET_DATA> &get_fifo; +template <typename PUT_DATA, typename GET_DATA> +class tlm_put_get_imp : private virtual tlm_put_if<PUT_DATA>, + private virtual tlm_get_peek_if<GET_DATA> +{ + public: + tlm_put_get_imp(tlm_put_if<PUT_DATA> &p, tlm_get_peek_if<GET_DATA> &g) : + put_fifo(p), get_fifo(g) + {} + + // Put interface. + void put(const PUT_DATA &t) { put_fifo.put(t); } + bool nb_put(const PUT_DATA &t) { return put_fifo.nb_put(t); } + bool + nb_can_put(tlm_tag<PUT_DATA> *t=nullptr) const + { + return put_fifo.nb_can_put(t); + } + const sc_core::sc_event & + ok_to_put(tlm_tag<PUT_DATA> *t=nullptr) const + { + return put_fifo.ok_to_put(t); + } + + // Get interface. + GET_DATA get(tlm_tag<GET_DATA> * =nullptr) { return get_fifo.get(); } + bool nb_get(GET_DATA &t) { return get_fifo.nb_get(t); } + bool + nb_can_get(tlm_tag<GET_DATA> *t=nullptr) const + { + return get_fifo.nb_can_get(t); + } + + virtual const sc_core::sc_event & + ok_to_get(tlm_tag<GET_DATA> *t=nullptr) const + { + return get_fifo.ok_to_get(t); + } + + // Peek interface. + GET_DATA + peek(tlm_tag<GET_DATA> * =nullptr) const + { + return get_fifo.peek(); + } + bool nb_peek(GET_DATA &t) const { return get_fifo.nb_peek(t); } + bool + nb_can_peek(tlm_tag<GET_DATA> *t=nullptr) const + { + return get_fifo.nb_can_peek(t); + } + + virtual const sc_core::sc_event & + ok_to_peek(tlm_tag<GET_DATA> *t=nullptr) const + { + return get_fifo.ok_to_peek(t); + } + + private: + tlm_put_if<PUT_DATA> &put_fifo; + tlm_get_peek_if<GET_DATA> &get_fifo; }; -template < typename REQ , typename RSP > -class tlm_master_imp : - private tlm_put_get_imp< REQ , RSP > , - public virtual tlm_master_if< REQ , RSP > +template <typename REQ, typename RSP> +class tlm_master_imp : private tlm_put_get_imp<REQ, RSP>, + public virtual tlm_master_if<REQ, RSP> { -public: - - tlm_master_imp( tlm_put_if<REQ> &req , - tlm_get_peek_if<RSP> &rsp ) : - tlm_put_get_imp<REQ,RSP>( req , rsp ) {} - + public: + tlm_master_imp(tlm_put_if<REQ> &req, tlm_get_peek_if<RSP> &rsp) : + tlm_put_get_imp<REQ, RSP>(req, rsp) + {} }; -template < typename REQ , typename RSP > -class tlm_slave_imp : - private tlm_put_get_imp< RSP , REQ > , - public virtual tlm_slave_if< REQ , RSP > +template <typename REQ, typename RSP> +class tlm_slave_imp : private tlm_put_get_imp<RSP, REQ>, + public virtual tlm_slave_if<REQ, RSP> { -public: - - tlm_slave_imp( tlm_get_peek_if<REQ> &req , - tlm_put_if<RSP> &rsp ) : - tlm_put_get_imp<RSP,REQ>( rsp , req ) {} - + public: + tlm_slave_imp(tlm_get_peek_if<REQ> &req, tlm_put_if<RSP> &rsp) : + tlm_put_get_imp<RSP, REQ>(rsp, req) + {} }; } // namespace tlm #endif +/* __TLM_1_TLM_REQ_RSP_TLM_CHANNELS_TLM_REQ_RSP_CHANNELS_TLM_PUT_GET_IMP_H__ */ diff --git a/src/systemc/ext/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_req_rsp_channels.h b/src/systemc/ext/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_req_rsp_channels.h index 7bd5652f7..1548e0852 100644 --- a/src/systemc/ext/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_req_rsp_channels.h +++ b/src/systemc/ext/tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_req_rsp_channels.h @@ -17,139 +17,124 @@ *****************************************************************************/ -#ifndef __TLM_REQ_RSP_CHANNELS_H__ -#define __TLM_REQ_RSP_CHANNELS_H__ +#ifndef \ + __TLM_REQ_RSP_TLM_CHANNELS_TLM_REQ_RSP_CHANNELS_TLM_REQ_RSP_CHANNELS_H__ +#define \ + __TLM_REQ_RSP_TLM_CHANNELS_TLM_REQ_RSP_CHANNELS_TLM_REQ_RSP_CHANNELS_H__ #include "tlm_core/tlm_1/tlm_req_rsp/tlm_adapters/tlm_adapters.h" #include "tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_fifo/tlm_fifo.h" #include "tlm_core/tlm_1/tlm_req_rsp/tlm_channels/tlm_req_rsp_channels/tlm_put_get_imp.h" -namespace tlm { - -template < typename REQ , typename RSP , - typename REQ_CHANNEL = tlm_fifo<REQ> , - typename RSP_CHANNEL = tlm_fifo<RSP> > +namespace tlm +{ +template <typename REQ, typename RSP, typename REQ_CHANNEL=tlm_fifo<REQ>, + typename RSP_CHANNEL=tlm_fifo<RSP>> class tlm_req_rsp_channel : public sc_core::sc_module { -public: - // uni-directional slave interface - - sc_core::sc_export< tlm_fifo_get_if< REQ > > get_request_export; - sc_core::sc_export< tlm_fifo_put_if< RSP > > put_response_export; - - // uni-directional master interface - - sc_core::sc_export< tlm_fifo_put_if< REQ > > put_request_export; - sc_core::sc_export< tlm_fifo_get_if< RSP > > get_response_export; - - // master / slave interfaces - - sc_core::sc_export< tlm_master_if< REQ , RSP > > master_export; - sc_core::sc_export< tlm_slave_if< REQ , RSP > > slave_export; - - - tlm_req_rsp_channel( int req_size = 1 , int rsp_size = 1 ) : - sc_core::sc_module( sc_core::sc_module_name( sc_core::sc_gen_unique_name("tlm_req_rsp_channel") ) ) , - request_fifo( req_size ) , - response_fifo( rsp_size ) , - master( request_fifo , response_fifo ) , - slave( request_fifo , response_fifo ) - { - - bind_exports(); - - } - - tlm_req_rsp_channel( sc_core::sc_module_name module_name , - int req_size = 1 , int rsp_size = 1 ) : - sc_core::sc_module( module_name ) , - request_fifo( req_size ) , - response_fifo( rsp_size ) , - master( request_fifo , response_fifo ) , - slave( request_fifo , response_fifo ) - { - - bind_exports(); - - } - -private: - void bind_exports() { - - put_request_export( request_fifo ); - get_request_export( request_fifo ); - - put_response_export( response_fifo ); - get_response_export( response_fifo ); - - master_export( master ); - slave_export( slave ); - - } - -protected: - REQ_CHANNEL request_fifo; - RSP_CHANNEL response_fifo; - - tlm_master_imp< REQ , RSP > master; - tlm_slave_imp< REQ , RSP > slave; + public: + // Uni-directional slave interface. + sc_core::sc_export<tlm_fifo_get_if<REQ>> get_request_export; + sc_core::sc_export<tlm_fifo_put_if<RSP>> put_response_export; + + // Uni-directional master interface. + sc_core::sc_export<tlm_fifo_put_if<REQ>> put_request_export; + sc_core::sc_export<tlm_fifo_get_if<RSP>> get_response_export; + + // Master/slave interfaces. + sc_core::sc_export<tlm_master_if<REQ, RSP>> master_export; + sc_core::sc_export<tlm_slave_if<REQ, RSP>> slave_export; + + tlm_req_rsp_channel(int req_size=1, int rsp_size=1) : + sc_core::sc_module(sc_core::sc_module_name( + sc_core::sc_gen_unique_name("tlm_req_rsp_channel"))), + request_fifo(req_size), response_fifo(rsp_size), + master(request_fifo, response_fifo), + slave(request_fifo, response_fifo) + { + bind_exports(); + } + + tlm_req_rsp_channel(sc_core::sc_module_name module_name, + int req_size=1, int rsp_size=1) : + sc_core::sc_module(module_name), + request_fifo(req_size), response_fifo(rsp_size), + master(request_fifo, response_fifo), + slave(request_fifo, response_fifo) + { + bind_exports(); + } + + private: + void + bind_exports() + { + put_request_export(request_fifo); + get_request_export(request_fifo); + + put_response_export(response_fifo); + get_response_export(response_fifo); + + master_export(master); + slave_export(slave); + } + + protected: + REQ_CHANNEL request_fifo; + RSP_CHANNEL response_fifo; + + tlm_master_imp<REQ, RSP> master; + tlm_slave_imp<REQ, RSP> slave; }; -template < typename REQ , typename RSP , - typename REQ_CHANNEL = tlm_fifo<REQ> , - typename RSP_CHANNEL = tlm_fifo<RSP> > +template <typename REQ, typename RSP, + typename REQ_CHANNEL=tlm_fifo<REQ>, + typename RSP_CHANNEL=tlm_fifo<RSP>> class tlm_transport_channel : public sc_core::sc_module { -public: - - // master transport interface - - sc_core::sc_export< tlm_transport_if< REQ , RSP > > target_export; - - // slave interfaces - - sc_core::sc_export< tlm_fifo_get_if< REQ > > get_request_export; - sc_core::sc_export< tlm_fifo_put_if< RSP > > put_response_export; - - sc_core::sc_export< tlm_slave_if< REQ , RSP > > slave_export; - - tlm_transport_channel() : - sc_core::sc_module( sc_core::sc_module_name( sc_core::sc_gen_unique_name("transport_channel" ) ) ) , - target_export("target_export") , - req_rsp( "req_rsp" , 1 , 1 ) , - t2m("ts2m") - { - do_binding(); - } - - tlm_transport_channel( sc_core::sc_module_name nm ) : - sc_core::sc_module( nm ) , - target_export("target_export") , - req_rsp( "req_rsp" , 1 , 1 ) , - t2m("tsm" ) - { - do_binding(); - } - -private: - void do_binding() { - - target_export( t2m.target_export ); - - t2m.master_port( req_rsp.master_export ); - - get_request_export( req_rsp.get_request_export ); - put_response_export( req_rsp.put_response_export ); - slave_export( req_rsp.slave_export ); - - } - - tlm_req_rsp_channel< REQ , RSP , REQ_CHANNEL , RSP_CHANNEL > req_rsp; - tlm_transport_to_master< REQ , RSP > t2m; - + public: + // Master transport interface. + sc_core::sc_export<tlm_transport_if<REQ, RSP>> target_export; + + // Slave interfaces. + sc_core::sc_export<tlm_fifo_get_if<REQ>> get_request_export; + sc_core::sc_export<tlm_fifo_put_if<RSP>> put_response_export; + + sc_core::sc_export<tlm_slave_if<REQ, RSP>> slave_export; + + tlm_transport_channel() : + sc_core::sc_module(sc_core::sc_module_name( + sc_core::sc_gen_unique_name("transport_channel"))), + target_export("target_export"), req_rsp("req_rsp", 1, 1), t2m("ts2m") + { + do_binding(); + } + + tlm_transport_channel(sc_core::sc_module_name nm) : + sc_core::sc_module(nm), target_export("target_export"), + req_rsp("req_rsp", 1, 1), t2m("tsm") + { + do_binding(); + } + + private: + void + do_binding() + { + target_export(t2m.target_export); + t2m.master_port(req_rsp.master_export); + + get_request_export(req_rsp.get_request_export); + put_response_export(req_rsp.put_response_export); + slave_export(req_rsp.slave_export); + } + + tlm_req_rsp_channel<REQ, RSP, REQ_CHANNEL, RSP_CHANNEL> req_rsp; + tlm_transport_to_master<REQ, RSP> t2m; }; } // namespace tlm #endif +/* __TLM_REQ_RSP_TLM_CHANNELS_TLM_REQ_RSP_CHANNELS_TLM_REQ_RSP_CHANNELS_H__ */ |