From 915e4a3171c9a360089b688cb174fbdedf13ddfc Mon Sep 17 00:00:00 2001 From: couriersud Date: Sun, 23 Aug 2020 16:57:56 +0200 Subject: [PATCH] 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. --- src/lib/netlist/analog/nlid_twoterm.h | 4 +- src/lib/netlist/core/device.h | 1 - src/lib/netlist/devices/nld_4020.cpp | 58 ++++++++++++------------- src/lib/netlist/devices/nld_4053.cpp | 8 ++-- src/lib/netlist/devices/nld_74123.cpp | 16 +++---- src/lib/netlist/devices/nld_74ls629.cpp | 12 +++-- src/lib/netlist/devices/nld_8277.cpp | 24 +++++----- src/lib/netlist/devices/nld_9322.cpp | 24 +++++----- src/lib/netlist/devices/nld_am2847.cpp | 24 +++++----- src/lib/netlist/devices/nld_mm5837.cpp | 6 +-- src/lib/netlist/devices/nld_ne555.cpp | 18 ++++---- src/lib/netlist/devices/nld_schmitt.cpp | 5 ++- src/lib/netlist/devices/nlid_proxy.cpp | 2 +- src/lib/netlist/devices/nlid_system.h | 34 +++++++-------- src/lib/netlist/nl_interface.h | 2 +- src/lib/netlist/solver/nld_solver.h | 2 +- 16 files changed, 117 insertions(+), 123 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("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 + 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(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()); + 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 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(m_queue), this->name(), "m_queue"); - connect(m_fb_step, m_Q_step); + connect("FB_step", "Q_step"); } void post_start();