Vivado synthesis supports the use of custom attributes in RTL. Behavior synthesis of a custom attribute is unknown. Often, custom attributes are intended for use in other tools downstream from the synthesis process.
If you need custom attributes to go through synthesis, you must use
the DONT_TOUCH
or KEEP_HIERARCHY
attributes to prevent synthesis from optimizing the objects
that need the attributes.
There are two types of objects that can have custom attributes: hierarchies and signals.
When using custom attributes on hierarchies, the -flatten_hierarchy
switch must be set to none
or a KEEP_HIERARCHY
placed on that level, because synthesis, by default, flattens the design, optimizes the
design, and rebuilds the design.
After a design is first flattened, the custom attribute on the hierarchy is lost.