diff options
Diffstat (limited to 'src/lib/netlist/devices/nld_legacy.cpp')
-rw-r--r-- | src/lib/netlist/devices/nld_legacy.cpp | 104 |
1 files changed, 47 insertions, 57 deletions
diff --git a/src/lib/netlist/devices/nld_legacy.cpp b/src/lib/netlist/devices/nld_legacy.cpp index 738230646e0..cbc44f589a8 100644 --- a/src/lib/netlist/devices/nld_legacy.cpp +++ b/src/lib/netlist/devices/nld_legacy.cpp @@ -1,31 +1,45 @@ -// license:GPL-2.0+ +// license:BSD-3-Clause // copyright-holders:Couriersud /* * nld_legacy.c * */ -#include "nld_legacy.h" -#include "netlist/nl_base.h" +#include "nl_base.h" + +namespace netlist::devices { -namespace netlist -{ - namespace devices - { NETLIB_OBJECT(nicRSFF) { NETLIB_CONSTRUCTOR(nicRSFF) - , m_S(*this, "S") - , m_R(*this, "R") + , m_S(*this, "S", NETLIB_DELEGATE(inputs)) + , m_R(*this, "R", NETLIB_DELEGATE(inputs)) , m_Q(*this, "Q") , m_QQ(*this, "QQ") { } - NETLIB_RESETI(); - NETLIB_UPDATEI(); + NETLIB_RESETI() + { + m_Q.initial(0); + m_QQ.initial(1); + } private: + NETLIB_HANDLERI(inputs) + { + if (!m_S()) + { + m_Q.push(1, NLTIME_FROM_NS(20)); + m_QQ.push(0, NLTIME_FROM_NS(20)); + } + else if (!m_R()) + { + m_Q.push(0, NLTIME_FROM_NS(20)); + m_QQ.push(1, NLTIME_FROM_NS(20)); + } + } + logic_input_t m_S; logic_input_t m_R; @@ -37,7 +51,7 @@ namespace netlist NETLIB_OBJECT(nicDelay) { NETLIB_CONSTRUCTOR(nicDelay) - , m_I(*this, "1") + , m_I(*this, "1", NETLIB_DELEGATE(input)) , m_Q(*this, "2") , m_L_to_H(*this, "L_TO_H", 10) , m_H_to_L(*this, "H_TO_L", 10) @@ -46,10 +60,28 @@ namespace netlist } //NETLIB_UPDATE_PARAMI(); - NETLIB_RESETI(); - NETLIB_UPDATEI(); + NETLIB_RESETI() + { + //m_Q.initial(0); + } private: + NETLIB_HANDLERI(input) + { + netlist_sig_t nval = m_I(); + if (nval && !m_last) + { + // L_to_H + m_Q.push(1, NLTIME_FROM_NS(static_cast<unsigned>(m_L_to_H()))); + } + else if (!nval && m_last) + { + // H_to_L + m_Q.push(0, NLTIME_FROM_NS(static_cast<unsigned>(m_H_to_L()))); + } + m_last = nval; + } + logic_input_t m_I; logic_output_t m_Q; @@ -59,49 +91,7 @@ namespace netlist state_var<netlist_sig_t> m_last; }; - NETLIB_RESET(nicRSFF) - { - m_Q.initial(0); - m_QQ.initial(1); - } - - NETLIB_UPDATE(nicRSFF) - { - if (!m_S()) - { - m_Q.push(1, NLTIME_FROM_NS(20)); - m_QQ.push(0, NLTIME_FROM_NS(20)); - } - else if (!m_R()) - { - m_Q.push(0, NLTIME_FROM_NS(20)); - m_QQ.push(1, NLTIME_FROM_NS(20)); - } - } - - NETLIB_RESET(nicDelay) - { - //m_Q.initial(0); - } - - NETLIB_UPDATE(nicDelay) - { - netlist_sig_t nval = m_I(); - if (nval && !m_last) - { - // L_to_H - m_Q.push(1, NLTIME_FROM_NS(static_cast<unsigned>(m_L_to_H()))); - } - else if (!nval && m_last) - { - // H_to_L - m_Q.push(0, NLTIME_FROM_NS(static_cast<unsigned>(m_H_to_L()))); - } - m_last = nval; - } - NETLIB_DEVICE_IMPL(nicRSFF, "NETDEV_RSFF", "") NETLIB_DEVICE_IMPL(nicDelay, "NETDEV_DELAY", "") - } //namespace devices -} // namespace netlist +} // namespace netlist::devices |