sc_signal.hh revision 12841:22aa7ba47bf9
11689SN/A/* 22325SN/A * Copyright 2018 Google, Inc. 31689SN/A * 41689SN/A * Redistribution and use in source and binary forms, with or without 51689SN/A * modification, are permitted provided that the following conditions are 61689SN/A * met: redistributions of source code must retain the above copyright 71689SN/A * notice, this list of conditions and the following disclaimer; 81689SN/A * redistributions in binary form must reproduce the above copyright 91689SN/A * notice, this list of conditions and the following disclaimer in the 101689SN/A * documentation and/or other materials provided with the distribution; 111689SN/A * neither the name of the copyright holders nor the names of its 121689SN/A * contributors may be used to endorse or promote products derived from 131689SN/A * this software without specific prior written permission. 141689SN/A * 151689SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 161689SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 171689SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 181689SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 191689SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 201689SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 211689SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 221689SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 231689SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 241689SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 251689SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 261689SN/A * 272665Ssaidi@eecs.umich.edu * Authors: Gabe Black 282665Ssaidi@eecs.umich.edu */ 292756Sksewell@umich.edu 301689SN/A#ifndef __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__ 311689SN/A#define __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__ 321858SN/A 332733Sktlim@umich.edu#include <iostream> 341858SN/A 351858SN/A#include "../core/sc_module.hh" // for sc_gen_unique_name 362356SN/A#include "../core/sc_prim.hh" 371060SN/A#include "sc_signal_inout_if.hh" 381060SN/A#include "warn_unimpl.hh" // for warn_unimpl 391060SN/A 401060SN/Anamespace sc_core 411060SN/A{ 422325SN/A 432683Sktlim@umich.educlass sc_port_base; 442680Sktlim@umich.edu 452817Sksewell@umich.edutemplate <class T, sc_writer_policy WRITER_POLICY=SC_ONE_WRITER> 461717SN/Aclass sc_signal : public sc_signal_inout_if<T>, 471060SN/A public sc_prim_channel 482325SN/A{ 492292SN/A public: 502292SN/A sc_signal() : sc_signal_inout_if<T>(), 512794Sktlim@umich.edu sc_prim_channel(sc_gen_unique_name("signal")) 522794Sktlim@umich.edu {} 532794Sktlim@umich.edu explicit sc_signal(const char *name) : sc_signal_inout_if<T>(), 542794Sktlim@umich.edu sc_prim_channel(name) 551060SN/A {} 562669Sktlim@umich.edu virtual ~sc_signal() {} 571060SN/A 582733Sktlim@umich.edu virtual void 592292SN/A register_port(sc_port_base &, const char *) 601060SN/A { 611060SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 621060SN/A } 632292SN/A 642733Sktlim@umich.edu virtual const T& 652292SN/A read() const 662292SN/A { 672292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 682292SN/A return *(const T *)nullptr; 691060SN/A } 701755SN/A operator const T&() const 711060SN/A { 721060SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 731060SN/A return *(const T *)nullptr; 741060SN/A } 751060SN/A 761060SN/A virtual sc_writer_policy 771755SN/A get_writer_policy() const 781060SN/A { 791060SN/A return WRITER_POLICY; 801060SN/A } 811060SN/A virtual void 821060SN/A write(const T&) 831060SN/A { 841755SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 851060SN/A } 861755SN/A sc_signal<T, WRITER_POLICY> & 871060SN/A operator = (const T&) 881060SN/A { 891060SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 902829Sksewell@umich.edu return *this; 913221Sktlim@umich.edu } 922829Sksewell@umich.edu sc_signal<T, WRITER_POLICY> & 932829Sksewell@umich.edu operator = (const sc_signal<T, WRITER_POLICY> &) 942829Sksewell@umich.edu { 952829Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 962829Sksewell@umich.edu return *this; 972829Sksewell@umich.edu } 982829Sksewell@umich.edu 992829Sksewell@umich.edu virtual const sc_event & 1002829Sksewell@umich.edu default_event() const 1012829Sksewell@umich.edu { 1022829Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1032829Sksewell@umich.edu return *(sc_event *)nullptr; 1042829Sksewell@umich.edu } 1052829Sksewell@umich.edu virtual const sc_event & 1062829Sksewell@umich.edu value_changed_event() const 1072829Sksewell@umich.edu { 1082829Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1092829Sksewell@umich.edu return *(sc_event *)nullptr; 1102829Sksewell@umich.edu } 1112829Sksewell@umich.edu virtual bool 1122829Sksewell@umich.edu event() const 1132829Sksewell@umich.edu { 1142829Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1152829Sksewell@umich.edu return false; 1162829Sksewell@umich.edu } 1172829Sksewell@umich.edu 1182829Sksewell@umich.edu virtual void 1192875Sksewell@umich.edu print(std::ostream & =std::cout) const 1202875Sksewell@umich.edu { 1212875Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1222875Sksewell@umich.edu } 1232875Sksewell@umich.edu virtual void 1242875Sksewell@umich.edu dump(std::ostream & =std::cout) const 1252875Sksewell@umich.edu { 1262875Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1272875Sksewell@umich.edu } 1282875Sksewell@umich.edu virtual const char *kind() const { return "sc_signal"; } 1292875Sksewell@umich.edu 1302875Sksewell@umich.edu protected: 1312875Sksewell@umich.edu virtual void 1322875Sksewell@umich.edu update() 1332875Sksewell@umich.edu { 1342875Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1352875Sksewell@umich.edu } 1362875Sksewell@umich.edu 1372875Sksewell@umich.edu private: 1383221Sktlim@umich.edu // Disabled 1393221Sktlim@umich.edu sc_signal(const sc_signal<T, WRITER_POLICY> &) : 1402875Sksewell@umich.edu sc_signal_inout_if<T>(), sc_prim_channel("") 1412875Sksewell@umich.edu {} 1422875Sksewell@umich.edu}; 1432875Sksewell@umich.edu 1442875Sksewell@umich.edutemplate <class T, sc_writer_policy WRITER_POLICY> 1452875Sksewell@umich.eduinline std::ostream & 1462875Sksewell@umich.eduoperator << (std::ostream &os, const sc_signal<T, WRITER_POLICY> &) 1472875Sksewell@umich.edu{ 1482875Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1492875Sksewell@umich.edu return os; 1502292SN/A} 1512733Sktlim@umich.edu 1521060SN/Atemplate <sc_writer_policy WRITER_POLICY> 1532292SN/Aclass sc_signal<bool, WRITER_POLICY> : 1541060SN/A public sc_signal_inout_if<bool>, public sc_prim_channel 1551060SN/A{ 1561060SN/A public: 1571060SN/A sc_signal() 1581060SN/A { 1591060SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1602292SN/A } 1611060SN/A explicit sc_signal(const char *) 1622831Sksewell@umich.edu { 1632292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1642292SN/A } 1651060SN/A virtual ~sc_signal() 1662292SN/A { 1672292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1682292SN/A } 1691060SN/A 1702831Sksewell@umich.edu virtual void 1712292SN/A register_port(sc_port_base &, const char *) 1722292SN/A { 1732292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1742292SN/A } 1751060SN/A 1762873Sktlim@umich.edu virtual const bool & 1772873Sktlim@umich.edu read() const 1782873Sktlim@umich.edu { 1792873Sktlim@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1802873Sktlim@umich.edu return *(const bool *)nullptr; 1812873Sktlim@umich.edu } 1822873Sktlim@umich.edu operator const bool &() const 1832873Sktlim@umich.edu { 1841060SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1851060SN/A return *(const bool *)nullptr; 1861858SN/A } 1872292SN/A 1881060SN/A virtual sc_writer_policy 1891060SN/A get_writer_policy() const 1902292SN/A { 1912843Sktlim@umich.edu return WRITER_POLICY; 1922316SN/A } 1932316SN/A virtual void 1941060SN/A write(const bool &) 1953221Sktlim@umich.edu { 1963221Sktlim@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 1973221Sktlim@umich.edu } 1983221Sktlim@umich.edu sc_signal<bool, WRITER_POLICY> & 1993221Sktlim@umich.edu operator = (const bool &) 2001681SN/A { 2012733Sktlim@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2022733Sktlim@umich.edu return *this; 2032794Sktlim@umich.edu } 2042733Sktlim@umich.edu sc_signal<bool, WRITER_POLICY> & 2052316SN/A operator = (const sc_signal<bool, WRITER_POLICY> &) 2062316SN/A { 2072316SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2082316SN/A return *this; 2092316SN/A } 2102316SN/A 2112794Sktlim@umich.edu virtual const sc_event & 2122794Sktlim@umich.edu default_event() const 2132794Sktlim@umich.edu { 2142316SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2152316SN/A return *(sc_event *)nullptr; 2161858SN/A } 2172292SN/A 2182292SN/A virtual const sc_event & 2191681SN/A value_changed_event() const 2201681SN/A { 2212325SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2222325SN/A return *(sc_event *)nullptr; 2232325SN/A } 2241060SN/A virtual const sc_event & 2252292SN/A posedge_event() const 2262292SN/A { 2272292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2282292SN/A return *(sc_event *)nullptr; 2292292SN/A } 2302292SN/A virtual const sc_event & 2311060SN/A negedge_event() const 2321060SN/A { 2331060SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2341060SN/A return *(sc_event *)nullptr; 2351060SN/A } 2361060SN/A 2371060SN/A virtual bool 2381060SN/A event() const 2391060SN/A { 2401060SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2411060SN/A return false; 2422292SN/A } 2431060SN/A virtual bool 2441060SN/A posedge() const 2451060SN/A { 2461060SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2471060SN/A return false; 2481060SN/A } 2491060SN/A virtual bool 2501060SN/A negedge() const 2512292SN/A { 2522292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2532292SN/A return false; 2542292SN/A } 2552292SN/A 2562307SN/A virtual void 2572831Sksewell@umich.edu print(std::ostream & =std::cout) const 2582831Sksewell@umich.edu { 2592831Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2602831Sksewell@umich.edu } 2612831Sksewell@umich.edu virtual void 2622831Sksewell@umich.edu dump(std::ostream & =std::cout) const 2632292SN/A { 2642307SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2652292SN/A } 2662292SN/A virtual const char *kind() const { return "sc_signal"; } 2672316SN/A 2682292SN/A protected: 2692292SN/A virtual void 2702292SN/A update() 2712292SN/A { 2722292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2732292SN/A } 2741060SN/A 2752292SN/A private: 2762292SN/A // Disabled 2771060SN/A sc_signal(const sc_signal<bool, WRITER_POLICY> &) : 2782292SN/A sc_signal_inout_if<bool>(), sc_prim_channel("") 2792307SN/A {} 2802292SN/A}; 2812292SN/A 2822292SN/Atemplate <sc_writer_policy WRITER_POLICY> 2832325SN/Aclass sc_signal<sc_dt::sc_logic, WRITER_POLICY> : 2842292SN/A public sc_signal_inout_if<sc_dt::sc_logic>, public sc_prim_channel 2852292SN/A{ 2862292SN/A public: 2872325SN/A sc_signal() 2882292SN/A { 2892292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2902292SN/A } 2912292SN/A explicit sc_signal(const char *) 2922292SN/A { 2932292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2942292SN/A } 2952292SN/A virtual ~sc_signal() 2962292SN/A { 2972292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 2982292SN/A } 2992325SN/A 3002292SN/A virtual void 3012292SN/A register_port(sc_port_base &, const char *) 3022292SN/A { 3032325SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3042292SN/A } 3052292SN/A 3062292SN/A virtual const sc_dt::sc_logic & 3072292SN/A read() const 3082292SN/A { 3092292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3102292SN/A return *(const sc_dt::sc_logic *)nullptr; 3112292SN/A } 3123221Sktlim@umich.edu operator const sc_dt::sc_logic &() const 3133221Sktlim@umich.edu { 3143221Sktlim@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3152292SN/A return *(const sc_dt::sc_logic *)nullptr; 3162292SN/A } 3172292SN/A 3182292SN/A virtual sc_writer_policy 3192292SN/A get_writer_policy() const 3202292SN/A { 3212292SN/A return WRITER_POLICY; 3222292SN/A } 3232292SN/A virtual void 3241060SN/A write(const sc_dt::sc_logic &) 3252292SN/A { 3261060SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3271060SN/A } 3282292SN/A sc_signal<sc_dt::sc_logic, WRITER_POLICY> & 3292292SN/A operator = (const sc_dt::sc_logic &) 3302292SN/A { 3312829Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3322829Sksewell@umich.edu return *this; 3333093Sksewell@umich.edu } 3343093Sksewell@umich.edu sc_signal<sc_dt::sc_logic, WRITER_POLICY> & 3353093Sksewell@umich.edu operator = (const sc_signal<sc_dt::sc_logic, WRITER_POLICY> &) 3363093Sksewell@umich.edu { 3373093Sksewell@umich.edu sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3382292SN/A return *this; 3391060SN/A } 3401060SN/A 3411060SN/A virtual const sc_event & 3421755SN/A default_event() const 3431060SN/A { 3441060SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3451060SN/A return *(sc_event *)nullptr; 3461060SN/A } 3471060SN/A 3481755SN/A virtual const sc_event & 3491062SN/A value_changed_event() const 3502733Sktlim@umich.edu { 3512292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3522733Sktlim@umich.edu return *(sc_event *)nullptr; 3532292SN/A } 3542292SN/A virtual const sc_event & 3552292SN/A posedge_event() const 3562292SN/A { 3572292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3582292SN/A return *(sc_event *)nullptr; 3592292SN/A } 3602292SN/A virtual const sc_event & 3612292SN/A negedge_event() const 3622292SN/A { 3632292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3642292SN/A return *(sc_event *)nullptr; 3652292SN/A } 3662292SN/A 3672292SN/A virtual bool 3682292SN/A event() const 3692292SN/A { 3702292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3712292SN/A return false; 3722292SN/A } 3732292SN/A virtual bool 3742292SN/A posedge() const 3752292SN/A { 3762292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3772292SN/A return false; 3782292SN/A } 3792292SN/A virtual bool 3802292SN/A negedge() const 3812292SN/A { 3822292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3832292SN/A return false; 3842292SN/A } 3852292SN/A 3862292SN/A virtual void 3872292SN/A print(std::ostream & =std::cout) const 3882292SN/A { 3892292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3902292SN/A } 3912292SN/A virtual void 3922292SN/A dump(std::ostream & =std::cout) const 3932292SN/A { 3942292SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 3952292SN/A } 3962292SN/A virtual const char *kind() const { return "sc_signal"; } 3972292SN/A 3982292SN/A protected: 3992292SN/A virtual void 4002292SN/A update() 4012292SN/A { 4021062SN/A sc_channel_warn_unimpl(__PRETTY_FUNCTION__); 4031062SN/A } 4041062SN/A 4052871Sktlim@umich.edu private: 4062871Sktlim@umich.edu // Disabled 4072871Sktlim@umich.edu sc_signal(const sc_signal<sc_dt::sc_logic, WRITER_POLICY> &) : 4082871Sktlim@umich.edu sc_signal_inout_if<sc_dt::sc_logic>(), sc_prim_channel("") 4092871Sktlim@umich.edu {} 4102871Sktlim@umich.edu}; 4112871Sktlim@umich.edu 4122871Sktlim@umich.edu} // namespace sc_core 4132871Sktlim@umich.edu 4142871Sktlim@umich.edu#endif //__SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__ 4152871Sktlim@umich.edu