I have seen designs for asynchronous resets synchronization like in this picture:
I think I understand the asynchronous assertion and synchronous deassertion that this design delivers.
I am not certain that I understand why this circuit is used and not a 2 flip-flop synchronizer.
My current hypothesis is that if a designer uses a 2 flip-flop synchronizer the assertion of the synchronized reset at the output will be delayed for 2 clock cycles in case of no timing violations. Or 1 Clock cycle in case the first flip-flop enters metastability due to timing violation and it resolves to the level of an asserted reset in the next clock cycle.
This delay would obviously break a requirement for the synchronizer output to reset the design immediately on assertion of the reset at the synchronizer input.
My question is for the scenario where the requirements allow a delay of several clock cycles.
- Is it still necessary to use a reset synchronizer instead of a 2 FF synchronizer?
- If the answer to 1 is yes, why?