summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-05-09 18:42:03 -0700
committerGabe Black <gabeblack@google.com>2018-07-24 21:45:55 +0000
commit5872389715a194dd91b17e46b770537415d50e30 (patch)
treedb88c6c62d4055ff37c9456e3134ec6d8fda7d82
parent34467a211b43cf52e469f5e3842a3b8c431959c7 (diff)
downloadgem5-5872389715a194dd91b17e46b770537415d50e30.tar.xz
systemc: Stub out the predefined channels.
Change-Id: Ie030aad26875bd49e54981ec1e9076b7b5af6630 Reviewed-on: https://gem5-review.googlesource.com/10839 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com>
-rw-r--r--src/systemc/channel/SConscript39
-rw-r--r--src/systemc/channel/sc_clock.cc108
-rw-r--r--src/systemc/channel/sc_event_queue.cc69
-rw-r--r--src/systemc/channel/sc_in_resolved.cc48
-rw-r--r--src/systemc/channel/sc_inout_resolved.cc85
-rw-r--r--src/systemc/channel/sc_mutex.cc68
-rw-r--r--src/systemc/channel/sc_out_resolved.cc82
-rw-r--r--src/systemc/channel/sc_semaphore.cc76
-rw-r--r--src/systemc/channel/sc_signal_resolved.cc82
-rw-r--r--src/systemc/channel/warn_unimpl.cc42
-rw-r--r--src/systemc/ext/channel/_channel.hh60
-rw-r--r--src/systemc/ext/channel/_using.hh95
-rw-r--r--src/systemc/ext/channel/sc_buffer.hh90
-rw-r--r--src/systemc/ext/channel/sc_clock.hh85
-rw-r--r--src/systemc/ext/channel/sc_event_queue.hh70
-rw-r--r--src/systemc/ext/channel/sc_fifo.hh171
-rw-r--r--src/systemc/ext/channel/sc_fifo_in.hh97
-rw-r--r--src/systemc/ext/channel/sc_fifo_in_if.hh74
-rw-r--r--src/systemc/ext/channel/sc_fifo_out.hh92
-rw-r--r--src/systemc/ext/channel/sc_fifo_out_if.hh76
-rw-r--r--src/systemc/ext/channel/sc_in.hh433
-rw-r--r--src/systemc/ext/channel/sc_in_resolved.hh68
-rw-r--r--src/systemc/ext/channel/sc_in_rv.hh66
-rw-r--r--src/systemc/ext/channel/sc_inout.hh466
-rw-r--r--src/systemc/ext/channel/sc_inout_resolved.hh75
-rw-r--r--src/systemc/ext/channel/sc_inout_rv.hh95
-rw-r--r--src/systemc/ext/channel/sc_mutex.hh59
-rw-r--r--src/systemc/ext/channel/sc_mutex_if.hh56
-rw-r--r--src/systemc/ext/channel/sc_out.hh88
-rw-r--r--src/systemc/ext/channel/sc_out_resolved.hh72
-rw-r--r--src/systemc/ext/channel/sc_out_rv.hh98
-rw-r--r--src/systemc/ext/channel/sc_semaphore.hh63
-rw-r--r--src/systemc/ext/channel/sc_semaphore_if.hh57
-rw-r--r--src/systemc/ext/channel/sc_signal.hh414
-rw-r--r--src/systemc/ext/channel/sc_signal_in_if.hh126
-rw-r--r--src/systemc/ext/channel/sc_signal_inout_if.hh90
-rw-r--r--src/systemc/ext/channel/sc_signal_resolved.hh75
-rw-r--r--src/systemc/ext/channel/sc_signal_rv.hh104
-rw-r--r--src/systemc/ext/channel/warn_unimpl.hh40
-rw-r--r--src/systemc/ext/systemc1
-rw-r--r--src/systemc/ext/systemc.h1
41 files changed, 4156 insertions, 0 deletions
diff --git a/src/systemc/channel/SConscript b/src/systemc/channel/SConscript
new file mode 100644
index 000000000..3ca8801c8
--- /dev/null
+++ b/src/systemc/channel/SConscript
@@ -0,0 +1,39 @@
+# Copyright 2018 Google, Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Gabe Black
+
+Import('*')
+
+if env['USE_SYSTEMC']:
+ Source('sc_clock.cc')
+ Source('sc_event_queue.cc')
+ Source('sc_in_resolved.cc')
+ Source('sc_inout_resolved.cc')
+ Source('sc_out_resolved.cc')
+ Source('sc_mutex.cc')
+ Source('sc_semaphore.cc')
+ Source('sc_signal_resolved.cc')
+ Source('warn_unimpl.cc')
diff --git a/src/systemc/channel/sc_clock.cc b/src/systemc/channel/sc_clock.cc
new file mode 100644
index 000000000..ac1d3369a
--- /dev/null
+++ b/src/systemc/channel/sc_clock.cc
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "base/logging.hh"
+#include "systemc/ext/channel/sc_clock.hh"
+#include "systemc/ext/core/sc_module.hh" // for sc_gen_unique_name
+
+namespace sc_core
+{
+
+sc_clock::sc_clock() :
+ sc_interface(), sc_signal<bool>(sc_gen_unique_name("clock"))
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+sc_clock::sc_clock(const char *name) : sc_interface(), sc_signal<bool>(name)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+sc_clock::sc_clock(const char *name, const sc_time &period,
+ double duty_cycle, const sc_time &start_time,
+ bool posedge_first)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+sc_clock::sc_clock(const char *name, double period_v, sc_time_unit period_tu,
+ double duty_cycle)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+sc_clock::sc_clock(const char *name, double period_v, sc_time_unit period_tu,
+ double duty_cycle, double start_time_v,
+ sc_time_unit start_time_tu, bool posedge_first)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+sc_clock::~sc_clock() {}
+
+void
+sc_clock::write(const bool &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+const sc_time &
+sc_clock::period() const
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *(const sc_time *)nullptr;
+}
+
+double
+sc_clock::duty_cycle() const
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return 0.0;
+}
+
+const sc_time &
+sc_clock::start_time() const
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *(const sc_time *)nullptr;
+}
+
+bool
+sc_clock::posedge_first() const
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return false;
+}
+
+const char *sc_clock::kind() const { return "sc_clock"; }
+
+void sc_clock::before_end_of_elaboration() {}
+
+} // namespace sc_core
diff --git a/src/systemc/channel/sc_event_queue.cc b/src/systemc/channel/sc_event_queue.cc
new file mode 100644
index 000000000..47485fdc0
--- /dev/null
+++ b/src/systemc/channel/sc_event_queue.cc
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "base/logging.hh"
+#include "systemc/ext/channel/sc_event_queue.hh"
+
+namespace sc_core
+{
+
+sc_event_queue::sc_event_queue(sc_module_name name) :
+ sc_interface(), sc_event_queue_if(), sc_module(name)
+{}
+
+sc_event_queue::~sc_event_queue() {}
+
+const char *sc_event_queue::kind() const { return "sc_event_queue"; }
+
+void
+sc_event_queue::notify(double, sc_time_unit)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_event_queue::notify(const sc_time &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_event_queue::cancel_all()
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+const sc_event &
+sc_event_queue::default_event() const
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+}
+
+} // namespace sc_core
diff --git a/src/systemc/channel/sc_in_resolved.cc b/src/systemc/channel/sc_in_resolved.cc
new file mode 100644
index 000000000..b57f4cd7d
--- /dev/null
+++ b/src/systemc/channel/sc_in_resolved.cc
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "base/logging.hh"
+#include "systemc/ext/channel/sc_in_resolved.hh"
+
+namespace sc_core
+{
+
+sc_in_resolved::sc_in_resolved() : sc_in<sc_dt::sc_logic>() {}
+
+sc_in_resolved::sc_in_resolved(const char *name) :
+ sc_in<sc_dt::sc_logic>(name)
+{}
+
+sc_in_resolved::~sc_in_resolved() {}
+
+void sc_in_resolved::end_of_elaboration() {}
+
+const char *sc_in_resolved::kind() const { return "sc_in_resolved"; }
+
+} // namespace sc_core
diff --git a/src/systemc/channel/sc_inout_resolved.cc b/src/systemc/channel/sc_inout_resolved.cc
new file mode 100644
index 000000000..71cece846
--- /dev/null
+++ b/src/systemc/channel/sc_inout_resolved.cc
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "base/logging.hh"
+#include "systemc/ext/channel/sc_inout_resolved.hh"
+
+namespace sc_core
+{
+
+sc_inout_resolved::sc_inout_resolved() : sc_inout<sc_dt::sc_logic>() {}
+
+sc_inout_resolved::sc_inout_resolved(const char *name) :
+ sc_inout<sc_dt::sc_logic>(name)
+{}
+
+sc_inout_resolved::~sc_inout_resolved() {}
+
+void sc_inout_resolved::end_of_elaboration() {}
+
+sc_inout_resolved &
+sc_inout_resolved::operator = (const sc_dt::sc_logic &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+sc_inout_resolved &
+sc_inout_resolved::operator = (const sc_signal_in_if<sc_dt::sc_logic> &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+sc_inout_resolved &
+sc_inout_resolved::operator = (
+ const sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+sc_inout_resolved &
+sc_inout_resolved::operator = (
+ const sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+sc_inout_resolved &
+sc_inout_resolved::operator = (const sc_inout_resolved &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+const char *sc_inout_resolved::kind() const { return "sc_inout_resolved"; }
+
+} // namespace sc_core
diff --git a/src/systemc/channel/sc_mutex.cc b/src/systemc/channel/sc_mutex.cc
new file mode 100644
index 000000000..80d086f55
--- /dev/null
+++ b/src/systemc/channel/sc_mutex.cc
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "base/logging.hh"
+#include "systemc/ext/channel/sc_mutex.hh"
+#include "systemc/ext/core/sc_module.hh" // for sc_gen_unique_name
+
+namespace sc_core
+{
+
+sc_mutex::sc_mutex() : sc_interface(), sc_mutex_if(),
+ sc_object(sc_gen_unique_name("mutex"))
+{}
+
+sc_mutex::sc_mutex(const char *name) :
+ sc_interface(), sc_mutex_if(), sc_object(name)
+{}
+
+int
+sc_mutex::lock()
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return 0;
+}
+
+int
+sc_mutex::trylock()
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return 0;
+}
+
+int
+sc_mutex::unlock()
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return 0;
+}
+
+const char *sc_mutex::kind() const { return "sc_mutex"; }
+
+} // namespace sc_core
diff --git a/src/systemc/channel/sc_out_resolved.cc b/src/systemc/channel/sc_out_resolved.cc
new file mode 100644
index 000000000..a3947f68a
--- /dev/null
+++ b/src/systemc/channel/sc_out_resolved.cc
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "base/logging.hh"
+#include "systemc/ext/channel/sc_out_resolved.hh"
+
+namespace sc_core
+{
+
+sc_out_resolved::sc_out_resolved() : sc_out<sc_dt::sc_logic>() {}
+
+sc_out_resolved::sc_out_resolved(const char *name) :
+ sc_out<sc_dt::sc_logic>(name) {}
+
+sc_out_resolved::~sc_out_resolved() {}
+
+sc_out_resolved &
+sc_out_resolved::operator = (const sc_dt::sc_logic &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+sc_out_resolved &
+sc_out_resolved::operator = (const sc_signal_in_if<sc_dt::sc_logic> &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+sc_out_resolved &
+sc_out_resolved::operator = (
+ const sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+sc_out_resolved &
+sc_out_resolved::operator = (
+ const sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+sc_out_resolved &
+sc_out_resolved::operator = (const sc_out_resolved &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+const char *sc_out_resolved::kind() const { return "sc_out_resolved"; }
+
+} // namespace sc_core
diff --git a/src/systemc/channel/sc_semaphore.cc b/src/systemc/channel/sc_semaphore.cc
new file mode 100644
index 000000000..cfae59804
--- /dev/null
+++ b/src/systemc/channel/sc_semaphore.cc
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "base/logging.hh"
+#include "systemc/ext/channel/sc_semaphore.hh"
+#include "systemc/ext/core/sc_module.hh" // for sc_gen_unique_name
+
+namespace sc_core
+{
+
+sc_semaphore::sc_semaphore(int) :
+ sc_interface(), sc_semaphore_if(),
+ sc_object(sc_gen_unique_name("semaphore"))
+{}
+
+sc_semaphore::sc_semaphore(const char *name, int) :
+ sc_interface(), sc_semaphore_if(), sc_object(name)
+{}
+
+int
+sc_semaphore::wait()
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return 0;
+}
+
+int
+sc_semaphore::trywait()
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return 0;
+}
+
+int
+sc_semaphore::post()
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return 0;
+}
+
+int
+sc_semaphore::get_value() const
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return 0;
+}
+
+const char *sc_semaphore::kind() const { return "sc_semaphore"; }
+
+} // namespace sc_core
diff --git a/src/systemc/channel/sc_signal_resolved.cc b/src/systemc/channel/sc_signal_resolved.cc
new file mode 100644
index 000000000..90431842e
--- /dev/null
+++ b/src/systemc/channel/sc_signal_resolved.cc
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "base/logging.hh"
+#include "systemc/ext/channel/sc_signal_resolved.hh"
+#include "systemc/ext/core/sc_module.hh" // for sc_gen_unique_name
+
+namespace sc_core
+{
+
+sc_signal_resolved::sc_signal_resolved() : sc_interface(),
+ sc_signal<sc_dt::sc_logic, SC_MANY_WRITERS>(
+ sc_gen_unique_name("signal_resolved"))
+{}
+
+sc_signal_resolved::sc_signal_resolved(const char *name) :
+ sc_interface(), sc_signal<sc_dt::sc_logic, SC_MANY_WRITERS>(name)
+{}
+
+sc_signal_resolved::~sc_signal_resolved() {}
+
+void
+sc_signal_resolved::register_port(sc_port_base &, const char *)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+void
+sc_signal_resolved::write(const sc_dt::sc_logic &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+sc_signal_resolved &
+sc_signal_resolved::operator = (const sc_dt::sc_logic &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+sc_signal_resolved &
+sc_signal_resolved::operator = (const sc_signal_resolved &)
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+ return *this;
+}
+
+const char *sc_signal_resolved::kind() const { return "sc_signal_resolved"; }
+
+void
+sc_signal_resolved::update()
+{
+ warn("%s not implemented.\n", __PRETTY_FUNCTION__);
+}
+
+} // namespace sc_core
diff --git a/src/systemc/channel/warn_unimpl.cc b/src/systemc/channel/warn_unimpl.cc
new file mode 100644
index 000000000..82fd8367b
--- /dev/null
+++ b/src/systemc/channel/warn_unimpl.cc
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#include "base/logging.hh"
+#include "systemc/ext/channel/warn_unimpl.hh"
+
+namespace sc_core
+{
+
+void
+sc_channel_warn_unimpl(const char *func)
+{
+ warn("%s not implemented.\n", func);
+}
+
+} // namespace sc_core
diff --git a/src/systemc/ext/channel/_channel.hh b/src/systemc/ext/channel/_channel.hh
new file mode 100644
index 000000000..d95cfc244
--- /dev/null
+++ b/src/systemc/ext/channel/_channel.hh
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL__CHANNEL_HH__
+#define __SYSTEMC_EXT_CHANNEL__CHANNEL_HH__
+
+#include "sc_buffer.hh"
+#include "sc_clock.hh"
+#include "sc_event_queue.hh"
+#include "sc_fifo.hh"
+#include "sc_fifo_in.hh"
+#include "sc_fifo_in_if.hh"
+#include "sc_fifo_out.hh"
+#include "sc_fifo_out_if.hh"
+#include "sc_in.hh"
+#include "sc_in_resolved.hh"
+#include "sc_in_rv.hh"
+#include "sc_inout.hh"
+#include "sc_inout_resolved.hh"
+#include "sc_inout_rv.hh"
+#include "sc_mutex.hh"
+#include "sc_mutex_if.hh"
+#include "sc_out.hh"
+#include "sc_out_resolved.hh"
+#include "sc_out_rv.hh"
+#include "sc_semaphore.hh"
+#include "sc_semaphore_if.hh"
+#include "sc_signal.hh"
+#include "sc_signal_in_if.hh"
+#include "sc_signal_inout_if.hh"
+#include "sc_signal_resolved.hh"
+#include "sc_signal_rv.hh"
+
+#endif //__SYSTEMC_EXT_CHANNEL__CHANNEL_HH__
diff --git a/src/systemc/ext/channel/_using.hh b/src/systemc/ext/channel/_using.hh
new file mode 100644
index 000000000..58269d565
--- /dev/null
+++ b/src/systemc/ext/channel/_using.hh
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL__USING_HH__
+#define __SYSTEMC_EXT_CHANNEL__USING_HH__
+
+#include "_channel.hh"
+
+using sc_core::sc_buffer;
+
+using sc_core::sc_in_clk;
+using sc_core::sc_clock;
+
+using sc_core::sc_event_queue;
+
+using sc_core::sc_fifo;
+
+using sc_core::sc_fifo_in;
+
+using sc_core::sc_fifo_nonblocking_in_if;
+using sc_core::sc_fifo_blocking_in_if;
+using sc_core::sc_fifo_in_if;
+
+using sc_core::sc_fifo_out;
+
+using sc_core::sc_fifo_nonblocking_out_if;
+using sc_core::sc_fifo_blocking_out_if;
+using sc_core::sc_fifo_out_if;
+
+using sc_core::sc_in;
+
+using sc_core::sc_in_resolved;
+
+using sc_core::sc_in_rv;
+
+using sc_core::sc_inout;
+
+using sc_core::sc_inout_resolved;
+
+using sc_core::sc_inout_rv;
+
+using sc_core::sc_mutex;
+
+using sc_core::sc_mutex_if;
+
+using sc_core::sc_out;
+
+using sc_core::sc_out_resolved;
+
+using sc_core::sc_out_rv;
+
+using sc_core::sc_semaphore;
+
+using sc_core::sc_semaphore_if;
+
+using sc_core::sc_signal;
+
+using sc_core::sc_signal_in_if;
+
+using sc_core::SC_ONE_WRITER;
+using sc_core::SC_MANY_WRITERS;
+using sc_core::sc_signal_write_if;
+using sc_core::sc_signal_inout_if;
+
+using sc_core::sc_signal_resolved;
+
+using sc_core::sc_signal_rv;
+
+#endif //__SYSTEMC_EXT_CHANNEL__USING_HH__
diff --git a/src/systemc/ext/channel/sc_buffer.hh b/src/systemc/ext/channel/sc_buffer.hh
new file mode 100644
index 000000000..153b60b10
--- /dev/null
+++ b/src/systemc/ext/channel/sc_buffer.hh
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_BUFFER_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_BUFFER_HH__
+
+#include "../core/sc_module.hh" // for sc_gen_unique_name
+#include "sc_signal.hh"
+#include "warn_unimpl.hh" // for warn_unimpl
+
+namespace sc_core
+{
+
+template <class T, sc_writer_policy WRITER_POLICY>
+class sc_buffer : public sc_signal<T, WRITER_POLICY>
+{
+ public:
+ sc_buffer() : sc_signal<T, WRITER_POLICY>(sc_gen_unique_name("buffer")) {}
+ explicit sc_buffer(const char *name) :
+ sc_signal<T, WRITER_POLICY>(sc_gen_unique_name(name))
+ {}
+
+ virtual void
+ write(const T&)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ sc_buffer<T, WRITER_POLICY> &
+ operator = (const T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_buffer<T, WRITER_POLICY> &
+ operator = (const sc_signal<T, WRITER_POLICY> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_buffer<T, WRITER_POLICY> &
+ operator = (const sc_buffer<T, WRITER_POLICY> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+
+ virtual const char *kind() const { return "sc_buffer"; }
+
+ protected:
+ virtual void
+ update()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ private:
+ // Disabled
+ sc_buffer(const sc_buffer<T, WRITER_POLICY> &) {}
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_BUFFER_HH__
diff --git a/src/systemc/ext/channel/sc_clock.hh b/src/systemc/ext/channel/sc_clock.hh
new file mode 100644
index 000000000..9ca160c3a
--- /dev/null
+++ b/src/systemc/ext/channel/sc_clock.hh
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_CLOCK_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_CLOCK_HH__
+
+#include "../core/sc_time.hh"
+#include "sc_signal.hh"
+
+namespace sc_core
+{
+
+template <class T>
+class sc_in;
+
+class sc_time;
+
+class sc_clock : public sc_signal<bool>
+{
+ public:
+ sc_clock();
+ explicit sc_clock(const char *name);
+
+ sc_clock(const char *name, const sc_time &period,
+ double duty_cycle=0.5, const sc_time &start_time=SC_ZERO_TIME,
+ bool posedge_first=true);
+
+ sc_clock(const char *name, double period_v, sc_time_unit period_tu,
+ double duty_cycle=0.5);
+
+ sc_clock(const char *name, double period_v, sc_time_unit period_tu,
+ double duty_cycle, double start_time_v,
+ sc_time_unit start_time_tu, bool posedge_first=true);
+
+ virtual ~sc_clock();
+
+ virtual void write(const bool &);
+
+ const sc_time &period() const;
+ double duty_cycle() const;
+ const sc_time &start_time() const;
+ bool posedge_first() const;
+
+ virtual const char *kind() const;
+
+ protected:
+ virtual void before_end_of_elaboration();
+
+ private:
+ // Disabled
+ sc_clock(const sc_clock &) : sc_interface(), sc_signal<bool>() {}
+ sc_clock &operator = (const sc_clock &) { return *this; }
+};
+
+typedef sc_in<bool> sc_in_clk;
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_CLOCK_HH__
diff --git a/src/systemc/ext/channel/sc_event_queue.hh b/src/systemc/ext/channel/sc_event_queue.hh
new file mode 100644
index 000000000..aa2f72e77
--- /dev/null
+++ b/src/systemc/ext/channel/sc_event_queue.hh
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_EVENT_QUEUE_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_EVENT_QUEUE_HH__
+
+#include "../core/sc_interface.hh"
+#include "../core/sc_module.hh" // for sc_gen_unique_name
+#include "../core/sc_module_name.hh"
+#include "../core/sc_time.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_core
+{
+
+class sc_event;
+
+class sc_event_queue_if : public virtual sc_interface
+{
+ public:
+ virtual void notify(double, sc_time_unit) = 0;
+ virtual void notify(const sc_time &) = 0;
+ virtual void cancel_all() = 0;
+};
+
+class sc_event_queue : public sc_event_queue_if, public sc_module
+{
+ public:
+ sc_event_queue(sc_module_name name=
+ sc_module_name(sc_gen_unique_name("event_queue")));
+ ~sc_event_queue();
+
+ virtual const char *kind() const;
+
+ virtual void notify(double, sc_time_unit);
+ virtual void notify(const sc_time &);
+ virtual void cancel_all();
+
+ virtual const sc_event &default_event() const;
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_EVENT_QUEUE_HH__
diff --git a/src/systemc/ext/channel/sc_fifo.hh b/src/systemc/ext/channel/sc_fifo.hh
new file mode 100644
index 000000000..668c6b8bd
--- /dev/null
+++ b/src/systemc/ext/channel/sc_fifo.hh
@@ -0,0 +1,171 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_FIFO_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_FIFO_HH__
+
+#include "../core/sc_module.hh" // for sc_gen_unique_name
+#include "../core/sc_prim.hh"
+#include "sc_fifo_in_if.hh"
+#include "sc_fifo_out_if.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_core
+{
+
+class sc_port_base;
+class sc_event;
+
+template <class T>
+class sc_fifo : public sc_fifo_in_if<T>,
+ public sc_fifo_out_if<T>,
+ public sc_prim_channel
+{
+ public:
+ explicit sc_fifo(int size=16) :
+ sc_fifo_in_if<T>(), sc_fifo_out_if<T>(),
+ sc_prim_channel(sc_gen_unique_name("fifo"))
+ {}
+ explicit sc_fifo(const char *name, int size=16) :
+ sc_fifo_in_if<T>(), sc_fifo_out_if<T>(),
+ sc_prim_channel(name)
+ {}
+ virtual ~sc_fifo() {}
+
+ virtual void
+ register_port(sc_port_base &, const char *)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ read(T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual T
+ read()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(T *)nullptr;
+ }
+ virtual bool
+ nb_read(T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ operator T()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(T *)nullptr;
+ }
+
+ virtual void
+ write(const T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual bool
+ nb_write(const T&)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ sc_fifo<T> &
+ operator = (const T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+
+ virtual const sc_event &
+ data_Written_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ virtual const sc_event &
+ data_read_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+
+ virtual int
+ num_available() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return 0;
+ }
+ virtual int
+ num_free() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return 0;
+ }
+
+ virtual void
+ print(std::ostream & =std::cout) const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual void
+ dump(std::ostream & =std::cout) const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual const char *kind() const { return "sc_fifo"; }
+
+ protected:
+ virtual void
+ update()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ private:
+ // Disabled
+ sc_fifo(const sc_fifo<T> &) :
+ sc_fifo_in_if<T>(), sc_fifo_in_if<T>(), sc_prim_channel()
+ {}
+ sc_fifo &operator = (const sc_fifo<T> &) { return *this; }
+};
+
+template <class T>
+inline std::ostream &
+operator << (std::ostream &os, const sc_fifo<T> &)
+{
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return os;
+}
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_FIFO_HH__
diff --git a/src/systemc/ext/channel/sc_fifo_in.hh b/src/systemc/ext/channel/sc_fifo_in.hh
new file mode 100644
index 000000000..7f593c16f
--- /dev/null
+++ b/src/systemc/ext/channel/sc_fifo_in.hh
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_FIFO_IN_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_FIFO_IN_HH__
+
+#include "../core/sc_port.hh"
+#include "sc_fifo_in_if.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_core
+{
+
+class sc_event;
+class sc_event_finder;
+
+template <class T>
+class sc_fifo_in : public sc_port<sc_fifo_in_if<T>, 0>
+{
+ public:
+ sc_fifo_in() : sc_port<sc_fifo_in_if<T>, 0>() {}
+ explicit sc_fifo_in(const char *name) : sc_port<sc_fifo_in_if<T>, 0>(name)
+ {}
+ virtual ~sc_fifo_in() {}
+
+ void
+ read(T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ T
+ read()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(T *)nullptr;
+ }
+ bool
+ nb_read(T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ const sc_event &
+ data_written_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ sc_event_finder &
+ data_written() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+ int
+ num_available() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return 0;
+ }
+ virtual const char *kind() const { return "sc_fifo_in"; }
+
+ private:
+ // Disabled
+ sc_fifo_in(const sc_fifo_in<T> &) : sc_port<sc_fifo_in_if<T>, 0>() {}
+ sc_fifo_in<T> &operator = (const sc_fifo_in<T> &) { return *this; }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_FIFO_IN_HH__
diff --git a/src/systemc/ext/channel/sc_fifo_in_if.hh b/src/systemc/ext/channel/sc_fifo_in_if.hh
new file mode 100644
index 000000000..a6ac4f544
--- /dev/null
+++ b/src/systemc/ext/channel/sc_fifo_in_if.hh
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_FIFO_IN_IF_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_FIFO_IN_IF_HH__
+
+#include "../core/sc_interface.hh"
+
+namespace sc_core
+{
+
+class sc_event;
+
+template <class T>
+class sc_fifo_nonblocking_in_if : virtual public sc_interface
+{
+ public:
+ virtual bool ab_read(T &) = 0;
+ virtual const sc_event &data_written_event() const = 0;
+};
+
+template <class T>
+class sc_fifo_blocking_in_if : virtual public sc_interface
+{
+ public:
+ virtual void read(T &) = 0;
+ virtual T read() = 0;
+};
+
+template <class T>
+class sc_fifo_in_if : public sc_fifo_nonblocking_in_if<T>,
+ public sc_fifo_blocking_in_if<T>
+{
+ public:
+ virtual int num_avaialble() const = 0;
+
+ protected:
+ sc_fifo_in_if() : sc_interface() {}
+
+ private:
+ // Disabled
+ sc_fifo_in_if(const sc_fifo_in_if<T> &);
+ sc_fifo_in_if<T> &operator = (const sc_fifo_in_if<T> &) { return *this; }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_FIFO_IN_IF_HH__
diff --git a/src/systemc/ext/channel/sc_fifo_out.hh b/src/systemc/ext/channel/sc_fifo_out.hh
new file mode 100644
index 000000000..4beb15d37
--- /dev/null
+++ b/src/systemc/ext/channel/sc_fifo_out.hh
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_FIFO_OUT_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_FIFO_OUT_HH__
+
+#include "../core/sc_port.hh"
+#include "sc_fifo_out_if.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_core
+{
+
+class sc_event;
+class sc_event_finder;
+
+template <class T>
+class sc_fifo_out : public sc_port<sc_fifo_out_if<T>, 0>
+{
+ public:
+ sc_fifo_out() : sc_port<sc_fifo_out_if<T>, 0>() {}
+ explicit sc_fifo_out(const char *name) :
+ sc_port<sc_fifo_out_if<T>, 0>(name)
+ {}
+ virtual ~sc_fifo_out() {}
+
+ void
+ write(const T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ bool
+ nb_write(const T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ const sc_event &
+ data_read_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ sc_event_finder &
+ data_read() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+ int
+ num_free() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return 0;
+ }
+ virtual const char *kind() const { return "sc_fifo_out"; }
+
+ private:
+ // Disabled
+ sc_fifo_out(const sc_fifo_out<T> &) : sc_port<sc_fifo_out_if<T>, 0>() {}
+ sc_fifo_out<T> &operator = (const sc_fifo_out<T> &) { return *this; }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_FIFO_OUT_HH__
diff --git a/src/systemc/ext/channel/sc_fifo_out_if.hh b/src/systemc/ext/channel/sc_fifo_out_if.hh
new file mode 100644
index 000000000..ebc5d5cfd
--- /dev/null
+++ b/src/systemc/ext/channel/sc_fifo_out_if.hh
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_FIFO_OUT_IF_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_FIFO_OUT_IF_HH__
+
+#include "../core/sc_interface.hh"
+
+namespace sc_core
+{
+
+class sc_event;
+
+template <class T>
+class sc_fifo_nonblocking_out_if : virtual public sc_interface
+{
+ public:
+ virtual bool ab_write(const T &) = 0;
+ virtual const sc_event &data_read_event() const = 0;
+};
+
+template <class T>
+class sc_fifo_blocking_out_if : virtual public sc_interface
+{
+ public:
+ virtual void write(const T &) = 0;
+};
+
+template <class T>
+class sc_fifo_out_if : public sc_fifo_nonblocking_out_if<T>,
+ public sc_fifo_blocking_out_if<T>
+{
+ public:
+ virtual int num_free() const = 0;
+
+ protected:
+ sc_fifo_out_if() : sc_interface(), sc_fifo_nonblocking_out_if<T>(),
+ sc_fifo_blocking_out_if<T>()
+ {}
+
+ private:
+ sc_fifo_out_if(const sc_fifo_out_if<T> &) : sc_interface(),
+ sc_fifo_nonblocking_out_if<T>(), sc_fifo_blocking_out_if<T>()
+ {}
+ sc_fifo_out_if<T> &operator = (const sc_fifo_out_if<T> &) { return *this; }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_FIFO_OUT_IF_HH__
diff --git a/src/systemc/ext/channel/sc_in.hh b/src/systemc/ext/channel/sc_in.hh
new file mode 100644
index 000000000..a283d0db3
--- /dev/null
+++ b/src/systemc/ext/channel/sc_in.hh
@@ -0,0 +1,433 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_IN_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_IN_HH__
+
+#include <string>
+
+#include "../core/sc_port.hh"
+#include "sc_signal_in_if.hh"
+#include "sc_signal_inout_if.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_core
+{
+
+class sc_event;
+class sc_event_finder;
+class sc_trace_file;
+
+template <class T>
+class sc_in : public sc_port<sc_signal_in_if<T>, 1>
+{
+ public:
+ sc_in() : sc_port<sc_signal_in_if<T>, 1>() {}
+ explicit sc_in(const char *name) : sc_port<sc_signal_in_if<T>, 1>(name) {}
+ virtual ~sc_in() {}
+
+ virtual void
+ bind(const sc_signal_in_if<T> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ operator () (const sc_signal_in_if<T> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ bind(sc_port<sc_signal_in_if<T>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ operator () (sc_port<sc_signal_in_if<T>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ bind(sc_port<sc_signal_inout_if<T>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ operator () (sc_port<sc_signal_inout_if<T>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ end_of_elaboration()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ const T &
+ read() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const T *)nullptr;
+ }
+ operator const T& () const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const T *)nullptr;
+ }
+
+ const sc_event &
+ default_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ const sc_event &
+ value_changed_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ bool
+ event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ sc_event_finder &
+ value_changed() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+
+ virtual const char *kind() const { return "sc_in"; }
+
+ private:
+ // Disabled
+ sc_in(const sc_in<T> &) : sc_port<sc_signal_in_if<T>, 1>() {}
+ sc_in<T> &operator = (const sc_in<T> &) { return *this; }
+};
+
+template <class T>
+inline void
+sc_trace(sc_trace_file *, const sc_in<T> &, const std::string &)
+{
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+}
+
+template <>
+class sc_in<bool> : public sc_port<sc_signal_in_if<bool>, 1>
+{
+ public:
+ sc_in() : sc_port<sc_signal_in_if<bool>, 1>() {}
+ explicit sc_in(const char *name) :
+ sc_port<sc_signal_in_if<bool>, 1>(name) {}
+ virtual ~sc_in() {}
+
+ virtual void
+ bind(const sc_signal_in_if<bool> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ operator () (const sc_signal_in_if<bool> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ bind(sc_port<sc_signal_in_if<bool>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ operator () (sc_port<sc_signal_in_if<bool>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ bind(sc_port<sc_signal_inout_if<bool>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ operator () (sc_port<sc_signal_inout_if<bool>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ end_of_elaboration()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ const bool &
+ read() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const bool *)nullptr;
+ }
+ operator const bool& () const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const bool *)nullptr;
+ }
+
+ const sc_event &
+ default_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ const sc_event &
+ value_changed_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ const sc_event &
+ posedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ const sc_event &
+ negedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+
+ bool
+ event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ bool
+ posedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ bool
+ negedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+
+ sc_event_finder &
+ value_changed() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+ sc_event_finder &
+ pos() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+ sc_event_finder &
+ neg() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+
+ virtual const char *kind() const { return "sc_in"; }
+
+ private:
+ // Disabled
+ sc_in(const sc_in<bool> &) : sc_port<sc_signal_in_if<bool>, 1>() {}
+ sc_in<bool> &operator = (const sc_in<bool> &) { return *this; }
+};
+
+template <>
+inline void
+sc_trace<bool>(sc_trace_file *, const sc_in<bool> &, const std::string &)
+{
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+}
+
+template <>
+class sc_in<sc_dt::sc_logic> :
+ public sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>
+{
+ public:
+ sc_in() : sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>() {}
+ explicit sc_in(const char *name) :
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name)
+ {}
+ virtual ~sc_in() {}
+
+ virtual void
+ bind(const sc_signal_in_if<sc_dt::sc_logic> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ operator () (const sc_signal_in_if<sc_dt::sc_logic> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ bind(sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ operator () (sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ bind(sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ operator () (sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ end_of_elaboration()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ const sc_dt::sc_logic &
+ read() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_dt::sc_logic *)nullptr;
+ }
+ operator const sc_dt::sc_logic& () const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_dt::sc_logic *)nullptr;
+ }
+
+ const sc_event &
+ default_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ const sc_event &
+ value_changed_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ const sc_event &
+ posedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+ const sc_event &
+ negedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_event *)nullptr;
+ }
+
+ bool
+ event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ bool
+ posedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ bool
+ negedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+
+ sc_event_finder &
+ value_changed() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+ sc_event_finder &
+ pos() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+ sc_event_finder &
+ neg() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+
+ virtual const char *kind() const { return "sc_in"; }
+
+ private:
+ // Disabled
+ sc_in(const sc_in<sc_dt::sc_logic> &) :
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>()
+ {}
+ sc_in<sc_dt::sc_logic> &
+ operator = (const sc_in<sc_dt::sc_logic> &)
+ {
+ return *this;
+ }
+};
+
+template <>
+inline void
+sc_trace<sc_dt::sc_logic>(
+ sc_trace_file *, const sc_in<sc_dt::sc_logic> &, const std::string &)
+{
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+}
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_IN_HH__
diff --git a/src/systemc/ext/channel/sc_in_resolved.hh b/src/systemc/ext/channel/sc_in_resolved.hh
new file mode 100644
index 000000000..cfc8f4763
--- /dev/null
+++ b/src/systemc/ext/channel/sc_in_resolved.hh
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_IN_RESOLVED_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_IN_RESOLVED_HH__
+
+#include "sc_in.hh"
+
+namespace
+{
+
+class sc_logic;
+
+}
+
+namespace sc_core
+{
+
+class sc_in_resolved : public sc_in<sc_dt::sc_logic>
+{
+ public:
+ sc_in_resolved();
+ explicit sc_in_resolved(const char *name);
+ virtual ~sc_in_resolved();
+
+ virtual void end_of_elaboration();
+
+ virtual const char *kind() const;
+
+ private:
+ // Disabled
+ sc_in_resolved(const sc_in_resolved &) : sc_in<sc_dt::sc_logic>() {}
+ sc_in_resolved &
+ operator = (const sc_in_resolved &)
+ {
+ return *this;
+ }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_IN_RESOLVED_HH__
diff --git a/src/systemc/ext/channel/sc_in_rv.hh b/src/systemc/ext/channel/sc_in_rv.hh
new file mode 100644
index 000000000..eca2c0c7e
--- /dev/null
+++ b/src/systemc/ext/channel/sc_in_rv.hh
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_IN_RV_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_IN_RV_HH__
+
+#include "sc_in.hh"
+
+namespace sc_dt
+{
+
+template <int W>
+class sc_lv;
+
+} // namespace sc_dt
+
+namespace sc_core
+{
+
+template <int W>
+class sc_in_rv : public sc_in<sc_dt::sc_lv<W>>
+{
+ public:
+ sc_in_rv() : sc_in<sc_dt::sc_lv<W>>() {}
+ explicit sc_in_rv(const char *name) : sc_in<sc_dt::sc_lv<W>>(name) {}
+ virtual ~sc_in_rv() {};
+
+ virtual void end_of_elaboration() {}
+
+ virtual const char *kind() const { return "sc_in_rv"; }
+
+ private:
+ // Disabled
+ sc_in_rv(const sc_in_rv<W> &) : sc_in<sc_dt::sc_lv<W>>() {}
+ sc_in_rv<W> &operator = (const sc_in_rv<W> &) { *this; }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_IN_RV_HH__
diff --git a/src/systemc/ext/channel/sc_inout.hh b/src/systemc/ext/channel/sc_inout.hh
new file mode 100644
index 000000000..1802b2e8d
--- /dev/null
+++ b/src/systemc/ext/channel/sc_inout.hh
@@ -0,0 +1,466 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_INOUT_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_INOUT_HH__
+
+#include <string>
+
+#include "../core/sc_port.hh"
+#include "sc_signal_inout_if.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_dt
+{
+
+class sc_logic;
+
+} // namespace sc_dt
+
+namespace sc_core
+{
+
+class sc_event;
+class sc_event_finder;
+class sc_trace_file;
+
+template <class T>
+class sc_inout : public sc_port<sc_signal_inout_if<T>, 1>
+{
+ public:
+ sc_inout() : sc_port<sc_signal_inout_if<T>, 1>() {}
+ explicit sc_inout(const char *name) :
+ sc_port<sc_signal_inout_if<T>, 1>(name)
+ {}
+ virtual ~sc_inout() {}
+
+ void
+ initialize(const T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ initialize(const sc_signal_in_if<T> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void end_of_elaboration() {}
+
+ const T &
+ read() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const T *)nullptr;
+ }
+ operator const T& () const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const T *)nullptr;
+ }
+
+ void
+ write(const T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ sc_inout<T> &
+ operator = (const T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<T> *)nullptr;
+ }
+ sc_inout<T> &
+ operator = (const sc_signal_in_if<T> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<T> *)nullptr;
+ }
+ sc_inout<T> &
+ operator = (const sc_port<sc_signal_in_if<T>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<T> *)nullptr;
+ }
+ sc_inout<T> &
+ operator = (const sc_port<sc_signal_inout_if<T>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<T> *)nullptr;
+ }
+ sc_inout<T> &
+ operator = (const sc_inout<T> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<T> *)nullptr;
+ }
+
+ const sc_event &
+ default_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ const sc_event &
+ value_changed_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ bool
+ event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ sc_event_finder &
+ value_changed() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+
+ virtual const char *kind() const { return "sc_inout"; }
+
+ private:
+ // Disabled
+ sc_inout(const sc_inout<T> &) : sc_port<sc_signal_inout_if<T>, 1>() {}
+};
+
+template <class T>
+inline void
+sc_trace(sc_trace_file *, const sc_inout<T> &, const std::string &)
+{
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+}
+
+template <>
+class sc_inout<bool> : public sc_port<sc_signal_inout_if<bool>, 1>
+{
+ public:
+ sc_inout() : sc_port<sc_signal_inout_if<bool>, 1>() {}
+ explicit sc_inout(const char *name) :
+ sc_port<sc_signal_inout_if<bool>, 1>(name)
+ {}
+ virtual ~sc_inout() {}
+
+ void
+ initialize(const bool &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ initialize(const sc_signal_in_if<bool> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void end_of_elaboration() {}
+
+ const bool &
+ read() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(bool *)nullptr;
+ }
+ operator const bool& () const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(bool *)nullptr;
+ }
+
+ void
+ write(const bool &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ sc_inout<bool> &
+ operator = (const bool &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<bool> *)nullptr;
+ }
+ sc_inout<bool> &
+ operator = (const sc_signal_in_if<bool> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<bool> *)nullptr;
+ }
+ sc_inout<bool> &
+ operator = (const sc_port<sc_signal_in_if<bool>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<bool> *)nullptr;
+ }
+ sc_inout<bool> &
+ operator = (const sc_port<sc_signal_inout_if<bool>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<bool> *)nullptr;
+ }
+ sc_inout<bool> &
+ operator = (const sc_inout<bool> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<bool> *)nullptr;
+ }
+
+ const sc_event &
+ default_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ const sc_event &
+ value_changed_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ const sc_event &
+ posedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ const sc_event &
+ negedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+
+ bool
+ event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ bool
+ posedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ bool
+ negedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+
+ sc_event_finder &
+ value_changed() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+ sc_event_finder &
+ pos() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+ sc_event_finder &
+ neg() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+
+ virtual const char *kind() const { return "sc_inout"; }
+
+ private:
+ // Disabled
+ sc_inout(const sc_inout<bool> &) :
+ sc_port<sc_signal_inout_if<bool>, 1>() {}
+};
+
+template <>
+inline void sc_trace<bool>(
+ sc_trace_file *, const sc_inout<bool> &, const std::string &)
+{
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+}
+
+template <>
+class sc_inout<sc_dt::sc_logic> :
+ public sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1>
+{
+ public:
+ sc_inout() : sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1>() {}
+ explicit sc_inout(const char *name) :
+ sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1>(name)
+ {}
+ virtual ~sc_inout() {}
+
+ void
+ initialize(const sc_dt::sc_logic &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ void
+ initialize(const sc_signal_in_if<sc_dt::sc_logic> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void end_of_elaboration() {}
+
+ const sc_dt::sc_logic &
+ read() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_dt::sc_logic *)nullptr;
+ }
+ operator const sc_dt::sc_logic& () const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_dt::sc_logic *)nullptr;
+ }
+
+ void
+ write(const sc_dt::sc_logic &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ sc_inout<sc_dt::sc_logic> &
+ operator = (const sc_dt::sc_logic &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<sc_dt::sc_logic> *)nullptr;
+ }
+ sc_inout<sc_dt::sc_logic> &
+ operator = (const sc_signal_in_if<sc_dt::sc_logic> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<sc_dt::sc_logic> *)nullptr;
+ }
+ sc_inout<sc_dt::sc_logic> &
+ operator = (const sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<sc_dt::sc_logic> *)nullptr;
+ }
+ sc_inout<sc_dt::sc_logic> &
+ operator = (const sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<sc_dt::sc_logic> *)nullptr;
+ }
+ sc_inout<sc_dt::sc_logic> &
+ operator = (const sc_inout<sc_dt::sc_logic> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_inout<sc_dt::sc_logic> *)nullptr;
+ }
+
+ const sc_event &
+ default_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ const sc_event &
+ value_changed_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ const sc_event &
+ posedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ const sc_event &
+ negedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+
+ bool
+ event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ bool
+ posedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ bool
+ negedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+
+ sc_event_finder &
+ value_changed() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+ sc_event_finder &
+ pos() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+ sc_event_finder &
+ neg() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event_finder *)nullptr;
+ }
+
+ virtual const char *kind() const { return "sc_inout"; }
+
+ private:
+ // Disabled
+ sc_inout(const sc_inout<sc_dt::sc_logic> &) :
+ sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1>()
+ {}
+};
+
+template <>
+inline void
+sc_trace<sc_dt::sc_logic>(sc_trace_file *, const sc_inout<sc_dt::sc_logic> &,
+ const std::string &)
+{
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+}
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_INOUT_HH__
diff --git a/src/systemc/ext/channel/sc_inout_resolved.hh b/src/systemc/ext/channel/sc_inout_resolved.hh
new file mode 100644
index 000000000..3fea32f75
--- /dev/null
+++ b/src/systemc/ext/channel/sc_inout_resolved.hh
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_INOUT_RESOLVED_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_INOUT_RESOLVED_HH__
+
+#include "sc_inout.hh"
+#include "sc_signal_in_if.hh"
+#include "sc_signal_inout_if.hh"
+#include "warn_unimpl.hh"
+
+namespace
+{
+
+class sc_logic;
+
+}
+
+namespace sc_core
+{
+
+class sc_inout_resolved : public sc_inout<sc_dt::sc_logic>
+{
+ public:
+ sc_inout_resolved();
+ explicit sc_inout_resolved(const char *name);
+ virtual ~sc_inout_resolved();
+
+ virtual void end_of_elaboration();
+
+ sc_inout_resolved &operator = (const sc_dt::sc_logic &);
+ sc_inout_resolved &operator = (const sc_signal_in_if<sc_dt::sc_logic> &);
+ sc_inout_resolved &operator = (
+ const sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &);
+ sc_inout_resolved &operator = (
+ const sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &);
+ sc_inout_resolved &operator = (const sc_inout_resolved &);
+
+ virtual const char *kind() const;
+
+ private:
+ // Disabled
+ sc_inout_resolved(const sc_inout_resolved &) :
+ sc_inout<sc_dt::sc_logic>() {}
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_INOUT_RESOLVED_HH__
diff --git a/src/systemc/ext/channel/sc_inout_rv.hh b/src/systemc/ext/channel/sc_inout_rv.hh
new file mode 100644
index 000000000..f231d9311
--- /dev/null
+++ b/src/systemc/ext/channel/sc_inout_rv.hh
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_INOUT_RV_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_INOUT_RV_HH__
+
+#include "../core/sc_port.hh"
+#include "sc_signal_in_if.hh"
+#include "sc_signal_inout_if.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_dt
+{
+
+template <int W>
+class sc_lv;
+
+} // namespace sc_dt
+
+namespace sc_core
+{
+
+template <int W>
+class sc_inout_rv : public sc_inout<sc_dt::sc_lv<W>>
+{
+ public:
+ sc_inout_rv() : sc_inout<sc_dt::sc_lv<W>>() {}
+ explicit sc_inout_rv(const char *name) : sc_inout<sc_dt::sc_lv<W>>(name) {}
+ virtual ~sc_inout_rv() {}
+
+ sc_inout_rv<W> &
+ operator = (const sc_dt::sc_lv<W> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_inout_rv<W> &
+ operator = (const sc_signal_in_if<sc_dt::sc_lv<W>> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_inout_rv<W> &
+ operator = (const sc_port<sc_signal_in_if<sc_dt::sc_lv<W>>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_inout_rv<W> &
+ operator = (const sc_port<sc_signal_inout_if<sc_dt::sc_lv<W>>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_inout_rv<W> &
+ operator = (const sc_inout_rv<W> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+
+ virtual void end_of_elaboration() {};
+
+ virtual const char *kind() const { return "sc_inout_rv"; }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_INOUT_RV_HH__
diff --git a/src/systemc/ext/channel/sc_mutex.hh b/src/systemc/ext/channel/sc_mutex.hh
new file mode 100644
index 000000000..af35bdd65
--- /dev/null
+++ b/src/systemc/ext/channel/sc_mutex.hh
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_MUTEX_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_MUTEX_HH__
+
+#include "../core/sc_object.hh"
+#include "sc_mutex_if.hh"
+
+namespace sc_core
+{
+
+class sc_mutex : public sc_mutex_if, public sc_object
+{
+ public:
+ sc_mutex();
+ explicit sc_mutex(const char *name);
+
+ virtual int lock();
+ virtual int trylock();
+ virtual int unlock();
+
+ virtual const char *kind() const;
+
+ private:
+ // Disabled
+ sc_mutex(const sc_mutex &) : sc_interface(), sc_mutex_if(), sc_object() {}
+ sc_mutex &operator = (const sc_mutex &) { return *this; }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_MUTEX_HH__
diff --git a/src/systemc/ext/channel/sc_mutex_if.hh b/src/systemc/ext/channel/sc_mutex_if.hh
new file mode 100644
index 000000000..97044edcf
--- /dev/null
+++ b/src/systemc/ext/channel/sc_mutex_if.hh
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_MUTEX_IF_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_MUTEX_IF_HH__
+
+#include "../core/sc_interface.hh"
+
+namespace sc_core
+{
+
+class sc_mutex_if : virtual public sc_interface
+{
+ public:
+ virtual int lock() = 0;
+ virtual int trylock() = 0;
+ virtual int unlock() = 0;
+
+ protected:
+ sc_mutex_if() : sc_interface() {}
+
+ private:
+ // Disabled
+ sc_mutex_if(const sc_mutex_if &) : sc_interface() {}
+ sc_mutex_if &operator = (const sc_mutex_if &) { return *this; }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_MUTEX_IF_HH__
diff --git a/src/systemc/ext/channel/sc_out.hh b/src/systemc/ext/channel/sc_out.hh
new file mode 100644
index 000000000..e55a821d4
--- /dev/null
+++ b/src/systemc/ext/channel/sc_out.hh
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_OUT_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_OUT_HH__
+
+#include "../core/sc_port.hh"
+#include "sc_inout.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_core
+{
+
+template <class T>
+class sc_out : public sc_inout<T>
+{
+ public:
+ sc_out() : sc_inout<T>() {}
+ explicit sc_out(const char *name) : sc_inout<T>(name) {}
+ virtual ~sc_out() {}
+
+ sc_out<T> &
+ operator = (const T &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_out<T> *)nullptr;
+ }
+ sc_out<T> &
+ operator = (const sc_signal_in_if<T> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_out<T> *)nullptr;
+ }
+ sc_out<T> &
+ operator = (const sc_port<sc_signal_in_if<T>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_out<T> *)nullptr;
+ }
+ sc_out<T> &
+ operator = (const sc_port<sc_signal_inout_if<T>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_out<T> *)nullptr;
+ }
+ sc_out<T> &
+ operator = (const sc_out<T> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_out<T> *)nullptr;
+ }
+
+ virtual const char *kind() const { return "sc_out"; }
+
+ private:
+ // Disabled
+ sc_out(const sc_out<T> &) : sc_inout<T>() {}
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_OUT_HH__
diff --git a/src/systemc/ext/channel/sc_out_resolved.hh b/src/systemc/ext/channel/sc_out_resolved.hh
new file mode 100644
index 000000000..8f4aa52e4
--- /dev/null
+++ b/src/systemc/ext/channel/sc_out_resolved.hh
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_OUT_RESOLVED_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_OUT_RESOLVED_HH__
+
+#include "sc_out.hh"
+#include "sc_signal_in_if.hh"
+#include "sc_signal_inout_if.hh"
+#include "warn_unimpl.hh"
+
+namespace
+{
+
+class sc_logic;
+
+}
+
+namespace sc_core
+{
+
+class sc_out_resolved : public sc_out<sc_dt::sc_logic>
+{
+ public:
+ sc_out_resolved();
+ explicit sc_out_resolved(const char *name);
+ virtual ~sc_out_resolved();
+
+ sc_out_resolved &operator = (const sc_dt::sc_logic &);
+ sc_out_resolved &operator = (const sc_signal_in_if<sc_dt::sc_logic> &);
+ sc_out_resolved &operator = (
+ const sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &);
+ sc_out_resolved &operator = (
+ const sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &);
+ sc_out_resolved &operator = (const sc_out_resolved &);
+
+ virtual const char *kind() const;
+
+ private:
+ // Disabled
+ sc_out_resolved(const sc_out_resolved &) : sc_out<sc_dt::sc_logic>() {}
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_OUT_RESOLVED_HH__
diff --git a/src/systemc/ext/channel/sc_out_rv.hh b/src/systemc/ext/channel/sc_out_rv.hh
new file mode 100644
index 000000000..af5b05526
--- /dev/null
+++ b/src/systemc/ext/channel/sc_out_rv.hh
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_OUT_RV_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_OUT_RV_HH__
+
+#include "../core/sc_port.hh"
+#include "sc_inout_rv.hh"
+#include "sc_signal_in_if.hh"
+#include "sc_signal_inout_if.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_dt
+{
+
+template <int W>
+class sc_lv;
+
+} // namespace sc_dt
+
+namespace sc_core
+{
+
+template <int W>
+class sc_out_rv : public sc_inout_rv<W>
+{
+ public:
+ sc_out_rv() : sc_inout_rv<W>() {}
+ explicit sc_out_rv(const char *name) : sc_inout_rv<W>(name) {}
+ virtual ~sc_out_rv() {};
+
+ sc_out_rv<W> &
+ operator = (const sc_dt::sc_lv<W> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_out_rv<W> &
+ operator = (const sc_signal_in_if<sc_dt::sc_lv<W>> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_out_rv<W> &
+ operator = (const sc_port<sc_signal_in_if<sc_dt::sc_lv<W>>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_out_rv<W> &
+ operator = (const sc_port<sc_signal_inout_if<sc_dt::sc_lv<W>>, 1> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_out_rv<W> &
+ operator = (const sc_out_rv<W> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+
+ virtual const char *kind() const { return "sc_out_rv"; }
+
+ private:
+ // Disabled
+ sc_out_rv(const sc_out_rv<W> &) : sc_inout_rv<W>() {}
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_OUT_RV_HH__
diff --git a/src/systemc/ext/channel/sc_semaphore.hh b/src/systemc/ext/channel/sc_semaphore.hh
new file mode 100644
index 000000000..fb1e82547
--- /dev/null
+++ b/src/systemc/ext/channel/sc_semaphore.hh
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_SEMAPHORE_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_SEMAPHORE_HH__
+
+#include "../core/sc_object.hh"
+#include "sc_semaphore_if.hh"
+
+namespace sc_core
+{
+
+class sc_semaphore : public sc_semaphore_if, public sc_object
+{
+ public:
+ explicit sc_semaphore(int);
+ sc_semaphore(const char *name, int);
+
+ virtual int wait();
+ virtual int trywait();
+ virtual int post();
+ virtual int get_value() const;
+
+ virtual const char *kind() const;
+
+ private:
+ // Disabled
+ sc_semaphore(const sc_semaphore &) :
+ sc_interface(), sc_semaphore_if(), sc_object()
+ {}
+
+ sc_semaphore &operator = (const sc_semaphore &) { return *this; }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_SEMAPHORE_HH__
diff --git a/src/systemc/ext/channel/sc_semaphore_if.hh b/src/systemc/ext/channel/sc_semaphore_if.hh
new file mode 100644
index 000000000..2beb9b76b
--- /dev/null
+++ b/src/systemc/ext/channel/sc_semaphore_if.hh
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_SEMAPHORE_IF_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_SEMAPHORE_IF_HH__
+
+#include "../core/sc_interface.hh"
+
+namespace sc_core
+{
+
+class sc_semaphore_if : virtual public sc_interface
+{
+ public:
+ virtual int wait() = 0;
+ virtual int trywait() = 0;
+ virtual int post() = 0;
+ virtual int get_value() const = 0;
+
+ protected:
+ sc_semaphore_if() : sc_interface() {}
+
+ private:
+ // Disabled
+ sc_semaphore_if(const sc_semaphore_if &) : sc_interface() {}
+ sc_semaphore_if &operator = (const sc_semaphore_if &) { return *this; }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_SEMAPHORE_IF_HH__
diff --git a/src/systemc/ext/channel/sc_signal.hh b/src/systemc/ext/channel/sc_signal.hh
new file mode 100644
index 000000000..e1ed619bf
--- /dev/null
+++ b/src/systemc/ext/channel/sc_signal.hh
@@ -0,0 +1,414 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__
+
+#include <iostream>
+
+#include "../core/sc_module.hh" // for sc_gen_unique_name
+#include "../core/sc_prim.hh"
+#include "sc_signal_inout_if.hh"
+#include "warn_unimpl.hh" // for warn_unimpl
+
+namespace sc_core
+{
+
+class sc_port_base;
+
+template <class T, sc_writer_policy WRITER_POLICY=SC_ONE_WRITER>
+class sc_signal : public sc_signal_inout_if<T>,
+ public sc_prim_channel
+{
+ public:
+ sc_signal() : sc_signal_inout_if<T>(),
+ sc_prim_channel(sc_gen_unique_name("signal"))
+ {}
+ explicit sc_signal(const char *name) : sc_signal_inout_if<T>(),
+ sc_prim_channel(name)
+ {}
+ virtual ~sc_signal() {}
+
+ virtual void
+ register_port(sc_port_base &, const char *)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual const T&
+ read() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const T *)nullptr;
+ }
+ operator const T&() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const T *)nullptr;
+ }
+
+ virtual sc_writer_policy
+ get_writer_policy() const
+ {
+ return WRITER_POLICY;
+ }
+ virtual void
+ write(const T&)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ sc_signal<T, WRITER_POLICY> &
+ operator = (const T&)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_signal<T, WRITER_POLICY> &
+ operator = (const sc_signal<T, WRITER_POLICY> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+
+ virtual const sc_event &
+ default_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ virtual const sc_event &
+ value_changed_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ virtual bool
+ event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+
+ virtual void
+ print(std::ostream & =std::cout) const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual void
+ dump(std::ostream & =std::cout) const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual const char *kind() const { return "sc_signal"; }
+
+ protected:
+ virtual void
+ update()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ private:
+ // Disabled
+ sc_signal(const sc_signal<T, WRITER_POLICY> &) :
+ sc_signal_inout_if<T>(), sc_prim_channel("")
+ {}
+};
+
+template <class T, sc_writer_policy WRITER_POLICY>
+inline std::ostream &
+operator << (std::ostream &os, const sc_signal<T, WRITER_POLICY> &)
+{
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return os;
+}
+
+template <sc_writer_policy WRITER_POLICY>
+class sc_signal<bool, WRITER_POLICY> :
+ public sc_signal_inout_if<bool>, public sc_prim_channel
+{
+ public:
+ sc_signal()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ explicit sc_signal(const char *)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual ~sc_signal()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ register_port(sc_port_base &, const char *)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual const bool &
+ read() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const bool *)nullptr;
+ }
+ operator const bool &() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const bool *)nullptr;
+ }
+
+ virtual sc_writer_policy
+ get_writer_policy() const
+ {
+ return WRITER_POLICY;
+ }
+ virtual void
+ write(const bool &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ sc_signal<bool, WRITER_POLICY> &
+ operator = (const bool &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_signal<bool, WRITER_POLICY> &
+ operator = (const sc_signal<bool, WRITER_POLICY> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+
+ virtual const sc_event &
+ default_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+
+ virtual const sc_event &
+ value_changed_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ virtual const sc_event &
+ posedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ virtual const sc_event &
+ negedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+
+ virtual bool
+ event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ virtual bool
+ posedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ virtual bool
+ negedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+
+ virtual void
+ print(std::ostream & =std::cout) const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual void
+ dump(std::ostream & =std::cout) const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual const char *kind() const { return "sc_signal"; }
+
+ protected:
+ virtual void
+ update()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ private:
+ // Disabled
+ sc_signal(const sc_signal<bool, WRITER_POLICY> &) :
+ sc_signal_inout_if<bool>(), sc_prim_channel("")
+ {}
+};
+
+template <sc_writer_policy WRITER_POLICY>
+class sc_signal<sc_dt::sc_logic, WRITER_POLICY> :
+ public sc_signal_inout_if<sc_dt::sc_logic>, public sc_prim_channel
+{
+ public:
+ sc_signal()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ explicit sc_signal(const char *)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual ~sc_signal()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ register_port(sc_port_base &, const char *)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual const sc_dt::sc_logic &
+ read() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_dt::sc_logic *)nullptr;
+ }
+ operator const sc_dt::sc_logic &() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(const sc_dt::sc_logic *)nullptr;
+ }
+
+ virtual sc_writer_policy
+ get_writer_policy() const
+ {
+ return WRITER_POLICY;
+ }
+ virtual void
+ write(const sc_dt::sc_logic &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ sc_signal<sc_dt::sc_logic, WRITER_POLICY> &
+ operator = (const sc_dt::sc_logic &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_signal<sc_dt::sc_logic, WRITER_POLICY> &
+ operator = (const sc_signal<sc_dt::sc_logic, WRITER_POLICY> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+
+ virtual const sc_event &
+ default_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+
+ virtual const sc_event &
+ value_changed_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ virtual const sc_event &
+ posedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+ virtual const sc_event &
+ negedge_event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *(sc_event *)nullptr;
+ }
+
+ virtual bool
+ event() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ virtual bool
+ posedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+ virtual bool
+ negedge() const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return false;
+ }
+
+ virtual void
+ print(std::ostream & =std::cout) const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual void
+ dump(std::ostream & =std::cout) const
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ virtual const char *kind() const { return "sc_signal"; }
+
+ protected:
+ virtual void
+ update()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ private:
+ // Disabled
+ sc_signal(const sc_signal<sc_dt::sc_logic, WRITER_POLICY> &) :
+ sc_signal_inout_if<sc_dt::sc_logic>(), sc_prim_channel("")
+ {}
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__
diff --git a/src/systemc/ext/channel/sc_signal_in_if.hh b/src/systemc/ext/channel/sc_signal_in_if.hh
new file mode 100644
index 000000000..6fac35860
--- /dev/null
+++ b/src/systemc/ext/channel/sc_signal_in_if.hh
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_IN_IF_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_IN_IF_HH__
+
+#include "../core/sc_interface.hh"
+
+namespace sc_dt
+{
+
+class sc_logic;
+
+};
+
+namespace sc_core
+{
+
+class sc_event;
+
+template <class T>
+class sc_signal_in_if : virtual public sc_interface
+{
+ public:
+ virtual const T &read() const = 0;
+ virtual const sc_event &value_changed_event() const = 0;
+ virtual bool event() const = 0;
+
+ protected:
+ sc_signal_in_if() : sc_interface() {}
+
+ private:
+ // Disabled
+ sc_signal_in_if(const sc_signal_in_if<T> &) : sc_interface() {}
+ sc_signal_in_if<T> &
+ operator = (const sc_signal_in_if<T> &)
+ {
+ return *this;
+ }
+};
+
+template <>
+class sc_signal_in_if<bool> : virtual public sc_interface
+{
+ public:
+ virtual const bool &read() const = 0;
+
+ virtual const sc_event &value_changed_event() const = 0;
+ virtual const sc_event &posedge_event() const = 0;
+ virtual const sc_event &negedge_event() const = 0;
+
+ virtual bool event() const = 0;
+ virtual bool posedge() const = 0;
+ virtual bool negedge() const = 0;
+
+ protected:
+ sc_signal_in_if() : sc_interface() {}
+
+ private:
+ // Disabled
+ sc_signal_in_if(const sc_signal_in_if<bool> &) : sc_interface() {}
+ sc_signal_in_if<bool> &
+ operator = (const sc_signal_in_if<bool> &)
+ {
+ return *this;
+ }
+};
+
+template <>
+class sc_signal_in_if<sc_dt::sc_logic> : virtual public sc_interface
+{
+ public:
+ virtual const sc_dt::sc_logic &read() const = 0;
+
+ virtual const sc_event &value_changed_event() const = 0;
+ virtual const sc_event &posedge_event() const = 0;
+ virtual const sc_event &negedge_event() const = 0;
+
+ virtual bool event() const = 0;
+ virtual bool posedge() const = 0;
+ virtual bool negedge() const = 0;
+
+ protected:
+ sc_signal_in_if() : sc_interface() {}
+
+ private:
+ // Disabled
+ sc_signal_in_if(const sc_signal_in_if<sc_dt::sc_logic> &) :
+ sc_interface()
+ {}
+ sc_signal_in_if<sc_dt::sc_logic> &
+ operator = (const sc_signal_in_if<sc_dt::sc_logic> &)
+ {
+ return *this;
+ }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_SIGNAL_IN_IF_HH__
diff --git a/src/systemc/ext/channel/sc_signal_inout_if.hh b/src/systemc/ext/channel/sc_signal_inout_if.hh
new file mode 100644
index 000000000..c39c4a501
--- /dev/null
+++ b/src/systemc/ext/channel/sc_signal_inout_if.hh
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_INOUT_IF_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_INOUT_IF_HH__
+
+#include "../core/sc_interface.hh"
+#include "sc_signal_in_if.hh"
+
+namespace sc_core
+{
+
+enum sc_writer_policy
+{
+ SC_ONE_WRITER,
+ SC_MANY_WRITERS
+};
+
+template <class T>
+class sc_signal_write_if : virtual public sc_interface
+{
+ public:
+ virtual sc_writer_policy
+ get_writer_policy() const
+ {
+ return SC_ONE_WRITER;
+ }
+ virtual void write(const T &) = 0;
+
+ protected:
+ sc_signal_write_if() : sc_interface() {}
+
+ private:
+ // Disabled
+ sc_signal_write_if(const sc_signal_write_if<T> &) : sc_interface() {}
+ sc_signal_write_if<T> &
+ operator = (const sc_signal_write_if<T> &)
+ {
+ return *this;
+ }
+};
+
+template <class T>
+class sc_signal_inout_if : public sc_signal_in_if<T>,
+ public sc_signal_write_if<T>
+{
+ protected:
+ sc_signal_inout_if() : sc_signal_in_if<T>(), sc_signal_write_if<T>() {}
+
+ private:
+ // Disabled
+ sc_signal_inout_if(const sc_signal_inout_if<T> &) :
+ sc_signal_in_if<T>(), sc_signal_write_if<T>()
+ {}
+ sc_signal_inout_if<T> &
+ operator = (const sc_signal_inout_if<T> &)
+ {
+ return *this;
+ }
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_SIGNAL_INOUT_IF_HH__
diff --git a/src/systemc/ext/channel/sc_signal_resolved.hh b/src/systemc/ext/channel/sc_signal_resolved.hh
new file mode 100644
index 000000000..f04fa363f
--- /dev/null
+++ b/src/systemc/ext/channel/sc_signal_resolved.hh
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_RESOLVED_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_RESOLVED_HH__
+
+#include "sc_signal.hh"
+#include "sc_signal_inout_if.hh"
+
+namespace sc_dt
+{
+
+class sc_logic;
+
+};
+
+namespace sc_core
+{
+
+class sc_port_base;
+
+class sc_signal_resolved : public sc_signal<sc_dt::sc_logic, SC_MANY_WRITERS>
+{
+ public:
+ sc_signal_resolved();
+ explicit sc_signal_resolved(const char *name);
+ virtual ~sc_signal_resolved();
+
+ virtual void register_port(sc_port_base &, const char *);
+
+ virtual void write(const sc_dt::sc_logic &);
+ sc_signal_resolved &operator = (const sc_dt::sc_logic &);
+ sc_signal_resolved &operator = (const sc_signal_resolved &);
+
+ virtual const char *kind() const;
+
+ protected:
+ virtual void update();
+
+ private:
+ // Disabled
+ sc_signal_resolved(const sc_signal_resolved &) :
+ sc_interface(), sc_signal<sc_dt::sc_logic, SC_MANY_WRITERS>()
+ {}
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_SIGNAL_RESOLVED_HH__
diff --git a/src/systemc/ext/channel/sc_signal_rv.hh b/src/systemc/ext/channel/sc_signal_rv.hh
new file mode 100644
index 000000000..723c2b45d
--- /dev/null
+++ b/src/systemc/ext/channel/sc_signal_rv.hh
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_RV_HH__
+#define __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_RV_HH__
+
+#include "../core/sc_module.hh" // for sc_gen_unique_name
+#include "sc_signal.hh"
+#include "warn_unimpl.hh"
+
+namespace sc_dt
+{
+
+template <int W>
+class sc_lv;
+
+};
+
+namespace sc_core
+{
+
+class sc_port_base;
+
+template <int W>
+class sc_signal_rv : public sc_signal<sc_dt::sc_lv<W>, SC_MANY_WRITERS>
+{
+ public:
+ sc_signal_rv() : sc_signal<sc_dt::sc_lv<W>, SC_MANY_WRITERS>(
+ sc_gen_unique_name("signal_rv"))
+ {}
+ sc_signal_rv(const char *name) :
+ sc_signal<sc_dt::sc_lv<W>, SC_MANY_WRITERS>(name)
+ {}
+ virtual ~sc_signal_rv() {}
+
+ virtual void
+ register_port(sc_port_base &, const char *)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ virtual void
+ write(const sc_dt::sc_lv<W> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+ sc_signal_rv<W> &
+ operator = (const sc_dt::sc_lv<W> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+ sc_signal_rv<W> &
+ operator = (const sc_signal_rv<W> &)
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ return *this;
+ }
+
+ virtual const char *kind() const { return "sc_signal_rv"; }
+
+ protected:
+ virtual void
+ update()
+ {
+ sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ }
+
+ private:
+ // Disabled
+ sc_signal_rv(const sc_signal_rv<W> &) :
+ sc_signal<sc_dt::sc_lv<W>, SC_MANY_WRITERS>()
+ {}
+};
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_SC_SIGNAL_RV_HH__
diff --git a/src/systemc/ext/channel/warn_unimpl.hh b/src/systemc/ext/channel/warn_unimpl.hh
new file mode 100644
index 000000000..8262ae29e
--- /dev/null
+++ b/src/systemc/ext/channel/warn_unimpl.hh
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_EXT_CHANNEL_WARN_UNIMPL_HH__
+#define __SYSTEMC_EXT_CHANNEL_WARN_UNIMPL_HH__
+
+namespace sc_core
+{
+
+void sc_channel_warn_unimpl(const char *func);
+
+} // namespace sc_core
+
+#endif //__SYSTEMC_EXT_CHANNEL_WARN_UNIMPL_HH__
diff --git a/src/systemc/ext/systemc b/src/systemc/ext/systemc
index f16a92e72..633b84eb9 100644
--- a/src/systemc/ext/systemc
+++ b/src/systemc/ext/systemc
@@ -30,6 +30,7 @@
#ifndef __SYSTEMC_EXT_SYSTEMC__
#define __SYSTEMC_EXT_SYSTEMC__
+#include "channel/_channel.hh"
#include "core/_core.hh"
#include "dt/_dt.hh"
diff --git a/src/systemc/ext/systemc.h b/src/systemc/ext/systemc.h
index 77230d0ab..4b4927225 100644
--- a/src/systemc/ext/systemc.h
+++ b/src/systemc/ext/systemc.h
@@ -33,6 +33,7 @@
#include "systemc"
// Collect "using" declarations for the various namespaces.
+#include "channel/_using.hh"
#include "core/_using.hh"
#include "dt/_using.hh"