netlist: remove trampoline code. (nw)

This commit is contained in:
couriersud 2019-02-01 08:45:32 +01:00
parent b4ba8dc552
commit b952577370
17 changed files with 56 additions and 66 deletions

View File

@ -201,7 +201,7 @@ namespace netlist
NETLIB_RESET(opamp) NETLIB_RESET(opamp)
{ {
m_G1.do_reset(); m_G1.reset();
m_G1.m_RI.setTo(m_model.m_RI); m_G1.m_RI.setTo(m_model.m_RI);
if (m_type == 1) if (m_type == 1)
@ -213,11 +213,11 @@ namespace netlist
} }
else if (m_type == 3) else if (m_type == 3)
{ {
m_EBUF->do_reset(); m_EBUF->reset();
m_DP->do_reset(); m_DP->reset();
m_DN->do_reset(); m_DN->reset();
m_CP->do_reset(); m_CP->reset();
m_RP.do_reset(); m_RP.reset();
m_EBUF->m_G.setTo(1.0); m_EBUF->m_G.setTo(1.0);
m_EBUF->m_RO.setTo(m_model.m_RO); m_EBUF->m_RO.setTo(m_model.m_RO);

View File

@ -78,9 +78,11 @@ NETLIB_OBJECT(twoterm)
//NETLIB_UPDATE_TERMINALSI() { } //NETLIB_UPDATE_TERMINALSI() { }
//NETLIB_RESETI() { } //NETLIB_RESETI() { }
NETLIB_UPDATEI();
public: public:
NETLIB_UPDATEI();
void solve_now(); void solve_now();
void set(const nl_double G, const nl_double V, const nl_double I) void set(const nl_double G, const nl_double V, const nl_double I)

View File

@ -67,14 +67,14 @@ namespace netlist
// We only need to update the net first if this is a time stepping net // We only need to update the net first if this is a time stepping net
if ((1)) // m_R.m_P.net().as_analog().solver().is_timestep()) if ((1)) // m_R.m_P.net().as_analog().solver().is_timestep())
{ {
m_R.update_dev(); m_R.update();
m_R.set_R(R); m_R.set_R(R);
m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
} }
else else
{ {
m_R.set_R(R); m_R.set_R(R);
m_R.update_dev(); m_R.update();
} }
} }
} }

View File

