Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / model / vendor / TLM-2006-11-29 / tlm / tlm_core / tlm_adapters / tlm_adapters.h
CommitLineData
86530b38
AT
1
2#ifndef TLM_ADAPTERS_HEADER
3#define TLM_ADAPTERS_HEADER
4
5#include "tlm_core/tlm_interfaces/tlm_master_slave_ifs.h"
6
7template< typename REQ , typename RSP >
8class tlm_transport_to_master :
9 public sc_module ,
10 public virtual tlm_transport_if< REQ , RSP >
11{
12public:
13 sc_export< tlm_transport_if< REQ , RSP > > target_export;
14 sc_port< tlm_master_if< REQ , RSP > > master_port;
15
16 tlm_transport_to_master( sc_module_name nm ) :
17 sc_module( nm ) {
18
19 target_export( *this );
20
21 }
22
23 tlm_transport_to_master() :
24 sc_module( sc_module_name( sc_gen_unique_name( "transport_to_master" ) ) ){
25
26 target_export( *this );
27
28 }
29
30 RSP transport( const REQ &req ) {
31
32 mutex.lock();
33
34 master_port->put( req );
35 rsp = master_port->get();
36
37 mutex.unlock();
38 return rsp;
39
40 }
41
42private:
43 sc_mutex mutex;
44 RSP rsp;
45
46};
47
48template< typename REQ , typename RSP >
49class tlm_slave_to_transport : public sc_module
50{
51public:
52
53 SC_HAS_PROCESS( tlm_slave_to_transport );
54
55 sc_port< tlm_slave_if< REQ , RSP > > slave_port;
56 sc_port< tlm_transport_if< REQ , RSP > > initiator_port;
57
58 tlm_slave_to_transport( sc_module_name nm ) : sc_module( nm )
59 {}
60
61 tlm_slave_to_transport() :
62 sc_module( sc_module_name( sc_gen_unique_name("slave_to_transport") ) )
63 {}
64
65private:
66 void run() {
67
68 REQ req;
69 RSP rsp;
70
71 while( true ) {
72
73 slave_port->get( req );
74 rsp = initiator_port->transport( req );
75 slave_port->put( rsp );
76
77 }
78
79 }
80
81};
82#endif