netlist: Potential regression trigger.

* Removed update and NETLIB_UPDATE completely.
* Startup initialization order may change.
* This may cause regression tests to trigger. This is expected. Logic
TTL devices do not have a defined power-up state. That's why reset
circuits exist which create a reset signal *after* all power supply
lines are stable.
This commit is contained in:
couriersud 2020-07-17 23:12:24 +02:00
parent 976212053c
commit f0d012c1f5
67 changed files with 40 additions and 526 deletions

View File

@ -142,7 +142,6 @@ namespace analog
NETLIB_IS_DYNAMIC(true)
//NETLIB_RESETI();
NETLIB_UPDATEI();
bjt_type qtype() const noexcept { return m_qtype; }
bool is_qtype(bjt_type atype) const noexcept { return m_qtype == atype; }
@ -194,10 +193,6 @@ namespace analog
}
NETLIB_RESETI();
NETLIB_UPDATEI()
{
termhandler();
}
NETLIB_HANDLERI(termhandler)
{
auto *solv(m_RB.solver());
@ -268,11 +263,6 @@ namespace analog
protected:
NETLIB_RESETI();
NETLIB_UPDATEI()
{
termhandler();
}
NETLIB_HANDLERI(termhandler)
{
auto *solv(m_D_EB.solver());
@ -302,15 +292,6 @@ namespace analog
};
// ----------------------------------------------------------------------------------------
// nld_Q
// ----------------------------------------------------------------------------------------
NETLIB_UPDATE(QBJT)
{
// netlist().solver()->schedule1();
}
// ----------------------------------------------------------------------------------------
// nld_QBJT_switch
// ----------------------------------------------------------------------------------------

View File

@ -162,7 +162,6 @@ namespace analog
NETLIB_IS_DYNAMIC(true)
//NETLIB_RESETI();
//NETLIB_UPDATEI() {}
q_type qtype() const noexcept { return m_qtype; }
bool is_qtype(q_type atype) const noexcept { return m_qtype == atype; }
@ -332,10 +331,6 @@ namespace analog
#endif
}
NETLIB_UPDATEI()
{
termhandler();
}
NETLIB_HANDLERI(termhandler)
{
// FIXME: This should never be called

View File

@ -183,11 +183,6 @@ namespace netlist
}
NETLIB_UPDATEI()
{
supply();
}
NETLIB_HANDLERI(supply)
{
const nl_fptype cVt = nlconst::np_VT(nlconst::one()); // * m_n;

View File

@ -29,33 +29,23 @@ namespace netlist
register_subalias("2", m_R.N());
}
NETLIB_RESETI();
NETLIB_UPDATEI();
NETLIB_UPDATE_PARAMI();
NETLIB_RESETI()
{
m_R.set_R(R_OFF);
}
NETLIB_UPDATE_PARAMI()
{
m_R.change_state([this]()
{
m_R.set_R(m_POS() ? R_ON : R_OFF);
});
}
private:
analog::NETLIB_SUB(R_base) m_R;
param_logic_t m_POS;
};
NETLIB_RESET(switch1)
{
m_R.set_R(R_OFF);
}
NETLIB_UPDATE(switch1)
{
}
NETLIB_UPDATE_PARAM(switch1)
{
m_R.change_state([this]()
{
m_R.set_R(m_POS() ? R_ON : R_OFF);
});
}
// ----------------------------------------------------------------------------------------
// SWITCH2
// ----------------------------------------------------------------------------------------
@ -76,7 +66,6 @@ namespace netlist
}
NETLIB_RESETI();
NETLIB_UPDATEI();
NETLIB_UPDATE_PARAMI();
private:
@ -91,6 +80,7 @@ namespace netlist
m_R2.set_R(R_OFF);
}
#ifdef FIXMELATER
NETLIB_UPDATE(switch2)
{
if (!m_POS())
@ -104,7 +94,7 @@ namespace netlist
m_R2.set_R(R_ON);
}
}
#endif
NETLIB_UPDATE_PARAM(switch2)
{
// R1 and R2 are connected. However this net may be a rail net.

View File

@ -30,11 +30,6 @@ NETLIB_RESET(VCCS)
m_ON1.set_go_gt(-m_mult, nlconst::zero());
}
NETLIB_UPDATE(VCCS)
{
termhandler();
}
NETLIB_HANDLER(VCCS, termhandler)
{
// only called if connected to a rail net ==> notify the solver to recalculate

View File

@ -57,7 +57,6 @@ namespace analog {
param_fp_t m_RI;
protected:
NETLIB_UPDATEI();
NETLIB_HANDLERI(termhandler);
NETLIB_UPDATE_PARAMI()
{
@ -194,10 +193,6 @@ namespace analog {
param_fp_t m_RO;
private:
NETLIB_UPDATEI()
{
termhandler();
}
//NETLIB_UPDATE_PARAMI();
NETLIB_HANDLERI(termhandler)
{
@ -253,10 +248,6 @@ namespace analog {
param_fp_t m_RO;
private:
NETLIB_UPDATEI()
{
termhandler();
}
//NETLIB_UPDATE_PARAMI();
NETLIB_HANDLERI(termhandler)

View File

@ -31,11 +31,6 @@ namespace analog
solv->solve_now();
}
NETLIB_UPDATE(twoterm)
{
termhandler();
}
NETLIB_HANDLER(twoterm, termhandler)
{
// only called if connected to a rail net ==> notify the solver to recalculate

View File

@ -89,7 +89,6 @@ namespace analog
public:
NETLIB_UPDATEI();
NETLIB_HANDLERI(termhandler);
solver::matrix_solver_t *solver() const noexcept;
@ -221,7 +220,6 @@ namespace analog
protected:
//NETLIB_UPDATEI() {}
NETLIB_RESETI()
{
set_R(std::max(m_R(), exec().gmin()));

View File

@ -60,11 +60,6 @@ namespace netlist
}
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(2102A_dip);
private:
object_array_t<logic_input_t, 10> m_A;
@ -106,7 +101,6 @@ namespace netlist
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(2102A) A;
};

View File

@ -59,10 +59,6 @@ namespace netlist
}
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(CD4006_dip);
private:
logic_input_t m_CLOCK;
@ -95,7 +91,6 @@ namespace netlist
register_subalias("14", "A.VDD");
}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(CD4006) A;
};

View File

@ -35,11 +35,6 @@ namespace netlist
m_nextD = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(inputs)
{
const auto set(m_SET());

View File

@ -37,11 +37,6 @@ namespace netlist
update_outputs(m_cnt);
}
NETLIB_UPDATEI()
{
ip();
}
public:
void update_outputs(const unsigned cnt) noexcept
{
@ -106,11 +101,6 @@ namespace netlist
m_sub.m_IP.activate_hl();
}
NETLIB_UPDATEI()
{
inputs();
}
private:
NETLIB_SUB(CD4020_sub) m_sub;
logic_input_t m_RESET;

View File

@ -46,11 +46,6 @@ namespace netlist
m_R.set_R(plib::reciprocal(exec().gmin()));
}
NETLIB_UPDATEI()
{
control();
}
private:
NETLIB_HANDLERI(control)
{
@ -108,10 +103,6 @@ namespace netlist
// FIXME: is ROFF correct?
}
NETLIB_UPDATEI()
{
}
NETLIB_UPDATE_TERMINALSI()
{
nl_fptype sup = (m_supply.VCC().Q_Analog() - m_supply.GND().Q_Analog());

View File

@ -41,11 +41,6 @@ namespace netlist { namespace devices {
, NLTIME_FROM_NS(1));
}
NETLIB_UPDATEI()
{
inputs();
}
private:
analog::NETLIB_SUB(R_base) m_R;

View File

@ -41,11 +41,6 @@ namespace netlist
//m_QQ.initial(1);
}
NETLIB_UPDATEI()
{
other();
}
NETLIB_HANDLERI(other)
{
if (!m_clrQ())

View File

@ -70,11 +70,6 @@ namespace netlist
m_QQ.push(m_q ^ 1, NLTIME_FROM_NS(20)); // FIXME: timing
}
NETLIB_UPDATEI()
{
inputs();
}
public:
logic_input_t m_CLK;
logic_input_t m_J;

View File

@ -127,11 +127,6 @@ namespace netlist
m_last_trig = m_trig;
}
NETLIB_UPDATEI()
{
cv();
}
NETLIB_HANDLERI(cv)
{
if (m_state == 1)

View File

@ -45,11 +45,9 @@ namespace netlist
}
private:
NETLIB_RESETI()
{
}
//NETLIB_RESETI() {}
NETLIB_UPDATEI()
NETLIB_UPDATE_PARAMI()
{
// this one is only called during startup. Ensure all outputs
// are in a consistent state.

View File

@ -41,11 +41,6 @@ namespace devices
sub();
}
NETLIB_UPDATEI()
{
other();
}
NETLIB_HANDLERI(sub)
{
constexpr const std::array<netlist_time, 2> delay = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };

