nld_d_to_a_proxy::nld_d_to_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *out_proxied) : nld_base_d_to_a_proxy(anetlist, name, out_proxied, m_RV.m_P) , m_GNDHack(*this, "_Q") , m_RV(*this, "RV") , m_last_state(*this, "m_last_var", -1) , m_is_timestep(false) { const std::vector<std::pair<pstring, pstring>> power_syms = { {"VCC", "VEE"}, {"VCC", "GND"}, {"VDD", "VSS"}}; register_subalias("Q", m_RV.m_P); connect(m_RV.m_N, m_GNDHack); bool f = false; for (auto & pwr_sym : power_syms) { pstring devname = out_proxied->device().name(); auto tp = setup().find_terminal(devname + "." + pwr_sym.first, detail::terminal_type::INPUT, false); auto tn = setup().find_terminal(devname + "." + pwr_sym.second, detail::terminal_type::INPUT, false); if (tp != nullptr && tn != nullptr) { /* alternative logic */ f = true; } } //FIXME: Use power terminals! if (!f) log().warning(MW_1_NO_POWER_TERMINALS_ON_DEVICE_1, out_proxied->device().name()); else log().verbose("D/A Proxy: Found power terminals on device {1}", out_proxied->device().name()); }
NETLIB_CONSTRUCTOR_DERIVED(NE555_dip, NE555) { register_subalias("1", m_R3.m_N); // Pin 1 register_subalias("2", m_TRIG); // Pin 2 register_subalias("3", m_OUT); // Pin 3 register_subalias("4", m_RESET); // Pin 4 register_subalias("5", m_R1.m_N); // Pin 5 register_subalias("6", m_THRES); // Pin 6 register_subalias("7", m_RDIS.m_P); // Pin 7 register_subalias("8", m_R1.m_P); // Pin 8 }
void nld_d_to_a_proxy::start() { nld_base_d_to_a_proxy::start(); register_sub("RV", m_RV); register_terminal("1", m_RV.m_P); register_terminal("2", m_RV.m_N); register_output("_Q", m_Q); register_subalias("Q", m_RV.m_P); connect_direct(m_RV.m_N, m_Q); save(NLNAME(m_last_state)); }
nld_d_to_a_proxy::nld_d_to_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *out_proxied) : nld_base_d_to_a_proxy(anetlist, name, out_proxied, m_RV.m_P) , m_GNDHack(*this, "_Q") , m_RV(*this, "RV") , m_last_state(*this, "m_last_var", -1) , m_is_timestep(false) { const pstring power_syms[3][2] ={ {"VCC", "VEE"}, {"VCC", "GND"}, {"VDD", "VSS"}}; //register_sub(m_RV); //register_term("1", m_RV.m_P); //register_term("2", m_RV.m_N); register_subalias("Q", m_RV.m_P); connect(m_RV.m_N, m_GNDHack); bool f = false; for (int i = 0; i < 3; i++) { pstring devname = out_proxied->device().name(); auto tp = netlist().setup().find_terminal(devname + "." + power_syms[i][0], detail::terminal_type::INPUT, false); auto tn = netlist().setup().find_terminal(devname + "." + power_syms[i][1], detail::terminal_type::INPUT, false); if (tp != nullptr && tn != nullptr) { /* alternative logic */ f = true; } } if (!f) log().warning(MW_1_NO_POWER_TERMINALS_ON_DEVICE_1, out_proxied->device().name()); else log().verbose("D/A Proxy: Found power terminals on device {1}", out_proxied->device().name()); #if (0) printf("%s %s\n", out_proxied->name().c_str(), out_proxied->device().name().c_str()); auto x = netlist().setup().find_terminal(out_proxied->name(), detail::device_object_t::terminal_type::OUTPUT, false); if (x) printf("==> %s\n", x->name().c_str()); #endif }