diff options
Diffstat (limited to 'src/lib/netlist/devices/nlid_proxy.cpp')
-rw-r--r-- | src/lib/netlist/devices/nlid_proxy.cpp | 121 |
1 files changed, 19 insertions, 102 deletions
diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp index dc613c58f4c..d59e7416e12 100644 --- a/src/lib/netlist/devices/nlid_proxy.cpp +++ b/src/lib/netlist/devices/nlid_proxy.cpp @@ -18,12 +18,10 @@ namespace netlist // ----------------------------------------------------------------------------- nld_base_proxy::nld_base_proxy(netlist_state_t &anetlist, const pstring &name, - logic_t *inout_proxied, detail::core_terminal_t *proxy_inout) + logic_t *inout_proxied) : device_t(anetlist, name) , m_tp(nullptr) , m_tn(nullptr) - , m_term_proxied(inout_proxied) - , m_proxy_term(proxy_inout) { m_logic_family = inout_proxied->logic_family(); @@ -60,29 +58,10 @@ namespace netlist } } } - //FIXME: Use power terminals and change info to warning or error if (!f) - { -#if 1 - if (logic_family()->fixed_V() == nlconst::zero()) - log().error(MI_NO_POWER_TERMINALS_ON_DEVICE_2(name, anetlist.setup().de_alias(inout_proxied->device().name()))); - else - log().warning(MI_NO_POWER_TERMINALS_ON_DEVICE_2(name, anetlist.setup().de_alias(inout_proxied->device().name()))); -#endif - m_GNDHack = plib::make_unique<analog_output_t>(*this, "_QGND"); - m_VCCHack = plib::make_unique<analog_output_t>(*this, "_QVCC"); - - m_tp = m_VCCHack.get(); - m_tn = m_GNDHack.get(); - m_need_hack = true; - } + log().error(MI_NO_POWER_TERMINALS_ON_DEVICE_2(name, anetlist.setup().de_alias(inout_proxied->device().name()))); else - { log().verbose("D/A Proxy: Found power terminals on device {1}", inout_proxied->device().name()); - m_need_hack = false; - } - //printf("vcc: %f\n", logic_family()->fixed_V()); - } // ---------------------------------------------------------------------------------------- @@ -90,53 +69,24 @@ namespace netlist // ---------------------------------------------------------------------------------------- nld_base_a_to_d_proxy::nld_base_a_to_d_proxy(netlist_state_t &anetlist, const pstring &name, - logic_input_t *in_proxied, detail::core_terminal_t *in_proxy) - : nld_base_proxy(anetlist, name, in_proxied, in_proxy) - , m_Q(*this, "Q") + logic_input_t *in_proxied) + : nld_base_proxy(anetlist, name, in_proxied) { } nld_a_to_d_proxy::nld_a_to_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *in_proxied) - : nld_base_a_to_d_proxy(anetlist, name, in_proxied, &m_I) + : nld_base_a_to_d_proxy(anetlist, name, in_proxied) + , m_Q(*this, "Q") , m_I(*this, "I") { } NETLIB_RESET(a_to_d_proxy) { - // FIXME: Variable voltage - nl_fptype supply_V = logic_family()->fixed_V(); - // FIXME: comparison to zero - if (supply_V == nlconst::zero()) - supply_V = nlconst::magic(5.0); - - if (need_hack()) - { - if (m_tn) - m_GNDHack->initial(0); - if (m_tp) - m_VCCHack->initial(supply_V); - } } NETLIB_UPDATE(a_to_d_proxy) { -#if 0 - nl_assert(m_logic_family != nullptr); - // FIXME: Variable supply voltage! - nl_fptype supply_V = logic_family()->fixed_V(); - // FIXME: bad hack - if (supply_V == nlconst::zero()) supply_V = nlconst::magic(5.0); - - if (m_I.Q_Analog() > logic_family()->high_thresh_V(nlconst::zero(), supply_V)) - out().push(1, netlist_time::quantum()); - else if (m_I.Q_Analog() < logic_family()->low_thresh_V(nlconst::zero(), supply_V)) - out().push(0, netlist_time::quantum()); - else - { - // do nothing - } -#else const auto v(m_I.Q_Analog()); const auto vn(m_tn->net().Q_Analog()); const auto vp(m_tp->net().Q_Analog()); @@ -149,7 +99,6 @@ namespace netlist { // do nothing } -#endif } // ---------------------------------------------------------------------------------------- @@ -157,14 +106,14 @@ namespace netlist // ---------------------------------------------------------------------------------------- nld_base_d_to_a_proxy::nld_base_d_to_a_proxy(netlist_state_t &anetlist, const pstring &name, - logic_output_t *out_proxied, detail::core_terminal_t &proxy_out) - : nld_base_proxy(anetlist, name, out_proxied, &proxy_out) - , m_I(*this, "I") + logic_output_t *out_proxied) + : nld_base_proxy(anetlist, name, out_proxied) { } nld_d_to_a_proxy::nld_d_to_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *out_proxied) - : nld_base_d_to_a_proxy(anetlist, name, out_proxied, m_RN.m_P) + : nld_base_d_to_a_proxy(anetlist, name, out_proxied) + , m_I(*this, "I") , m_RP(*this, "RP") , m_RN(*this, "RN") , m_last_state(*this, "m_last_var", -1) @@ -172,62 +121,30 @@ namespace netlist { register_subalias("Q", m_RN.m_P); - if (need_hack()) + log().verbose("D/A Proxy: Found power terminals on device {1}", out_proxied->device().name()); + if (anetlist.setup().is_extended_validation()) { - if (anetlist.setup().is_extended_validation()) - { - // During validation, don't connect to terminals found - // This will cause terminals not connected to a rail net to - // fail connection stage. - connect(m_RN.m_N, m_RP.m_P); - } - else - { - connect(m_RN.m_N, *m_tn); - connect(m_RP.m_P, *m_tp); - } - connect(m_RN.m_P, m_RP.m_N); + // During validation, don't connect to terminals found + // This will cause terminals not connected to a rail net to + // fail connection stage. + connect(m_RN.m_N, m_RP.m_P); } else { - log().verbose("D/A Proxy: Found power terminals on device {1}", out_proxied->device().name()); - if (anetlist.setup().is_extended_validation()) - { - // During validation, don't connect to terminals found - // This will cause terminals not connected to a rail net to - // fail connection stage. - connect(m_RN.m_N, m_RP.m_P); - } - else - { - connect(m_RN.m_N, *m_tn); - connect(m_RP.m_P, *m_tp); - } - connect(m_RN.m_P, m_RP.m_N); + connect(m_RN.m_N, *m_tn); + connect(m_RP.m_P, *m_tp); } + connect(m_RN.m_P, m_RP.m_N); //printf("vcc: %f\n", logic_family()->fixed_V()); } void nld_d_to_a_proxy::reset() { - // FIXME: Variable voltage - nl_fptype supply_V = logic_family()->fixed_V(); - // FIXME: comparison to zero - if (supply_V == nlconst::zero()) - supply_V = nlconst::magic(5.0); - //m_Q.initial(0.0); m_last_state = -1; m_RN.reset(); m_RP.reset(); - if (need_hack()) - { - if (m_tn) - m_GNDHack->initial(0); - if (m_tp) - m_VCCHack->initial(supply_V); - } m_is_timestep = m_RN.m_P.net().solver()->has_timestep_devices(); m_RN.set_G_V_I(plib::reciprocal(logic_family()->R_low()), logic_family()->low_offset_V(), nlconst::zero()); |