diff options
Diffstat (limited to 'src/lib/netlist/devices/nld_4020.cpp')
-rw-r--r-- | src/lib/netlist/devices/nld_4020.cpp | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/src/lib/netlist/devices/nld_4020.cpp b/src/lib/netlist/devices/nld_4020.cpp index 97161071306..f542ff51aad 100644 --- a/src/lib/netlist/devices/nld_4020.cpp +++ b/src/lib/netlist/devices/nld_4020.cpp @@ -34,8 +34,22 @@ namespace netlist NETLIB_UPDATEI(); public: - void update_outputs(const unsigned cnt) NL_NOEXCEPT; - + void update_outputs(const unsigned cnt) NL_NOEXCEPT + { + static constexpr const std::array<netlist_time, 14> out_delayQn = { + NLTIME_FROM_NS(180), NLTIME_FROM_NS(280), + NLTIME_FROM_NS(380), NLTIME_FROM_NS(480), + NLTIME_FROM_NS(580), NLTIME_FROM_NS(680), + NLTIME_FROM_NS(780), NLTIME_FROM_NS(880), + NLTIME_FROM_NS(980), NLTIME_FROM_NS(1080), + NLTIME_FROM_NS(1180), NLTIME_FROM_NS(1280), + NLTIME_FROM_NS(1380), NLTIME_FROM_NS(1480), + }; + + m_Q[0].push(cnt & 1, out_delayQn[0]); + for (std::size_t i=3; i<14; i++) + m_Q[i].push((cnt >> i) & 1, out_delayQn[i]); + } logic_input_t m_IP; object_array_t<logic_output_t, 14> m_Q; @@ -74,7 +88,6 @@ namespace netlist logic_input_t m_RESET; }; - NETLIB_UPDATE(CD4020_sub) { ++m_cnt; @@ -97,23 +110,6 @@ namespace netlist m_sub.m_IP.activate_hl(); } - NETLIB_FUNC_VOID(CD4020_sub, update_outputs, (const unsigned cnt)) - { - static constexpr const std::array<netlist_time, 14> out_delayQn = { - NLTIME_FROM_NS(180), NLTIME_FROM_NS(280), - NLTIME_FROM_NS(380), NLTIME_FROM_NS(480), - NLTIME_FROM_NS(580), NLTIME_FROM_NS(680), - NLTIME_FROM_NS(780), NLTIME_FROM_NS(880), - NLTIME_FROM_NS(980), NLTIME_FROM_NS(1080), - NLTIME_FROM_NS(1180), NLTIME_FROM_NS(1280), - NLTIME_FROM_NS(1380), NLTIME_FROM_NS(1480), - }; - - m_Q[0].push(cnt & 1, out_delayQn[0]); - for (std::size_t i=3; i<14; i++) - m_Q[i].push((cnt >> i) & 1, out_delayQn[i]); - } - NETLIB_DEVICE_IMPL(CD4020, "CD4020", "") NETLIB_DEVICE_IMPL_ALIAS(CD4020_WI, CD4020, "CD4020_WI", "+IP,+RESET,+VDD,+VSS") |