Verilog to Routing - VPR
atom_netlist_utils.h
Go to the documentation of this file.
1 #ifndef ATOM_NETLIST_UTILS_H
2 #define ATOM_NETLIST_UTILS_H
3 #include <cstdio>
4 #include <set>
5 #include "atom_netlist.h"
6 
18 int mark_constant_generators(AtomNetlist& netlist, e_const_gen_inference const_gen_inference_method, int verbosity);
19 
21 void absorb_buffer_luts(AtomNetlist& netlist, int verbosity);
22 
23 /*
24  * Modify the netlist by sweeping away unused nets/blocks/inputs
25  */
26 
32 size_t sweep_iterative(AtomNetlist& netlist,
33  bool should_sweep_dangling_ios,
34  bool should_sweep_dangling_blocks,
35  bool should_sweep_dangling_nets,
36  bool should_sweep_constant_primary_outputs,
37  e_const_gen_inference const_gen_inference_method,
38  int verbosity);
39 
41 size_t sweep_blocks(AtomNetlist& netlist, int verbosity);
42 
44 size_t sweep_nets(AtomNetlist& netlist, int verbosity);
45 
47 size_t sweep_inputs(AtomNetlist& netlist, int verbosity);
48 
50 size_t sweep_outputs(AtomNetlist& netlist, int verbosity);
51 
52 size_t sweep_constant_primary_outputs(AtomNetlist& netlist, int verbosity);
53 
54 /*
55  * Truth-table operations
56  */
57 
59 bool is_buffer(const AtomNetlist& netlist, const AtomBlockId blk);
60 
66 
75 AtomNetlist::TruthTable expand_truth_table(const AtomNetlist::TruthTable& truth_table, const size_t num_inputs);
76 
85 AtomNetlist::TruthTable permute_truth_table(const AtomNetlist::TruthTable& truth_table, const size_t num_inputs, const std::vector<int>& permutation);
86 
88 std::vector<vtr::LogicValue> truth_table_to_lut_mask(const AtomNetlist::TruthTable& truth_table, const size_t num_inputs);
89 
94 std::vector<size_t> cube_to_minterms(std::vector<vtr::LogicValue> cube);
95 
96 /*
97  * Print the netlist for debugging
98  */
99 void print_netlist_as_blif(std::string filename, const AtomNetlist& netlist);
100 void print_netlist_as_blif(FILE* f, const AtomNetlist& netlist);
101 
103 std::string atom_pin_arch_name(const AtomNetlist& netlist, const AtomPinId pin);
104 
105 /*
106  * Identify all clock nets
107  */
108 
115 std::set<AtomNetId> find_netlist_physical_clock_nets(const AtomNetlist& netlist);
116 
124 std::set<AtomPinId> find_netlist_logical_clock_drivers(const AtomNetlist& netlist);
125 
127 void print_netlist_clock_info(const AtomNetlist& netlist);
128 #endif
AtomNetlist::TruthTable permute_truth_table(const AtomNetlist::TruthTable &truth_table, const size_t num_inputs, const std::vector< int > &permutation)
Permutes the inputs of a truth table.
Definition: atom_netlist_utils.cpp:1198
vtr::StrongId< atom_pin_id_tag > AtomPinId
Definition: atom_netlist_fwd.h:38
std::vector< vtr::LogicValue > truth_table_to_lut_mask(const AtomNetlist::TruthTable &truth_table, const size_t num_inputs)
Convers a truth table to a lut mask (sequence of binary values representing minterms) ...
Definition: atom_netlist_utils.cpp:1239
size_t sweep_constant_primary_outputs(AtomNetlist &netlist, int verbosity)
Definition: atom_netlist_utils.cpp:953
void print_netlist_clock_info(const AtomNetlist &netlist)
Prints out information about netlist clocks.
Definition: atom_netlist_utils.cpp:1475
int mark_constant_generators(AtomNetlist &netlist, e_const_gen_inference const_gen_inference_method, int verbosity)
Walk through the netlist detecting constant generators.
Definition: atom_netlist_utils.cpp:422
e_const_gen_inference
Definition: vpr_types.h:128
std::vector< std::vector< vtr::LogicValue > > TruthTable
Definition: atom_netlist.h:91
std::set< AtomPinId > find_netlist_logical_clock_drivers(const AtomNetlist &netlist)
Returns the set of pins which logically drive unique clocks in the netlist.
Definition: atom_netlist_utils.cpp:1394
size_t sweep_inputs(AtomNetlist &netlist, int verbosity)
Sweeps primary-inputs with no fanout.
Definition: atom_netlist_utils.cpp:1091
void print_netlist_as_blif(std::string filename, const AtomNetlist &netlist)
Definition: atom_netlist_utils.cpp:51
Definition: atom_netlist.h:80
std::vector< size_t > cube_to_minterms(std::vector< vtr::LogicValue > cube)
Convers a logic cube (potnetially including don&#39;t cares) into a sequence of minterm numbers...
Definition: atom_netlist_utils.cpp:1276
size_t sweep_blocks(AtomNetlist &netlist, int verbosity)
Sweeps blocks that have no fanout.
Definition: atom_netlist_utils.cpp:1063
std::string atom_pin_arch_name(const AtomNetlist &netlist, const AtomPinId pin)
Returns a user-friendly architectural identifier for the specified atom pin.
Definition: atom_netlist_utils.cpp:407
size_t sweep_iterative(AtomNetlist &netlist, bool should_sweep_dangling_ios, bool should_sweep_dangling_blocks, bool should_sweep_dangling_nets, bool should_sweep_constant_primary_outputs, e_const_gen_inference const_gen_inference_method, int verbosity)
Repeatedly sweeps the netlist removing blocks and nets until nothing more can be swept. If sweep_ios is true also sweeps primary-inputs and primary-outputs.
Definition: atom_netlist_utils.cpp:983
AtomNetlist::TruthTable expand_truth_table(const AtomNetlist::TruthTable &truth_table, const size_t num_inputs)
Definition: atom_netlist_utils.cpp:1219
bool is_buffer(const AtomNetlist &netlist, const AtomBlockId blk)
Returns true if the specified block is a logical buffer.
Definition: atom_netlist_utils.cpp:1493
size_t sweep_nets(AtomNetlist &netlist, int verbosity)
Sweeps nets with no drivers and/or no sinks.
Definition: atom_netlist_utils.cpp:1134
size_t sweep_outputs(AtomNetlist &netlist, int verbosity)
Sweeps primary-outputs with no fanin.
Definition: atom_netlist_utils.cpp:1113
vtr::StrongId< atom_block_id_tag > AtomBlockId
Definition: atom_netlist_fwd.h:26
void absorb_buffer_luts(AtomNetlist &netlist, int verbosity)
Modifies the netlist by absorbing buffer LUTs.
Definition: atom_netlist_utils.cpp:692
std::set< AtomNetId > find_netlist_physical_clock_nets(const AtomNetlist &netlist)
Returns the set of nets which drive clock pins in the netlist.
Definition: atom_netlist_utils.cpp:1326
This file defines the AtomNetlist class used to store and manipulate the primitive (or atom) netlist...
bool truth_table_encodes_on_set(const AtomNetlist::TruthTable &truth_table)
Deterimine whether a truth table encodes the logic functions &#39;On&#39; set (returns true) or &#39;Off&#39; set (re...
Definition: atom_netlist_utils.cpp:1172