The difference between passing and failing timing can be tiny, but failing by 500ps is just as frustrating as falling short by 5ns. Clock Margin Exploration is a new recipe in InTime version 2.3.0 that over-constrains the user's design, potentially yielding better timing results without modifying the design.
Use Clock Uncertainty
The idea is to apply "Clock Margin" adjustments at certain implementation stages to focus Vivado's efforts at the appropriate stages. As mentioned, this recipe does not modify the design and hence does not affect existing clock edges and relationships. It is a safe and effective recipe.
InTime will automatically target the critical clock(s). The user configures the amount of margin to be applied, as shown below:
- Clock Margin Initial Value (ns): The starting amount of clock uncertainty to use. This will be also the first run's clock margin value.
- Clock Margin Incrementing Step Value (ns): The incremental value to be added in the next run from the previous run's clock margin value.
There is only one round of the clock margin recipe. The user can specify the number of runs per round to control the clock margins' coverage.
For example: if you configure
- "Runs Per Round" = 10
- "Clock Margin Initial Value" = 0.1
- "Clock Margin Incremental Step Value" = 0.05
InTime generates 10 runs with the first run's clock margin set to "0.1ns", the second's to "0.15ns" and so on. It increments the step by 0.05ns as specified in the "Incremental Step". We'd also recommend using Clock Margin Exploration on the best results from running the InTime Default, InTime Default Extra or Extra Opt Exploration recipes.
Running Clock Margin Exploration on a sample design
Clock Margin Exploration will not improve timing in all cases but is an extremely easy "Last-Mile" approach to try. For example, the following results are from running Clock Margin Exploration on a design with about 60% utilization:
In this case, we ran "InTime Default", then "Extra Opt Exploration" on the best result, and finally "Clock Margin Exploration" on the best result. This approach successfully improved the Total Negative Slack by around 60% (from -50.017ns to -8.389ns) and the WNS (Worst Setup Slack) by around 40% (from -0.276ns to -0.164ns).
Let's look at the runtimes for each recipe:
- Original project with Vivado default setting: 9 mins
- Best result of InTime Default recipe - optimize_8: 25 mins
3 rounds of 10 runs each, totaling 30 runs - Best result of Extra Opt Exploration recipe - extra_opt_3: 94 mins
1 round of 9 runs - Best result of Clock Margin Exploration recipe - clock_margin_10: 129 mins
1 round of 10 runs
As seen above, a greater effort put in by Vivado for optimization leads to longer compile time. For Clock Margin Exploration, the best result "clock_margin_10" took 37% longer to run compared to its parent, "extra_opt_3".
If you are interested in the Clock Margin Exploration recipe and would like to have a try, please click this link to apply for a free evaluation of the latest InTime.