diff options
Diffstat (limited to 'src/lib/netlist/nl_setup.h')
-rw-r--r-- | src/lib/netlist/nl_setup.h | 68 |
1 files changed, 43 insertions, 25 deletions
diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h index 798ba8f4140..e9fc0861328 100644 --- a/src/lib/netlist/nl_setup.h +++ b/src/lib/netlist/nl_setup.h @@ -8,19 +8,18 @@ #ifndef NLSETUP_H_ #define NLSETUP_H_ -#include <memory> -#include <stack> -#include <unordered_map> -#include <vector> - #include "plib/pstring.h" -#include "plib/pfmtlog.h" -#include "plib/pstream.h" #include "plib/putil.h" +#include "plib/pstream.h" #include "plib/pparser.h" -#include "nl_config.h" -#include "nl_base.h" + #include "nl_factory.h" +#include "nl_config.h" +#include "netlist_types.h" + +#include <stack> +#include <vector> +#include <memory> //============================================================ // MACROS / inline netlist definitions @@ -71,7 +70,7 @@ void NETLIST_NAME(name)(netlist::setup_t &setup) \ #define LOCAL_LIB_ENTRY(name) \ LOCAL_SOURCE(name) \ - setup.register_lib_entry(# name); + setup.register_lib_entry(# name, __FILE__); #define INCLUDE(name) \ setup.include(# name); @@ -81,6 +80,9 @@ void NETLIST_NAME(name)(netlist::setup_t &setup) \ NETLIST_NAME(model)(setup); \ setup.namespace_pop(); +#define OPTIMIZE_FRONTIER(attach, r_in, r_out) \ + setup.register_frontier(# attach, r_in, r_out); + // ----------------------------------------------------------------------------- // truthtable defines // ----------------------------------------------------------------------------- @@ -105,12 +107,29 @@ void NETLIST_NAME(name)(netlist::setup_t &setup) \ desc.family = x; #define TRUTHTABLE_END() \ - netlist::devices::tt_factory_create(setup, desc); \ + setup.tt_factory_create(desc, __FILE__); \ } namespace netlist { + + namespace detail { + class core_terminal_t; + class net_t; + } + + namespace devices { + class nld_base_proxy; + } + + class core_device_t; + class param_t; + class setup_t; + class netlist_t; + class logic_family_desc_t; + class terminal_t; + // ----------------------------------------------------------------------------- // truthtable desc // ----------------------------------------------------------------------------- @@ -122,7 +141,7 @@ namespace netlist unsigned long ni; unsigned long no; pstring def_param; - plib::pstring_vector_t desc; + std::vector<pstring> desc; pstring family; }; @@ -178,9 +197,8 @@ namespace netlist // ---------------------------------------------------------------------------------------- - class setup_t + class setup_t : plib::nocopyassignmove { - P_PREVENT_COPYING(setup_t) public: using link_t = std::pair<pstring, pstring>; @@ -202,7 +220,7 @@ namespace netlist void register_dev(const pstring &classname, const pstring &name); - void register_lib_entry(const pstring &name); + void register_lib_entry(const pstring &name, const pstring &sourcefile); void register_model(const pstring &model_in); void register_alias(const pstring &alias, const pstring &out); @@ -241,7 +259,7 @@ namespace netlist std::unique_ptr<plib::pistream> get_data_stream(const pstring name); - bool parse_stream(plib::pistream &istrm, const pstring &name); + bool parse_stream(plib::putf8_reader &istrm, const pstring &name); /* register a source */ @@ -258,14 +276,14 @@ namespace netlist /* model / family related */ - const pstring model_value_str(model_map_t &map, const pstring &entity); - nl_double model_value(model_map_t &map, const pstring &entity); + const pstring model_value_str(detail::model_map_t &map, const pstring &entity); + double model_value(detail::model_map_t &map, const pstring &entity); - void model_parse(const pstring &model, model_map_t &map); + void model_parse(const pstring &model, detail::model_map_t &map); - /* FIXME: truth table trampoline */ + const logic_family_desc_t *family_from_model(const pstring &model); - void tt_factory_create(tt_desc &desc); + void tt_factory_create(tt_desc &desc, const pstring &sourcefile); /* helper - also used by nltool */ const pstring resolve_alias(const pstring &name) const; @@ -280,7 +298,7 @@ namespace netlist std::unordered_map<pstring, detail::core_terminal_t *> m_terminals; /* needed by proxy */ - detail::core_terminal_t *find_terminal(const pstring &outname_in, detail::device_object_t::type_t atype, bool required = true); + detail::core_terminal_t *find_terminal(const pstring &outname_in, const detail::terminal_type atype, bool required = true); private: @@ -295,7 +313,7 @@ namespace netlist bool connect_input_input(detail::core_terminal_t &t1, detail::core_terminal_t &t2); // helpers - pstring objtype_as_str(detail::device_object_t &in) const; + pstring termtype_as_str(detail::core_terminal_t &in) const; devices::nld_base_proxy *get_d_a_proxy(detail::core_terminal_t &out); devices::nld_base_proxy *get_a_d_proxy(detail::core_terminal_t &inp); @@ -312,7 +330,7 @@ namespace netlist unsigned m_proxy_cnt; unsigned m_frontier_cnt; - }; +}; // ---------------------------------------------------------------------------------------- // base sources @@ -353,7 +371,7 @@ namespace netlist { public: source_mem_t(setup_t &setup, const char *mem) - : source_t(setup), m_str(mem) + : source_t(setup), m_str(mem, pstring::UTF8) { } |