It is common knowledge that Vivado uses an analytical place and route engine for better and more predictable design closure, and in the process, 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, and achieve different performance results. We have first-hand accounts from multiple customers relating how they got 10s of nanoseconds of TNS fluctuations, by simply making minute tweaks that do not affect the functionality at all. These fluctuations can go either way, reminiscent of the effects of cost tables or placement seeds.
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 introducing various stimuli into relevant parts of the design flow so that Vivado will 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 contains false timing paths. 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.
Querying 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, but after the placement was stimulated, this cell was 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, but it is a painless approach with no impact on functionality — certainly something worth trying.