Vivado synthesis supports the use of custom attributes in RTL. Behavior synthesis of a custom attribute is unknown. Other tools downstream of the synthesis process often use custom attributes.
If you need custom attributes to go through synthesis, only use the
DONT_TOUCH or KEEP_HIERARCHY attributes to prevent synthesis from optimizing objects
that need the attributes.
There are two types of objects that can have custom attributes: hierarchies and signals.
When you use custom attributes on hierarchy levels, set
-flatten_hierarchy to none or place a
KEEP_HIERARCHY on that level. By default, the synthesis tool
flattens the design, optimizes it, and rebuilds it.
The synthesis tool loses the custom attribute on the hierarchy when it flattens the design.