Skip to content

Commit d3c17e5

Browse files
committed
Add an exception in update_from_heap to not set _is_isink_reached when the function is called from pre-route to clock root
1 parent 925834f commit d3c17e5

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

vpr/src/route/route_tree.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -479,8 +479,11 @@ void RouteTree::print(void) const {
479479
/** Add the most recently finished wire segment to the routing tree, and
480480
* update the Tdel, etc. numbers for the rest of the routing tree. hptr
481481
* is the heap pointer of the SINK that was reached, and target_net_pin_index
482-
* is the net pin index corresponding to the SINK that was reached. This routine
483-
* returns a tuple: RouteTreeNode of the branch it adds to the route tree and
482+
* is the net pin index corresponding to the SINK that was reached. Usually target_net_pin_index
483+
* is a non-negative integer indicating the netlist connection being routed, but it can be OPEN (-1)
484+
* to indicate this is a routing path to a virtual sink which we use when routing to the source of
485+
* dedicated clock networks.
486+
* This routine returns a tuple: RouteTreeNode of the branch it adds to the route tree and
484487
* RouteTreeNode of the SINK it adds to the routing. */
485488
std::tuple<vtr::optional<const RouteTreeNode&>, vtr::optional<const RouteTreeNode&>>
486489
RouteTree::update_from_heap(t_heap* hptr, int target_net_pin_index, SpatialRouteTreeLookup* spatial_rt_lookup, bool is_flat) {
@@ -501,7 +504,7 @@ RouteTree::update_from_heap(t_heap* hptr, int target_net_pin_index, SpatialRoute
501504
update_route_tree_spatial_lookup_recur(*start_of_new_subtree_rt_node, *spatial_rt_lookup);
502505
}
503506

504-
if (_net_id.is_valid()) /* We don't have this lookup if the tree isn't associated with a net */
507+
if (_net_id.is_valid() && target_net_pin_index != OPEN) /* We don't have this lookup if the tree isn't associated with a net */
505508
_is_isink_reached[target_net_pin_index] = true;
506509

507510
return {*start_of_new_subtree_rt_node, *sink_rt_node};

0 commit comments

Comments
 (0)