We often
encounter people argue that hold check is frequency independent. However, it is
only partially true. This condition is true only for zero-cycle hold checks. By
zero cycle hold checks, we mean that the hold check is performed on the same
edge at which it is launched. This is true in case of timing paths between same
polarity registers; e.g. between positive edge-triggered flops. Figure 1 below
shows timing checks for a data-path launched from a positive edge-triggered
flip-flop and captured at a positive edge-triggered flip-flop. The hold timing,
in this case, is checked at the same edge at which data is launched. Changing
the clock frequency will not cause hold check to change.
Figure
1: Setup and hold checks for
positive edge-triggered to positive edge-triggered flip-flop
|
Most of the
cases in today’s designs are of this type only. The exceptions to zero cycle
hold check are not too many. There are hold checks for previous edge also.
However, these are very relaxed as compared to zero cycle hold check. Hence,
are not mentioned. Also, hold checks on next edge are impossible to be met
considering cross-corner delay variations. So, seldom do we hear that hold
check is frequency dependant. Let us talk of different scenarios of frequency
dependant hold checks:
- From positive edge-triggered flip-flop to negative edge-triggered flip-flop and vice-versa: Figure 2 below shows the setup and hold checks for a timing path from positive edge-triggered flip-flop to a negative edge-triggered flip-flop. Change in frequency will change the distance between the two adjacent edges; hence, hold check will change. The equation for hold timing will be given for below case as:
Tdata + Tclk/2
> Tskew + Thold
or
Tslack = Tclk/2 - Thold - Tskew
+ Tdata
Thus, clock period comes into
picture in calculation of hold timing slack.
Figure 2: Setup and hold checks for timing path from positive edge-triggered flip-flop to negative edge-triggered flip-flop |
Similarly,
for timing paths launching from negative edge-triggered flip-flop and being
captured at positive edge-triggered flip-flop, clock period comes into picture.
However, this check is very relaxed most of the times. It is evident from above
equation that for hold slack to be negative, the skew between launch and
capture clocks should be greater than half clock cycle which is very rare
scenario to occur. Even at 2 GHz frequency (Tclk = 500 ps), skew has
to be greater than 250 ps which is still very rare.
Coming
to latches, hold check from a positive level-sensitive latch to negative
edge-triggered flip-flop is half cycle. Similarly, hold check from a negative
level-sensitive latch to positive edge-triggered flip-flop is half cycle. Hence, hold check in both of these cases is frequency dependant.
2. Clock
gating hold checks: When data launched from a negative edge-triggered
flip-flop gates a clock on an OR gate, hold is checked on next positive edge to
the edge at which data is launched as shown in figure 3, which is frequency
dependant.
Figure 3: Clock gating hold check between data launched from a negative edge-triggered flip-flop and and clock at an OR gate |
Similarly,
data launched from positive edge-triggered and gating clock on an AND gate form
half cycle hold. However, this kind of check is not possible to meet under
normal scenarios considering cross-corner variations.
3)
Non-default
hold checks: Sometimes, due to architectural requirements (e.g.
multi-cycle paths for hold), hold check is non-zero cycle even for positive
edge-triggered to positive edge-triggered paths as shown in figure 4 below.
|
Also read:
Nice explanation but please correct fig 4. In non-default hold checks, it says " positive edge-triggered to positive edge-triggered paths as shown in figure 4 below" but figure has negative edge triggered flop at capture.
ReplyDeleteHi
DeleteCorrected, thanks for your valuable feedback. :-)
Great explanation!!
ReplyDelete2. Clock gating hold checks
Though our focus is on non-zero Hold paths, I just wanted to add below details:
Negative-edge flop --> AND:
Setup - half cycle, Hold - 0 cycle
Postive-edge flop --> OR:
Setup - Half cycle, Hold - 0 cycle
Correct. Below post explains in detail these checks.
Deletehttps://vlsiuniverse.blogspot.com/2014/05/clock-switching-and-clock-gating-checks.html