adapters.hh revision 13521:74fa3ac44057
19342SAndreas.Sandberg@arm.com/***************************************************************************** 211937Sandreas.sandberg@arm.com 39342SAndreas.Sandberg@arm.com Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 49342SAndreas.Sandberg@arm.com more contributor license agreements. See the NOTICE file distributed 59342SAndreas.Sandberg@arm.com with this work for additional information regarding copyright ownership. 69342SAndreas.Sandberg@arm.com Accellera licenses this file to you under the Apache License, Version 2.0 79342SAndreas.Sandberg@arm.com (the "License"); you may not use this file except in compliance with the 89342SAndreas.Sandberg@arm.com License. You may obtain a copy of the License at 99342SAndreas.Sandberg@arm.com 109342SAndreas.Sandberg@arm.com http://www.apache.org/licenses/LICENSE-2.0 119342SAndreas.Sandberg@arm.com 129342SAndreas.Sandberg@arm.com Unless required by applicable law or agreed to in writing, software 139342SAndreas.Sandberg@arm.com distributed under the License is distributed on an "AS IS" BASIS, 149342SAndreas.Sandberg@arm.com WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 159342SAndreas.Sandberg@arm.com implied. See the License for the specific language governing 169342SAndreas.Sandberg@arm.com permissions and limitations under the License. 179342SAndreas.Sandberg@arm.com 189342SAndreas.Sandberg@arm.com *****************************************************************************/ 199342SAndreas.Sandberg@arm.com 209342SAndreas.Sandberg@arm.com#ifndef __SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_ADAPTERS_HH__ 219342SAndreas.Sandberg@arm.com#define __SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_ADAPTERS_HH__ 229342SAndreas.Sandberg@arm.com 239342SAndreas.Sandberg@arm.com#include "tlm_core/1/req_rsp/interfaces/master_slave_ifs.hh" 249342SAndreas.Sandberg@arm.com 259342SAndreas.Sandberg@arm.comnamespace tlm 269342SAndreas.Sandberg@arm.com{ 279342SAndreas.Sandberg@arm.com 289342SAndreas.Sandberg@arm.comtemplate <typename REQ, typename RSP> 299342SAndreas.Sandberg@arm.comclass tlm_transport_to_master : public sc_core::sc_module, 309342SAndreas.Sandberg@arm.com public virtual tlm_transport_if<REQ, RSP> 319342SAndreas.Sandberg@arm.com{ 329342SAndreas.Sandberg@arm.com public: 339342SAndreas.Sandberg@arm.com sc_core::sc_export<tlm_transport_if<REQ, RSP>> target_export; 349342SAndreas.Sandberg@arm.com sc_core::sc_port<tlm_master_if<REQ, RSP>> master_port; 359342SAndreas.Sandberg@arm.com 369342SAndreas.Sandberg@arm.com tlm_transport_to_master(sc_core::sc_module_name nm) : 379342SAndreas.Sandberg@arm.com sc_core::sc_module(nm) 389342SAndreas.Sandberg@arm.com { 399342SAndreas.Sandberg@arm.com target_export( *this ); 409342SAndreas.Sandberg@arm.com } 4110912Sandreas.sandberg@arm.com 4211859Sandreas.hansson@arm.com tlm_transport_to_master() : 4311859Sandreas.hansson@arm.com sc_core::sc_module(sc_core::sc_module_name( 4410912Sandreas.sandberg@arm.com sc_core::sc_gen_unique_name("transport_to_master"))) 4510912Sandreas.sandberg@arm.com { 4610912Sandreas.sandberg@arm.com target_export( *this ); 479342SAndreas.Sandberg@arm.com } 4811417Ssascha.bischoff@arm.com 499342SAndreas.Sandberg@arm.com RSP 5010912Sandreas.sandberg@arm.com transport(const REQ &req) 5110912Sandreas.sandberg@arm.com { 529342SAndreas.Sandberg@arm.com mutex.lock(); 5310912Sandreas.sandberg@arm.com master_port->put(req); 5410912Sandreas.sandberg@arm.com rsp = master_port->get(); 559342SAndreas.Sandberg@arm.com 569342SAndreas.Sandberg@arm.com mutex.unlock(); 579342SAndreas.Sandberg@arm.com return rsp; 589342SAndreas.Sandberg@arm.com } 599342SAndreas.Sandberg@arm.com 609342SAndreas.Sandberg@arm.com private: 619342SAndreas.Sandberg@arm.com sc_core::sc_mutex mutex; 6210912Sandreas.sandberg@arm.com RSP rsp; 6310912Sandreas.sandberg@arm.com}; 649342SAndreas.Sandberg@arm.com 6510912Sandreas.sandberg@arm.comtemplate <typename REQ, typename RSP> 6610912Sandreas.sandberg@arm.comclass tlm_slave_to_transport : public sc_core::sc_module 6710912Sandreas.sandberg@arm.com{ 6810912Sandreas.sandberg@arm.com public: 6910912Sandreas.sandberg@arm.com SC_HAS_PROCESS(tlm_slave_to_transport); 7010912Sandreas.sandberg@arm.com 7110912Sandreas.sandberg@arm.com sc_core::sc_port<tlm_slave_if<REQ, RSP>> slave_port; 7210912Sandreas.sandberg@arm.com sc_core::sc_port<tlm_transport_if<REQ, RSP>> initiator_port; 7311417Ssascha.bischoff@arm.com 7411417Ssascha.bischoff@arm.com tlm_slave_to_transport(sc_core::sc_module_name nm) : 7511417Ssascha.bischoff@arm.com sc_core::sc_module(nm) 7611417Ssascha.bischoff@arm.com {} 7711417Ssascha.bischoff@arm.com 7811417Ssascha.bischoff@arm.com tlm_slave_to_transport() : 7911417Ssascha.bischoff@arm.com sc_core::sc_module(sc_core::sc_module_name( 8011417Ssascha.bischoff@arm.com sc_core::sc_gen_unique_name("slave_to_transport"))) 8111417Ssascha.bischoff@arm.com {} 8210912Sandreas.sandberg@arm.com 8310912Sandreas.sandberg@arm.com private: 8410912Sandreas.sandberg@arm.com void 8510912Sandreas.sandberg@arm.com run() 8610912Sandreas.sandberg@arm.com { 8710912Sandreas.sandberg@arm.com REQ req; 8810912Sandreas.sandberg@arm.com RSP rsp; 8910912Sandreas.sandberg@arm.com 9010912Sandreas.sandberg@arm.com while (true) { 9110912Sandreas.sandberg@arm.com slave_port->get(req); 929342SAndreas.Sandberg@arm.com rsp = initiator_port->transport(req); 939342SAndreas.Sandberg@arm.com slave_port->put(rsp); 9410912Sandreas.sandberg@arm.com } 9510912Sandreas.sandberg@arm.com } 9610912Sandreas.sandberg@arm.com}; 9710912Sandreas.sandberg@arm.com 9810912Sandreas.sandberg@arm.com} // namespace tlm 9910912Sandreas.sandberg@arm.com 10010912Sandreas.sandberg@arm.com#endif /* __SYSTEMC_EXT_TLM_CORE_1_REQ_RSP_ADAPTERS_HH__ */ 10110912Sandreas.sandberg@arm.com