summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-08-23 16:57:56 +0200
committer couriersud <couriersud@gmx.org>2020-08-23 17:25:18 +0200
commit915e4a3171c9a360089b688cb174fbdedf13ddfc (patch)
treea008e905274347fab5c3b1578b12a7bc80c27ac5
parentd1c74db66641fcfd54f0482ee9f9f650bf53a8f2 (diff)
netlist: References to subdevices should be symbolic.
* Exposing sub-device members is not best practice. * The need for sub-devices is a clear indication that a netlist language implementation would be a better solution.
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.h4
-rw-r--r--src/lib/netlist/core/device.h1
-rw-r--r--src/lib/netlist/devices/nld_4020.cpp58
-rw-r--r--src/lib/netlist/devices/nld_4053.cpp8
-rw-r--r--src/lib/netlist/devices/nld_74123.cpp16
-rw-r--r--src/lib/netlist/devices/nld_74ls629.cpp12
-rw-r--r--src/lib/netlist/devices/nld_8277.cpp24
-rw-r--r--src/lib/netlist/devices/nld_9322.cpp24
-rw-r--r--src/lib/netlist/devices/nld_am2847.cpp24
-rw-r--r--src/lib/netlist/devices/nld_mm5837.cpp6
-rw-r--r--src/lib/netlist/devices/nld_ne555.cpp20
-rw-r--r--src/lib/netlist/devices/nld_schmitt.cpp5
-rw-r--r--src/lib/netlist/devices/nlid_proxy.cpp2
-rw-r--r--src/lib/netlist/devices/nlid_system.h34
-rw-r--r--src/lib/netlist/nl_interface.h2
-rw-r--r--src/lib/netlist/solver/nld_solver.h2
16 files changed, 118 insertions, 124 deletions
diff --git a/src/lib/netlist/analog/nlid_twoterm.h b/src/lib/netlist/analog/nlid_twoterm.h
index ebbfa479864..6f42e90b3bf 100644
--- a/src/lib/netlist/analog/nlid_twoterm.h
+++ b/src/lib/netlist/analog/nlid_twoterm.h
@@ -635,8 +635,8 @@ namespace analog
, m_compiled(*this, "m_compiled")
, m_funcparam({nlconst::zero()})
{
- register_subalias("P", P());
- register_subalias("N", N());
+ register_subalias("P", "1");
+ register_subalias("N", "2");
if (!m_func().empty())
m_compiled->compile(m_func(), std::vector<pstring>({{pstring("T")}}));
}
diff --git a/src/lib/netlist/core/device.h b/src/lib/netlist/core/device.h
index c087686b0dc..241325970d2 100644
--- a/src/lib/netlist/core/device.h
+++ b/src/lib/netlist/core/device.h
@@ -40,7 +40,6 @@ namespace netlist
protected:
//NETLIB_UPDATE_TERMINALSI() { }
-
private:
param_model_t m_model;
};
diff --git a/src/lib/netlist/devices/nld_4020.cpp b/src/lib/netlist/devices/nld_4020.cpp
index 1edc893aed9..bbca07b2c72 100644
--- a/src/lib/netlist/devices/nld_4020.cpp
+++ b/src/lib/netlist/devices/nld_4020.cpp
@@ -115,24 +115,24 @@ namespace netlist
NETLIB_OBJECT(CD4020)
{
NETLIB_CONSTRUCTOR_MODEL(CD4020, "CD4XXX")
- , m_sub(*this, "sub")
+ , m_sub(*this, "A")
{
- register_subalias("IP", m_sub.m_IP);
- register_subalias("RESET", m_sub.m_RESET);
- register_subalias("Q1", m_sub.m_Q[0]);
- register_subalias("Q4", m_sub.m_Q[3]);
- register_subalias("Q5", m_sub.m_Q[4]);
- register_subalias("Q6", m_sub.m_Q[5]);
- register_subalias("Q7", m_sub.m_Q[6]);
- register_subalias("Q8", m_sub.m_Q[7]);
- register_subalias("Q9", m_sub.m_Q[8]);
- register_subalias("Q10", m_sub.m_Q[9]);
- register_subalias("Q11", m_sub.m_Q[10]);
- register_subalias("Q12", m_sub.m_Q[11]);
- register_subalias("Q13", m_sub.m_Q[12]);
- register_subalias("Q14", m_sub.m_Q[13]);
- register_subalias("VDD", "sub.VDD");
- register_subalias("VSS", "sub.VSS");
+ register_subalias("IP", "A.IP");
+ register_subalias("RESET", "A.RESET");
+ register_subalias("Q1", "A.Q1");
+ register_subalias("Q4", "A.Q4");
+ register_subalias("Q5", "A.Q5");
+ register_subalias("Q6", "A.Q6");
+ register_subalias("Q7", "A.Q7");
+ register_subalias("Q8", "A.Q8");
+ register_subalias("Q9", "A.Q9");
+ register_subalias("Q10", "A.Q10");
+ register_subalias("Q11", "A.Q11");
+ register_subalias("Q12", "A.Q12");
+ register_subalias("Q13", "A.Q13");
+ register_subalias("Q14", "A.Q14");
+ register_subalias("VDD", "A.VDD");
+ register_subalias("VSS", "A.VSS");
}
//NETLIB_RESETI() {}
@@ -144,19 +144,19 @@ namespace netlist
NETLIB_OBJECT(CD4024)
{
NETLIB_CONSTRUCTOR_MODEL(CD4024, "CD4XXX")
- , m_sub(*this, "sub")
+ , m_sub(*this, "A")
{
- register_subalias("IP", m_sub.m_IP);
- register_subalias("RESET", m_sub.m_RESET);
- register_subalias("Q1", m_sub.m_Q[0]);
- register_subalias("Q2", m_sub.m_Q[1]);
- register_subalias("Q3", m_sub.m_Q[2]);
- register_subalias("Q4", m_sub.m_Q[3]);
- register_subalias("Q5", m_sub.m_Q[4]);
- register_subalias("Q6", m_sub.m_Q[5]);
- register_subalias("Q7", m_sub.m_Q[6]);
- register_subalias("VDD", "sub.VDD");
- register_subalias("VSS", "sub.VSS");
+ register_subalias("IP", "A.IP");
+ register_subalias("RESET", "A.RESET");
+ register_subalias("Q1", "A.Q1");
+ register_subalias("Q2", "A.Q2");
+ register_subalias("Q3", "A.Q3");
+ register_subalias("Q4", "A.Q4");
+ register_subalias("Q5", "A.Q5");
+ register_subalias("Q6", "A.Q6");
+ register_subalias("Q7", "A.Q7");
+ register_subalias("VDD", "A.VDD");
+ register_subalias("VSS", "A.VSS");
}
//NETLIB_RESETI() {}
diff --git a/src/lib/netlist/devices/nld_4053.cpp b/src/lib/netlist/devices/nld_4053.cpp
index 5056b453622..fb61415f01d 100644
--- a/src/lib/netlist/devices/nld_4053.cpp
+++ b/src/lib/netlist/devices/nld_4053.cpp
@@ -47,10 +47,10 @@ namespace netlist
, m_inhibit_state(*this, "m_inhibit_state", false)
, m_supply(*this)
{
- connect(m_RX.N(), m_RY.N());
- register_subalias("X", m_RX.P());
- register_subalias("Y", m_RY.P());
- register_subalias("XY", m_RX.N());
+ connect("RX.2", "RY.2");
+ register_subalias("X", "RX.1");
+ register_subalias("Y", "RY.1");
+ register_subalias("XY", "RX.2");
}
NETLIB_RESETI()
diff --git a/src/lib/netlist/devices/nld_74123.cpp b/src/lib/netlist/devices/nld_74123.cpp
index f19f0042be1..a7651c9de6c 100644
--- a/src/lib/netlist/devices/nld_74123.cpp
+++ b/src/lib/netlist/devices/nld_74123.cpp
@@ -120,16 +120,16 @@ namespace netlist
//, m_power_pins(*this)
{
- register_subalias(pstring(D::gnd()), m_RN.N());
- register_subalias(pstring(D::vcc()), m_RP.P());
- register_subalias("C", m_RN.N());
- register_subalias("RC", m_RN.P());
+ register_subalias(pstring(D::gnd()), "RN.2");
+ register_subalias(pstring(D::vcc()), "RP.1");
+ register_subalias("C", "RN.2");
+ register_subalias("RC", "RN.1");
- connect(m_RP_Q, m_RP.I());
- connect(m_RN_Q, m_RN.I());
+ connect("_RP_Q", "RP.I");
+ connect("_RN_Q", "RN.I");
- connect(m_RN.P(), m_RP.N());
- connect(m_CV, m_RN.P());
+ connect("RN.1", "RP.2");
+ connect("_CV", "RN.1");
m_RP.m_RON.set(D::RI());
m_RN.m_RON.set(D::RI());
diff --git a/src/lib/netlist/devices/nld_74ls629.cpp b/src/lib/netlist/devices/nld_74ls629.cpp
index 05bc66a60d8..d9822492c80 100644
--- a/src/lib/netlist/devices/nld_74ls629.cpp
+++ b/src/lib/netlist/devices/nld_74ls629.cpp
@@ -76,7 +76,7 @@ namespace netlist
, m_out(owner, "m_out", 0)
, m_inc(owner, "m_inc", netlist_time::zero())
{
- owner.connect(m_FB, m_Y);
+ owner.connect("FB", "Y");
}
public:
@@ -116,13 +116,11 @@ namespace netlist
, m_power_pins(*this)
, m_power_pins_osc(*this, "OSCVCC", "OSCGND")
{
- connect(m_power_pins_osc.GND(), m_R_FC.N());
+ connect("OSCGND", "R_FC.2");
- connect(m_FC, m_R_FC.P());
- connect(m_RNG, m_R_RNG.P());
- connect(m_R_FC.N(), m_R_RNG.N());
-
- register_subalias("Y", m_clock.m_Y);
+ connect("FC", "R_FC.1");
+ connect("RNG", "R_RNG.1");
+ connect("R_FC.2", "R_RNG.2");
}
private:
diff --git a/src/lib/netlist/devices/nld_8277.cpp b/src/lib/netlist/devices/nld_8277.cpp
index aeb3f17dfca..e7f87c9336f 100644
--- a/src/lib/netlist/devices/nld_8277.cpp
+++ b/src/lib/netlist/devices/nld_8277.cpp
@@ -87,20 +87,16 @@ namespace netlist
, m_last_CLKB(*this, "m_last_CLKB", 0)
// FIXME: needs family!
{
- register_subalias("RESET", m_RESET);
- register_subalias("CLK", m_CLK);
- register_subalias("CLKA", m_CLKA);
- register_subalias("CLKB", m_CLKB);
- register_subalias("D0A", m_A.m_D0);
- register_subalias("D1A", m_A.m_D1);
- register_subalias("DSA", m_A.m_DS);
- register_subalias("Q7A", m_A.m_Q7);
- register_subalias("Q7QA", m_A.m_Q7Q);
- register_subalias("D0B", m_B.m_D0);
- register_subalias("D1B", m_B.m_D1);
- register_subalias("DSB", m_B.m_DS);
- register_subalias("Q7B", m_B.m_Q7);
- register_subalias("Q7QB", m_B.m_Q7Q);
+ register_subalias("D0A", "A.D0");
+ register_subalias("D1A", "A.D1");
+ register_subalias("DSA", "A.DS");
+ register_subalias("Q7A", "A.Q7");
+ register_subalias("Q7QA", "A.Q7Q");
+ register_subalias("D0B", "B.D0");
+ register_subalias("D1B", "B.D1");
+ register_subalias("DSB", "B.DS");
+ register_subalias("Q7B", "B.Q7");
+ register_subalias("Q7QB", "B.Q7Q");
connect("A.VCC", "B.VCC");
connect("A.GND", "B.GND");
diff --git a/src/lib/netlist/devices/nld_9322.cpp b/src/lib/netlist/devices/nld_9322.cpp
index 4ceb865a13a..bfc643b27ae 100644
--- a/src/lib/netlist/devices/nld_9322.cpp
+++ b/src/lib/netlist/devices/nld_9322.cpp
@@ -67,18 +67,18 @@ namespace netlist
, m_3(*this, "C")
, m_4(*this, "D")
{
- register_subalias("A1", m_1.m_A);
- register_subalias("B1", m_1.m_B);
- register_subalias("Y1", m_1.m_Y);
- register_subalias("A2", m_2.m_A);
- register_subalias("B2", m_2.m_B);
- register_subalias("Y2", m_2.m_Y);
- register_subalias("A3", m_3.m_A);
- register_subalias("B3", m_3.m_B);
- register_subalias("Y3", m_3.m_Y);
- register_subalias("A4", m_4.m_A);
- register_subalias("B4", m_4.m_B);
- register_subalias("Y4", m_4.m_Y);
+ register_subalias("A1", "A.A");
+ register_subalias("B1", "A.B");
+ register_subalias("Y1", "A.Y");
+ register_subalias("A2", "B.A");
+ register_subalias("B2", "B.B");
+ register_subalias("Y2", "B.Y");
+ register_subalias("A3", "C.A");
+ register_subalias("B3", "C.B");
+ register_subalias("Y3", "C.Y");
+ register_subalias("A4", "D.A");
+ register_subalias("B4", "D.B");
+ register_subalias("Y4", "D.Y");
connect("A.VCC", "B.VCC");
connect("A.VCC", "C.VCC");
diff --git a/src/lib/netlist/devices/nld_am2847.cpp b/src/lib/netlist/devices/nld_am2847.cpp
index 376ceefd02a..89034dc518b 100644
--- a/src/lib/netlist/devices/nld_am2847.cpp
+++ b/src/lib/netlist/devices/nld_am2847.cpp
@@ -76,18 +76,18 @@ namespace netlist
, m_last_CP(*this, "m_last_CP", 0)
// FIXME: needs family!
{
- register_subalias("OUTA", m_A.m_OUT);
- register_subalias("OUTB", m_B.m_OUT);
- register_subalias("OUTC", m_C.m_OUT);
- register_subalias("OUTD", m_D.m_OUT);
- register_subalias("INA", m_A.m_IN);
- register_subalias("INB", m_B.m_IN);
- register_subalias("INC", m_C.m_IN);
- register_subalias("IND", m_D.m_IN);
- register_subalias("RCA", m_A.m_RC);
- register_subalias("RCB", m_B.m_RC);
- register_subalias("RCC", m_C.m_RC);
- register_subalias("RCD", m_D.m_RC);
+ register_subalias("OUTA", "A.OUT");
+ register_subalias("OUTB", "B.OUT");
+ register_subalias("OUTC", "C.OUT");
+ register_subalias("OUTD", "D.OUT");
+ register_subalias("INA", "A.IN");
+ register_subalias("INB", "B.IN");
+ register_subalias("INC", "C.IN");
+ register_subalias("IND", "D.IN");
+ register_subalias("RCA", "A.RC");
+ register_subalias("RCB", "B.RC");
+ register_subalias("RCC", "C.RC");
+ register_subalias("RCD", "D.RC");
connect("A.VSS", "B.VSS");
connect("A.VSS", "C.VSS");
diff --git a/src/lib/netlist/devices/nld_mm5837.cpp b/src/lib/netlist/devices/nld_mm5837.cpp
index 4f1065454d5..b55593eb10d 100644
--- a/src/lib/netlist/devices/nld_mm5837.cpp
+++ b/src/lib/netlist/devices/nld_mm5837.cpp
@@ -40,11 +40,11 @@ namespace netlist
, m_inc(netlist_time::from_hz(24000 * 2))
, m_shift(*this, "m_shift", 0)
{
- connect(m_feedback, m_Q);
+ connect("_FB", "_Q");
// output
- connect(m_RV.N(), m_VDD);
- register_subalias("OUT", m_RV.P());
+ connect("_RV.2", "VDD");
+ register_subalias("OUT", "_RV.1");
}
NETLIB_RESETI()
diff --git a/src/lib/netlist/devices/nld_ne555.cpp b/src/lib/netlist/devices/nld_ne555.cpp
index 8df9a76cb1f..25ef0998d23 100644
--- a/src/lib/netlist/devices/nld_ne555.cpp
+++ b/src/lib/netlist/devices/nld_ne555.cpp
@@ -86,16 +86,16 @@ namespace netlist
, m_undershoot(*this, "m_undershoot", 0.0)
, m_ovlimit(0.0)
{
- register_subalias("GND", m_R3.N()); // Pin 1
- register_subalias("CONT", m_R1.N()); // Pin 5
- register_subalias("DISCH", m_RDIS.P()); // Pin 7
- register_subalias("VCC", m_R1.P()); // Pin 8
- register_subalias("OUT", m_ROUT.P()); // Pin 3
-
- connect(m_R1.N(), m_R2.P());
- connect(m_R2.N(), m_R3.P());
- connect(m_RDIS.N(), m_R3.N());
- connect(m_OUT, m_ROUT.N());
+ register_subalias("GND", "R3.2"); // Pin 1
+ register_subalias("CONT", "R1.2"); // Pin 5
+ register_subalias("DISCH", "RDIS.1"); // Pin 7
+ register_subalias("VCC", "R1.1"); // Pin 8
+ register_subalias("OUT", "ROUT.1"); // Pin 3
+
+ connect("R1.2", "R2.1");
+ connect("R2.2", "R3.1");
+ connect("RDIS.2", "R3.2");
+ connect("_OUT", "ROUT.2");
}
NETLIB_RESETI()
diff --git a/src/lib/netlist/devices/nld_schmitt.cpp b/src/lib/netlist/devices/nld_schmitt.cpp
index f78b8f0cf65..e201fe822d1 100644
--- a/src/lib/netlist/devices/nld_schmitt.cpp
+++ b/src/lib/netlist/devices/nld_schmitt.cpp
@@ -67,9 +67,10 @@ namespace netlist
, m_modacc(m_stmodel)
, m_last_state(*this, "m_last_var", 1)
{
- register_subalias("Q", m_RVO.P());
+ register_subalias("Q", "RVO.1");
- connect(m_A, m_RVI.P());
+ connect("A", "RVI.1");
+ // FIXME: need a symbolic reference from connect as well
connect(m_supply.GND(), m_RVI.N());
connect(m_supply.GND(), m_RVO.N());
}
diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp
index 5723797c53b..51eb0fbf5cd 100644
--- a/src/lib/netlist/devices/nlid_proxy.cpp
+++ b/src/lib/netlist/devices/nlid_proxy.cpp
@@ -122,7 +122,7 @@ namespace netlist
, m_RN(*this, "RN")
, m_last_state(*this, "m_last_var", terminal_t::OUT_TRISTATE())
{
- register_subalias("Q", m_RN.P());
+ register_subalias("Q", "RN.1");
log().verbose("D/A Proxy: Found power terminals on device {1}", out_proxied->device().name());
if (anetlist.is_extended_validation())
diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h
index b0e2529db74..d00339e852b 100644
--- a/src/lib/netlist/devices/nlid_system.h
+++ b/src/lib/netlist/devices/nlid_system.h
@@ -34,7 +34,7 @@ namespace devices
{
m_inc = netlist_time::from_fp(plib::reciprocal(m_freq()*nlconst::two()));
- connect(m_feedback, m_Q);
+ connect("FB", "Q");
}
NETLIB_UPDATE_PARAMI()
@@ -85,7 +85,7 @@ namespace devices
}
m_compiled->compile(m_func(), inps);
}
- connect(m_feedback, m_Q);
+ connect("FB", "Q");
}
//NETLIB_RESETI();
//NETLIB_UPDATE_PARAMI()
@@ -132,7 +132,7 @@ namespace devices
{
m_inc[0] = netlist_time::from_fp(plib::reciprocal(m_freq()*nlconst::two()));
- connect(m_feedback, m_Q);
+ connect("FB", "Q");
netlist_time base = netlist_time::from_fp(plib::reciprocal(m_freq()*nlconst::two()));
std::vector<pstring> pat(plib::psplit(m_pattern(),","));
@@ -346,13 +346,13 @@ namespace devices
, m_p_ROUT(*this, "ROUT", nlconst::magic(50.0))
{
- register_subalias("I", m_RIN.P());
- register_subalias("G", m_RIN.N());
- connect(m_I, m_RIN.P());
+ register_subalias("I", "m_RIN.1");
+ register_subalias("G", "m_RIN.2");
+ connect("_I", "m_RIN.1");
- register_subalias("_OP", m_ROUT.P());
- register_subalias("Q", m_ROUT.N());
- connect(m_Q, m_ROUT.P());
+ register_subalias("_OP", "m_ROUT.1");
+ register_subalias("Q", "m_ROUT.2");
+ connect("_Q", "m_ROUT.1");
}
private:
@@ -448,8 +448,8 @@ namespace devices
, m_I(*this, "I", NETLIB_DELEGATE(input))
, m_last_state(*this, "m_last_state", 0)
{
- register_subalias("1", m_R.P());
- register_subalias("2", m_R.N());
+ register_subalias("1", "_R.1");
+ register_subalias("2", "_R.2");
}
NETLIB_RESETI()
@@ -506,10 +506,10 @@ namespace devices
, m_power_pins(*this)
{
// connect and register pins
- register_subalias("1", m_R1.P());
- register_subalias("2", m_R1.N());
- register_subalias("3", m_R2.N());
- connect(m_R1.N(), m_R2.P());
+ register_subalias("1", "_R1.1");
+ register_subalias("2", "_R1.2");
+ register_subalias("3", "_R2.2");
+ connect("_R1.2", "_R2.1");
}
private:
@@ -653,8 +653,8 @@ namespace devices
, m_dis(*this, "m_dis",m_sigma())
{
- register_subalias("1", m_T.P());
- register_subalias("2", m_T.N());
+ register_subalias("1", "m_T.1");
+ register_subalias("2", "m_T.2");
}
private:
diff --git a/src/lib/netlist/nl_interface.h b/src/lib/netlist/nl_interface.h
index 4b8b7cbcbfb..be90e96020c 100644
--- a/src/lib/netlist/nl_interface.h
+++ b/src/lib/netlist/nl_interface.h
@@ -143,7 +143,7 @@ namespace netlist
, m_param(nullptr)
, m_id(*this, "ID", 0)
{
- connect(m_feedback, m_Q);
+ connect("FB", "Q");
m_buffer = nullptr;
}
diff --git a/src/lib/netlist/solver/nld_solver.h b/src/lib/netlist/solver/nld_solver.h
index f742132b862..8014830e4a0 100644
--- a/src/lib/netlist/solver/nld_solver.h
+++ b/src/lib/netlist/solver/nld_solver.h
@@ -41,7 +41,7 @@ namespace devices
// internal stuff
state().save(*this, static_cast<plib::state_manager_t::callback_t &>(m_queue), this->name(), "m_queue");
- connect(m_fb_step, m_Q_step);
+ connect("FB_step", "Q_step");
}
void post_start();