In article <
d1bbcc17-23ac-4098...@googlegroups.com>,
I don't have a comment specific to your proposal, but rather just a
warning regarding inferring logic with respect to CDC circuits and other
similar strategies - i.e. places where you need to use these types of
attributes in the first place.
Originally, we had the synthesis tool infer our "n-stage" back-to-back
synchronizers. We carefully applieid the ASYNC_REG attribute, as you've
noted. Further reading, we noticed we needed the "KEEP=true" attribute
to prevent synthesis from sharing or otherwise optimizing these
circuits.
As we always had full register retiming on, we decided that the
KEEP_HIERARCHY attribute was needed as well. The SHREG_EXTRACT = "no",
also needed to be added to prevent the inferrence of SRLs (which have
poor metastability performance).
However, after all this when we put a full, and proper CDC checker into
our flows, it was still flagging some errors. Reading more, it looks like we
needed the DIRECT_ENABLE="yes", and DIRECT_RESET="yes" attributes
applied to the module level CE, and RESET ports too.
That reduced or CDC LINT flagging even more,... But not to zero. It
seems that in Vivador, all these attrbutes are mostly taken by the tools
as suggestions only. These last two seem to be the most problematic -
Vivado was consistently optimizing the CE, or, RESET circuitry along
with any of the other upstream synchronous logic, ignoring our directives,
and violating the CDC rules.
In the end, we still have all those attributes, set, but we ended up
just instanciating the proper flip-flop (Vendor, and sometimes product
specific) in our synchronizer module, and hard dont__touching the entire
module.
Your mileage may vary, etc., but that's our findings.
Regards,
Mark