Verilog to Routing - VPR
netlist_walker.h
Go to the documentation of this file.
1 #ifndef NETLIST_WALKER_H
2 #define NETLIST_WALKER_H
3 #include "vpr_types.h"
4 
5 class NetlistVisitor;
6 
7 class NetlistWalker {
8  public:
9  NetlistWalker(NetlistVisitor& netlist_visitor)
10  : visitor_(netlist_visitor) {}
11 
12  void walk();
13 
14  private:
15  void walk_blocks(const t_pb_routes& pb_route, const t_pb* pb);
16 
17  private:
19 };
20 
22  public:
23  virtual ~NetlistVisitor() = default;
24  void start() { start_impl(); }
25  void visit_top(const char* top_level_name) { visit_top_impl(top_level_name); }
26  void visit_clb(ClusterBlockId blk_id, const t_pb* clb) { visit_clb_impl(blk_id, clb); }
27 
29  void visit_atom(const t_pb* atom) { visit_atom_impl(atom); }
30 
36  void visit_route_through(const t_pb* atom) {
37  visit_route_through_impl(atom);
38  }
39 
46  void visit_all(const t_pb_routes& top_pb_route, const t_pb* pb) {
47  visit_all_impl(top_pb_route, pb);
48  }
49  void finish() { finish_impl(); }
50 
51  protected:
52  //All implementation methods are no-ops in this base class
53  virtual void start_impl();
54  virtual void visit_top_impl(const char* top_level_name);
55  virtual void visit_clb_impl(ClusterBlockId blk_id, const t_pb* clb);
56  virtual void visit_atom_impl(const t_pb* atom);
57  virtual void visit_route_through_impl(const t_pb* atom);
58  virtual void visit_all_impl(const t_pb_routes& top_pb_route, const t_pb* pb);
59 
60  virtual void finish_impl();
61 };
62 #endif
vtr::flat_map2< int, t_pb_route > t_pb_routes
Definition: vpr_types.h:270
void visit_atom(const t_pb *atom)
visit_atom is called on leaf pb nodes that map to a netlist element.
Definition: netlist_walker.h:29
void visit_all(const t_pb_routes &top_pb_route, const t_pb *pb)
visit_all is called on all t_pb nodes that are in use for any reason.
Definition: netlist_walker.h:46
This is a core file that defines the major data types used by VPR.
NetlistWalker(NetlistVisitor &netlist_visitor)
Definition: netlist_walker.h:9
void walk_blocks(const t_pb_routes &pb_route, const t_pb *pb)
Recursively travers this pb calling visitor_.visit_atom() or visitor_.visit_open() on any of its prim...
Definition: netlist_walker.cpp:28
void start()
Definition: netlist_walker.h:24
void visit_top(const char *top_level_name)
Definition: netlist_walker.h:25
void visit_clb(ClusterBlockId blk_id, const t_pb *clb)
Definition: netlist_walker.h:26
void finish()
Definition: netlist_walker.h:49
NetlistVisitor & visitor_
Definition: netlist_walker.h:18
Definition: netlist_walker.h:7
A t_pb represents an instance of a clustered block.
Definition: vpr_types.h:288
void visit_route_through(const t_pb *atom)
visit_route_through is called on leaf pb nodes that do not map to a netlist element.
Definition: netlist_walker.h:36
void walk()
Definition: netlist_walker.cpp:5
vtr::StrongId< cluster_block_id_tag > ClusterBlockId
A unique identifier for a block/primitive in the atom netlist.
Definition: clustered_netlist_fwd.h:17
Definition: netlist_walker.h:21