diff options
Diffstat (limited to 'src/lib/netlist/devices/nlid_proxy.h')
-rw-r--r-- | src/lib/netlist/devices/nlid_proxy.h | 118 |
1 files changed, 59 insertions, 59 deletions
diff --git a/src/lib/netlist/devices/nlid_proxy.h b/src/lib/netlist/devices/nlid_proxy.h index 7a8377276a1..0f1b2ffeacd 100644 --- a/src/lib/netlist/devices/nlid_proxy.h +++ b/src/lib/netlist/devices/nlid_proxy.h @@ -1,120 +1,120 @@ -// license:GPL-2.0+ +// license:BSD-3-Clause // copyright-holders:Couriersud -/* - * nlid_proxy.h - * - * netlist proxy devices - * - * This file contains internal headers - */ #ifndef NLID_PROXY_H_ #define NLID_PROXY_H_ -#include "netlist/analog/nlid_twoterm.h" -#include "netlist/nl_setup.h" +/// +/// \file nlid_proxy.h +/// +/// netlist proxy devices +/// +/// This file contains internal headers +/// -namespace netlist -{ - namespace devices - { + +#include "analog/nlid_twoterm.h" +#include "nl_base.h" + +namespace netlist::devices { // ----------------------------------------------------------------------------- // nld_base_proxy // ----------------------------------------------------------------------------- - NETLIB_OBJECT(base_proxy) + class nld_base_proxy : public device_t { public: - nld_base_proxy(netlist_state_t &anetlist, const pstring &name, - logic_t *inout_proxied, detail::core_terminal_t *proxy_inout); + nld_base_proxy(device_param_t data, const logic_t *inout_proxied); - logic_t &term_proxied() const { return *m_term_proxied; } - detail::core_terminal_t &proxy_term() const { return *m_proxy_term; } + // only used during setup + virtual detail::core_terminal_t &proxy_term() noexcept = 0; protected: + // FIXME: these should be core_terminal_t and only used for connecting + // inputs. Fix, once the ugly hacks have been removed + analog_t *m_tp; + analog_t *m_tn; - private: - logic_t *m_term_proxied; - detail::core_terminal_t *m_proxy_term; }; // ----------------------------------------------------------------------------- // nld_a_to_d_proxy // ----------------------------------------------------------------------------- - NETLIB_OBJECT_DERIVED(base_a_to_d_proxy, base_proxy) + class nld_base_a_to_d_proxy : public nld_base_proxy { public: - - virtual logic_output_t &out() { return m_Q; } + virtual logic_output_t &out() noexcept = 0; protected: - - nld_base_a_to_d_proxy(netlist_state_t &anetlist, const pstring &name, - logic_input_t *in_proxied, detail::core_terminal_t *in_proxy); - - private: - - logic_output_t m_Q; + nld_base_a_to_d_proxy(device_param_t data, const logic_input_t *in_proxied); }; - NETLIB_OBJECT_DERIVED(a_to_d_proxy, base_a_to_d_proxy) + class nld_a_to_d_proxy : public nld_base_a_to_d_proxy { public: - nld_a_to_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *in_proxied); - - analog_input_t m_I; + nld_a_to_d_proxy(device_param_t data, const logic_input_t *in_proxied); - protected: + logic_output_t &out() noexcept override { return m_Q; } - NETLIB_RESETI(); - NETLIB_UPDATEI(); + detail::core_terminal_t &proxy_term() noexcept override + { + return m_I; + } + protected: + //NETLIB_RESETI(); private: + NETLIB_HANDLERI(input); + + logic_output_t m_Q; + analog_input_t m_I; }; // ----------------------------------------------------------------------------- // nld_base_d_to_a_proxy // ----------------------------------------------------------------------------- - NETLIB_OBJECT_DERIVED(base_d_to_a_proxy, base_proxy) + class nld_base_d_to_a_proxy : public nld_base_proxy { public: - - virtual logic_input_t &in() { return m_I; } + // only used in setup + virtual logic_input_t &in() noexcept = 0; protected: - nld_base_d_to_a_proxy(netlist_state_t &anetlist, const pstring &name, - logic_output_t *out_proxied, detail::core_terminal_t &proxy_out); + nld_base_d_to_a_proxy(device_param_t data, const logic_output_t *out_proxied); - logic_input_t m_I; }; - NETLIB_OBJECT_DERIVED(d_to_a_proxy, base_d_to_a_proxy) + class nld_d_to_a_proxy : public nld_base_d_to_a_proxy { public: - nld_d_to_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *out_proxied); + nld_d_to_a_proxy(device_param_t data, const logic_output_t *out_proxied); + + logic_input_t &in() noexcept override { return m_I; } + + detail::core_terminal_t &proxy_term() noexcept override + { + return m_RN().setup_P(); + } protected: NETLIB_RESETI(); - NETLIB_UPDATEI(); private: + NETLIB_HANDLERI(input); - static constexpr const nl_double G_OFF = 1e-9; + static constexpr const nl_fptype G_OFF = nlconst::cgmin(); - plib::unique_ptr<analog_output_t> m_GNDHack; // FIXME: Long term, we need to connect proxy gnd to device gnd - plib::unique_ptr<analog_output_t> m_VCCHack; // FIXME: Long term, we need to connect proxy gnd to device gnd - analog::NETLIB_NAME(twoterm) m_RP; - analog::NETLIB_NAME(twoterm) m_RN; - state_var<int> m_last_state; - bool m_is_timestep; -}; + logic_input_t m_I; + NETLIB_SUB_NS(analog, two_terminal) m_RP; + NETLIB_SUB_NS(analog, two_terminal) m_RN; + state_var<netlist_sig_t> m_last_state; + }; - } //namespace devices -} // namespace netlist +} // namespace netlist::devices -#endif /* NLD_PROXY_H_ */ +#endif // NLD_PROXY_H_ |