KEEP_HIERARCHY
is used to prevent
optimizations along the hierarchy boundaries. The Vivado synthesis
tool attempts to keep the same general hierarchy specified in the RTL, but for better
Quality of Results (QoR) reasons it can flatten or modify them.
If KEEP_HIERARCHY
is placed on the instance, the synthesis
tool keeps the boundary on that level static.
This can affect QoR and also should not be used on modules that describe the
control logic of 3-state outputs and I/O buffers. The KEEP_HIERARCHY
can be placed in the module or architecture level or the instance. This attribute can be
set in the RTL and in XDC. If it is used in the XDC, it can only be put on the
instance.