View File

@ -64,11 +64,6 @@ namespace netlist
m_last_CLK = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(74164_dip);
private:
logic_input_t m_A;

View File

@ -66,11 +66,6 @@ namespace netlist
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(74165_dip);
private:
object_array_t<logic_input_t, 8> m_DATA;
@ -110,7 +105,6 @@ namespace netlist
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(74165) A;
};

View File

@ -84,11 +84,6 @@ namespace netlist
m_QH.push(qh, delay); //FIXME
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(74166_dip);
private:
object_array_t<logic_input_t, 8> m_DATA;
@ -129,7 +124,6 @@ namespace netlist
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(74166) A;
};

View File

@ -54,11 +54,6 @@ namespace devices
}
}
NETLIB_UPDATEI()
{
other();
}
NETLIB_HANDLERI(clk)
{
if (m_clrq)
@ -115,7 +110,6 @@ namespace devices
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(74174) A;
};

View File

@ -60,11 +60,6 @@ namespace netlist
}
}
NETLIB_UPDATEI()
{
other();
}
NETLIB_HANDLERI(clk)
{
if (m_CLRQ())
@ -120,7 +115,6 @@ namespace netlist
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(74175) A;
};

View File

@ -54,11 +54,6 @@ namespace netlist
m_last_CD = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(74192_dip);
private:
logic_input_t m_CLEAR;
@ -160,7 +155,6 @@ namespace netlist
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(74192) A;
};

