So let me try to answer this question
1. For the fully asynchronous resets, reset recovery time violations occur at the deassertion of reset. It is important to note that reset recovery time violations only occur on the deassertion of reset and not the assertion. Therefore, fully asynchronous resets are not recommended.
2. Fully synchronous resets may fail to capture the reset signal itself (failure of assertion) depending on the nature of the clock.For this reason, fully synchronous resets are not recommended unless the capture of the reset signal (reset assertion) can be guaranteed by design. Combining the last two reset types into a hybrid solution that asserts the reset asynchronously and deasserts the reset synchronously would provide the most reliable solution.
3. So the conclusion is, the best solution should be "Asynchronous Assertion, Synchronous Deassertion".
To summarize,
. Reset recovery time violations occur at the deassertion of reset.
. Fully synchronous resets may fail to capture the reset signal itself (failure of assertion) depending on the nature of the clock.
. A reset circuit that asserts asynchronously and deasserts synchronously generally provides a more reliable reset than fully synchronous or fully asynchronous resets.
. Different reset types should not be used in a single always block.
. A separate reset synchronizer must be used for each independent clock domain.
if you still have any questions please leave message to me,