Verilog to Routing - VPR
atom_netlist.h
Go to the documentation of this file.
1 #ifndef ATOM_NETLIST_H
2 #define ATOM_NETLIST_H
3 
68 #include <vector>
69 #include <unordered_map>
70 
71 #include "vtr_range.h"
72 #include "vtr_logic.h"
73 #include "vtr_vector_map.h"
74 
75 #include "logic_types.h" //For t_model
76 
77 #include "netlist.h"
78 #include "atom_netlist_fwd.h"
79 
80 class AtomNetlist : public Netlist<AtomBlockId, AtomPortId, AtomPinId, AtomNetId> {
81  public:
88  AtomNetlist(std::string name = "", std::string id = "");
89 
90  public: //Public types
91  typedef std::vector<std::vector<vtr::LogicValue>> TruthTable;
92 
93  public: //Public Accessors
94  /*
95  * Blocks
96  */
97 
99  AtomBlockType block_type(const AtomBlockId id) const;
100 
102  const t_model* block_model(const AtomBlockId id) const;
103 
114  const TruthTable& block_truth_table(const AtomBlockId id) const;
115 
116  /*
117  * Ports
118  */
119 
124  const t_model_ports* port_model(const AtomPortId id) const;
125 
126  /*
127  * Lookups
128  */
129 
137  AtomPortId find_atom_port(const AtomBlockId blk_id, const t_model_ports* model_port) const;
138 
146  AtomBlockId find_atom_pin_driver(const AtomBlockId blk_id, const t_model_ports* model_port, const BitIndex port_bit) const;
147 
155  std::unordered_set<std::string> net_aliases(const std::string net_name) const;
156 
157  public: //Public Mutators
158  /*
159  * Note: all create_*() functions will silently return the appropriate ID if it has already been created
160  */
161 
171  AtomBlockId create_block(const std::string name, const t_model* model, const TruthTable truth_table = TruthTable());
172 
181  AtomPortId create_port(const AtomBlockId blk_id, const t_model_ports* model_port);
182 
192  AtomPinId create_pin(const AtomPortId port_id, BitIndex port_bit, const AtomNetId net_id, const PinType pin_type, bool is_const = false);
193 
199  AtomNetId create_net(const std::string name); //An empty or existing net
200 
208  AtomNetId add_net(const std::string name, AtomPinId driver, std::vector<AtomPinId> sinks);
209 
218  void add_net_alias(const std::string net_name, std::string alias_net_name);
219 
220  private: //Private members
221  /*
222  * Component removal
223  */
224  void remove_block_impl(const AtomBlockId blk_id) override;
225  void remove_port_impl(const AtomPortId port_id) override;
226  void remove_pin_impl(const AtomPinId pin_id) override;
227  void remove_net_impl(const AtomNetId net_id) override;
228 
229  /*
230  * Netlist compression/optimization
231  */
232 
233  //Removes invalid components and reorders them
234  void clean_blocks_impl(const vtr::vector_map<AtomBlockId, AtomBlockId>& block_id_map) override;
235  void clean_ports_impl(const vtr::vector_map<AtomPortId, AtomPortId>& port_id_map) override;
236  void clean_pins_impl(const vtr::vector_map<AtomPinId, AtomPinId>& pin_id_map) override;
237  void clean_nets_impl(const vtr::vector_map<AtomNetId, AtomNetId>& net_id_map) override;
238 
239  void rebuild_block_refs_impl(const vtr::vector_map<AtomPinId, AtomPinId>& pin_id_map, const vtr::vector_map<AtomPortId, AtomPortId>& port_id_map) override;
240  void rebuild_port_refs_impl(const vtr::vector_map<AtomBlockId, AtomBlockId>& block_id_map, const vtr::vector_map<AtomPinId, AtomPinId>& pin_id_map) override;
241  void rebuild_pin_refs_impl(const vtr::vector_map<AtomPortId, AtomPortId>& port_id_map, const vtr::vector_map<AtomNetId, AtomNetId>& net_id_map) override;
242  void rebuild_net_refs_impl(const vtr::vector_map<AtomPinId, AtomPinId>& pin_id_map) override;
243 
245  void shrink_to_fit_impl() override;
246 
247  /*
248  * Sanity checks
249  */
250  //Verify the internal data structure sizes match
251  bool validate_block_sizes_impl(size_t num_blocks) const override;
252  bool validate_port_sizes_impl(size_t num_ports) const override;
253  bool validate_pin_sizes_impl(size_t num_pins) const override;
254  bool validate_net_sizes_impl(size_t num_nets) const override;
255 
256  private: //Private data
257  //Block data
258  vtr::vector_map<AtomBlockId, const t_model*> block_models_; //Architecture model of each block
259  vtr::vector_map<AtomBlockId, TruthTable> block_truth_tables_; //Truth tables of each block
260 
261  //Port data
262  vtr::vector_map<AtomPortId, const t_model_ports*> port_models_; //Architecture port models of each port
263 
264  //Net aliases
265  std::unordered_map<std::string, std::unordered_set<std::string>> net_aliases_map_;
266 };
267 
268 #include "atom_lookup.h"
269 
270 #endif
bool validate_block_sizes_impl(size_t num_blocks) const override
Definition: atom_netlist.cpp:287
void shrink_to_fit_impl() override
Shrinks internal data structures to required size to reduce memory consumption.
Definition: atom_netlist.cpp:274
vtr::StrongId< atom_net_id_tag > AtomNetId
Definition: atom_netlist_fwd.h:32
AtomBlockType
Definition: atom_netlist_fwd.h:44
void rebuild_port_refs_impl(const vtr::vector_map< AtomBlockId, AtomBlockId > &block_id_map, const vtr::vector_map< AtomPinId, AtomPinId > &pin_id_map) override
Definition: atom_netlist.cpp:236
std::unordered_set< std::string > net_aliases(const std::string net_name) const
Returns the a set of aliases relative to the net name.
Definition: atom_netlist.cpp:105
const t_model_ports * port_model(const AtomPortId id) const
Returns the model port of the specified port or nullptr if not.
Definition: atom_netlist.cpp:58
vtr::vector_map< AtomPortId, const t_model_ports * > port_models_
Definition: atom_netlist.h:262
void remove_port_impl(const AtomPortId port_id) override
Definition: atom_netlist.cpp:219
vtr::StrongId< atom_pin_id_tag > AtomPinId
Definition: atom_netlist_fwd.h:38
bool validate_port_sizes_impl(size_t num_ports) const override
Definition: atom_netlist.cpp:295
void remove_block_impl(const AtomBlockId blk_id) override
Definition: atom_netlist.cpp:215
This file defines the Netlist class, which stores the connectivity information of the components in a...
void rebuild_block_refs_impl(const vtr::vector_map< AtomPinId, AtomPinId > &pin_id_map, const vtr::vector_map< AtomPortId, AtomPortId > &port_id_map) override
Definition: atom_netlist.cpp:231
AtomPinId create_pin(const AtomPortId port_id, BitIndex port_bit, const AtomNetId net_id, const PinType pin_type, bool is_const=false)
Create or return an existing pin in the netlist.
Definition: atom_netlist.cpp:182
void remove_pin_impl(const AtomPinId pin_id) override
Definition: atom_netlist.cpp:223
std::vector< std::vector< vtr::LogicValue > > TruthTable
Definition: atom_netlist.h:91
AtomBlockId create_block(const std::string name, const t_model *model, const TruthTable truth_table=TruthTable())
Create or return an existing block in the netlist.
Definition: atom_netlist.cpp:127
AtomBlockId find_atom_pin_driver(const AtomBlockId blk_id, const t_model_ports *model_port, const BitIndex port_bit) const
Returns the AtomBlockId of the atom driving the specified pin if it exists or AtomBlockId::INVALID() ...
Definition: atom_netlist.cpp:87
AtomNetId create_net(const std::string name)
Create an empty, or return an existing net in the netlist.
Definition: atom_netlist.cpp:195
bool validate_net_sizes_impl(size_t num_nets) const override
Definition: atom_netlist.cpp:307
PinType pin_type(const AtomPinId pin_id) const
Returns the type of the specified pin.
void clean_ports_impl(const vtr::vector_map< AtomPortId, AtomPortId > &port_id_map) override
Definition: atom_netlist.cpp:261
vtr::vector_map< AtomBlockId, TruthTable > block_truth_tables_
Definition: atom_netlist.h:259
void remove_net_impl(const AtomNetId net_id) override
Definition: atom_netlist.cpp:227
const t_model * block_model(const AtomBlockId id) const
Returns the model associated with the block.
Definition: atom_netlist.cpp:41
const std::string & net_name(const AtomNetId net_id) const
Returns the name of the specified net.
std::unordered_map< std::string, std::unordered_set< std::string > > net_aliases_map_
Definition: atom_netlist.h:265
Definition: atom_netlist.h:80
void rebuild_net_refs_impl(const vtr::vector_map< AtomPinId, AtomPinId > &pin_id_map) override
Definition: atom_netlist.cpp:246
bool validate_pin_sizes_impl(size_t num_pins) const override
Definition: atom_netlist.cpp:302
const TruthTable & block_truth_table(const AtomBlockId id) const
Returns the truth table associated with the block.
Definition: atom_netlist.cpp:47
AtomNetlist(std::string name="", std::string id="")
Constructs a netlist.
Definition: atom_netlist.cpp:19
vtr::vector_map< AtomBlockId, const t_model * > block_models_
Definition: atom_netlist.h:258
void clean_pins_impl(const vtr::vector_map< AtomPinId, AtomPinId > &pin_id_map) override
Definition: atom_netlist.cpp:266
vtr::StrongId< atom_port_id_tag > AtomPortId
Definition: atom_netlist_fwd.h:35
PinType
Definition: netlist_fwd.h:25
Definition: netlist.h:446
void add_net_alias(const std::string net_name, std::string alias_net_name)
Adds a value to the net aliases set for a given net name in the net_aliases_map.
Definition: atom_netlist.cpp:208
AtomPortId find_atom_port(const AtomBlockId blk_id, const t_model_ports *model_port) const
Returns the AtomPortId of the specifed port if it exists or AtomPortId::INVALID() if not...
Definition: atom_netlist.cpp:69
void rebuild_pin_refs_impl(const vtr::vector_map< AtomPortId, AtomPortId > &port_id_map, const vtr::vector_map< AtomNetId, AtomNetId > &net_id_map) override
Definition: atom_netlist.cpp:241
void clean_nets_impl(const vtr::vector_map< AtomNetId, AtomNetId > &net_id_map) override
Definition: atom_netlist.cpp:270
void clean_blocks_impl(const vtr::vector_map< AtomBlockId, AtomBlockId > &block_id_map) override
Definition: atom_netlist.cpp:255
vtr::StrongId< atom_block_id_tag > AtomBlockId
Definition: atom_netlist_fwd.h:26
AtomBlockType block_type(const AtomBlockId id) const
Returns the type of the specified block.
Definition: atom_netlist.cpp:27
AtomPortId create_port(const AtomBlockId blk_id, const t_model_ports *model_port)
Create or return an existing port in the netlist.
Definition: atom_netlist.cpp:144
AtomNetId add_net(const std::string name, AtomPinId driver, std::vector< AtomPinId > sinks)
Create a completely specified net from specified driver and sinks.
Definition: atom_netlist.cpp:204
unsigned BitIndex
Definition: atom_netlist_fwd.h:41