@ -43,7 +43,7 @@ namespace netlist { namespace devices {
NETLIB_UPDATE(CD4316_GATE) NETLIB_UPDATE(CD4316_GATE)
{ {
m_R.update_dev(); m_R.update();
if (m_S() && !m_E()) if (m_S() && !m_E())
m_R.set_R(m_base_r()); m_R.set_R(m_base_r());
else else

View File

@ -257,8 +257,8 @@ namespace netlist
{ {
m_KP = 1.0 / (1.0 + exp(m_K())); m_KP = 1.0 / (1.0 + exp(m_K()));
m_RP.do_reset(); m_RP.reset();
m_RN.do_reset(); m_RN.reset();
//m_RP.set_R(R_OFF); //m_RP.set_R(R_OFF);
//m_RN.set_R(R_OFF); //m_RN.set_R(R_OFF);
@ -276,8 +276,8 @@ namespace netlist
NETLIB_RESET(74123_dip) NETLIB_RESET(74123_dip)
{ {
//m_1.do_reset(); //m_1.reset();
//m_2.do_reset(); //m_2.reset();
} }
NETLIB_UPDATE(9602_dip) NETLIB_UPDATE(9602_dip)
@ -289,8 +289,8 @@ namespace netlist
NETLIB_RESET(9602_dip) NETLIB_RESET(9602_dip)
{ {
//m_1.do_reset(); //m_1.reset();
//m_2.do_reset(); //m_2.reset();
} }
NETLIB_UPDATE(4538_dip) NETLIB_UPDATE(4538_dip)
@ -302,8 +302,8 @@ namespace netlist
NETLIB_RESET(4538_dip) NETLIB_RESET(4538_dip)
{ {
m_1.do_reset(); m_1.reset();
m_2.do_reset(); m_2.reset();
} }
NETLIB_DEVICE_IMPL_DEPRECATED(74123) NETLIB_DEVICE_IMPL_DEPRECATED(74123)

View File

@ -120,15 +120,15 @@ namespace netlist
NETLIB_UPDATE(74153) NETLIB_UPDATE(74153)
{ {
m_sub.m_chan = (m_A() | (m_B()<<1)); m_sub.m_chan = (m_A() | (m_B()<<1));
m_sub.update_dev(); m_sub.update();
} }
NETLIB_UPDATE(74153_dip) NETLIB_UPDATE(74153_dip)
{ {
m_2.m_chan = m_1.m_chan = (m_A() | (m_B()<<1)); m_2.m_chan = m_1.m_chan = (m_A() | (m_B()<<1));
m_1.update_dev(); m_1.update();
m_2.update_dev(); m_2.update();
} }
NETLIB_DEVICE_IMPL(74153, "TTL_74153", "+C0,+C1,+C2,+C3,+A,+B,+G") NETLIB_DEVICE_IMPL(74153, "TTL_74153", "+C0,+C1,+C2,+C3,+A,+B,+G")

View File

@ -100,7 +100,7 @@ namespace netlist
{ {
m_R_FC.set_R(90000.0); m_R_FC.set_R(90000.0);
m_R_RNG.set_R(90000.0); m_R_RNG.set_R(90000.0);
m_clock.do_reset(); m_clock.reset();
} }
NETLIB_UPDATEI(); NETLIB_UPDATEI();
@ -148,8 +148,8 @@ namespace netlist
NETLIB_RESETI() NETLIB_RESETI()
{ {
m_1.do_reset(); m_1.reset();
m_2.do_reset(); m_2.reset();
} }
private: private:

View File

@ -140,8 +140,8 @@ namespace netlist
NETLIB_RESET(9310) NETLIB_RESET(9310)
{ {
sub.do_reset(); sub.reset();
subABCD.do_reset(); subABCD.reset();
} }
NETLIB_RESET(9310_subABCD) NETLIB_RESET(9310_subABCD)

View File

@ -105,10 +105,10 @@ namespace netlist
NETLIB_UPDATE(9322) NETLIB_UPDATE(9322)
{ {
m_1.update_dev(); m_1.update();
m_2.update_dev(); m_2.update();
m_3.update_dev(); m_3.update();
m_4.update_dev(); m_4.update();
} }
NETLIB_DEVICE_IMPL_DEPRECATED(9322) NETLIB_DEVICE_IMPL_DEPRECATED(9322)

View File

@ -107,7 +107,7 @@ namespace netlist
// We only need to update the net first if this is a time stepping net // We only need to update the net first if this is a time stepping net
if (m_is_timestep) if (m_is_timestep)
m_RV.update_dev(); m_RV.update();
m_RV.set(NL_FCONST(1.0) / R, V, 0.0); m_RV.set(NL_FCONST(1.0) / R, V, 0.0);
m_RV.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); m_RV.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
} }

View File

@ -128,10 +128,10 @@ namespace netlist
NETLIB_RESET(NE555) NETLIB_RESET(NE555)
{ {
m_R1.do_reset(); m_R1.reset();
m_R2.do_reset(); m_R2.reset();
m_R3.do_reset(); m_R3.reset();
m_RDIS.do_reset(); m_RDIS.reset();
/* FIXME make resistance a parameter, properly model other variants */ /* FIXME make resistance a parameter, properly model other variants */
m_R1.set_R(5000); m_R1.set_R(5000);
@ -163,13 +163,13 @@ namespace netlist
if (m_last_out && !out) if (m_last_out && !out)
{ {
m_RDIS.update_dev(); m_RDIS.update();
m_OUT.push(m_R3.m_N()); m_OUT.push(m_R3.m_N());
m_RDIS.set_R(R_ON); m_RDIS.set_R(R_ON);
} }
else if (!m_last_out && out) else if (!m_last_out && out)
{ {
m_RDIS.update_dev(); m_RDIS.update();
// FIXME: Should be delayed by 100ns // FIXME: Should be delayed by 100ns
m_OUT.push(m_R1.m_P()); m_OUT.push(m_R1.m_P());
m_RDIS.set_R(R_OFF); m_RDIS.set_R(R_OFF);

View File

@ -82,8 +82,8 @@ namespace netlist
NETLIB_RESETI() NETLIB_RESETI()
{ {
m_last_state = 1; m_last_state = 1;
m_RVI.do_reset(); m_RVI.reset();
m_RVO.do_reset(); m_RVO.reset();
m_is_timestep = m_RVO.m_P.net().solver()->has_timestep_devices(); m_is_timestep = m_RVO.m_P.net().solver()->has_timestep_devices();
m_RVI.set(NL_FCONST(1.0) / m_model.m_RI, m_model.m_VI, 0.0); m_RVI.set(NL_FCONST(1.0) / m_model.m_RI, m_model.m_VI, 0.0);
m_RVO.set(NL_FCONST(1.0) / m_model.m_ROL, m_model.m_VOL, 0.0); m_RVO.set(NL_FCONST(1.0) / m_model.m_ROL, m_model.m_VOL, 0.0);
@ -97,7 +97,7 @@ namespace netlist
{ {
m_last_state = 0; m_last_state = 0;
if (m_is_timestep) if (m_is_timestep)
m_RVO.update_dev(); m_RVO.update();
m_RVO.set(NL_FCONST(1.0) / m_model.m_ROH, m_model.m_VOH, 0.0); m_RVO.set(NL_FCONST(1.0) / m_model.m_ROH, m_model.m_VOH, 0.0);
m_RVO.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); m_RVO.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
} }
@ -108,7 +108,7 @@ namespace netlist
{ {
m_last_state = 1; m_last_state = 1;
if (m_is_timestep) if (m_is_timestep)
m_RVO.update_dev(); m_RVO.update();
m_RVO.set(NL_FCONST(1.0) / m_model.m_ROL, m_model.m_VOL, 0.0); m_RVO.set(NL_FCONST(1.0) / m_model.m_ROL, m_model.m_VOL, 0.0);
m_RVO.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); m_RVO.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
} }

View File

@ -72,7 +72,7 @@ namespace netlist
// We only need to update the net first if this is a time stepping net // We only need to update the net first if this is a time stepping net
if ((0)) // m_R->m_P.net().as_analog().solver()->is_timestep()) if ((0)) // m_R->m_P.net().as_analog().solver()->is_timestep())
{ {
m_R.update_dev(); m_R.update();
m_R.set_R(R); m_R.set_R(R);
m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
} }
@ -80,7 +80,7 @@ namespace netlist
{ {
m_R.set_R(R); m_R.set_R(R);
m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
//m_R->update_dev(); //m_R->update();
} }
} }
} }

View File

@ -137,7 +137,7 @@ namespace netlist
//m_Q.initial(0.0); //m_Q.initial(0.0);
m_last_state = -1; m_last_state = -1;
m_RV.do_reset(); m_RV.reset();
m_is_timestep = m_RV.m_P.net().solver()->has_timestep_devices(); m_is_timestep = m_RV.m_P.net().solver()->has_timestep_devices();
m_RV.set(NL_FCONST(1.0) / logic_family()->R_low(), m_RV.set(NL_FCONST(1.0) / logic_family()->R_low(),
logic_family()->low_V(0.0, supply_V), 0.0); logic_family()->low_V(0.0, supply_V), 0.0);
@ -158,7 +158,7 @@ namespace netlist
// We only need to update the net first if this is a time stepping net // We only need to update the net first if this is a time stepping net
if (m_is_timestep) if (m_is_timestep)
{ {
m_RV.update_dev(); m_RV.update();
} }
m_RV.set(NL_FCONST(1.0) / R, V, 0.0); m_RV.set(NL_FCONST(1.0) / R, V, 0.0);
m_RV.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); m_RV.m_P.schedule_solve_after(NLTIME_FROM_NS(1));

View File

@ -341,7 +341,7 @@ void netlist_t::reset()
if (m_mainclock != nullptr) if (m_mainclock != nullptr)
m_mainclock->m_Q.net().set_time(netlist_time::zero()); m_mainclock->m_Q.net().set_time(netlist_time::zero());
//if (m_solver != nullptr) //if (m_solver != nullptr)
// m_solver->do_reset(); // m_solver->reset();
m_state->reset(); m_state->reset();
} }
@ -359,7 +359,7 @@ void netlist_state_t::reset()
// Reset all devices once ! // Reset all devices once !
log().verbose("Call reset on all devices:"); log().verbose("Call reset on all devices:");
for (auto & dev : m_devices) for (auto & dev : m_devices)
dev->do_reset(); dev->reset();
// Make sure everything depending on parameters is set // Make sure everything depending on parameters is set
// Currently analog input and logic input also // Currently analog input and logic input also
@ -409,14 +409,14 @@ void netlist_state_t::reset()
log().verbose("Using brute force backward startup strategy"); log().verbose("Using brute force backward startup strategy");
std::size_t i = m_devices.size(); std::size_t i = m_devices.size();
while (i>0) while (i>0)
m_devices[--i]->update_dev(); m_devices[--i]->update();
} }
break; break;
case 2: // brute force forward case 2: // brute force forward
{ {
log().verbose("Using brute force forward startup strategy"); log().verbose("Using brute force forward startup strategy");
for (auto &d : m_devices) for (auto &d : m_devices)
d->update_dev(); d->update();
} }
break; break;
} }

