Vivado综合设置选项分析:-flatten_hierarchy

-flatten_hierarchy有三个可选值,每个值的具体含义如下表所示。通常来讲,-flatten_hierarchy为none时,工具做的优化最少,因而消耗的资源也最多,但层次保留也最为完整。相反,当其为full时,工具做的优化最多,因而消耗的资源也最少,但层次完全被打平(只看到顶层)。从这个角度来说,-flatten_hierarchy的这三个值其实就体现了工具对设计层次完整性和优化力度两者的折中。通常情况下,使用默认值rebuilt即可。

-flatten_hierarchy是一个全局设置(凡是出现在综合选项设置菜单的均为全局设置),意味着对设计中的所有模块均生效。如果期望对设计中某个层次使用与-flatten_hierarchy的值不同的层次优化方式,就要用到综合属性(Synthesis Attributes)KEEP_HIERARCHY,它只能在RTL代码中使用,其优先级高于-flatten_hierarchy。具体使用方法如下:

Verilog版本:
(* KEEP_HIERARCHY = “yes” *) module uart_r();

VHDL版本:
作用于entity:
attribute KEEP_HIERARCHY : string;
attribute KEEP_HIERARCHY of uart_rx : enityis “yes”;
作用于Instance:
attribute KEEP_HIERARCHY : string;
attribute KEEP_HIERARCHY of uart_rx_u0 :label is “yes”;
注:uart_rx_u0是实例化的名字。

结论:
1. 对于-flatten_hierarchy,通常使用默认值rebuilt即可。Rebuilt的一个明显的好处是在使用Vivado Logic Analyzer (ISE时代的ChipScope)时,可快速根据层次找到待观测信号;
2. KEEP_HIERARCHY优先级高于-flatten_hierarchy。因此,可根据设计需求灵活队某些层次设定此属性。