It is common knowledge that Vivado uses an analytical place and route engine for better and more predictable design closure. As a result, Vivado got rid of the "cost table" (also commonly known as random seeds) user options.
What may be less well-known is that designers still have ways to introduce randomness into Vivado placement. Like the random seeds, this achieves different performance results. We have first-hand accounts from multiple customers relating how they got 10s of nanoseconds of WNS fluctuations, by simply making minute tweaks that do not affect the functionality at all. Unfortunately, these fluctuations can go either way, reminiscent of the effects of cost tables or placement seeds.
We have incorporated this behaviour into a feature on InTime.
How to run "random seeds" with InTime 1.6
Without talking too much Chaos Theory and butterflies flapping their wings from across the ocean, this approach is not a hack but a method to subtly introduce various stimuli. The intention is for Vivado to attempt different calculations and end up with different (and potentially better!) results for the otherwise unmodified design.
InTime's implementation requires that your design be routed beforehand,
and it has to contain false timing paths. *From InTime 2.0 onwards, this requirement is no longer necessary. Here is how to use the new Placement Exploration recipe for Vivado:
- Open your routed project or DCP in InTime
- From the recipes dropdown, click and select the Placement Exploration recipe.
- Specify the number of different results you want in the "Runs per Round" flow property (10 in this example).
- Click "Start Recipe" to start running.
The following images show the chip view of the implemented design, before and after the Placement Exploration:
Noticeable placement differences
prior to (left) and after (right) running Placement Exploration.
We query one of the affected cells via:
get_property LOC [get_cells mgtEngine/no_chipscope.gt3_rxuserrdy_r_reg].
Before running the recipe, the cell above was at
SLICE_X52Y100. After the placement was stimulated, this cell shifted to
SLICE_X38Y126. More importantly, the TNS improved by 78ns -- without changing the design at all. As randomness is involved, not all results generated via the new Placement Exploration recipe will be good. This is a painless approach with no impact on functionality. Read more about it in Application Note of Placement Exploration recipe.
If you are interested in trying this feature, sign up here to get a free evaluation.
Related Post: How Much Do You Really Know About Placement Seed Sweep?