diff options
Diffstat (limited to 'src/lib/netlist/devices/nld_tristate.cpp')
-rw-r--r-- | src/lib/netlist/devices/nld_tristate.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/lib/netlist/devices/nld_tristate.cpp b/src/lib/netlist/devices/nld_tristate.cpp new file mode 100644 index 00000000000..db21468685e --- /dev/null +++ b/src/lib/netlist/devices/nld_tristate.cpp @@ -0,0 +1,76 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + * nld_tristate.cpp + * + */ + +#include "nld_tristate.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(tristate) + { + NETLIB_CONSTRUCTOR(tristate) + , m_CEQ(*this, {{ "CEQ1", "CEQ2" }}) + , m_D(*this, {{ "D1", "D2" }}) + , m_Q(*this, "Q") + { + } + + NETLIB_UPDATEI(); + + protected: + object_array_t<logic_input_t, 2> m_CEQ; + object_array_t<logic_input_t, 2> m_D; + logic_output_t m_Q; + }; + + NETLIB_OBJECT(tristate3) + { + NETLIB_CONSTRUCTOR(tristate3) + , m_CEQ(*this, {{ "CEQ1", "CEQ2", "CEQ3" }} ) + , m_D(*this, {{ "D1", "D2", "D3" }} ) + , m_Q(*this, "Q") + { + } + + NETLIB_UPDATEI(); + + protected: + object_array_t<logic_input_t, 3> m_CEQ; + object_array_t<logic_input_t, 3> m_D; + logic_output_t m_Q; + }; + + NETLIB_UPDATE(tristate) + { + unsigned q = 0; + if (!m_CEQ[0]()) + q |= m_D[0](); + if (!m_CEQ[1]()) + q |= m_D[1](); + + m_Q.push(q, NLTIME_FROM_NS(1)); + } + + NETLIB_UPDATE(tristate3) + { + unsigned q = 0; + if (!m_CEQ[0]()) + q |= m_D[0](); + if (!m_CEQ[1]()) + q |= m_D[1](); + if (!m_CEQ[2]()) + q |= m_D[2](); + + m_Q.push(q, NLTIME_FROM_NS(1)); + } + + NETLIB_DEVICE_IMPL(tristate) + NETLIB_DEVICE_IMPL(tristate3) + + } //namespace devices +} // namespace netlist |