In the post reset synchronizer, we discussed the functionality associated with a reset synchronizer. Here, we will discuss the timing associated with a reset synchronizer. Figure 1 below shows a reset synchronizer.
Figure 1: Reset synchronizer |
As we can see, a reset synchronizer is expected to have 3 pins other than a clock pin. We will discuss the timing requirements of each of these one-by-one:
- R0/D (Data input pin) is tied to 1, hence, no timing requirement related to this.
- Reset deassertion timing is required for R0/Q -> R1/D at the clock frequency at which reset deassertion is happening
- Similarly, reset deassertion timing is required for R1/Q -> functional_flops/Rbar pins
- Timing at R0/Rbar pin is not required, since, it is put there to absorb metastability and come out of metastability before next clock edge
- Timing at R1/Rbar pin is not required, since, when Rbar gets deasserted, R1/D and R1/Q are both at value "0".
- Both R0 & R1 need at least a certain pulse width at Rbar pin in order to detect the reset. This requirement is generally given in the timing model of flip-flop
Points 4 & 5 assume that there is not much skew between R0/Rbar and R1/Rbar, which is true since either there is a custom cell made as a reset synchronizer or both the flip-flops are placed very close to each other, leaving almost no scope for a large skew.
Points 2 & 3 require that reset synchronizer and its fanout flip-flops are clocked on a related clock.
Thus, there are following constraints related to a reset synchronizer:
- Reset synchronizer must be clocked on either same or related clock to its fanout flops
- set_false_path -to R0/Rbar
- set_false_path -to R1/Rbar
- Min-pulse-width requirement at Rbar pins modelled in timing models