sc_fifo.hh revision 12853
113540Sandrea.mondelli@ucf.edu/* 210107Sradhika.jagtap@ARM.com * Copyright 2018 Google, Inc. 310107Sradhika.jagtap@ARM.com * 410107Sradhika.jagtap@ARM.com * Redistribution and use in source and binary forms, with or without 510107Sradhika.jagtap@ARM.com * modification, are permitted provided that the following conditions are 610107Sradhika.jagtap@ARM.com * met: redistributions of source code must retain the above copyright 710107Sradhika.jagtap@ARM.com * notice, this list of conditions and the following disclaimer; 810107Sradhika.jagtap@ARM.com * redistributions in binary form must reproduce the above copyright 910107Sradhika.jagtap@ARM.com * notice, this list of conditions and the following disclaimer in the 1010107Sradhika.jagtap@ARM.com * documentation and/or other materials provided with the distribution; 1110107Sradhika.jagtap@ARM.com * neither the name of the copyright holders nor the names of its 1210107Sradhika.jagtap@ARM.com * contributors may be used to endorse or promote products derived from 1310107Sradhika.jagtap@ARM.com * this software without specific prior written permission. 1410107Sradhika.jagtap@ARM.com * 1510107Sradhika.jagtap@ARM.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1610107Sradhika.jagtap@ARM.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1710107Sradhika.jagtap@ARM.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1810107Sradhika.jagtap@ARM.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1910107Sradhika.jagtap@ARM.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2010107Sradhika.jagtap@ARM.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2110107Sradhika.jagtap@ARM.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2210107Sradhika.jagtap@ARM.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2310107Sradhika.jagtap@ARM.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2410107Sradhika.jagtap@ARM.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2510107Sradhika.jagtap@ARM.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2610107Sradhika.jagtap@ARM.com * 2710107Sradhika.jagtap@ARM.com * Authors: Gabe Black 2810107Sradhika.jagtap@ARM.com */ 2910107Sradhika.jagtap@ARM.com 3010107Sradhika.jagtap@ARM.com#ifndef __SYSTEMC_EXT_CHANNEL_SC_FIFO_HH__ 3110107Sradhika.jagtap@ARM.com#define __SYSTEMC_EXT_CHANNEL_SC_FIFO_HH__ 3210107Sradhika.jagtap@ARM.com 3310107Sradhika.jagtap@ARM.com#include "../core/sc_module.hh" // for sc_gen_unique_name 3410107Sradhika.jagtap@ARM.com#include "../core/sc_prim.hh" 3510107Sradhika.jagtap@ARM.com#include "sc_fifo_in_if.hh" 3610107Sradhika.jagtap@ARM.com#include "sc_fifo_out_if.hh" 3710107Sradhika.jagtap@ARM.com#include "warn_unimpl.hh" 3810107Sradhika.jagtap@ARM.com 3910107Sradhika.jagtap@ARM.comnamespace sc_core 4010107Sradhika.jagtap@ARM.com{ 4110107Sradhika.jagtap@ARM.com 4210107Sradhika.jagtap@ARM.comclass sc_port_base; 4310107Sradhika.jagtap@ARM.comclass sc_event; 4410107Sradhika.jagtap@ARM.com 4510107Sradhika.jagtap@ARM.comtemplate <class T> 4610107Sradhika.jagtap@ARM.comclass sc_fifo : public sc_fifo_in_if<T>, 4710107Sradhika.jagtap@ARM.com public sc_fifo_out_if<T>, 4810107Sradhika.jagtap@ARM.com public sc_prim_channel 4910107Sradhika.jagtap@ARM.com{ 5010107Sradhika.jagtap@ARM.com public: 5110107Sradhika.jagtap@ARM.com explicit sc_fifo(int size=16) : 5210107Sradhika.jagtap@ARM.com sc_fifo_in_if<T>(), sc_fifo_out_if<T>(), 5310107Sradhika.jagtap@ARM.com sc_prim_channel(sc_gen_unique_name("fifo")) 5410107Sradhika.jagtap@ARM.com {} 5510107Sradhika.jagtap@ARM.com explicit sc_fifo(const char *name, int size=16) : 5610107Sradhika.jagtap@ARM.com sc_fifo_in_if<T>(), sc_fifo_out_if<T>(), 5710107Sradhika.jagtap@ARM.com sc_prim_channel(name) 5810107Sradhika.jagtap@ARM.com {} 5910107Sradhika.jagtap@ARM.com virtual ~sc_fifo() {} 6010107Sradhika.jagtap@ARM.com 6110107Sradhika.jagtap@ARM.com virtual void 6210107Sradhika.jagtap@ARM.com register_port(sc_port_base &, const char *) 6310107Sradhika.jagtap@ARM.com { 6410107Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 6510107Sradhika.jagtap@ARM.com } 6610107Sradhika.jagtap@ARM.com 6710107Sradhika.jagtap@ARM.com virtual void 6810107Sradhika.jagtap@ARM.com read(T &) 6910107Sradhika.jagtap@ARM.com { 7010107Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 7110107Sradhika.jagtap@ARM.com } 7210107Sradhika.jagtap@ARM.com virtual T 7310107Sradhika.jagtap@ARM.com read() 7410269Sradhika.jagtap@ARM.com { 7510107Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 7610107Sradhika.jagtap@ARM.com return *(T *)nullptr; 7710269Sradhika.jagtap@ARM.com } 7810269Sradhika.jagtap@ARM.com virtual bool 7910269Sradhika.jagtap@ARM.com nb_read(T &) 8010269Sradhika.jagtap@ARM.com { 8110269Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 8210269Sradhika.jagtap@ARM.com return false; 8310269Sradhika.jagtap@ARM.com } 8410269Sradhika.jagtap@ARM.com operator T() 8510269Sradhika.jagtap@ARM.com { 8610269Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 8710269Sradhika.jagtap@ARM.com return *(T *)nullptr; 8810269Sradhika.jagtap@ARM.com } 8910269Sradhika.jagtap@ARM.com 9010269Sradhika.jagtap@ARM.com virtual void 9110269Sradhika.jagtap@ARM.com write(const T &) 9210269Sradhika.jagtap@ARM.com { 9310269Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 9410269Sradhika.jagtap@ARM.com } 9510269Sradhika.jagtap@ARM.com virtual bool 9610269Sradhika.jagtap@ARM.com nb_write(const T&) 9710269Sradhika.jagtap@ARM.com { 9810269Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 9910269Sradhika.jagtap@ARM.com return false; 10010269Sradhika.jagtap@ARM.com } 10112209Sgabeblack@google.com sc_fifo<T> & 10210107Sradhika.jagtap@ARM.com operator = (const T &) 10310107Sradhika.jagtap@ARM.com { 10410107Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 10510107Sradhika.jagtap@ARM.com return *this; 10610107Sradhika.jagtap@ARM.com } 10710107Sradhika.jagtap@ARM.com 10810107Sradhika.jagtap@ARM.com virtual const sc_event & 10910107Sradhika.jagtap@ARM.com data_written_event() const 11010107Sradhika.jagtap@ARM.com { 11110107Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 11210107Sradhika.jagtap@ARM.com return *(const sc_event *)nullptr; 11310107Sradhika.jagtap@ARM.com } 11410107Sradhika.jagtap@ARM.com virtual const sc_event & 11510107Sradhika.jagtap@ARM.com data_read_event() const 11610107Sradhika.jagtap@ARM.com { 11710107Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 11810107Sradhika.jagtap@ARM.com return *(const sc_event *)nullptr; 11910107Sradhika.jagtap@ARM.com } 12010107Sradhika.jagtap@ARM.com 12110107Sradhika.jagtap@ARM.com virtual int 12210107Sradhika.jagtap@ARM.com num_available() const 12310107Sradhika.jagtap@ARM.com { 12410107Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 12510107Sradhika.jagtap@ARM.com return 0; 12612208Sgabeblack@google.com } 12712208Sgabeblack@google.com virtual int 12812208Sgabeblack@google.com num_free() const 12912208Sgabeblack@google.com { 13010107Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 13110107Sradhika.jagtap@ARM.com return 0; 13210107Sradhika.jagtap@ARM.com } 13310107Sradhika.jagtap@ARM.com 13410107Sradhika.jagtap@ARM.com virtual void 13510107Sradhika.jagtap@ARM.com print(std::ostream & =std::cout) const 13610107Sradhika.jagtap@ARM.com { 13712209Sgabeblack@google.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 13810107Sradhika.jagtap@ARM.com } 13910107Sradhika.jagtap@ARM.com virtual void 14010107Sradhika.jagtap@ARM.com dump(std::ostream & =std::cout) const 14110107Sradhika.jagtap@ARM.com { 14210107Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 14310107Sradhika.jagtap@ARM.com } 14410107Sradhika.jagtap@ARM.com virtual const char *kind() const { return "sc_fifo"; } 14510107Sradhika.jagtap@ARM.com 14612209Sgabeblack@google.com protected: 14710107Sradhika.jagtap@ARM.com virtual void 14810107Sradhika.jagtap@ARM.com update() 14910107Sradhika.jagtap@ARM.com { 15010107Sradhika.jagtap@ARM.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 15110107Sradhika.jagtap@ARM.com } 15210107Sradhika.jagtap@ARM.com 15310107Sradhika.jagtap@ARM.com private: 15410107Sradhika.jagtap@ARM.com // Disabled 15512210Sgabeblack@google.com sc_fifo(const sc_fifo<T> &) : 15610107Sradhika.jagtap@ARM.com sc_fifo_in_if<T>(), sc_fifo_in_if<T>(), sc_prim_channel() 15710107Sradhika.jagtap@ARM.com {} 15810107Sradhika.jagtap@ARM.com sc_fifo &operator = (const sc_fifo<T> &) { return *this; } 15910107Sradhika.jagtap@ARM.com}; 16010107Sradhika.jagtap@ARM.com 16110107Sradhika.jagtap@ARM.comtemplate <class T> 16210107Sradhika.jagtap@ARM.cominline std::ostream & 16310107Sradhika.jagtap@ARM.comoperator << (std::ostream &os, const sc_fifo<T> &) 16410107Sradhika.jagtap@ARM.com{ 16512209Sgabeblack@google.com sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 16610107Sradhika.jagtap@ARM.com return os; 167} 168 169} // namespace sc_core 170 171#endif //__SYSTEMC_EXT_CHANNEL_SC_FIFO_HH__ 172