sc_signal.hh revision 12933
1955SN/A/*
2955SN/A * Copyright 2018 Google, Inc.
31762SN/A *
4955SN/A * Redistribution and use in source and binary forms, with or without
5955SN/A * modification, are permitted provided that the following conditions are
6955SN/A * met: redistributions of source code must retain the above copyright
7955SN/A * notice, this list of conditions and the following disclaimer;
8955SN/A * redistributions in binary form must reproduce the above copyright
9955SN/A * notice, this list of conditions and the following disclaimer in the
10955SN/A * documentation and/or other materials provided with the distribution;
11955SN/A * neither the name of the copyright holders nor the names of its
12955SN/A * contributors may be used to endorse or promote products derived from
13955SN/A * this software without specific prior written permission.
14955SN/A *
15955SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16955SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17955SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18955SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19955SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20955SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21955SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22955SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23955SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24955SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25955SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26955SN/A *
27955SN/A * Authors: Gabe Black
282665Ssaidi@eecs.umich.edu */
294762Snate@binkert.org
30955SN/A#ifndef __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__
315522Snate@binkert.org#define __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__
326143Snate@binkert.org
334762Snate@binkert.org#include <iostream>
345522Snate@binkert.org#include <string>
35955SN/A#include <vector>
365522Snate@binkert.org
37955SN/A#include "../core/sc_module.hh" // for sc_gen_unique_name
385522Snate@binkert.org#include "../core/sc_prim.hh"
394202Sbinkertn@umich.edu#include "sc_signal_inout_if.hh"
405742Snate@binkert.org#include "warn_unimpl.hh" // for warn_unimpl
41955SN/A
424381Sbinkertn@umich.edunamespace sc_core
434381Sbinkertn@umich.edu{
44955SN/A
45955SN/Aclass sc_port_base;
46955SN/Aclass sc_trace_file;
474202Sbinkertn@umich.edu
48955SN/A// Nonstandard
494382Sbinkertn@umich.edu// Despite having a warning "FOR INTERNAL USE ONLY!" in all caps above this
504382Sbinkertn@umich.edu// class definition in the Accellera implementation, it appears in their
514382Sbinkertn@umich.edu// examples and test programs, and so we need to have it here as well.
526654Snate@binkert.orgstruct sc_trace_params
535517Snate@binkert.org{
546143Snate@binkert.org    sc_trace_file *tf;
556143Snate@binkert.org    std::string name;
566143Snate@binkert.org
576143Snate@binkert.org    sc_trace_params(sc_trace_file *tf, const std::string &name) :
586143Snate@binkert.org        tf(tf), name(name)
596143Snate@binkert.org    {}
606143Snate@binkert.org};
616143Snate@binkert.orgtypedef std::vector<sc_trace_params *> sc_trace_params_vec;
626143Snate@binkert.org
636143Snate@binkert.orgtemplate <class T, sc_writer_policy WRITER_POLICY=SC_ONE_WRITER>
646143Snate@binkert.orgclass sc_signal : public sc_signal_inout_if<T>,
656143Snate@binkert.org                  public sc_prim_channel
666143Snate@binkert.org{
676143Snate@binkert.org  public:
686143Snate@binkert.org    sc_signal() : sc_signal_inout_if<T>(),
694762Snate@binkert.org                  sc_prim_channel(sc_gen_unique_name("signal"))
706143Snate@binkert.org    {}
716143Snate@binkert.org    explicit sc_signal(const char *name) : sc_signal_inout_if<T>(),
726143Snate@binkert.org                                           sc_prim_channel(name)
736143Snate@binkert.org    {}
746143Snate@binkert.org    explicit sc_signal(const char *name, const T &initial_value) :
756143Snate@binkert.org        sc_signal_inout_if<T>(), sc_prim_channel(name)
766143Snate@binkert.org    {
776143Snate@binkert.org        // Need to consume initial_value.
786143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
796143Snate@binkert.org    }
806143Snate@binkert.org    virtual ~sc_signal() {}
816143Snate@binkert.org
826143Snate@binkert.org    virtual void
836143Snate@binkert.org    register_port(sc_port_base &, const char *)
846143Snate@binkert.org    {
856143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
866143Snate@binkert.org    }
876143Snate@binkert.org
886143Snate@binkert.org    virtual const T&
896143Snate@binkert.org    read() const
906143Snate@binkert.org    {
916143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
926143Snate@binkert.org        return *(const T *)nullptr;
936143Snate@binkert.org    }
946143Snate@binkert.org    operator const T&() const
956143Snate@binkert.org    {
966143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
976143Snate@binkert.org        return *(const T *)nullptr;
986143Snate@binkert.org    }
996143Snate@binkert.org
1006143Snate@binkert.org    virtual sc_writer_policy
1016143Snate@binkert.org    get_writer_policy() const
1026143Snate@binkert.org    {
1036143Snate@binkert.org        return WRITER_POLICY;
1046143Snate@binkert.org    }
1056143Snate@binkert.org    virtual void
1066143Snate@binkert.org    write(const T&)
1076143Snate@binkert.org    {
1086143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1096143Snate@binkert.org    }
1106143Snate@binkert.org    sc_signal<T, WRITER_POLICY> &
1116143Snate@binkert.org    operator = (const T&)
1126143Snate@binkert.org    {
1135522Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1146143Snate@binkert.org        return *this;
1156143Snate@binkert.org    }
1166143Snate@binkert.org    sc_signal<T, WRITER_POLICY> &
1176143Snate@binkert.org    operator = (const sc_signal<T, WRITER_POLICY> &)
1186143Snate@binkert.org    {
1196143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1206143Snate@binkert.org        return *this;
1216143Snate@binkert.org    }
1226143Snate@binkert.org
1236143Snate@binkert.org    virtual const sc_event &
1245522Snate@binkert.org    default_event() const
1255522Snate@binkert.org    {
1265522Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1275522Snate@binkert.org        return *(sc_event *)nullptr;
1285604Snate@binkert.org    }
1295604Snate@binkert.org    virtual const sc_event &
1306143Snate@binkert.org    value_changed_event() const
1316143Snate@binkert.org    {
1324762Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1334762Snate@binkert.org        return *(sc_event *)nullptr;
1346143Snate@binkert.org    }
1356143Snate@binkert.org    virtual bool
1366143Snate@binkert.org    event() const
1376143Snate@binkert.org    {
1384762Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1396143Snate@binkert.org        return false;
1406143Snate@binkert.org    }
1416143Snate@binkert.org
1426143Snate@binkert.org    virtual void
1436143Snate@binkert.org    print(std::ostream & =std::cout) const
1446143Snate@binkert.org    {
1456143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1466143Snate@binkert.org    }
1475604Snate@binkert.org    virtual void
1486143Snate@binkert.org    dump(std::ostream & =std::cout) const
1496143Snate@binkert.org    {
1506143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1514762Snate@binkert.org    }
1526143Snate@binkert.org    virtual const char *kind() const { return "sc_signal"; }
1534762Snate@binkert.org
1544762Snate@binkert.org  protected:
1554762Snate@binkert.org    virtual void
1566143Snate@binkert.org    update()
1576143Snate@binkert.org    {
1584762Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1596143Snate@binkert.org    }
1606143Snate@binkert.org
1616143Snate@binkert.org  private:
1626143Snate@binkert.org    // Disabled
1634762Snate@binkert.org    sc_signal(const sc_signal<T, WRITER_POLICY> &) :
1646143Snate@binkert.org            sc_signal_inout_if<T>(), sc_prim_channel("")
1654762Snate@binkert.org    {}
1666143Snate@binkert.org};
1674762Snate@binkert.org
1686143Snate@binkert.orgtemplate <class T, sc_writer_policy WRITER_POLICY>
1696143Snate@binkert.orginline std::ostream &
1706143Snate@binkert.orgoperator << (std::ostream &os, const sc_signal<T, WRITER_POLICY> &)
1716143Snate@binkert.org{
1726143Snate@binkert.org    sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1736143Snate@binkert.org    return os;
1746143Snate@binkert.org}
1756143Snate@binkert.org
1766143Snate@binkert.orgtemplate <sc_writer_policy WRITER_POLICY>
1776143Snate@binkert.orgclass sc_signal<bool, WRITER_POLICY> :
1786143Snate@binkert.org    public sc_signal_inout_if<bool>, public sc_prim_channel
1796143Snate@binkert.org{
1806143Snate@binkert.org  public:
181955SN/A    sc_signal()
1825584Snate@binkert.org    {
1835584Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1845584Snate@binkert.org    }
1855584Snate@binkert.org    explicit sc_signal(const char *)
1866143Snate@binkert.org    {
1876143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1886143Snate@binkert.org    }
1895584Snate@binkert.org    explicit sc_signal(const char *name, const bool &initial_value) :
1904382Sbinkertn@umich.edu        sc_signal_inout_if<bool>(), sc_prim_channel(name)
1914202Sbinkertn@umich.edu    {
1924382Sbinkertn@umich.edu        // Need to consume initial_value.
1934382Sbinkertn@umich.edu        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1944382Sbinkertn@umich.edu    }
1955584Snate@binkert.org    virtual ~sc_signal()
1964382Sbinkertn@umich.edu    {
1974382Sbinkertn@umich.edu        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
1984382Sbinkertn@umich.edu    }
1995192Ssaidi@eecs.umich.edu
2005192Ssaidi@eecs.umich.edu    virtual void
2015799Snate@binkert.org    register_port(sc_port_base &, const char *)
2025799Snate@binkert.org    {
2035799Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2045192Ssaidi@eecs.umich.edu    }
2055799Snate@binkert.org
2065192Ssaidi@eecs.umich.edu    virtual const bool &
2075799Snate@binkert.org    read() const
2085799Snate@binkert.org    {
2095192Ssaidi@eecs.umich.edu        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2105192Ssaidi@eecs.umich.edu        return *(const bool *)nullptr;
2115192Ssaidi@eecs.umich.edu    }
2125799Snate@binkert.org    operator const bool &() const
2135192Ssaidi@eecs.umich.edu    {
2145192Ssaidi@eecs.umich.edu        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2155192Ssaidi@eecs.umich.edu        return *(const bool *)nullptr;
2165192Ssaidi@eecs.umich.edu    }
2175192Ssaidi@eecs.umich.edu
2185192Ssaidi@eecs.umich.edu    virtual sc_writer_policy
2194382Sbinkertn@umich.edu    get_writer_policy() const
2204382Sbinkertn@umich.edu    {
2214382Sbinkertn@umich.edu        return WRITER_POLICY;
2222667Sstever@eecs.umich.edu    }
2232667Sstever@eecs.umich.edu    virtual void
2242667Sstever@eecs.umich.edu    write(const bool &)
2252667Sstever@eecs.umich.edu    {
2262667Sstever@eecs.umich.edu        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2272667Sstever@eecs.umich.edu    }
2285742Snate@binkert.org    sc_signal<bool, WRITER_POLICY> &
2295742Snate@binkert.org    operator = (const bool &)
2305742Snate@binkert.org    {
2315793Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2325793Snate@binkert.org        return *this;
2335793Snate@binkert.org    }
2345793Snate@binkert.org    sc_signal<bool, WRITER_POLICY> &
2355793Snate@binkert.org    operator = (const sc_signal<bool, WRITER_POLICY> &)
2364382Sbinkertn@umich.edu    {
2374762Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2385344Sstever@gmail.com        return *this;
2394382Sbinkertn@umich.edu    }
2405341Sstever@gmail.com
2415742Snate@binkert.org    virtual const sc_event &
2425742Snate@binkert.org    default_event() const
2435742Snate@binkert.org    {
2445742Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2455742Snate@binkert.org        return *(sc_event *)nullptr;
2464762Snate@binkert.org    }
2475742Snate@binkert.org
2485742Snate@binkert.org    virtual const sc_event &
2495742Snate@binkert.org    value_changed_event() const
2505742Snate@binkert.org    {
2515742Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2525742Snate@binkert.org        return *(sc_event *)nullptr;
2535742Snate@binkert.org    }
2545341Sstever@gmail.com    virtual const sc_event &
2555742Snate@binkert.org    posedge_event() const
2565341Sstever@gmail.com    {
2574773Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2586108Snate@binkert.org        return *(sc_event *)nullptr;
2591858SN/A    }
2601085SN/A    virtual const sc_event &
2616658Snate@binkert.org    negedge_event() const
2626658Snate@binkert.org    {
2636658Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2646658Snate@binkert.org        return *(sc_event *)nullptr;
2656658Snate@binkert.org    }
2666658Snate@binkert.org
2676658Snate@binkert.org    virtual bool
2686658Snate@binkert.org    event() const
2696658Snate@binkert.org    {
2706658Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2716658Snate@binkert.org        return false;
2726658Snate@binkert.org    }
2736658Snate@binkert.org    virtual bool
2746658Snate@binkert.org    posedge() const
2756658Snate@binkert.org    {
2766658Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2776658Snate@binkert.org        return false;
2786658Snate@binkert.org    }
2796658Snate@binkert.org    virtual bool
2806658Snate@binkert.org    negedge() const
2816658Snate@binkert.org    {
2826658Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2836658Snate@binkert.org        return false;
2846658Snate@binkert.org    }
2856658Snate@binkert.org
2864382Sbinkertn@umich.edu    virtual void
2874382Sbinkertn@umich.edu    print(std::ostream & =std::cout) const
2884762Snate@binkert.org    {
2894762Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2904762Snate@binkert.org    }
2916654Snate@binkert.org    virtual void
2926654Snate@binkert.org    dump(std::ostream & =std::cout) const
2935517Snate@binkert.org    {
2945517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
2955517Snate@binkert.org    }
2965517Snate@binkert.org    virtual const char *kind() const { return "sc_signal"; }
2975517Snate@binkert.org
2985517Snate@binkert.org  protected:
2995517Snate@binkert.org    virtual void
3005517Snate@binkert.org    update()
3015517Snate@binkert.org    {
3025517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3035517Snate@binkert.org    }
3045517Snate@binkert.org
3055517Snate@binkert.org  private:
3065517Snate@binkert.org    // Disabled
3075517Snate@binkert.org    sc_signal(const sc_signal<bool, WRITER_POLICY> &) :
3085517Snate@binkert.org            sc_signal_inout_if<bool>(), sc_prim_channel("")
3095517Snate@binkert.org    {}
3106654Snate@binkert.org};
3115517Snate@binkert.org
3125517Snate@binkert.orgtemplate <sc_writer_policy WRITER_POLICY>
3135517Snate@binkert.orgclass sc_signal<sc_dt::sc_logic, WRITER_POLICY> :
3145517Snate@binkert.org    public sc_signal_inout_if<sc_dt::sc_logic>, public sc_prim_channel
3155517Snate@binkert.org{
3165517Snate@binkert.org  public:
3175517Snate@binkert.org    sc_signal()
3185517Snate@binkert.org    {
3196143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3206654Snate@binkert.org    }
3215517Snate@binkert.org    explicit sc_signal(const char *)
3225517Snate@binkert.org    {
3235517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3245517Snate@binkert.org    }
3255517Snate@binkert.org    explicit sc_signal(const char *name,
3265517Snate@binkert.org            const sc_dt::sc_logic &initial_value) :
3275517Snate@binkert.org        sc_signal_inout_if<sc_dt::sc_logic>(), sc_prim_channel(name)
3285517Snate@binkert.org    {
3295517Snate@binkert.org        // Need to consume initial_value.
3305517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3315517Snate@binkert.org    }
3325517Snate@binkert.org    virtual ~sc_signal()
3335517Snate@binkert.org    {
3345517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3356654Snate@binkert.org    }
3366654Snate@binkert.org
3375517Snate@binkert.org    virtual void
3385517Snate@binkert.org    register_port(sc_port_base &, const char *)
3396143Snate@binkert.org    {
3406143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3416143Snate@binkert.org    }
3426143Snate@binkert.org
3435517Snate@binkert.org    virtual const sc_dt::sc_logic &
3446143Snate@binkert.org    read() const
3455517Snate@binkert.org    {
3465517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3475517Snate@binkert.org        return *(const sc_dt::sc_logic *)nullptr;
3486654Snate@binkert.org    }
3496654Snate@binkert.org    operator const sc_dt::sc_logic &() const
3506654Snate@binkert.org    {
3516654Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3526654Snate@binkert.org        return *(const sc_dt::sc_logic *)nullptr;
3536654Snate@binkert.org    }
3545517Snate@binkert.org
3555517Snate@binkert.org    virtual sc_writer_policy
3565517Snate@binkert.org    get_writer_policy() const
3576143Snate@binkert.org    {
3585517Snate@binkert.org        return WRITER_POLICY;
3594762Snate@binkert.org    }
3605517Snate@binkert.org    virtual void
3615517Snate@binkert.org    write(const sc_dt::sc_logic &)
3626143Snate@binkert.org    {
3636143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3645517Snate@binkert.org    }
3655517Snate@binkert.org    sc_signal<sc_dt::sc_logic, WRITER_POLICY> &
3665517Snate@binkert.org    operator = (const sc_dt::sc_logic &)
3675517Snate@binkert.org    {
3685517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3695517Snate@binkert.org        return *this;
3705517Snate@binkert.org    }
3715517Snate@binkert.org    sc_signal<sc_dt::sc_logic, WRITER_POLICY> &
3725517Snate@binkert.org    operator = (const sc_signal<sc_dt::sc_logic, WRITER_POLICY> &)
3735517Snate@binkert.org    {
3746143Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3755517Snate@binkert.org        return *this;
3766654Snate@binkert.org    }
3776654Snate@binkert.org
3786654Snate@binkert.org    virtual const sc_event &
3796654Snate@binkert.org    default_event() const
3806654Snate@binkert.org    {
3816654Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3825517Snate@binkert.org        return *(sc_event *)nullptr;
3835517Snate@binkert.org    }
3845517Snate@binkert.org
3855517Snate@binkert.org    virtual const sc_event &
3865517Snate@binkert.org    value_changed_event() const
3874762Snate@binkert.org    {
3884762Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3894762Snate@binkert.org        return *(sc_event *)nullptr;
3904762Snate@binkert.org    }
3914762Snate@binkert.org    virtual const sc_event &
3924762Snate@binkert.org    posedge_event() const
3936143Snate@binkert.org    {
3944762Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
3954762Snate@binkert.org        return *(sc_event *)nullptr;
3964762Snate@binkert.org    }
3974762Snate@binkert.org    virtual const sc_event &
3984382Sbinkertn@umich.edu    negedge_event() const
3994382Sbinkertn@umich.edu    {
4005517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
4016654Snate@binkert.org        return *(sc_event *)nullptr;
4025517Snate@binkert.org    }
4035798Snate@binkert.org
4046654Snate@binkert.org    virtual bool
4056654Snate@binkert.org    event() const
4066654Snate@binkert.org    {
4076654Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
4086654Snate@binkert.org        return false;
4096654Snate@binkert.org    }
4106654Snate@binkert.org    virtual bool
4116654Snate@binkert.org    posedge() const
4126654Snate@binkert.org    {
4136654Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
4146654Snate@binkert.org        return false;
4156654Snate@binkert.org    }
4166654Snate@binkert.org    virtual bool
4176654Snate@binkert.org    negedge() const
4186654Snate@binkert.org    {
4195517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
4205863Snate@binkert.org        return false;
4215798Snate@binkert.org    }
4225798Snate@binkert.org
4235798Snate@binkert.org    virtual void
4245798Snate@binkert.org    print(std::ostream & =std::cout) const
4255517Snate@binkert.org    {
4265517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
4275517Snate@binkert.org    }
4285517Snate@binkert.org    virtual void
4295517Snate@binkert.org    dump(std::ostream & =std::cout) const
4305517Snate@binkert.org    {
4315517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
4325517Snate@binkert.org    }
4335798Snate@binkert.org    virtual const char *kind() const { return "sc_signal"; }
4345798Snate@binkert.org
4355798Snate@binkert.org  protected:
4365798Snate@binkert.org    virtual void
4375798Snate@binkert.org    update()
4385798Snate@binkert.org    {
4395517Snate@binkert.org        sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
4405517Snate@binkert.org    }
4415517Snate@binkert.org
4425517Snate@binkert.org  private:
4435517Snate@binkert.org    // Disabled
4445517Snate@binkert.org    sc_signal(const sc_signal<sc_dt::sc_logic, WRITER_POLICY> &) :
4455517Snate@binkert.org            sc_signal_inout_if<sc_dt::sc_logic>(), sc_prim_channel("")
4465517Snate@binkert.org    {}
4475517Snate@binkert.org};
4484762Snate@binkert.org
4494382Sbinkertn@umich.edu} // namespace sc_core
4506143Snate@binkert.org
4515517Snate@binkert.org#endif  //__SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__
4524382Sbinkertn@umich.edu