36 #include <type_traits>
37 #include <unordered_map>
38 #include <unordered_set>
43 class NetlistInternalManager;
77 bool operator==(
const Netlist& other)
const;
86 bool operator!=(
const Netlist& other)
const;
101 void set_id(
const u32 id);
108 std::filesystem::path get_input_filename()
const;
115 void set_input_filename(
const std::filesystem::path& path);
122 const std::string& get_design_name()
const;
129 void set_design_name(
const std::string&
name);
136 const std::string& get_device_name()
const;
143 void set_device_name(
const std::string&
name);
171 u32 get_unique_gate_id();
203 bool delete_gate(
Gate* gate);
211 bool is_gate_in_netlist(
const Gate* gate)
const;
219 Gate* get_gate_by_id(
const u32 gate_id)
const;
226 const std::vector<Gate*>& get_gates()
const;
235 std::vector<Gate*> get_gates(
const std::function<
bool(
const Gate*)>& filter)
const;
243 bool mark_vcc_gate(
Gate* gate);
251 bool mark_gnd_gate(
Gate* gate);
259 bool unmark_vcc_gate(
Gate* gate);
267 bool unmark_gnd_gate(
Gate* gate);
275 bool is_vcc_gate(
const Gate* gate)
const;
283 bool is_gnd_gate(
const Gate* gate)
const;
290 const std::vector<Gate*>& get_vcc_gates()
const;
297 const std::vector<Gate*>& get_gnd_gates()
const;
311 u32 get_unique_net_id();
320 Net* create_net(
const u32 net_id,
const std::string&
name);
329 Net* create_net(
const std::string&
name);
337 bool delete_net(
Net*
net);
345 bool is_net_in_netlist(
const Net*
net)
const;
353 Net* get_net_by_id(
u32 net_id)
const;
360 const std::vector<Net*>& get_nets()
const;
369 std::vector<Net*> get_nets(
const std::function<
bool(
const Net*)>& filter)
const;
377 bool mark_global_input_net(
Net*
net);
385 bool mark_global_output_net(
Net*
net);
393 bool unmark_global_input_net(
Net*
net);
401 bool unmark_global_output_net(
Net*
net);
409 bool is_global_input_net(
const Net*
net)
const;
417 bool is_global_output_net(
const Net*
net)
const;
424 const std::vector<Net*>& get_global_input_nets()
const;
431 const std::vector<Net*>& get_global_output_nets()
const;
438 std::vector<Net*> get_gnd_nets()
const;
445 std::vector<Net*> get_vcc_nets()
const;
453 void enable_automatic_net_checks(
bool enable_checks =
true);
467 u32 get_unique_module_id();
478 Module* create_module(
const u32 module_id,
const std::string&
name,
Module* parent,
const std::vector<Gate*>& gates = {});
489 Module* create_module(
const std::string&
name,
Module* parent,
const std::vector<Gate*>& gates = {});
498 bool delete_module(Module*
module);
506 bool is_module_in_netlist(
const Module*
module)
const;
514 Module* get_module_by_id(
u32 module_id)
const;
521 const std::vector<Module*>& get_modules()
const;
530 std::vector<Module*> get_modules(
const std::function<
bool(
const Module*)>& filter)
const;
537 Module* get_top_module()
const;
551 u32 get_unique_grouping_id();
560 Grouping* create_grouping(
const u32 grouping_id,
const std::string&
name =
"");
569 Grouping* create_grouping(
const std::string&
name =
"");
577 bool delete_grouping(Grouping* grouping);
585 bool is_grouping_in_netlist(
const Grouping* grouping)
const;
593 Grouping* get_grouping_by_id(
u32 grouping_id)
const;
600 const std::vector<Grouping*>& get_groupings()
const;
609 std::vector<Grouping*> get_groupings(
const std::function<
bool(
const Grouping*)>& filter)
const;
622 u32 get_next_gate_id()
const;
629 void set_next_gate_id(
const u32 id);
636 std::set<u32> get_used_gate_ids()
const;
643 void set_used_gate_ids(
const std::set<u32> ids);
650 std::set<u32> get_free_gate_ids()
const;
657 void set_free_gate_ids(
const std::set<u32> ids);
664 u32 get_next_net_id()
const;
671 void set_next_net_id(
const u32 id);
678 std::set<u32> get_used_net_ids()
const;
685 void set_used_net_ids(
const std::set<u32> ids);
692 std::set<u32> get_free_net_ids()
const;
699 void set_free_net_ids(
const std::set<u32> ids);
706 u32 get_next_module_id()
const;
713 void set_next_module_id(
const u32 id);
720 std::set<u32> get_used_module_ids()
const;
727 void set_used_module_ids(
const std::set<u32> ids);
734 std::set<u32> get_free_module_ids()
const;
741 void set_free_module_ids(
const std::set<u32> ids);
748 u32 get_next_grouping_id()
const;
755 void set_next_grouping_id(
const u32 id);
762 std::set<u32> get_used_grouping_ids()
const;
769 void set_used_grouping_ids(
const std::set<u32> ids);
776 std::set<u32> get_free_grouping_ids()
const;
783 void set_free_grouping_ids(
const std::set<u32> ids);
790 EventHandler* get_event_handler()
const;
812 bool load_gate_locations_from_data(
const std::string& data_category =
"",
const std::pair<std::string, std::string>& data_identifiers = std::pair<std::string, std::string>());
816 const GateLibrary* m_gate_library;
822 std::filesystem::path m_file_name;
825 std::string m_design_name;
828 std::string m_device_name;
831 NetlistInternalManager* m_manager;
834 std::unique_ptr<EventHandler> m_event_handler;
838 std::set<u32> m_used_gate_ids;
839 std::set<u32> m_free_gate_ids;
841 std::set<u32> m_used_net_ids;
842 std::set<u32> m_free_net_ids;
843 u32 m_next_module_id;
844 std::set<u32> m_used_module_ids;
845 std::set<u32> m_free_module_ids;
846 u32 m_next_grouping_id;
847 std::set<u32> m_used_grouping_ids;
848 std::set<u32> m_free_grouping_ids;
851 Module* m_top_module;
852 std::unordered_map<u32, std::unique_ptr<Module>> m_modules_map;
853 std::unordered_set<const Module*> m_modules_set;
854 std::vector<Module*> m_modules;
857 std::unordered_map<u32, std::unique_ptr<Net>> m_nets_map;
858 std::unordered_set<const Net*> m_nets_set;
859 std::vector<Net*> m_nets;
862 std::unordered_map<u32, std::unique_ptr<Gate>> m_gates_map;
863 std::unordered_set<const Gate*> m_gates_set;
864 std::vector<Gate*> m_gates;
867 std::unordered_map<u32, std::unique_ptr<Grouping>> m_groupings_map;
868 std::unordered_set<const Grouping*> m_groupings_set;
869 std::vector<Grouping*> m_groupings;
872 std::vector<Net*> m_global_input_nets;
873 std::vector<Net*> m_global_output_nets;
874 std::vector<Gate*> m_gnd_gates;
875 std::vector<Gate*> m_vcc_gates;
const Module * module(const Gate *g, const NodeBoxes &boxes)
GateLibrary * get_gate_library(const std::string &file_path)