diff options
author | 2019-03-25 23:13:40 +0100 | |
---|---|---|
committer | 2019-03-25 23:13:40 +0100 | |
commit | b380514764cf857469bae61c11143a19f79a74c5 (patch) | |
tree | 63c8012e262618f08a332da31dd714281aa2c5ed /src/lib/netlist/devices/nld_system.cpp | |
parent | c24473ddff715ecec2e258a6eb38960cf8c8e98e (diff) |
Revert "conflict resolution (nw)"
This reverts commit c24473ddff715ecec2e258a6eb38960cf8c8e98e, reversing
changes made to 009cba4fb8102102168ef32870892438327f3705.
Diffstat (limited to 'src/lib/netlist/devices/nld_system.cpp')
-rw-r--r-- | src/lib/netlist/devices/nld_system.cpp | 95 |
1 files changed, 58 insertions, 37 deletions
diff --git a/src/lib/netlist/devices/nld_system.cpp b/src/lib/netlist/devices/nld_system.cpp index 03aa5c678f1..eabc4b4fbff 100644 --- a/src/lib/netlist/devices/nld_system.cpp +++ b/src/lib/netlist/devices/nld_system.cpp @@ -5,8 +5,8 @@ * */ -#include "netlist/solver/nld_solver.h" -#include "netlist/solver/nld_matrix_solver.h" +#include "../solver/nld_solver.h" +#include "../solver/nld_matrix_solver.h" #include "nlid_system.h" namespace netlist @@ -40,40 +40,54 @@ namespace netlist { m_cnt = 0; m_off = netlist_time::from_double(m_offset()); - m_feedback.m_delegate = NETLIB_DELEGATE(extclock, update); - - //m_feedback.m_delegate .set(&NETLIB_NAME(extclock)::update, this); //m_Q.initial(0); } - NETLIB_HANDLER(extclock, clk2) + NETLIB_UPDATE(extclock) { - m_Q.push((m_cnt & 1) ^ 1, m_inc[m_cnt]); + m_Q.push((m_cnt & 1) ^ 1, m_inc[m_cnt] + m_off); + m_off = netlist_time::zero(); if (++m_cnt >= m_size) m_cnt = 0; } - NETLIB_HANDLER(extclock, clk2_pow2) + // ---------------------------------------------------------------------------------------- + // logic_input + // ---------------------------------------------------------------------------------------- + + NETLIB_RESET(logic_input) { - m_Q.push((m_cnt & 1) ^ 1, m_inc[m_cnt]); - m_cnt = (++m_cnt) & (m_size-1); + m_Q.initial(0); } - NETLIB_UPDATE(extclock) + NETLIB_UPDATE(logic_input) { - m_Q.push((m_cnt & 1) ^ 1, m_inc[m_cnt] + m_off); - m_off = netlist_time::zero(); - if (++m_cnt >= m_size) - m_cnt = 0; + m_Q.push(m_IN() & 1, netlist_time::from_nsec(1)); + } - // continue with optimized clock handlers .... + NETLIB_UPDATE_PARAM(logic_input) + { + } + + // ---------------------------------------------------------------------------------------- + // analog_input + // ---------------------------------------------------------------------------------------- - if ((m_size & (m_size-1)) == 0) // power of 2? - m_feedback.m_delegate.set(&NETLIB_NAME(extclock)::clk2_pow2, this); - else - m_feedback.m_delegate.set(&NETLIB_NAME(extclock)::clk2, this); + NETLIB_RESET(analog_input) + { + m_Q.initial(0.0); } + NETLIB_UPDATE(analog_input) + { + m_Q.push(m_IN()); + } + + NETLIB_UPDATE_PARAM(analog_input) + { + } + + // ----------------------------------------------------------------------------- // nld_res_sw // ----------------------------------------------------------------------------- @@ -92,10 +106,19 @@ namespace netlist m_last_state = state; const nl_double R = state ? m_RON() : m_ROFF(); - // FIXME: We only need to update the net first if this is a time stepping net - m_R.update(); - m_R.set_R(R); - m_R.solve_later(); + // We only need to update the net first if this is a time stepping net + if ((0)) // m_R->m_P.net().as_analog().solver()->is_timestep()) + { + m_R.update_dev(); + m_R.set_R(R); + m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); + } + else + { + m_R.set_R(R); + m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); + //m_R->update_dev(); + } } } @@ -118,19 +141,17 @@ namespace netlist } - NETLIB_DEVICE_IMPL(dummy_input, "DUMMY_INPUT", "") - NETLIB_DEVICE_IMPL(frontier, "FRONTIER_DEV", "+I,+G,+Q") - NETLIB_DEVICE_IMPL(function, "AFUNC", "N,FUNC") - NETLIB_DEVICE_IMPL(analog_input, "ANALOG_INPUT", "IN") - NETLIB_DEVICE_IMPL(clock, "CLOCK", "FREQ") - NETLIB_DEVICE_IMPL(extclock, "EXTCLOCK", "FREQ,PATTERN") - NETLIB_DEVICE_IMPL(res_sw, "RES_SWITCH", "+IN,+P1,+P2") - NETLIB_DEVICE_IMPL(mainclock, "MAINCLOCK", "FREQ") - NETLIB_DEVICE_IMPL(gnd, "GND", "") - NETLIB_DEVICE_IMPL(netlistparams, "PARAMETER", "") - - NETLIB_DEVICE_IMPL(logic_input, "LOGIC_INPUT", "IN,FAMILY") - NETLIB_DEVICE_IMPL_ALIAS(logic_input_ttl, logic_input, "TTL_INPUT", "IN") + NETLIB_DEVICE_IMPL(dummy_input) + NETLIB_DEVICE_IMPL(frontier) + NETLIB_DEVICE_IMPL(function) + NETLIB_DEVICE_IMPL(logic_input) + NETLIB_DEVICE_IMPL(analog_input) + NETLIB_DEVICE_IMPL(clock) + NETLIB_DEVICE_IMPL(extclock) + NETLIB_DEVICE_IMPL(res_sw) + NETLIB_DEVICE_IMPL(mainclock) + NETLIB_DEVICE_IMPL(gnd) + NETLIB_DEVICE_IMPL(netlistparams) } //namespace devices } // namespace netlist |