View File

@ -53,10 +53,6 @@ namespace netlist
m_last_CU = 0;
m_last_CD = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(74193_dip);
private:
@ -148,7 +144,6 @@ namespace netlist
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(74193) A;
};

View File

@ -36,10 +36,6 @@ namespace netlist
m_last_CLK = 0;
m_last_Q = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(74194_dip);
private:
@ -124,7 +120,6 @@ namespace netlist
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(74194) A;
};

View File

@ -31,11 +31,6 @@ namespace netlist
{
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(74365_dip);
private:
NETLIB_HANDLERI(inputs)
@ -83,7 +78,6 @@ namespace netlist
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(74365) A;
};

View File

@ -31,10 +31,6 @@ namespace netlist
NETLIB_RESETI()
{
}
NETLIB_UPDATEI()
{
inputs();
}
private:
NETLIB_HANDLERI(inputs)

View File

@ -33,11 +33,6 @@ namespace netlist
m_cnt = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(inputs)
{
netlist_sig_t last_cp = m_cp;
@ -103,7 +98,6 @@ namespace netlist
connect("A.GND", "B.GND");
connect("A.VCC", "B.VCC");
}
//NETLIB_UPDATEI() {}
//NETLIB_RESETI() {}
private:

View File

@ -30,11 +30,6 @@ namespace devices
}
private:
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_RESETI()
{
m_val = 0;
@ -99,7 +94,6 @@ namespace devices
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(7442) A;
};

