The route_design process in Vivado will sometimes create a long path for a net that leads to a setup timing violation.
If the net in question is un-routed and then re-routed the setup violation is removed.
Is there a reason for route_design to create such a long route?
In this case, it should be checked to see if a hold violation has been introduced by re-routing the long path.
Vivado differs from ISE in that it will leave a setup violation if fixing it introduces a larger hold error, so route_design will prioritize fixing hold violations.
This is the expected behavior.
Hold routing is done as a post-pass after the router has either met all setup violations or given up.
The hold router is generally successful because all it has to do is increase delay on the data path at that point, but for each hold violation there is some small probability that a route that fits the window between setup and hold violations is not available.
If the window cannot be hit, the router will take whichever route produces the smallest negative slack, either setup or hold.
This differs from ISE which would never (unless there was a bug) introduce a setup violation to fix a hold violation.
The following factors increase the likelihood that hold router will fail to fix all violations:
1. Larger number of hold violations to deal with.
2. Narrow window between setup and hold violations.
3. Large delay in clock path which requires corresponding large delay in data path.
4. Congestion limiting the choice of alternative routes.
5. Placement of source and destination of data path too close, limiting the choice of alternative routes.
Sometimes the failure to fix all Hold errors is just bad luck in that a low probability event occurred.
You can try a different strategy to get a different result on the probability curve.
There is also the possibility of timing or router bugs to consider.