From fa54fa1b658be057b5c04188a69bbecab06e5a67 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Fri, 3 Jul 2020 20:32:04 +0200 Subject: netlist: Add a parameter to varclock. --- src/lib/netlist/devices/nlid_system.h | 38 +++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h index 2fea9014e5b..42671caa5fc 100644 --- a/src/lib/netlist/devices/nlid_system.h +++ b/src/lib/netlist/devices/nlid_system.h @@ -88,14 +88,27 @@ namespace devices NETLIB_OBJECT(varclock) { NETLIB_CONSTRUCTOR(varclock) + , m_N(*this, "N", 1) + , m_func(*this,"FUNC", "T") , m_feedback(*this, "FB") , m_Q(*this, "Q") - , m_func(*this,"FUNC", "") , m_compiled(*this, "m_compiled") - , m_funcparam({nlconst::zero()}) + , m_supply(*this) { if (!m_func().empty()) - m_compiled->compile(m_func(), std::vector({{pstring("T")}})); + { + std::vector inps; + inps.push_back(pstring("T")); + m_vals.push_back(nlconst::zero()); + for (int i=0; i < m_N(); i++) + { + pstring inpname = plib::pfmt("A{1}")(i); + m_I.push_back(state().make_pool_object(*this, inpname)); + inps.push_back(inpname); + m_vals.push_back(nlconst::zero()); + } + m_compiled->compile(m_func(), inps); + } connect(m_feedback, m_Q); } //NETLIB_RESETI(); @@ -103,18 +116,27 @@ namespace devices NETLIB_UPDATEI() { - m_funcparam[0] = exec().time().as_fp(); - const netlist_time m_inc = netlist_time::from_fp(m_compiled->evaluate(m_funcparam)); + m_vals[0] = exec().time().as_fp(); + for (std::size_t i = 0; i < static_cast(m_N()); i++) + { + m_vals[i+1] = (*m_I[i])(); + } + const netlist_time m_inc = netlist_time::from_fp(m_compiled->evaluate(m_vals)); m_Q.push(m_feedback() ^ 1, m_inc); } private: + using pf_type = plib::pfunction; + param_int_t m_N; + param_str_t m_func; logic_input_t m_feedback; logic_output_t m_Q; + std::vector> m_I; - param_str_t m_func; - state_var> m_compiled; - std::vector m_funcparam; + pf_type::values_container m_vals; + state_var m_compiled; + + NETLIB_NAME(power_pins) m_supply; }; // ----------------------------------------------------------------------------- -- cgit v1.2.3