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

View File

@ -78,9 +78,11 @@ NETLIB_OBJECT(twoterm)
//NETLIB_UPDATE_TERMINALSI() { }
//NETLIB_RESETI() { }
NETLIB_UPDATEI();
public:
NETLIB_UPDATEI();
void solve_now();
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
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.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
}
else
{
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)
{
m_R.update_dev();
m_R.update();
if (m_S() && !m_E())
m_R.set_R(m_base_r());
else

View File

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

View File

@ -120,15 +120,15 @@ namespace netlist
NETLIB_UPDATE(74153)
{
m_sub.m_chan = (m_A() | (m_B()<<1));
m_sub.update_dev();
m_sub.update();
}
NETLIB_UPDATE(74153_dip)
{
m_2.m_chan = m_1.m_chan = (m_A() | (m_B()<<1));
m_1.update_dev();
m_2.update_dev();
m_1.update();
m_2.update();
}
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_RNG.set_R(90000.0);
m_clock.do_reset();
m_clock.reset();
}
NETLIB_UPDATEI();
@ -148,8 +148,8 @@ namespace netlist
NETLIB_RESETI()
{
m_1.do_reset();
m_2.do_reset();
m_1.reset();
m_2.reset();
}
private:

View File

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

View File

@ -105,10 +105,10 @@ namespace netlist
NETLIB_UPDATE(9322)
{
m_1.update_dev();
m_2.update_dev();
m_3.update_dev();
m_4.update_dev();
m_1.update();
m_2.update();
m_3.update();
m_4.update();
}
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
if (m_is_timestep)
m_RV.update_dev();
m_RV.update();
m_RV.set(NL_FCONST(1.0) / R, V, 0.0);
m_RV.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
}

View File

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

View File

@ -82,8 +82,8 @@ namespace netlist
NETLIB_RESETI()
{
m_last_state = 1;
m_RVI.do_reset();
m_RVO.do_reset();
m_RVI.reset();
m_RVO.reset();
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_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;
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.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
}
@ -108,7 +108,7 @@ namespace netlist
{
m_last_state = 1;
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.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
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.m_P.schedule_solve_after(NLTIME_FROM_NS(1));
}
@ -80,7 +80,7 @@ namespace netlist
{
m_R.set_R(R);
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_last_state = -1;
m_RV.do_reset();
m_RV.reset();
m_is_timestep = m_RV.m_P.net().solver()->has_timestep_devices();
m_RV.set(NL_FCONST(1.0) / logic_family()->R_low(),
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
if (m_is_timestep)
{
m_RV.update_dev();
m_RV.update();
}
m_RV.set(NL_FCONST(1.0) / R, V, 0.0);
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)
m_mainclock->m_Q.net().set_time(netlist_time::zero());
//if (m_solver != nullptr)
// m_solver->do_reset();
// m_solver->reset();
m_state->reset();
}
@ -359,7 +359,7 @@ void netlist_state_t::reset()
// Reset all devices once !
log().verbose("Call reset on all devices:");
for (auto & dev : m_devices)
dev->do_reset();
dev->reset();
// Make sure everything depending on parameters is set
// Currently analog input and logic input also
@ -409,14 +409,14 @@ void netlist_state_t::reset()
log().verbose("Using brute force backward startup strategy");
std::size_t i = m_devices.size();
while (i>0)
m_devices[--i]->update_dev();
m_devices[--i]->update();
}
break;
case 2: // brute force forward
{
log().verbose("Using brute force forward startup strategy");
for (auto &d : m_devices)
d->update_dev();
d->update();
}
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_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_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)
@ -1080,12 +1080,6 @@ namespace netlist
virtual ~core_device_t();
// FIXME: useless trampoline
void update_dev() NL_NOEXCEPT
{
do_update();
}
void do_inc_active() NL_NOEXCEPT
{
if (m_hint_deactivate)
@ -1101,7 +1095,6 @@ namespace netlist
dec_active();
}
void do_reset() { reset(); }
void set_hint_deactivate(bool v) { m_hint_deactivate = v; }
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_inc_active;
virtual void update() NL_NOEXCEPT { }
virtual void reset() { }
protected:
virtual void update() NL_NOEXCEPT { }
virtual void inc_active() NL_NOEXCEPT { }
virtual void dec_active() NL_NOEXCEPT { }
virtual void reset() { }
void do_update() NL_NOEXCEPT
{
update();
}
log_type & log();

View File

@ -71,7 +71,7 @@ namespace netlist
NETLIB_RESET(solver)
{
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()