Large uTh in timing analysis
Hello,
I'm working with Arria 10 and I'm trying to optimize timing in a design which appears to be congested due to excessive routing delays added by the compiler to meet hold timing. (The congestion is causing IC delays of up to 7.5ns between adjacent cells.) In order to reveal where all the routing delays are being applied, I recompiled the design with "Optimize Hold Timing" disabled. In the timing analysis (see attached picture), I noticed that some registers have a very large uTh (1.1 ns) and this is causing the tool to add significant routing delays. The strange part is that the same register has a small uTh (0.1 ns) when driven from a different launch register, that is:
From A to C, C has uTh = 1.1 ns.
From B to C, C has uTh = 0.1 ns.
In both cases above:
- registers A, B, and C are in the same clock domain
- the Data Arrival times for A->C and B->C are very similar
- the clock paths for A and B are the same
- the clock paths for C are the same
- the timing analysis is performed in the same corner.
The only major difference between the two paths is the uTh value in the Data Required time.
My questions are:
1) What causes uTh to be so large and what can be done, if anything, to reduce it?
2) Why does the same destination register have two different values of uTh in two different data paths? I thought the hold time requirement was just a property of the destination register.
Regards,
Phil
Based on engineering input, the hold times will vary depending on how the LAB is configured. Factors such as HS/LP (High Speed/Low Power), the amount of borrowing, and the settings for the Flip-Flop and LUT will all influence the reported uTh.
As you may already know, different timing models may also affect the uTh.
Without a design or project, it is difficult to determine what might be contributing to the high uTh at the moment.
Btw, I’m glad to know the timing issue is solved.
Regards,
Richard Tan