Hi,
The timing tool doesn't solve your timing problem, it just reports a that you WILL have problem transferring that signal from s_r1 to s_r2, and it is right, because you WILL violate setup/hold time of s_r2.
What you did there with the synchroniser is not to avoid that violation, but tolerate it. By having another stage, the output of s_r3 will be much less likely to get into metastable state, therefore, subsequent logic will not be affected by the VIOLATION at s_r2.
So in practice, people use:
- Double Flop Synchroniser
- Assign an attribute of "ASYNC" to the flop s_r2, s_r3
- And tell the timing tool that, this path is special (false path or use a different maximum delay rather than the timing relationship between the 2 clocks).