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.
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.
While InTime automatically targets the critical clock(s), the user can configure the amount of margins to be applied, as shown below:
- Clock Margin Initial Value (ns): Specifies 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): Specifies the incremental value to be added in the next run from the previous run’s clock margin value.
There is only one round for the clock margin recipe. The user can specify the number of runs per round to control the clock margins’ coverage.
For example: if “Runs Per Round” is “10”, “Clock Margin Initial Value” is “0.1” and “Clock Margin Incremental Step Value” is “0.05”, InTime generates 10 runs with the first run’s clock margin set to “0.1ns”, the second’s to”0.15ns”, the third’s to “0.2ns” and so on.
The Clock Margin Exploration recipe can be found in InTime version 2.3.0 and above (always use the latest version to get the latest recipes). 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.
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 TNS (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, 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.