View File

@ -129,9 +129,9 @@ class NETLIB_NAME(name) : public device_t
#define NETLIB_UPDATE_TERMINALSI() public: virtual void update_terminals() override #define NETLIB_UPDATE_TERMINALSI() public: virtual void update_terminals() override
#define NETLIB_HANDLERI(name) private: virtual void name() NL_NOEXCEPT #define NETLIB_HANDLERI(name) private: virtual void name() NL_NOEXCEPT
#define NETLIB_UPDATEI() protected: virtual void update() NL_NOEXCEPT override #define NETLIB_UPDATEI() public: virtual void update() NL_NOEXCEPT override
#define NETLIB_UPDATE_PARAMI() public: virtual void update_param() override #define NETLIB_UPDATE_PARAMI() public: virtual void update_param() override
#define NETLIB_RESETI() protected: virtual void reset() override #define NETLIB_RESETI() public: virtual void reset() override
#define NETLIB_TIMESTEP(chip) void NETLIB_NAME(chip) :: timestep(const nl_double step) #define NETLIB_TIMESTEP(chip) void NETLIB_NAME(chip) :: timestep(const nl_double step)
@ -1080,12 +1080,6 @@ namespace netlist
virtual ~core_device_t(); virtual ~core_device_t();
// FIXME: useless trampoline
void update_dev() NL_NOEXCEPT
{
do_update();
}
void do_inc_active() NL_NOEXCEPT void do_inc_active() NL_NOEXCEPT
{ {
if (m_hint_deactivate) if (m_hint_deactivate)
@ -1101,7 +1095,6 @@ namespace netlist
dec_active(); dec_active();
} }
void do_reset() { reset(); }
void set_hint_deactivate(bool v) { m_hint_deactivate = v; } void set_hint_deactivate(bool v) { m_hint_deactivate = v; }
bool get_hint_deactivate() { return m_hint_deactivate; } bool get_hint_deactivate() { return m_hint_deactivate; }
@ -1112,18 +1105,13 @@ namespace netlist
nperfcount_t<NL_KEEP_STATISTICS> m_stat_call_count; nperfcount_t<NL_KEEP_STATISTICS> m_stat_call_count;
nperfcount_t<NL_KEEP_STATISTICS> m_stat_inc_active; nperfcount_t<NL_KEEP_STATISTICS> m_stat_inc_active;
virtual void update() NL_NOEXCEPT { }
virtual void reset() { }
protected: protected:
virtual void update() NL_NOEXCEPT { }
virtual void inc_active() NL_NOEXCEPT { } virtual void inc_active() NL_NOEXCEPT { }
virtual void dec_active() NL_NOEXCEPT { } virtual void dec_active() NL_NOEXCEPT { }
virtual void reset() { }
void do_update() NL_NOEXCEPT
{
update();
}
log_type & log(); log_type & log();

View File

@ -71,7 +71,7 @@ namespace netlist
NETLIB_RESET(solver) NETLIB_RESET(solver)
{ {
for (std::size_t i = 0; i < m_mat_solvers.size(); i++) for (std::size_t i = 0; i < m_mat_solvers.size(); i++)
m_mat_solvers[i]->do_reset(); m_mat_solvers[i]->reset();
} }
void NETLIB_NAME(solver)::stop() void NETLIB_NAME(solver)::stop()