View File

@ -35,10 +35,6 @@ namespace netlist
{
m_state = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(7448_dip);
private:

View File

@ -28,10 +28,6 @@ namespace netlist
}
//NETLIB_RESETI();
NETLIB_UPDATEI()
{
inputs();
}
public:
NETLIB_HANDLERI(inputs)

View File

@ -32,11 +32,6 @@ namespace netlist
m_last_CLK = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
public:
NETLIB_HANDLERI(inputs)
{

View File

@ -38,11 +38,6 @@ namespace netlist
m_nextD = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(clk)
{
newstate(m_nextD, !m_nextD);

View File

@ -30,10 +30,6 @@ namespace netlist
{
m_last_Q = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(inputs)
{
@ -98,11 +94,6 @@ namespace netlist
m_last_Q = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(inputs)
{
unsigned start_q = m_last_Q;
@ -179,7 +170,6 @@ namespace netlist
register_subalias("16", A.m_Q[0]);
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(7475) A;
};
@ -206,7 +196,6 @@ namespace netlist
register_subalias("14", A.m_Q[0]);
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(7477) A;
};

View File

@ -40,11 +40,6 @@ namespace netlist
m_lastr = 0;
}
NETLIB_UPDATEI()
{
c0();
}
friend class NETLIB_NAME(7483_dip);
private:
NETLIB_HANDLERI(c0)
@ -121,7 +116,6 @@ namespace netlist
register_subalias("16", A.m_B4);
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(7483) A;
};

View File

@ -27,11 +27,6 @@ namespace netlist
{
}
NETLIB_UPDATEI()
{
inputs();
}
void update_outputs(unsigned gt, unsigned lt, unsigned eq);
friend class NETLIB_NAME(7485_dip);
@ -103,7 +98,6 @@ namespace netlist
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(7485) A;
};

View File

@ -39,11 +39,6 @@ namespace devices
}
private:
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(inputs)
{
const netlist_sig_t new_A = m_A();
@ -123,7 +118,6 @@ namespace devices
register_subalias("14", "A.A");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(7490) A;
};

View File

@ -37,10 +37,6 @@ namespace devices
}
private:
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(inputs)
{
@ -116,7 +112,6 @@ namespace devices
register_subalias("14", "A.A");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(7492) A;
};

View File

@ -102,11 +102,6 @@ namespace netlist
m_CLKB.set_state(logic_t::STATE_INP_HL);
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(inputs)
{
if (!(m_R1() && m_R2()))
@ -177,7 +172,6 @@ namespace netlist
register_subalias("14", "A.CLKA");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(7493) A;
};

View File

@ -48,11 +48,6 @@ namespace netlist
m_lastclock = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(noop) { }
NETLIB_HANDLERI(unity)
@ -170,7 +165,6 @@ namespace netlist
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(7497) A;
};

View File

