21 #ifndef SRC_NETLIST_NETLIST_H_
22 #define SRC_NETLIST_NETLIST_H_
24 #include "../standard_cell/standard_cells.h"
25 #include "../entity_system/entity_system.h"
26 #include <boost/bimap.hpp>
32 #include <unordered_map>
45 std::string m_module_name;
55 using entity2index_map =
typename boost::bimap< entity_system::entity, std::size_t >;
56 entity2index_map m_PI_mapping;
57 entity2index_map m_PO_mapping;
59 std::vector<entity_system::entity> m_PI;
60 std::vector<entity_system::entity> m_PO;
62 std::unordered_map<std::string, entity_system::entity> m_name2cell;
63 std::unordered_map<std::string, entity_system::entity> m_name2pin;
64 std::unordered_map<std::string, entity_system::entity> m_name2net;
68 void cell_preallocate(std::size_t qnt);
69 void pin_preallocate(std::size_t qnt);
70 void net_preallocate(std::size_t qnt);
100 void module_name(std::string name) {
101 m_module_name = name;
103 std::string module_name()
const {
104 return m_module_name;
123 entity_system::entity
cell_find(std::string name)
const;
131 entity_system::entity
cell_insert(std::string name, std::string type);
145 return m_cells_system.
size();
153 std::string
cell_name(entity_system::entity cell)
const {
154 return m_cells.name(cell);
162 const std::vector<entity_system::entity> &
cell_pins(entity_system::entity cell)
const {
163 return m_cells.pins(cell);
172 return m_cells.standard_cell(cell);
181 bool cell_std_cell(entity_system::entity cell, std::string type);
189 bool cell_std_cell(entity_system::entity cell, entity_system::entity std_cell);
196 return m_cells_system;
215 entity_system::entity
pin_insert(entity_system::entity cell, std::string name);
222 return m_pins_system.
size();
230 std::string
pin_name(entity_system::entity pin)
const {
231 auto owner = m_pins.owner(pin);
232 std::string the_name;
233 if (!(owner == entity_system::invalid_entity))
235 the_name = m_cells.name(owner) +
":";
236 std::string std_cell_pin_name = m_std_cells->
pin_name(m_pins.standard_cell_pin(pin));
237 std_cell_pin_name = std_cell_pin_name.substr(std_cell_pin_name.find_last_of(
':')+1);
238 the_name += std_cell_pin_name;
240 the_name = m_std_cells->
pin_name(m_pins.standard_cell_pin(pin));
249 entity_system::entity
pin_owner(entity_system::entity pin)
const {
250 return m_pins.owner(pin);
258 entity_system::entity
pin_net(entity_system::entity pin)
const {
259 return m_pins.net(pin);
268 return m_pins.standard_cell_pin(pin);
277 return m_name2pin.at(name);
285 return m_pins_system;
303 entity_system::entity
net_insert(std::string name);
324 return m_nets_system.
size();
332 std::string
net_name(entity_system::entity net)
const {
333 return m_nets.name(net);
341 const std::vector<entity_system::entity> &
net_pins(entity_system::entity net)
const {
342 return m_nets.pins(net);
350 std::pair<std::vector<std::string>::const_iterator,
351 std::vector<std::string>::const_iterator>
net_names()
const {
352 return m_nets.names();
360 return m_nets_system;
369 return m_name2net.at(name);
386 void connect(entity_system::entity net, entity_system::entity pin);
401 entity_system::entity
PI_insert(std::string name);
407 void PI_remove(entity_system::entity PI);
421 std::vector<entity_system::entity>::const_iterator
PI_begin()
const {
429 std::vector<entity_system::entity>::const_iterator
PI_end()
const {
440 entity_system::entity
PO_insert(std::string name);
446 void PO_remove(entity_system::entity PO);
460 std::vector<entity_system::entity>::const_iterator
PO_begin()
const {
468 std::vector<entity_system::entity>::const_iterator
PO_end()
const {
const entity_system::entity_system & net_system() const
Net system getter.
Definition: netlist.h:359
void register_net_property(entity_system::property *property)
Registers net property.
Definition: netlist.cpp:58
const entity_system::entity_system & pin_system() const
Pin system getter.
Definition: netlist.h:284
std::size_t PI_count() const
Returns the number of primary inputs.
Definition: netlist.h:413
std::vector< entity_system::entity >::const_iterator PI_begin() const
Primary input begin iterator.
Definition: netlist.h:421
entity_system::entity pin_insert(entity_system::entity cell, std::string name)
Inserts a new pin.
Definition: netlist.cpp:93
const pins & pins_properties() const
Pin properties getter.
Definition: netlist.h:292
std::vector< entity_system::entity >::const_iterator PO_begin() const
Primary output begin iterator.
Definition: netlist.h:460
std::vector< entity_system::entity >::const_iterator PO_end() const
Primary output end iterator.
Definition: netlist.h:468
void PO_remove(entity_system::entity PO)
Removes a primary output.
Definition: netlist.cpp:200
const std::vector< entity_system::entity > & cell_pins(entity_system::entity cell) const
Cell pins getter.
Definition: netlist.h:162
entity_system::entity cell_insert(std::string name, std::string type)
Inserts a new cell.
Definition: netlist.cpp:69
entity_system::entity net_insert(std::string name)
Inserts a new net.
Definition: netlist.cpp:112
std::size_t cell_count() const
Returns the number of cells.
Definition: netlist.h:144
entity_system::entity pin_owner(entity_system::entity pin) const
Pin owner getter.
Definition: netlist.h:249
std::vector< entity_system::entity >::const_iterator PI_end() const
Primary input end iterator.
Definition: netlist.h:429
netlist(standard_cell::standard_cells *std_cells)
Constructor.
Definition: netlist.cpp:43
entity_system::entity cell_std_cell(entity_system::entity cell) const
Cell type getter.
Definition: netlist.h:171
void connect(entity_system::entity net, entity_system::entity pin)
Connects a pin to a net.
Definition: netlist.cpp:130
std::string cell_name(entity_system::entity cell) const
Cell name getter.
Definition: netlist.h:153
const standard_cell::standard_cells & std_cells() const
Standard cells getter.
Definition: netlist.h:112
entity_system::entity pin_net(entity_system::entity pin) const
Pin net getter.
Definition: netlist.h:258
const cells & cells_properties() const
Cell properties getter.
Definition: netlist.h:203
std::size_t pin_count() const
Returns the number of pins.
Definition: netlist.h:221
void disconnect(entity_system::entity pin)
Disconnects a pin from its net.
Definition: netlist.cpp:140
Netlist class.
Definition: netlist.h:41
void register_pin_property(entity_system::property *property)
Registers pin property.
Definition: netlist.cpp:54
void PI_remove(entity_system::entity PI)
Removes a primary input.
Definition: netlist.cpp:167
Property class.
Definition: property.h:33
entity_system class.
Definition: entity_system.h:40
entity_system::entity PO_insert(std::string name)
Inserts a new primary output.
Definition: netlist.cpp:188
const entity_system::entity_system & cell_system() const
Cell system getter.
Definition: netlist.h:195
void cell_remove(entity_system::entity cell)
Removes a cell.
Definition: netlist.cpp:83
entity_system::entity pin_std_cell(entity_system::entity pin) const
Pin type getter.
Definition: netlist.h:267
std::string pin_name(entity_system::entity pin) const
Pin name getter.
Definition: netlist.h:230
std::size_t net_count() const
Returns the number of nets.
Definition: netlist.h:323
void register_cell_property(entity_system::property *property)
Registers cell property.
Definition: netlist.cpp:50
std::string net_name(entity_system::entity net) const
Net name getter.
Definition: netlist.h:332
entity_system::entity net_by_name(std::string name) const
Finds net.
Definition: netlist.h:368
std::size_t size() const
Returns the size of the system.
Definition: entity_system.h:82
const std::vector< entity_system::entity > & net_pins(entity_system::entity net) const
Net pins getter.
Definition: netlist.h:341
void net_remove(entity_system::entity net)
Removes a net.
Definition: netlist.cpp:158
std::pair< std::vector< std::string >::const_iterator, std::vector< std::string >::const_iterator > net_names() const
Net names iterator.
Definition: netlist.h:351
entity_system::entity PI_insert(std::string name)
Inserts a new primary input.
Definition: netlist.cpp:145
entity_system::entity cell_find(std::string name) const
Finds cell.
Definition: netlist.cpp:62
std::size_t PO_count() const
Returns the number of primary outputs.
Definition: netlist.h:452
Standard cell class.
Definition: standard_cells.h:37
std::string pin_name(entity_system::entity pin) const
Pin name getter.
Definition: standard_cells.h:158
const nets & nets_properties() const
Net properties getter.
Definition: netlist.h:376
entity_system::entity pin_by_name(std::string name) const
Finds pin.
Definition: netlist.h:276