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