Skip to content

Commit 0a04d62

Browse files
committed
add docs, update golden
1 parent 74dc1fc commit 0a04d62

File tree

13 files changed

+163
-54
lines changed

13 files changed

+163
-54
lines changed

doc/src/api/vpr/index.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ VPR API
77
:maxdepth: 1
88

99
contexts
10-
netlist
1110
mapping
11+
netlist
12+
route_tree
1213
rr_graph

doc/src/api/vpr/route_tree.rst

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
========
2+
Route Tree
3+
========
4+
5+
RouteTree
6+
-------
7+
8+
.. doxygenfile:: route_tree.h
9+
:project: vpr
10+
:sections: detaileddescription
11+
12+
13+
.. doxygenclass:: RouteTree
14+
:project: vpr
15+
:members:
16+
17+
RouteTreeNode
18+
-------------
19+
20+
.. doxygenclass:: RouteTreeNode
21+
:project: vpr
22+
:members:

libs/libvtrutil/src/vtr_optional.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,8 @@ using optional = tl::optional<T>;
3636
using nullopt_t = tl::nullopt_t;
3737
static constexpr nullopt_t nullopt = tl::nullopt;
3838

39+
using in_place_t = tl::in_place_t;
40+
static constexpr in_place_t in_place = tl::in_place;
41+
3942
using bad_optional_access = tl::bad_optional_access;
4043
} // namespace vtr

