summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nlid_proxy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/devices/nlid_proxy.cpp')
-rw-r--r--src/lib/netlist/devices/nlid_proxy.cpp121
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());