adapters.hh revision 13586
111508Sandreas.sandberg@arm.com/***************************************************************************** 211508Sandreas.sandberg@arm.com 311508Sandreas.sandberg@arm.com Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 411508Sandreas.sandberg@arm.com more contributor license agreements. See the NOTICE file distributed 511508Sandreas.sandberg@arm.com with this work for additional information regarding copyright ownership. 611508Sandreas.sandberg@arm.com Accellera licenses this file to you under the Apache License, Version 2.0 711508Sandreas.sandberg@arm.com (the "License"); you may not use this file except in compliance with the 811508Sandreas.sandberg@arm.com License. You may obtain a copy of the License at 911508Sandreas.sandberg@arm.com 1011508Sandreas.sandberg@arm.com http://www.apache.org/licenses/LICENSE-2.0 1111508Sandreas.sandberg@arm.com 1211508Sandreas.sandberg@arm.com Unless required by applicable law or agreed to in writing, software 1311508Sandreas.sandberg@arm.com distributed under the License is distributed on an "AS IS" BASIS, 1411508Sandreas.sandberg@arm.com WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1511508Sandreas.sandberg@arm.com implied. See the License for the specific language governing 1611508Sandreas.sandberg@arm.com permissions and limitations under the License. 1711508Sandreas.sandberg@arm.com 1811508Sandreas.sandberg@arm.com *****************************************************************************/ 1911508Sandreas.sandberg@arm.com 2011508Sandreas.sandberg@arm.com#ifndef __SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_ADAPTERS_HH__ 2111508Sandreas.sandberg@arm.com#define __SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_ADAPTERS_HH__ 2211508Sandreas.sandberg@arm.com 2311508Sandreas.sandberg@arm.com#include "../interfaces/master_slave_ifs.hh" 2411508Sandreas.sandberg@arm.com 2511508Sandreas.sandberg@arm.comnamespace tlm 2611508Sandreas.sandberg@arm.com{ 2711508Sandreas.sandberg@arm.com 2811508Sandreas.sandberg@arm.comtemplate <typename REQ, typename RSP> 2911403Sandreas.sandberg@arm.comclass tlm_transport_to_master : public sc_core::sc_module, 3011403Sandreas.sandberg@arm.com public virtual tlm_transport_if<REQ, RSP> 3111403Sandreas.sandberg@arm.com{ 3211403Sandreas.sandberg@arm.com public: 3311403Sandreas.sandberg@arm.com sc_core::sc_export<tlm_transport_if<REQ, RSP>> target_export; 3411403Sandreas.sandberg@arm.com sc_core::sc_port<tlm_master_if<REQ, RSP>> master_port; 3511403Sandreas.sandberg@arm.com 3611403Sandreas.sandberg@arm.com tlm_transport_to_master(sc_core::sc_module_name nm) : 3711403Sandreas.sandberg@arm.com sc_core::sc_module(nm) 3811403Sandreas.sandberg@arm.com { 3911403Sandreas.sandberg@arm.com target_export( *this ); 4011403Sandreas.sandberg@arm.com } 4111403Sandreas.sandberg@arm.com 4211403Sandreas.sandberg@arm.com tlm_transport_to_master() : 4311403Sandreas.sandberg@arm.com sc_core::sc_module(sc_core::sc_module_name( 4411403Sandreas.sandberg@arm.com sc_core::sc_gen_unique_name("transport_to_master"))) 4511403Sandreas.sandberg@arm.com { 4611403Sandreas.sandberg@arm.com target_export( *this ); 4711403Sandreas.sandberg@arm.com } 4811403Sandreas.sandberg@arm.com 4911403Sandreas.sandberg@arm.com RSP 5011403Sandreas.sandberg@arm.com transport(const REQ &req) 5111403Sandreas.sandberg@arm.com { 5211403Sandreas.sandberg@arm.com mutex.lock(); 5311403Sandreas.sandberg@arm.com master_port->put(req); 5411403Sandreas.sandberg@arm.com rsp = master_port->get(); 5511403Sandreas.sandberg@arm.com 5611403Sandreas.sandberg@arm.com mutex.unlock(); 5711403Sandreas.sandberg@arm.com return rsp; 5811403Sandreas.sandberg@arm.com } 5911403Sandreas.sandberg@arm.com 6011403Sandreas.sandberg@arm.com private: 6111403Sandreas.sandberg@arm.com sc_core::sc_mutex mutex; 6211403Sandreas.sandberg@arm.com RSP rsp; 6311541Sgabor.dozsa@arm.com}; 6411403Sandreas.sandberg@arm.com 6511403Sandreas.sandberg@arm.comtemplate <typename REQ, typename RSP> 6611403Sandreas.sandberg@arm.comclass tlm_slave_to_transport : public sc_core::sc_module 6711403Sandreas.sandberg@arm.com{ 6811403Sandreas.sandberg@arm.com public: 6911403Sandreas.sandberg@arm.com SC_HAS_PROCESS(tlm_slave_to_transport); 7011403Sandreas.sandberg@arm.com 7111403Sandreas.sandberg@arm.com sc_core::sc_port<tlm_slave_if<REQ, RSP>> slave_port; 7211403Sandreas.sandberg@arm.com sc_core::sc_port<tlm_transport_if<REQ, RSP>> initiator_port; 7311403Sandreas.sandberg@arm.com 7411403Sandreas.sandberg@arm.com tlm_slave_to_transport(sc_core::sc_module_name nm) : 7511403Sandreas.sandberg@arm.com sc_core::sc_module(nm) 7611403Sandreas.sandberg@arm.com {} 7711403Sandreas.sandberg@arm.com 7811403Sandreas.sandberg@arm.com tlm_slave_to_transport() : 7911403Sandreas.sandberg@arm.com sc_core::sc_module(sc_core::sc_module_name( 8011403Sandreas.sandberg@arm.com sc_core::sc_gen_unique_name("slave_to_transport"))) 8111403Sandreas.sandberg@arm.com {} 8211403Sandreas.sandberg@arm.com 8311403Sandreas.sandberg@arm.com private: 8411403Sandreas.sandberg@arm.com void 8511403Sandreas.sandberg@arm.com run() 8611403Sandreas.sandberg@arm.com { 8711403Sandreas.sandberg@arm.com REQ req; 8811403Sandreas.sandberg@arm.com RSP rsp; 8911403Sandreas.sandberg@arm.com 9011403Sandreas.sandberg@arm.com while (true) { 9111403Sandreas.sandberg@arm.com slave_port->get(req); 9211403Sandreas.sandberg@arm.com rsp = initiator_port->transport(req); 9311403Sandreas.sandberg@arm.com slave_port->put(rsp); 9411403Sandreas.sandberg@arm.com } 9511403Sandreas.sandberg@arm.com } 9611403Sandreas.sandberg@arm.com}; 9711403Sandreas.sandberg@arm.com 9811403Sandreas.sandberg@arm.com} // namespace tlm 9911403Sandreas.sandberg@arm.com 10011403Sandreas.sandberg@arm.com#endif /* __SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_ADAPTERS_HH__ */ 10111403Sandreas.sandberg@arm.com