vpr/src/route/route_timing.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ static bool timing_driven_route_sink(ConnectionRouter& router,
9595
const t_conn_cost_params cost_params,
9696
const t_router_opts& router_opts,
9797
RouteTree& tree,
98-
std::vector<vtr::optional<RouteTreeNode&>>& rt_node_of_sink,
98+
std::vector<vtr::optional<const RouteTreeNode&>>& rt_node_of_sink,
9999
SpatialRouteTreeLookup& spatial_rt_lookup,
100100
RouterStats& router_stats,
101101
route_budgets& budgeting_inf,
@@ -121,7 +121,7 @@ static void setup_routing_resources(int itry,
121121
unsigned num_sinks,
122122
int min_incremental_reroute_fanout,
123123
CBRR& connections_inf,
124-
std::vector<vtr::optional<RouteTreeNode&>>& rt_node_of_sink,
124+
std::vector<vtr::optional<const RouteTreeNode&>>& rt_node_of_sink,
125125
const t_router_opts& router_opts,
126126
bool ripup_high_fanout_nets);
127127

@@ -130,7 +130,7 @@ static bool timing_driven_check_net_delays(const Netlist<>& net_list,
130130

131131
static void update_net_delays_from_route_tree(float* net_delay,
132132
const Netlist<>& net_list,
133-
std::vector<vtr::optional<RouteTreeNode&>>& rt_node_of_sink,
133+
std::vector<vtr::optional<const RouteTreeNode&>>& rt_node_of_sink,
134134
ParentNetId inet,
135135
TimingInfo* timing_info,
136136
NetPinTimingInvalidator* pin_timing_invalidator);
@@ -957,7 +957,7 @@ bool try_timing_driven_route_net(ConnectionRouter& router,
957957
CBRR& connections_inf,
958958
RouterStats& router_stats,
959959
std::vector<float>& pin_criticality,
960-
std::vector<vtr::optional<RouteTreeNode&>>& rt_node_of_sink,
960+
std::vector<vtr::optional<const RouteTreeNode&>>& rt_node_of_sink,
961961
NetPinsMatrix<float>& net_delay,
962962
const ClusteredPinAtomPinsLookup& netlist_pin_lookup,
963963
std::shared_ptr<SetupHoldTimingInfo> timing_info,
@@ -1044,7 +1044,7 @@ bool timing_driven_route_net(ConnectionRouter& router,
10441044
CBRR& connections_inf,
10451045
RouterStats& router_stats,
10461046
std::vector<float>& pin_criticality,
1047-
std::vector<vtr::optional<RouteTreeNode&>>& rt_node_of_sink,
1047+
std::vector<vtr::optional<const RouteTreeNode&>>& rt_node_of_sink,
10481048
float* net_delay,
10491049
const ClusteredPinAtomPinsLookup& netlist_pin_lookup,
10501050
std::shared_ptr<SetupHoldTimingInfo> timing_info,
@@ -1288,7 +1288,7 @@ static bool timing_driven_pre_route_to_clock_root(ConnectionRouter& router,
12881288
* netlist pin, but which can be reached from the global clock root drive *
12891289
* points. Therefore, we can set the net pin index of the sink node to *
12901290
* OPEN (meaning illegal) as it is not meaningful for this sink. */
1291-
vtr::optional<RouteTreeNode&> new_branch, new_sink;
1291+
vtr::optional<const RouteTreeNode&> new_branch, new_sink;
12921292
std::tie(new_branch, new_sink) = tree.update_from_heap(&cheapest, OPEN, ((high_fanout) ? &spatial_rt_lookup : nullptr), is_flat);
12931293

12941294
VTR_ASSERT_DEBUG(!high_fanout || validate_route_tree_spatial_lookup(tree.root(), spatial_rt_lookup));
@@ -1324,7 +1324,7 @@ static bool timing_driven_route_sink(ConnectionRouter& router,
13241324
const t_conn_cost_params cost_params,
13251325
const t_router_opts& router_opts,
13261326
RouteTree& tree,
1327-
std::vector<vtr::optional<RouteTreeNode&>>& rt_node_of_sink,
1327+
std::vector<vtr::optional<const RouteTreeNode&>>& rt_node_of_sink,
13281328
SpatialRouteTreeLookup& spatial_rt_lookup,
13291329
RouterStats& router_stats,
13301330
route_budgets& budgeting_inf,
@@ -1395,7 +1395,7 @@ static bool timing_driven_route_sink(ConnectionRouter& router,
13951395
int inode = cheapest.index;
13961396
route_ctx.rr_node_route_inf[inode].target_flag--; /* Connected to this SINK. */
13971397

1398-
vtr::optional<RouteTreeNode&> new_branch, new_sink;
1398+
vtr::optional<const RouteTreeNode&> new_branch, new_sink;
13991399
std::tie(new_branch, new_sink) = tree.update_from_heap(&cheapest, target_pin, ((high_fanout) ? &spatial_rt_lookup : nullptr), is_flat);
14001400

14011401
VTR_ASSERT_DEBUG(!high_fanout || validate_route_tree_spatial_lookup(tree.root(), spatial_rt_lookup));
@@ -1431,7 +1431,7 @@ static void setup_routing_resources(int itry,
14311431
unsigned num_sinks,
14321432
int min_incremental_reroute_fanout,
14331433
CBRR& connections_inf,
1434-
std::vector<vtr::optional<RouteTreeNode&>>& rt_node_of_sink,
1434+
std::vector<vtr::optional<const RouteTreeNode&>>& rt_node_of_sink,
14351435
const t_router_opts& router_opts,
14361436
bool ripup_high_fanout_nets) {
14371437
/* Build and return a partial route tree from the legal connections from last iteration.
@@ -1609,7 +1609,7 @@ static bool timing_driven_check_net_delays(const Netlist<>& net_list, NetPinsMat
16091609
* the route_tree to the net_delay array. */
16101610
static void update_net_delays_from_route_tree(float* net_delay,
16111611
const Netlist<>& net_list,
1612-
std::vector<vtr::optional<RouteTreeNode&>>& rt_node_of_sink,
1612+
std::vector<vtr::optional<const RouteTreeNode&>>& rt_node_of_sink,
16131613
ParentNetId inet,
16141614
TimingInfo* timing_info,
16151615
NetPinTimingInvalidator* pin_timing_invalidator) {

vpr/src/route/route_timing.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ bool try_timing_driven_route_net(ConnectionRouter& router,
4141
CBRR& connections_inf,
4242
RouterStats& router_stats,
4343
std::vector<float>& pin_criticality,
44-
std::vector<vtr::optional<RouteTreeNode&>>& rt_node_of_sink,
44+
std::vector<vtr::optional<const RouteTreeNode&>>& rt_node_of_sink,
4545
ClbNetPinsMatrix<float>& net_delay,
4646
const ClusteredPinAtomPinsLookup& netlist_pin_lookup,
4747
std::shared_ptr<SetupHoldTimingInfo> timing_info,
@@ -63,7 +63,7 @@ bool timing_driven_route_net(ConnectionRouter& router,
6363
CBRR& connections_inf,
6464
RouterStats& router_stats,
6565
std::vector<float>& pin_criticality,
66-
std::vector<vtr::optional<RouteTreeNode&>>& rt_node_of_sink,
66+
std::vector<vtr::optional<const RouteTreeNode&>>& rt_node_of_sink,
6767
float* net_delay,
6868
const ClusteredPinAtomPinsLookup& netlist_pin_lookup,
6969
std::shared_ptr<SetupHoldTimingInfo> timing_info,
@@ -87,7 +87,7 @@ class timing_driven_route_structs {
8787
public:
8888
std::vector<float> pin_criticality; /* [1..max_pins_per_net-1] */
8989
std::vector<int> sink_order; /* [1..max_pins_per_net-1] */
90-
std::vector<vtr::optional<RouteTreeNode&>> rt_node_of_sink; /* [1..max_pins_per_net-1] */
90+
std::vector<vtr::optional<const RouteTreeNode&>> rt_node_of_sink; /* [1..max_pins_per_net-1] */
9191

9292
timing_driven_route_structs(const Netlist<>& net_list) {
9393
int max_sinks = std::max(get_max_pins_per_net(net_list) - 1, 0);

vpr/src/route/route_tree.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,12 @@ void RouteTree::copy_tree_x(RouteTreeNode* lhs, const RouteTreeNode& rhs) {
101101
}
102102
}
103103

104-
/** Copy constructor */
104+
/* Copy constructor */
105105
RouteTree::RouteTree(const RouteTree& rhs) {
106106
_root = copy_tree(rhs._root);
107107
}
108108

109-
/** Move constructor:
109+
/* Move constructor:
110110
* Take over rhs' linked list & set it to null so it doesn't get freed.
111111
* Refs should stay valid after this? */
112112
RouteTree::RouteTree(RouteTree&& rhs) {
@@ -115,7 +115,7 @@ RouteTree::RouteTree(RouteTree&& rhs) {
115115
_rr_node_to_rt_node = std::move(rhs._rr_node_to_rt_node);
116116
}
117117

118-
/** Copy assignment: free list, clear lookup, reload list. */
118+
/* Copy assignment: free list, clear lookup, reload list. */
119119
RouteTree& RouteTree::operator=(const RouteTree& rhs) {
120120
if (this == &rhs)
121121
return *this;
@@ -125,7 +125,7 @@ RouteTree& RouteTree::operator=(const RouteTree& rhs) {
125125
return *this;
126126
}
127127

128-
/** Move assignment:
128+
/* Move assignment:
129129
* Free my list, take over rhs' linked list & set it to null so it doesn't get freed.
130130
* Also ~steal~ acquire ownership of node lookup from rhs.
131131
* Refs should stay valid after this? */
@@ -306,7 +306,7 @@ void RouteTree::load_route_tree_Tdel(RouteTreeNode& from_node, float Tarrival) {
306306
}
307307
}
308308

309-
vtr::optional<RouteTreeNode&> RouteTree::find_by_rr_id(RRNodeId rr_node) const {
309+
vtr::optional<const RouteTreeNode&> RouteTree::find_by_rr_id(RRNodeId rr_node) const {
310310
auto it = _rr_node_to_rt_node.find(rr_node);
311311
if (it != _rr_node_to_rt_node.end()) {
312312
return *it->second;
@@ -441,7 +441,7 @@ void RouteTree::print(void) const {
441441
* is the net pin index corresponding to the SINK that was reached. This routine
442442
* returns a tuple: RouteTreeNode of the branch it adds to the route tree and
443443
* RouteTreeNode of the SINK it adds to the routing. */
444-
std::tuple<vtr::optional<RouteTreeNode&>, vtr::optional<RouteTreeNode&>>
444+
std::tuple<vtr::optional<const RouteTreeNode&>, vtr::optional<const RouteTreeNode&>>
445445
RouteTree::update_from_heap(t_heap* hptr, int target_net_pin_index, SpatialRouteTreeLookup* spatial_rt_lookup, bool is_flat) {
446446
auto& device_ctx = g_vpr_ctx.device();
447447
const auto& rr_graph = device_ctx.rr_graph;
@@ -451,7 +451,7 @@ RouteTree::update_from_heap(t_heap* hptr, int target_net_pin_index, SpatialRoute
451451
std::tie(start_of_new_subtree_rt_node, sink_rt_node) = add_subtree_from_heap(hptr, target_net_pin_index, is_flat);
452452

453453
if (!start_of_new_subtree_rt_node)
454-
return {vtr::nullopt, sink_rt_node};
454+
return {vtr::nullopt, *sink_rt_node};
455455

456456
/* Reload timing values */
457457
reload_timing(start_of_new_subtree_rt_node);
@@ -466,9 +466,9 @@ RouteTree::update_from_heap(t_heap* hptr, int target_net_pin_index, SpatialRoute
466466
* TODO: probably this should be cleaner */
467467
RouteTreeNode* parent = start_of_new_subtree_rt_node->_parent;
468468
if (start_of_new_subtree_rt_node->_next_sibling == parent->_subtree_end && rr_graph.node_type(parent->inode) == SOURCE)
469-
return {*parent, sink_rt_node};
469+
return {*parent, *sink_rt_node};
470470

471-
return {*start_of_new_subtree_rt_node, sink_rt_node};
471+
return {*start_of_new_subtree_rt_node, *sink_rt_node};
472472
}
473473

474474
/* Adds the most recent wire segment, ending at the SINK indicated by hptr,

0 commit comments

Comments
 (0)