@ -65,11 +65,6 @@ namespace netlist
m_inc = netlist_time::zero();
}
NETLIB_UPDATEI()
{
fb();
}
public:
logic_input_t m_FB;
logic_output_t m_Y;
@ -120,11 +115,6 @@ namespace netlist
m_clock.reset();
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_UPDATE_PARAMI()
{
/* update param may be called from anywhere, update_dev(time) is not a good idea */
@ -227,7 +217,6 @@ namespace netlist
register_subalias("14", m_B.m_RNG);
}
//NETLIB_UPDATEI() {}
NETLIB_RESETI()
{

View File

@ -30,10 +30,6 @@ namespace netlist
{
m_last_O = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(82S115_dip);
private:
@ -114,7 +110,6 @@ namespace netlist
register_subalias("24", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(82S115) A;
};

View File

@ -38,11 +38,6 @@ namespace netlist
m_addr = 0;
m_enq = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(82S16_dip);
private:
// FIXME: timing!
@ -137,7 +132,6 @@ namespace netlist
register_subalias("16", "A.VCC");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(82S16) A;
};

View File

@ -69,11 +69,6 @@ namespace netlist
m_RC.push(m_ent && (m_cnt == D::MAXCNT::value), D::tRC::value(0));
}
NETLIB_UPDATEI()
{
other();
}
NETLIB_HANDLERI(clk)
{
if (!D::ASYNC::value && !m_CLRQ())

View File

@ -25,11 +25,6 @@ namespace netlist
{
}
NETLIB_UPDATEI()
{
inputs();
}
// FIXME: Timing
NETLIB_HANDLERI(inputs);
@ -76,11 +71,6 @@ namespace netlist
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(9322_dip);
public:
logic_input_t m_SELECT;
@ -136,7 +126,6 @@ namespace netlist
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(9322) A;
};

View File

@ -23,11 +23,6 @@ namespace netlist
{
}
NETLIB_UPDATEI()
{
inputs();
}
public:
void shift() noexcept
{
@ -97,11 +92,6 @@ namespace netlist
m_last_CP = 0;
}
NETLIB_UPDATEI()
{
cp();
}
friend class NETLIB_NAME(AM2847_dip);
private:
NETLIB_HANDLERI(cp)
@ -148,7 +138,6 @@ namespace netlist
register_subalias("16", "A.VSS");
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(AM2847) A;
};

View File

@ -38,11 +38,6 @@ namespace netlist
m_last_Q = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(9314_dip);
private:
NETLIB_HANDLERI(inputs)

View File

@ -38,11 +38,6 @@ namespace netlist
m_last_Q = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(9334_dip);
private:
NETLIB_HANDLERI(inputs)
@ -150,7 +145,6 @@ namespace netlist
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(9334) A;
};

View File

@ -28,11 +28,6 @@ namespace netlist
m_QQ.initial(1);
}
NETLIB_UPDATEI()
{
inputs();
}
private:
NETLIB_HANDLERI(inputs)
{
@ -73,11 +68,6 @@ namespace netlist
//m_Q.initial(0);
}
NETLIB_UPDATEI()
{
input();
}
private:
NETLIB_HANDLERI(input)
{

View File

@ -53,11 +53,6 @@ namespace netlist
m_write_thread.join();
}
NETLIB_UPDATEI()
{
input();
}
NETLIB_HANDLERI(input)
{
log_value(static_cast<nl_fptype>(m_I()));
@ -132,11 +127,6 @@ namespace netlist
m_I.set_delegate(nldelegate(&NETLIB_NAME(logD)::input, this));
}
NETLIB_UPDATEI()
{
input();
}
NETLIB_HANDLERI(input)
{
log_value(static_cast<nl_fptype>(m_I() - m_I2()));

View File

@ -50,11 +50,6 @@ namespace netlist
m_shift = 0x1ffff;
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_UPDATE_PARAMI()
{
m_inc = netlist_time::from_fp(plib::reciprocal(m_FREQ()));

View File

@ -98,11 +98,6 @@ namespace netlist
connect(m_OUT, m_ROUT.N());
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_RESETI()
{
/* FIXME make resistances a parameter, properly model other variants */
@ -234,7 +229,6 @@ namespace netlist
// The reset on R_Base executed after NE555 reset will
// overwrite values.
NETLIB_RESETI() { A.reset(); }
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(NE555) A;
};

View File

@ -86,11 +86,6 @@ namespace netlist
}
}
NETLIB_UPDATEI()
{
ce<0>(); // only called during setup
}
state_var<bool> m_enabled;
param_logic_t m_TE;
object_array_t<logic_input_t, D::address_width::value> m_A;

View File

