summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-04-28 21:03:29 +0200
committer couriersud <couriersud@gmx.org>2020-04-28 21:08:06 +0200
commit77da7b11aeeddead91a1b3eab9032cfd348cadb5 (patch)
tree9236ace13884b1199e5d59da188adb5d2fb801d0 /src
parent14e4c4bb3f708eb63b757cefcb86245e991a424a (diff)
netlist: more code maintenance. (nw)
Make some calls private which were public before. Eliminate functions which would be executed only once. Make terminal reference functions in twoterm.h return const. Clearly identify the use cases which need a non-const ref to terminals.
Diffstat (limited to 'src')
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.h26
-rw-r--r--src/lib/netlist/devices/nlid_proxy.h2
-rw-r--r--src/lib/netlist/nl_base.cpp12
-rw-r--r--src/lib/netlist/nl_base.h1
-rwxr-xr-xsrc/lib/netlist/nl_setup.cpp14
-rw-r--r--src/lib/netlist/nl_setup.h40
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.cpp6
7 files changed, 46 insertions, 55 deletions
diff --git a/src/lib/netlist/analog/nlid_twoterm.h b/src/lib/netlist/analog/nlid_twoterm.h
index f0f90867a36..e318a508817 100644
--- a/src/lib/netlist/analog/nlid_twoterm.h
+++ b/src/lib/netlist/analog/nlid_twoterm.h
@@ -89,7 +89,7 @@ namespace analog
void solve_now() const;
template <typename F>
- void change_state(F f, netlist_time delay = netlist_time::quantum())
+ void change_state(F f, netlist_time delay = netlist_time::quantum()) const
{
auto *solv(solver());
if (solv)
@@ -126,21 +126,37 @@ namespace analog
m_N.set_go_gt_I(a21, a22, rhs2);
}
- /// \brief Get a reference to the m_P terminal
+ /// \brief Get a const reference to the m_P terminal
///
/// This is typically called during initialization to connect
/// terminals.
///
/// \returns Reference to m_P terminal.
- terminal_t &P() noexcept { return m_P; }
+ const terminal_t &P() const noexcept { return m_P; }
- /// \brief Get a reference to the m_N terminal
+ /// \brief Get a const reference to the m_N terminal
///
/// This is typically called during initialization to connect
/// terminals.
///
/// \returns Reference to m_N terminal.
- terminal_t &N() noexcept { return m_N; }
+ const terminal_t &N() const noexcept { return m_N; }
+
+ /// \brief Get a reference to the m_P terminal
+ ///
+ /// This call is only allowed from the core. Device code should never
+ /// need to call this.
+ ///
+ /// \returns Reference to m_P terminal.
+ terminal_t &setup_P() noexcept { return m_P; }
+
+ /// \brief Get a reference to the m_N terminal
+ ///
+ /// This call is only allowed from the core. Device code should never
+ /// need to call this.
+ ///
+ /// \returns Reference to m_P terminal.
+ terminal_t &setup_N() noexcept { return m_N; }
private:
terminal_t m_P;
diff --git a/src/lib/netlist/devices/nlid_proxy.h b/src/lib/netlist/devices/nlid_proxy.h
index 5de5e27c4f8..5ba505cd03d 100644
--- a/src/lib/netlist/devices/nlid_proxy.h
+++ b/src/lib/netlist/devices/nlid_proxy.h
@@ -103,7 +103,7 @@ namespace devices
detail::core_terminal_t &proxy_term() noexcept override
{
- return m_RN.P();
+ return m_RN.setup_P();
}
protected:
diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp
index 68778d1b878..7db9354ba0e 100644
--- a/src/lib/netlist/nl_base.cpp
+++ b/src/lib/netlist/nl_base.cpp
@@ -630,18 +630,6 @@ namespace netlist
state().setup().register_link_fqn(name() + "." + t1, name() + "." + t2);
}
- // FIXME: this is only used by solver code since matrix solvers are started in
- // post_start.
- void device_t::connect_post_start(detail::core_terminal_t &t1, detail::core_terminal_t &t2)
- {
- if (!state().setup().connect(t1, t2))
- {
- log().fatal(MF_ERROR_CONNECTING_1_TO_2(t1.name(), t2.name()));
- throw nl_exception(MF_ERROR_CONNECTING_1_TO_2(t1.name(), t2.name()));
- }
- }
-
-
// -----------------------------------------------------------------------------
// family_setter_t
// -----------------------------------------------------------------------------
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index 1bbd2bd483d..8893294f76c 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -1098,7 +1098,6 @@ namespace netlist
void connect(const pstring &t1, const pstring &t2);
void connect(const detail::core_terminal_t &t1, const detail::core_terminal_t &t2);
- void connect_post_start(detail::core_terminal_t &t1, detail::core_terminal_t &t2) noexcept(false);
protected:
NETLIB_UPDATEI() { }
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index 20fdf3eeaff..3ba4345267a 100755
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -1036,16 +1036,6 @@ void setup_t::register_dynamic_log_devices(const std::vector<pstring> &loglist)
}
}
-log_type &setup_t::log()
-{
- return m_nlstate.log();
-}
-const log_type &setup_t::log() const
-{
- return m_nlstate.log();
-}
-
-
// ----------------------------------------------------------------------------------------
// Models
// ----------------------------------------------------------------------------------------
@@ -1339,8 +1329,8 @@ void setup_t::prepare_to_run()
{
log().info(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3(
t->name(), t->N().net().name(), t->P().net().name()));
- t->N().net().remove_terminal(t->N());
- t->P().net().remove_terminal(t->P());
+ t->setup_N().net().remove_terminal(t->setup_N());
+ t->setup_P().net().remove_terminal(t->setup_P());
m_nlstate.remove_device(t);
}
}
diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h
index ecd52bf3afb..92c605f7c4c 100644
--- a/src/lib/netlist/nl_setup.h
+++ b/src/lib/netlist/nl_setup.h
@@ -68,7 +68,8 @@
#define NETLIST_START(name) \
void NETLIST_NAME(name)(netlist::nlparse_t &setup) \
-{
+{ \
+ plib::unused_var(setup);
#define NETLIST_END() }
@@ -378,54 +379,47 @@ namespace netlist
netlist_state_t &nlstate() { return m_nlstate; }
const netlist_state_t &nlstate() const { return m_nlstate; }
+ // called from param_t creation
void register_param_t(const pstring &name, param_t &param);
-
pstring get_initial_param_val(const pstring &name, const pstring &def) const;
void register_term(detail::core_terminal_t &term);
void register_term(terminal_t &term, terminal_t &other_term);
+ // called from net_splitter
terminal_t *get_connected_terminal(const terminal_t &term) const noexcept
{
auto ret(m_connected_terminals.find(&term));
return (ret != m_connected_terminals.end()) ? ret->second : nullptr;
}
- void remove_connections(const pstring &pin);
-
- bool connect(detail::core_terminal_t &t1, detail::core_terminal_t &t2);
-
- param_t *find_param(const pstring &param_in, bool required = true) const;
-
- // get family
+ // get family -> truthtable
const logic_family_desc_t *family_from_model(const pstring &model);
+ // tools use this -> FIXME: needs another place
void register_dynamic_log_devices(const std::vector<pstring> &loglist);
- void resolve_inputs();
-
- // helper - also used by nltool
- pstring resolve_alias(const pstring &name) const;
- pstring de_alias(const pstring &alias) const;
-
+ param_t *find_param(const pstring &param_in, bool required = true) const;
// needed by nltool
std::vector<pstring> get_terminals_for_device_name(const pstring &devname) const;
- log_type &log();
- const log_type &log() const;
-
- // needed by proxy
+ // needed by proxy device to check power terminals -> FIXME: this should be a setup_t task
detail::core_terminal_t *find_terminal(const pstring &terminal_in, detail::terminal_type atype, bool required = true) const;
detail::core_terminal_t *find_terminal(const pstring &terminal_in, bool required = true) const;
-
- // core net handling
-
- void delete_empty_nets();
+ pstring de_alias(const pstring &alias) const;
+ // FIXME: only needed by solver code outside of setup_t
+ bool connect(detail::core_terminal_t &t1, detail::core_terminal_t &t2);
// run preparation
void prepare_to_run();
private:
+ // FIXME: stale? - remove later
+ void remove_connections(const pstring &pin);
+
+ void resolve_inputs();
+ pstring resolve_alias(const pstring &name) const;
+ void delete_empty_nets();
void merge_nets(detail::net_t &thisnet, detail::net_t &othernet);
diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp
index cbb9f138a4a..291f56100a8 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.cpp
+++ b/src/lib/netlist/solver/nld_matrix_solver.cpp
@@ -51,7 +51,11 @@ namespace solver
, m_Q_sync(*this, "Q_sync")
, m_ops(0)
{
- connect_post_start(m_fb_sync, m_Q_sync);
+ if (!anetlist.setup().connect(m_fb_sync, m_Q_sync))
+ {
+ log().fatal(MF_ERROR_CONNECTING_1_TO_2(m_fb_sync.name(), m_Q_sync.name()));
+ throw nl_exception(MF_ERROR_CONNECTING_1_TO_2(m_fb_sync.name(), m_Q_sync.name()));
+ }
setup_base(nets);
// now setup the matrix