summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/analog/nld_generic_models.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/analog/nld_generic_models.h')
-rw-r--r--src/lib/netlist/analog/nld_generic_models.h59
1 files changed, 31 insertions, 28 deletions
diff --git a/src/lib/netlist/analog/nld_generic_models.h b/src/lib/netlist/analog/nld_generic_models.h
index c388ff2c768..d8df599a511 100644
--- a/src/lib/netlist/analog/nld_generic_models.h
+++ b/src/lib/netlist/analog/nld_generic_models.h
@@ -8,6 +8,7 @@
/// \file nld_generic_models.h
///
+#include "core/state_var.h"
#include "nl_base.h"
//
@@ -20,9 +21,7 @@
#define USE_TEXTBOOK_DIODE (1)
-namespace netlist
-{
-namespace analog
+namespace netlist::analog
{
// -----------------------------------------------------------------------------
@@ -68,15 +67,14 @@ namespace analog
//return m_h * cap + m_gmin;
}
- nl_fptype Ieq(nl_fptype cap, nl_fptype v) const noexcept
+ nl_fptype Ieq(nl_fptype cap, [[maybe_unused]] nl_fptype v) const noexcept
{
- plib::unused_var(v);
//return -m_h * 0.5 * ((cap + m_c) * m_v + (cap - m_c) * v) ;
return -m_h * nlconst::half() * (cap + m_c) * m_v;
//return -m_h * cap * m_v;
}
- void timestep(nl_fptype cap, nl_fptype v, nl_fptype step) noexcept
+ void time_step(nl_fptype cap, nl_fptype v, nl_fptype step) noexcept
{
m_h = plib::reciprocal(step);
m_c = cap;
@@ -88,7 +86,7 @@ namespace analog
// no state used
}
- void setparams(nl_fptype gmin) noexcept { m_gmin = gmin; }
+ void set_params(nl_fptype gmin) noexcept { m_gmin = gmin; }
private:
state_var<nl_fptype> m_h;
@@ -111,15 +109,13 @@ namespace analog
static capacitor_e type() noexcept { return capacitor_e::CONSTANT_CAPACITY; }
nl_fptype G(nl_fptype cap) const noexcept { return cap * m_h + m_gmin; }
- nl_fptype Ieq(nl_fptype cap, nl_fptype v) const noexcept
+ nl_fptype Ieq(nl_fptype cap, [[maybe_unused]] nl_fptype v) const noexcept
{
- plib::unused_var(v);
return - G(cap) * m_v;
}
- void timestep(nl_fptype cap, nl_fptype v, nl_fptype step) noexcept
+ void time_step([[maybe_unused]] nl_fptype cap, nl_fptype v, nl_fptype step) noexcept
{
- plib::unused_var(cap);
m_h = plib::reciprocal(step);
m_v = v;
}
@@ -137,14 +133,15 @@ namespace analog
struct generic_capacitor_const
{
public:
- generic_capacitor_const(core_device_t &dev, const pstring &name)
+ generic_capacitor_const( /*[[maybe_unused]]*/ core_device_t &dev, /*[[maybe_unused]]*/ const pstring &name)
: m_gmin(nlconst::zero())
{
+ // gcc 7.2 (mingw) and 7.5 (ubuntu) don't accept maybe_unused here
plib::unused_var(dev, name);
}
// Returns { G, Ieq }
- std::pair<nl_fptype, nl_fptype> timestep(nl_fptype cap, nl_fptype v, nl_fptype step) const noexcept
+ std::pair<nl_fptype, nl_fptype> time_step(nl_fptype cap, nl_fptype v, nl_fptype step) const noexcept
{
const nl_fptype h(plib::reciprocal(step));
const nl_fptype G(cap * h + m_gmin);
@@ -154,7 +151,7 @@ namespace analog
{
// this one has no state
}
- void setparams(nl_fptype gmin) noexcept { m_gmin = gmin; }
+ void set_parameters(nl_fptype gmin) noexcept { m_gmin = gmin; }
private:
nl_fptype m_gmin;
};
@@ -165,17 +162,16 @@ namespace analog
struct generic_capacitor_const
{
public:
- generic_capacitor_const(core_device_t &dev, const pstring &name)
+ generic_capacitor_const([[maybe_unused]] core_device_t &dev, [[maybe_unused]] const pstring &name)
: m_gmin(nlconst::zero())
, m_vn(0)
, m_in(0)
, m_trn(0.0)
{
- plib::unused_var(dev, name);
}
// Returns { G, Ieq }
- std::pair<nl_fptype, nl_fptype> timestep(nl_fptype cap, nl_fptype v, nl_fptype step) noexcept
+ std::pair<nl_fptype, nl_fptype> time_step(nl_fptype cap, nl_fptype v, nl_fptype step) noexcept
{
const nl_fptype h(plib::reciprocal(step));
if (m_trn == 0.0)
@@ -198,7 +194,7 @@ namespace analog
{
// this one has no state
}
- void setparams(nl_fptype gmin) noexcept { m_gmin = gmin; }
+ void set_parameters(nl_fptype gmin) noexcept { m_gmin = gmin; }
private:
nl_fptype m_gmin;
nl_fptype m_vn;
@@ -220,10 +216,10 @@ namespace analog
class generic_diode
{
public:
- generic_diode(core_device_t &dev, const pstring &name)
- : m_Vd(dev, name + ".m_Vd", nlconst::diode_start_voltage())
- , m_Id(dev, name + ".m_Id", nlconst::zero())
- , m_G(dev, name + ".m_G", nlconst::cgminalt())
+ generic_diode()
+ : m_Vd(nlconst::diode_start_voltage())
+ , m_Id(nlconst::zero())
+ , m_G(nlconst::cgminalt())
, m_Vt(nlconst::zero())
, m_Vmin(nlconst::zero()) // not used in MOS model
, m_Is(nlconst::zero())
@@ -238,6 +234,14 @@ namespace analog
, nlconst::cgminalt()
, nlconst::T0());
}
+
+ generic_diode(core_device_t &dev, const pstring &name)
+ : generic_diode()
+ {
+ dev.state().save(dev, m_Vd, dev.name(), name + ".m_Vd");
+ dev.state().save(dev, m_Id, dev.name(), name + ".m_Id");
+ dev.state().save(dev, m_G, dev.name(), name + ".m_G");
+ }
// Basic math
//
// I(V) = f(V)
@@ -257,7 +261,7 @@ namespace analog
// if the old voltage is less than zero and new is above
// make sure we move enough so that matrix and current
// changes.
- const nl_fptype old = std::max(nlconst::zero(), m_Vd());
+ const nl_fptype old = std::max(nlconst::zero(), m_Vd);
const nl_fptype d = std::min(+fp_constants<nl_fptype>::DIODE_MAXDIFF(), nVd - old);
const nl_fptype a = plib::abs(d) * m_VtInv;
m_Vd = old + plib::signum(d) * plib::log1p(a) * m_Vt;
@@ -355,9 +359,9 @@ namespace analog
// owning object must save those ...
private:
- state_var<nl_fptype> m_Vd;
- state_var<nl_fptype> m_Id;
- state_var<nl_fptype> m_G;
+ nl_fptype m_Vd;
+ nl_fptype m_Id;
+ nl_fptype m_G;
nl_fptype m_Vt;
nl_fptype m_Vmin;
@@ -374,7 +378,6 @@ namespace analog
};
-} // namespace analog
-} // namespace netlist
+} // namespace netlist::analog
#endif // NLD_GENERIC_MODELS_H_