Ok, that reasoning of setup/hold balancing makes more sense. An extended question on a current project (>500MHz): how do I justify when I should use "useful skew"? Without using it, I had a small violation on both setup and hold (less than 20ps). If using "useful skew", they were all removed. I don't know how SoC Encounter did that. Also since the violations were small, so the timing constraints might be over-constrainted too much. Thus, without using useful skew but modified a bit the timing constraints, the violations could be solved. But how what are the differences on these two approaches?
By the way, any application-wise information on the "useful skew"?
Thanks.