K
Kim Enkovaara
Andy said:One major reason to avoid multiple clock domains when possible is that
simulation (RTL or full-timing) rarely reveals the problems inherent
in crossing clock domains. Static timing analysis does not reveal them
either. Experienced designers know to avoid problems they don't need.
If you think complex code is hard to debug, you should try debugging
behavior that is not repeatable in simulation at all.
You are right on the points you raise. Additional clock domains should
be always avoided if possible. And if they are needed they should be
separated from the code with coding conventions, so they will be easy to
check in code reviews etc.
There are tools to check the clock domain crossings statically, but
those tools are not cheap. They are meant for ASIC designs where the
respin cost is high enough to justify the price of the tool. I have
used Mentor 0-In CDC, and that tool is very good in finding clock domain
crossing problems. But it is additional tool that needs setup, and
someone who really understands what asynchronous clock domain crossing
means, and what can be a problem and what is not.
--Kim