summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/nl_setup.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/nl_setup.h')
-rw-r--r--src/lib/netlist/nl_setup.h68
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)
{
}