112027Sjungma@eit.uni-kl.de/*****************************************************************************
212027Sjungma@eit.uni-kl.de
312027Sjungma@eit.uni-kl.de  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412027Sjungma@eit.uni-kl.de  more contributor license agreements.  See the NOTICE file distributed
512027Sjungma@eit.uni-kl.de  with this work for additional information regarding copyright ownership.
612027Sjungma@eit.uni-kl.de  Accellera licenses this file to you under the Apache License, Version 2.0
712027Sjungma@eit.uni-kl.de  (the "License"); you may not use this file except in compliance with the
812027Sjungma@eit.uni-kl.de  License.  You may obtain a copy of the License at
912027Sjungma@eit.uni-kl.de
1012027Sjungma@eit.uni-kl.de    http://www.apache.org/licenses/LICENSE-2.0
1112027Sjungma@eit.uni-kl.de
1212027Sjungma@eit.uni-kl.de  Unless required by applicable law or agreed to in writing, software
1312027Sjungma@eit.uni-kl.de  distributed under the License is distributed on an "AS IS" BASIS,
1412027Sjungma@eit.uni-kl.de  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512027Sjungma@eit.uni-kl.de  implied.  See the License for the specific language governing
1612027Sjungma@eit.uni-kl.de  permissions and limitations under the License.
1712027Sjungma@eit.uni-kl.de
1812027Sjungma@eit.uni-kl.de *****************************************************************************/
1912027Sjungma@eit.uni-kl.de
2012027Sjungma@eit.uni-kl.de//
2112027Sjungma@eit.uni-kl.de// To the LRM writer : these classes are purely artifacts of the implementation.
2212027Sjungma@eit.uni-kl.de//
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de#ifndef __TLM_PUT_GET_IMP_H__
2512027Sjungma@eit.uni-kl.de#define __TLM_PUT_GET_IMP_H__
2612027Sjungma@eit.uni-kl.de
2712027Sjungma@eit.uni-kl.de#include "tlm_core/tlm_1/tlm_req_rsp/tlm_1_interfaces/tlm_master_slave_ifs.h"
2812027Sjungma@eit.uni-kl.de
2912027Sjungma@eit.uni-kl.denamespace tlm {
3012027Sjungma@eit.uni-kl.de
3112027Sjungma@eit.uni-kl.detemplate < typename PUT_DATA , typename GET_DATA>
3212027Sjungma@eit.uni-kl.declass tlm_put_get_imp :
3312027Sjungma@eit.uni-kl.de  private virtual tlm_put_if< PUT_DATA > ,
3412027Sjungma@eit.uni-kl.de  private virtual tlm_get_peek_if< GET_DATA >
3512027Sjungma@eit.uni-kl.de{
3612027Sjungma@eit.uni-kl.depublic:
3712027Sjungma@eit.uni-kl.de  tlm_put_get_imp( tlm_put_if<PUT_DATA> &p ,
3812027Sjungma@eit.uni-kl.de       tlm_get_peek_if<GET_DATA> &g ) :
3912027Sjungma@eit.uni-kl.de    put_fifo( p ) , get_fifo( g ) {}
4012027Sjungma@eit.uni-kl.de
4112027Sjungma@eit.uni-kl.de  // put interface
4212027Sjungma@eit.uni-kl.de
4312027Sjungma@eit.uni-kl.de  void put( const PUT_DATA &t ) { put_fifo.put( t ); }
4412027Sjungma@eit.uni-kl.de
4512027Sjungma@eit.uni-kl.de  bool nb_put( const PUT_DATA &t ) { return put_fifo.nb_put( t ); }
4612027Sjungma@eit.uni-kl.de  bool nb_can_put( tlm_tag<PUT_DATA> *t = 0 ) const {
4712027Sjungma@eit.uni-kl.de    return put_fifo.nb_can_put( t );
4812027Sjungma@eit.uni-kl.de  }
4912027Sjungma@eit.uni-kl.de  const sc_core::sc_event &ok_to_put( tlm_tag<PUT_DATA> *t = 0 ) const {
5012027Sjungma@eit.uni-kl.de    return put_fifo.ok_to_put( t );
5112027Sjungma@eit.uni-kl.de  }
5212027Sjungma@eit.uni-kl.de
5312027Sjungma@eit.uni-kl.de  // get interface
5412027Sjungma@eit.uni-kl.de
5512027Sjungma@eit.uni-kl.de  GET_DATA get( tlm_tag<GET_DATA> * = 0 ) { return get_fifo.get(); }
5612027Sjungma@eit.uni-kl.de
5712027Sjungma@eit.uni-kl.de  bool nb_get( GET_DATA &t ) { return get_fifo.nb_get( t ); }
5812027Sjungma@eit.uni-kl.de
5912027Sjungma@eit.uni-kl.de  bool nb_can_get( tlm_tag<GET_DATA> *t = 0 ) const {
6012027Sjungma@eit.uni-kl.de    return get_fifo.nb_can_get( t );
6112027Sjungma@eit.uni-kl.de  }
6212027Sjungma@eit.uni-kl.de
6312027Sjungma@eit.uni-kl.de  virtual const sc_core::sc_event &ok_to_get( tlm_tag<GET_DATA> *t = 0 ) const {
6412027Sjungma@eit.uni-kl.de    return get_fifo.ok_to_get( t );
6512027Sjungma@eit.uni-kl.de  }
6612027Sjungma@eit.uni-kl.de
6712027Sjungma@eit.uni-kl.de  // peek interface
6812027Sjungma@eit.uni-kl.de
6912027Sjungma@eit.uni-kl.de  GET_DATA peek( tlm_tag<GET_DATA> * = 0 ) const { return get_fifo.peek(); }
7012027Sjungma@eit.uni-kl.de
7112027Sjungma@eit.uni-kl.de  bool nb_peek( GET_DATA &t ) const { return get_fifo.nb_peek( t ); }
7212027Sjungma@eit.uni-kl.de
7312027Sjungma@eit.uni-kl.de  bool nb_can_peek( tlm_tag<GET_DATA> *t = 0 ) const {
7412027Sjungma@eit.uni-kl.de    return get_fifo.nb_can_peek( t );
7512027Sjungma@eit.uni-kl.de  }
7612027Sjungma@eit.uni-kl.de
7712027Sjungma@eit.uni-kl.de  virtual const sc_core::sc_event &ok_to_peek( tlm_tag<GET_DATA> *t = 0 ) const {
7812027Sjungma@eit.uni-kl.de    return get_fifo.ok_to_peek( t );
7912027Sjungma@eit.uni-kl.de  }
8012027Sjungma@eit.uni-kl.de
8112027Sjungma@eit.uni-kl.deprivate:
8212027Sjungma@eit.uni-kl.de  tlm_put_if<PUT_DATA> &put_fifo;
8312027Sjungma@eit.uni-kl.de  tlm_get_peek_if<GET_DATA> &get_fifo;
8412027Sjungma@eit.uni-kl.de};
8512027Sjungma@eit.uni-kl.de
8612027Sjungma@eit.uni-kl.detemplate < typename REQ , typename RSP >
8712027Sjungma@eit.uni-kl.declass tlm_master_imp :
8812027Sjungma@eit.uni-kl.de  private tlm_put_get_imp< REQ , RSP > ,
8912027Sjungma@eit.uni-kl.de  public virtual tlm_master_if< REQ , RSP >
9012027Sjungma@eit.uni-kl.de{
9112027Sjungma@eit.uni-kl.depublic:
9212027Sjungma@eit.uni-kl.de
9312027Sjungma@eit.uni-kl.de  tlm_master_imp( tlm_put_if<REQ> &req ,
9412027Sjungma@eit.uni-kl.de                  tlm_get_peek_if<RSP> &rsp ) :
9512027Sjungma@eit.uni-kl.de    tlm_put_get_imp<REQ,RSP>( req , rsp ) {}
9612027Sjungma@eit.uni-kl.de
9712027Sjungma@eit.uni-kl.de};
9812027Sjungma@eit.uni-kl.de
9912027Sjungma@eit.uni-kl.detemplate < typename REQ , typename RSP >
10012027Sjungma@eit.uni-kl.declass tlm_slave_imp :
10112027Sjungma@eit.uni-kl.de  private tlm_put_get_imp< RSP , REQ > ,
10212027Sjungma@eit.uni-kl.de  public virtual tlm_slave_if< REQ , RSP >
10312027Sjungma@eit.uni-kl.de{
10412027Sjungma@eit.uni-kl.depublic:
10512027Sjungma@eit.uni-kl.de
10612027Sjungma@eit.uni-kl.de  tlm_slave_imp( tlm_get_peek_if<REQ> &req ,
10712027Sjungma@eit.uni-kl.de                 tlm_put_if<RSP> &rsp ) :
10812027Sjungma@eit.uni-kl.de    tlm_put_get_imp<RSP,REQ>( rsp  , req ) {}
10912027Sjungma@eit.uni-kl.de
11012027Sjungma@eit.uni-kl.de};
11112027Sjungma@eit.uni-kl.de
11212027Sjungma@eit.uni-kl.de} // namespace tlm
11312027Sjungma@eit.uni-kl.de
11412027Sjungma@eit.uni-kl.de#endif
115