@ -85,11 +85,6 @@ namespace netlist
m_RVO.set_G_V_I(plib::reciprocal(m_modacc.m_ROL()), m_modacc.m_VOL, nlconst::zero());
}
NETLIB_UPDATEI()
{
input();
}
private:
NETLIB_HANDLERI(input)
{

View File

@ -27,11 +27,6 @@ namespace netlist
{
}
NETLIB_UPDATEI()
{
inputs();
}
friend class NETLIB_NAME(TMS4800_dip);
private:
// FIXME: timing!
@ -105,7 +100,6 @@ namespace netlist
register_subalias("16", A.m_D[7]);
}
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_SUB(TMS4800) A;

View File

@ -24,11 +24,6 @@ namespace netlist
{
}
NETLIB_UPDATEI()
{
inputs();
}
protected:
object_array_t<logic_input_t, 2> m_CEQ;
object_array_t<logic_input_t, 2> m_D;
@ -55,11 +50,6 @@ namespace netlist
{
}
NETLIB_UPDATEI()
{
inputs();
}
protected:
object_array_t<logic_input_t, 3> m_CEQ;
object_array_t<logic_input_t, 3> m_D;

View File

@ -70,11 +70,6 @@ namespace devices
protected:
//NETLIB_RESETI();
NETLIB_UPDATEI()
{
input();
}
private:
NETLIB_HANDLERI(input);
@ -114,10 +109,6 @@ namespace devices
protected:
NETLIB_RESETI();
NETLIB_UPDATEI()
{
input();
}
private:
NETLIB_HANDLERI(input);

View File

