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.
This commit is contained in:
couriersud 2020-08-23 16:57:56 +02:00
parent d1c74db666
commit 915e4a3171
16 changed files with 117 additions and 123 deletions

View File

@ -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")}}));
}

View File

@ -40,7 +40,6 @@ namespace netlist
protected:
//NETLIB_UPDATE_TERMINALSI() { }
private:
param_model_t m_model;
};

View File

@ -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() {}

View File

@ -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()

View File

@ -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());

View File

@ -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:

View File

@ -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");

View File

@ -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");

View File

@ -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");

View File

@ -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()

View File

@ -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()

View File

@ -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());
}

View File

@ -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())

View File

@ -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:

View File

@ -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;
}

View File

@ -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();