summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2017-02-20 01:51:42 +0100
committer couriersud <couriersud@gmx.org>2017-02-22 02:04:01 +0100
commit5c4b7cfef851ab8f13d937fdb4d3686936c63d39 (patch)
treec28e0804d546924e564530f3826b81bae143f066 /src/lib/netlist
parentf222e7731d7817f27265a98d98541b4e314c974b (diff)
Clean up net_t interface and increase readability. (nw)
Diffstat (limited to 'src/lib/netlist')
-rw-r--r--src/lib/netlist/analog/nld_bjt.cpp12
-rw-r--r--src/lib/netlist/analog/nld_twoterm.h4
-rw-r--r--src/lib/netlist/analog/nlid_fourterm.cpp8
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.cpp4
-rw-r--r--src/lib/netlist/devices/nld_4066.cpp2
-rw-r--r--src/lib/netlist/devices/nld_4316.cpp2
-rw-r--r--src/lib/netlist/devices/nld_mm5837.cpp2
-rw-r--r--src/lib/netlist/devices/nld_system.cpp4
-rw-r--r--src/lib/netlist/devices/nlid_proxy.cpp2
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx.cpp2
-rw-r--r--src/lib/netlist/nl_base.cpp10
-rw-r--r--src/lib/netlist/nl_base.h29
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.cpp9
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.h3
-rw-r--r--src/lib/netlist/solver/nld_solver.cpp3
-rw-r--r--src/lib/netlist/tools/nl_convert.cpp2
16 files changed, 40 insertions, 58 deletions
diff --git a/src/lib/netlist/analog/nld_bjt.cpp b/src/lib/netlist/analog/nld_bjt.cpp
index 0544f67b20a..57c19c87ca9 100644
--- a/src/lib/netlist/analog/nld_bjt.cpp
+++ b/src/lib/netlist/analog/nld_bjt.cpp
@@ -309,11 +309,11 @@ NETLIB_RESET(QBJT_switch)
NETLIB_UPDATE(QBJT_switch)
{
if (!m_RB.m_P.net().isRailNet())
- m_RB.m_P.schedule_solve(); // Basis
+ m_RB.m_P.solve_now(); // Basis
else if (!m_RB.m_N.net().isRailNet())
- m_RB.m_N.schedule_solve(); // Emitter
+ m_RB.m_N.solve_now(); // Emitter
else if (!m_RC.m_P.net().isRailNet())
- m_RC.m_P.schedule_solve(); // Collector
+ m_RC.m_P.solve_now(); // Collector
}
@@ -372,11 +372,11 @@ NETLIB_UPDATE_TERMINALS(QBJT_switch)
NETLIB_UPDATE(QBJT_EB)
{
if (!m_D_EB.m_P.net().isRailNet())
- m_D_EB.m_P.schedule_solve(); // Basis
+ m_D_EB.m_P.solve_now(); // Basis
else if (!m_D_EB.m_N.net().isRailNet())
- m_D_EB.m_N.schedule_solve(); // Emitter
+ m_D_EB.m_N.solve_now(); // Emitter
else
- m_D_CB.m_N.schedule_solve(); // Collector
+ m_D_CB.m_N.solve_now(); // Collector
}
NETLIB_RESET(QBJT_EB)
diff --git a/src/lib/netlist/analog/nld_twoterm.h b/src/lib/netlist/analog/nld_twoterm.h
index e89c347984f..d5cf6f6d228 100644
--- a/src/lib/netlist/analog/nld_twoterm.h
+++ b/src/lib/netlist/analog/nld_twoterm.h
@@ -49,10 +49,8 @@
// Generic macros
// -----------------------------------------------------------------------------
-
#ifdef RES_R
-// FIXME: avoid compile fails
-// #warning "Do not include rescap.h in a netlist environment"
+#warning "Do not include rescap.h in a netlist environment"
#endif
#ifndef RES_R
#define RES_R(res) (static_cast<double>(res))
diff --git a/src/lib/netlist/analog/nlid_fourterm.cpp b/src/lib/netlist/analog/nlid_fourterm.cpp
index 35ebe515092..aa2723fe8e1 100644
--- a/src/lib/netlist/analog/nlid_fourterm.cpp
+++ b/src/lib/netlist/analog/nlid_fourterm.cpp
@@ -40,13 +40,13 @@ NETLIB_UPDATE(VCCS)
{
/* only called if connected to a rail net ==> notify the solver to recalculate */
if (!m_IP.net().isRailNet())
- m_IP.schedule_solve();
+ m_IP.solve_now();
else if (!m_IN.net().isRailNet())
- m_IN.schedule_solve();
+ m_IN.solve_now();
else if (!m_OP.net().isRailNet())
- m_OP.schedule_solve();
+ m_OP.solve_now();
else if (!m_ON.net().isRailNet())
- m_ON.schedule_solve();
+ m_ON.solve_now();
}
// ----------------------------------------------------------------------------------------
diff --git a/src/lib/netlist/analog/nlid_twoterm.cpp b/src/lib/netlist/analog/nlid_twoterm.cpp
index b9d6dde10f5..676042850ad 100644
--- a/src/lib/netlist/analog/nlid_twoterm.cpp
+++ b/src/lib/netlist/analog/nlid_twoterm.cpp
@@ -88,9 +88,9 @@ NETLIB_UPDATE(twoterm)
/* only called if connected to a rail net ==> notify the solver to recalculate */
/* we only need to call the non-rail terminal */
if (m_P.has_net() && !m_P.net().isRailNet())
- m_P.schedule_solve();
+ m_P.solve_now();
else if (m_N.has_net() && !m_N.net().isRailNet())
- m_N.schedule_solve();
+ m_N.solve_now();
}
// ----------------------------------------------------------------------------------------
diff --git a/src/lib/netlist/devices/nld_4066.cpp b/src/lib/netlist/devices/nld_4066.cpp
index e0890adabcb..ebd269a023a 100644
--- a/src/lib/netlist/devices/nld_4066.cpp
+++ b/src/lib/netlist/devices/nld_4066.cpp
@@ -67,7 +67,7 @@ namespace netlist
{
m_R.update_dev();
m_R.set_R(R);
- m_R.m_P.schedule_after(NLTIME_FROM_NS(1));
+ m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
}
else
{
diff --git a/src/lib/netlist/devices/nld_4316.cpp b/src/lib/netlist/devices/nld_4316.cpp
index 9110eb0e569..b9758ff036b 100644
--- a/src/lib/netlist/devices/nld_4316.cpp
+++ b/src/lib/netlist/devices/nld_4316.cpp
@@ -47,7 +47,7 @@ namespace netlist { namespace devices {
m_R.set_R(m_base_r());
else
m_R.set_R(NL_FCONST(1.0) / netlist().gmin());
- m_R.m_P.schedule_after(NLTIME_FROM_NS(1));
+ m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
}
NETLIB_DEVICE_IMPL(CD4316_GATE)
diff --git a/src/lib/netlist/devices/nld_mm5837.cpp b/src/lib/netlist/devices/nld_mm5837.cpp
index 3c5b301de9b..6d2931ba3af 100644
--- a/src/lib/netlist/devices/nld_mm5837.cpp
+++ b/src/lib/netlist/devices/nld_mm5837.cpp
@@ -109,7 +109,7 @@ namespace netlist
if (m_is_timestep)
m_RV.update_dev();
m_RV.set(NL_FCONST(1.0) / R, V, 0.0);
- m_RV.m_P.schedule_after(NLTIME_FROM_NS(1));
+ m_RV.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
}
}
diff --git a/src/lib/netlist/devices/nld_system.cpp b/src/lib/netlist/devices/nld_system.cpp
index 4baf8696fca..aaa181911ba 100644
--- a/src/lib/netlist/devices/nld_system.cpp
+++ b/src/lib/netlist/devices/nld_system.cpp
@@ -110,12 +110,12 @@ namespace netlist
{
m_R.update_dev();
m_R.set_R(R);
- m_R.m_P.schedule_after(NLTIME_FROM_NS(1));
+ m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
}
else
{
m_R.set_R(R);
- m_R.m_P.schedule_after(NLTIME_FROM_NS(1));
+ m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
//m_R->update_dev();
}
}
diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp
index 8d1f3c61adb..c71e9f2919e 100644
--- a/src/lib/netlist/devices/nlid_proxy.cpp
+++ b/src/lib/netlist/devices/nlid_proxy.cpp
@@ -165,7 +165,7 @@ namespace netlist
m_RV.update_dev();
}
m_RV.set(NL_FCONST(1.0) / R, V, 0.0);
- m_RV.m_P.schedule_after(NLTIME_FROM_NS(1));
+ m_RV.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
}
}
diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp
index 14a6eb233be..5a8120518b1 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx.cpp
+++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp
@@ -476,7 +476,7 @@ NETLIST_END()
*
* Naming conventions follow National Semiconductor datasheet
*
- * FIXME: Same as 7400, but drains higher output currents.
+ * NOTE: Same as 7400, but drains higher output currents.
* Netlist currently does not model over currents (should it ever?)
*/
diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp
index e20b102c147..51eb0eacf7e 100644
--- a/src/lib/netlist/nl_base.cpp
+++ b/src/lib/netlist/nl_base.cpp
@@ -845,7 +845,7 @@ void detail::net_t::update_devs() NL_NOEXCEPT
{
nl_assert(this->isRailNet());
- const unsigned masks[4] =
+ const uint8_t masks[4] =
{
0,
core_terminal_t::STATE_INP_LH | core_terminal_t::STATE_INP_ACTIVE,
@@ -853,7 +853,7 @@ void detail::net_t::update_devs() NL_NOEXCEPT
0
};
- const unsigned mask = masks[ (m_cur_Q << 1) | m_new_Q ];
+ const auto mask = masks[ (m_cur_Q << 1) | m_new_Q ];
m_cur_Q = m_new_Q;
m_in_queue = 2; /* mark as taken ... */
@@ -1029,19 +1029,17 @@ terminal_t::~terminal_t()
{
}
-void terminal_t::schedule_solve()
+void terminal_t::solve_now()
{
// Nets may belong to railnets which do not have a solver attached
- // FIXME: Enforce that all terminals get connected?
if (this->has_net())
if (net().solver() != nullptr)
net().solver()->update_forced();
}
-void terminal_t::schedule_after(const netlist_time &after)
+void terminal_t::schedule_solve_after(const netlist_time &after)
{
// Nets may belong to railnets which do not have a solver attached
- // FIXME: Enforce that all terminals get connected?
if (this->has_net())
if (net().solver() != nullptr)
net().solver()->update_after(after);
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index 9d5e0cb7b7c..ff457d21d4d 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -573,8 +573,8 @@ namespace netlist
set_ptr(m_gt1, GT);
}
- void schedule_solve();
- void schedule_after(const netlist_time &after);
+ void solve_now();
+ void schedule_solve_after(const netlist_time &after);
void set_ptrs(nl_double *gt, nl_double *go, nl_double *Idr)
{
@@ -698,11 +698,15 @@ namespace netlist
void reset();
- void toggle_new_Q() NL_NOEXCEPT { m_new_Q ^= 1; }
- void force_queue_execution() NL_NOEXCEPT { m_new_Q = (m_cur_Q ^ 1); }
+ void toggle_new_Q() NL_NOEXCEPT { m_new_Q = (m_cur_Q ^ 1); }
+
+ void toggle_and_push_to_queue(const netlist_time delay) NL_NOEXCEPT
+ {
+ toggle_new_Q();
+ push_to_queue(delay);
+ }
void push_to_queue(const netlist_time delay) NL_NOEXCEPT;
- void reschedule_in_queue(const netlist_time delay) NL_NOEXCEPT;
bool is_queued() const NL_NOEXCEPT { return m_in_queue == 1; }
void update_devs() NL_NOEXCEPT;
@@ -1403,18 +1407,6 @@ namespace netlist
}
}
- // FIXME: this could be removed after testing
- inline void detail::net_t::reschedule_in_queue(const netlist_time delay) NL_NOEXCEPT
- {
- if (is_queued())
- netlist().queue().remove(this);
-
- m_time = netlist().time() + delay;
- m_in_queue = (m_active > 0); /* queued ? */
- if (m_in_queue)
- netlist().queue().push(queue_t::entry_t(m_time, this));
- }
-
inline const analog_net_t & analog_t::net() const NL_NOEXCEPT
{
return static_cast<const analog_net_t &>(core_terminal_t::net());
@@ -1452,8 +1444,7 @@ namespace netlist
if (newQ != m_my_net.Q_Analog())
{
m_my_net.set_Q_Analog(newQ);
- m_my_net.toggle_new_Q();
- m_my_net.push_to_queue(NLTIME_FROM_NS(1));
+ m_my_net.toggle_and_push_to_queue(NLTIME_FROM_NS(1));
}
}
diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp
index d252d554d70..45e25d83793 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.cpp
+++ b/src/lib/netlist/solver/nld_matrix_solver.cpp
@@ -380,8 +380,7 @@ void matrix_solver_t::update() NL_NOEXCEPT
if (m_params.m_dynamic_ts && has_timestep_devices() && new_timestep > netlist_time::zero())
{
- m_Q_sync.net().force_queue_execution();
- m_Q_sync.net().reschedule_in_queue(new_timestep);
+ m_Q_sync.net().toggle_and_push_to_queue(new_timestep);
}
}
@@ -392,8 +391,7 @@ void matrix_solver_t::update_forced()
if (m_params.m_dynamic_ts && has_timestep_devices())
{
- m_Q_sync.net().force_queue_execution();
- m_Q_sync.net().reschedule_in_queue(netlist_time::from_double(m_params.m_min_timestep));
+ m_Q_sync.net().toggle_and_push_to_queue(netlist_time::from_double(m_params.m_min_timestep));
}
}
@@ -424,8 +422,7 @@ void matrix_solver_t::solve_base()
if (this_resched > 1 && !m_Q_sync.net().is_queued())
{
log().warning(MW_1_NEWTON_LOOPS_EXCEEDED_ON_NET_1, this->name());
- m_Q_sync.net().toggle_new_Q();
- m_Q_sync.net().reschedule_in_queue(m_params.m_nr_recalc_delay);
+ m_Q_sync.net().toggle_and_push_to_queue(m_params.m_nr_recalc_delay);
}
}
else
diff --git a/src/lib/netlist/solver/nld_matrix_solver.h b/src/lib/netlist/solver/nld_matrix_solver.h
index ebcdcc2209d..49bb6a85c68 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.h
+++ b/src/lib/netlist/solver/nld_matrix_solver.h
@@ -125,8 +125,7 @@ public:
void update_forced();
void update_after(const netlist_time &after)
{
- m_Q_sync.net().force_queue_execution();
- m_Q_sync.net().reschedule_in_queue(after);
+ m_Q_sync.net().toggle_and_push_to_queue(after);
}
/* netdevice functions */
diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp
index 5c4eb2c7f77..36cd5692674 100644
--- a/src/lib/netlist/solver/nld_solver.cpp
+++ b/src/lib/netlist/solver/nld_solver.cpp
@@ -136,8 +136,7 @@ NETLIB_UPDATE(solver)
/* step circuit */
if (!m_Q_step.net().is_queued())
{
- m_Q_step.net().toggle_new_Q();
- m_Q_step.net().push_to_queue(netlist_time::from_double(m_params.m_max_timestep));
+ m_Q_step.net().toggle_and_push_to_queue(netlist_time::from_double(m_params.m_max_timestep));
}
}
diff --git a/src/lib/netlist/tools/nl_convert.cpp b/src/lib/netlist/tools/nl_convert.cpp
index acd83a61caf..c7df75dd274 100644
--- a/src/lib/netlist/tools/nl_convert.cpp
+++ b/src/lib/netlist/tools/nl_convert.cpp
@@ -228,7 +228,7 @@ nl_convert_base_t::unit_t nl_convert_base_t::m_units[] = {
{"M", "CAP_M({1})", 1.0e-3 },
{"u", "CAP_U({1})", 1.0e-6 }, /* eagle */
{"U", "CAP_U({1})", 1.0e-6 },
- {"??", "CAP_U({1})", 1.0e-6 }, /* FIXME */
+ {"μ", "CAP_U({1})", 1.0e-6 },
{"N", "CAP_N({1})", 1.0e-9 },
{"pF", "CAP_P({1})", 1.0e-12},
{"P", "CAP_P({1})", 1.0e-12},