@ -28,12 +28,11 @@ namespace devices
{
NETLIB_CONSTRUCTOR(netlistparams)
, m_use_deactivate(*this, "USE_DEACTIVATE", false)
, m_startup_strategy(*this, "STARTUP_STRATEGY", 1)
, m_startup_strategy(*this, "STARTUP_STRATEGY", 0)
, m_mos_capmodel(*this, "DEFAULT_MOS_CAPMODEL", 2)
, m_max_link_loops(*this, "MAX_LINK_RESOLVE_LOOPS", 100)
{
}
//NETLIB_UPDATEI() {}
//NETLIB_RESETI() {}
//NETLIB_UPDATE_PARAMI() { }
public:
@ -66,11 +65,6 @@ namespace devices
m_inc = netlist_time::from_fp(plib::reciprocal(m_freq()*nlconst::two()));
}
NETLIB_UPDATEI()
{
fb();
}
NETLIB_HANDLERI(fb)
{
m_Q.push(m_feedback() ^ 1, m_inc);
@ -119,11 +113,6 @@ namespace devices
//NETLIB_RESETI();
//NETLIB_UPDATE_PARAMI()
NETLIB_UPDATEI()
{
fb();
}
private:
NETLIB_HANDLERI(fb)
{
@ -192,11 +181,6 @@ namespace devices
}
NETLIB_UPDATEI()
{
first();
}
NETLIB_RESETI()
{
m_cnt = 0;
@ -261,7 +245,6 @@ namespace devices
{
}
//NETLIB_UPDATEI() {}
NETLIB_RESETI() { m_Q.initial(0); }
NETLIB_UPDATE_PARAMI()
{
@ -286,7 +269,6 @@ namespace devices
{
}
//NETLIB_UPDATEI() {}
NETLIB_RESETI() { for (auto &q : m_Q) q.initial(0); }
NETLIB_UPDATE_PARAMI()
{
@ -310,7 +292,6 @@ namespace devices
{
}
//NETLIB_UPDATEI() {}
NETLIB_RESETI() { m_Q.initial(nlconst::zero()); }
NETLIB_UPDATE_PARAMI() { m_Q.push(m_IN()); }
@ -330,7 +311,6 @@ namespace devices
{
}
//NETLIB_UPDATEI() {}
NETLIB_UPDATE_PARAMI()
{
m_Q.push(nlconst::zero());
@ -355,7 +335,6 @@ namespace devices
protected:
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
private:
NETLIB_HANDLERI(noop)
@ -397,11 +376,6 @@ namespace devices
m_ROUT.set_G_V_I(plib::reciprocal(m_p_ROUT()),0,0);
}
NETLIB_UPDATEI()
{
input();
}
private:
NETLIB_HANDLERI(input)
{
@ -446,11 +420,6 @@ namespace devices
//m_Q.initial(0.0);
}
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(inputs)
{
for (std::size_t i = 0; i < static_cast<unsigned>(m_N()); i++)
@ -508,11 +477,6 @@ namespace devices
param_fp_t m_ROFF;
private:
NETLIB_UPDATEI()
{
input();
}
NETLIB_HANDLERI(input)
{
const netlist_sig_t state = m_I();
@ -565,11 +529,6 @@ namespace devices
//NETLIB_UPDATE_PARAMI();
private:
NETLIB_UPDATEI()
{
input();
}
NETLIB_HANDLERI(input)
{
const netlist_sig_t state = m_I();
@ -630,11 +589,6 @@ namespace devices
m_last_state = 0;
}
NETLIB_UPDATEI()
{
inputs();
}
//NETLIB_UPDATE_PARAMI();
private:
@ -713,11 +667,6 @@ namespace devices
}
private:
NETLIB_UPDATEI()
{
input();
}
NETLIB_HANDLERI(input)
{
nl_fptype val = m_dis.var()(m_mt.var());

View File

@ -78,12 +78,6 @@ namespace devices
set_active_outputs(active_outputs);
}
// update is only called during startup here ...
NETLIB_UPDATEI()
{
inputs();
}
NETLIB_HANDLERI(inputs)
{
#if USE_TT_ALTERNATIVE

View File

@ -304,9 +304,14 @@ namespace netlist
// Currently analog input and logic input also
// push their outputs to queue.
std::vector<core_device_t *> devices_called;
log().verbose("Call update_param on all devices:");
for (auto & dev : m_devices)
{
dev.second->update_param();
if (!plib::container::contains(devices_called, dev.second.get()))
devices_called.push_back(dev.second.get());
}
// Step all devices once !
//
@ -319,57 +324,33 @@ namespace netlist
{
case 0:
{
std::vector<core_device_t *> d;
std::vector<const nldelegate *> t;
log().verbose("Using default startup strategy");
for (auto &n : m_nets)
for (auto & term : n->core_terms())
if (term->delegate().has_object())
{
n->update_inputs(); // only used if USE_COPY_INSTEAD_OF_REFERENCE == 1
if (!plib::container::contains(t, &term->delegate()))
{
if (!plib::container::contains(t, &term->delegate()))
{
t.push_back(&term->delegate());
term->run_delegate();
}
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
auto *dev = reinterpret_cast<core_device_t *>(term->delegate().object());
if (!plib::container::contains(d, dev))
d.push_back(dev);
t.push_back(&term->delegate());
term->run_delegate();
}
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
auto *dev = reinterpret_cast<core_device_t *>(term->delegate().object());
if (!plib::container::contains(devices_called, dev))
devices_called.push_back(dev);
}
log().verbose("Devices not yet updated:");
for (auto &dev : m_devices)
if (!plib::container::contains(d, dev.second.get()))
if (!plib::container::contains(devices_called, dev.second.get()))
{
// FIXME: doesn't seem to be needed, use cases include
// analog output devices. Check and remove
log().verbose("\t ...{1}", dev.second->name());
dev.second->update();
log().error("\t Device {1} not yet updated", dev.second->name());
//dev.second->update();
}
}
break;
case 1: // brute force backward
{
log().verbose("Using brute force backward startup strategy");
for (auto &n : m_nets) // only used if USE_COPY_INSTEAD_OF_REFERENCE == 1
n->update_inputs();
std::size_t i = m_devices.size();
while (i>0)
m_devices[--i].second->update();
for (auto &n : m_nets) // only used if USE_COPY_INSTEAD_OF_REFERENCE == 1
n->update_inputs();
}
break;
case 2: // brute force forward
{
log().verbose("Using brute force forward startup strategy");
for (auto &d : m_devices)
d.second->update();
}
break;
}
// the above may screw up m_active and the list

View File

@ -177,7 +177,6 @@ class NETLIB_NAME(name) : public delegator_t<base_device_t>
#define NETLIB_UPDATE_TERMINALSI() virtual void update_terminals() noexcept override
#define NETLIB_HANDLERI(name) void name() noexcept
#define NETLIB_UPDATEI() virtual void update() noexcept override
#define NETLIB_UPDATE_PARAMI() virtual void update_param() noexcept override
#define NETLIB_RESETI() virtual void reset() override
@ -185,7 +184,11 @@ class NETLIB_NAME(name) : public delegator_t<base_device_t>
#define NETLIB_SUB_UPTR(ns, chip) device_arena::unique_ptr< ns :: nld_ ## chip >
#define NETLIB_HANDLER(chip, name) void NETLIB_NAME(chip) :: name() noexcept
#if 0
#define NETLIB_UPDATEI() virtual void update() noexcept override
#define NETLIB_UPDATE(chip) NETLIB_HANDLER(chip, update)
#endif
#define NETLIB_RESET(chip) void NETLIB_NAME(chip) :: reset(void)
@ -1392,8 +1395,9 @@ namespace netlist
};
stats_t * stats() const noexcept { return m_stats.get(); }
#if 0
virtual void update() noexcept { }
#endif
virtual void reset() { }
protected:
@ -1441,7 +1445,6 @@ namespace netlist
void connect(const detail::core_terminal_t &t1, const detail::core_terminal_t &t2);
protected:
//NETLIB_UPDATEI() {}
//NETLIB_UPDATE_TERMINALSI() { }
private:
@ -1473,7 +1476,6 @@ namespace netlist
protected:
//NETLIB_UPDATEI() {}
//NETLIB_UPDATE_TERMINALSI() { }
private:
@ -1803,12 +1805,6 @@ namespace netlist
m_inc = netlist_time::from_fp(plib::reciprocal(m_freq()*nlconst::two()));
}
NETLIB_UPDATEI()
{
// only called during start up.
// mainclock will step forced by main loop
}
public:
logic_output_t m_Q; // NOLINT: needed in core
netlist_time m_inc; // NOLINT: needed in core

View File

@ -24,7 +24,6 @@ namespace factory {
}
protected:
//NETLIB_RESETI() {}
//NETLIB_UPDATEI() {}
};
element_t::element_t(const pstring &name, properties &&props)

View File

@ -67,11 +67,6 @@ namespace netlist
m_last = 0.0;
}
NETLIB_UPDATEI()
{
in();
}
NETLIB_HANDLERI(in)
{
const nl_fptype cur = m_in();
@ -117,11 +112,6 @@ namespace netlist
m_func(*this, cur);
}
NETLIB_UPDATEI()
{
in();
}
private:
logic_input_t m_in;
FUNC m_func;
@ -188,11 +178,6 @@ namespace netlist
m_Q.net().toggle_and_push_to_queue(m_sample_time);
}
NETLIB_UPDATEI()
{
feedback();
}
public:
/// \brief resolve parameter names to pointers
///

View File

@ -252,12 +252,6 @@ namespace solver
m_Q_sync.net().toggle_and_push_to_queue(delay);
}
// netdevice functions
NETLIB_UPDATEI()
{
fb_sync();
}
NETLIB_HANDLERI(fb_sync)
{
PFDEBUG(printf("update\n");)

View File

@ -43,11 +43,6 @@ namespace devices
solver::static_compile_container create_solver_code(solver::static_compile_target target);
NETLIB_UPDATEI()
{
fb_step();
}
NETLIB_RESETI();
// NETLIB_UPDATE_PARAMI();