summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nld_system.cpp
diff options
context:
space:
mode:
author andreasnaive <andreasnaive@gmail.com>2019-03-25 23:13:40 +0100
committer andreasnaive <andreasnaive@gmail.com>2019-03-25 23:13:40 +0100
commitb380514764cf857469bae61c11143a19f79a74c5 (patch)
tree63c8012e262618f08a332da31dd714281aa2c5ed /src/lib/netlist/devices/nld_system.cpp
parentc24473ddff715ecec2e258a6eb38960cf8c8e98e (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.cpp95
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