第1章 综合阶段
1.1 综合设置分析
1.1.1 −flatten_hierarchy
−flatten_hierarchy在综合设置(Synth Design)中的位置如图1.1所示。
图1.1
−flatten_hierarchy有三个可选值,每个值的具体含义如表1.1所示[1]。通常来讲,当−flatten_hierarchy为none时,工具进行的优化最少,消耗的资源最多,层次保留最为完整。相反,当其为full时,工具进行的优化最多,消耗的资源最少,层次完全被打平(只能看到顶层)。从这个角度来说,−flatten_hierarchy的三个值体现了工具对设计层次完整性和优化力度的折中。在通常情况下,使用默认值rebuilt即可。
表1.1
−flatten_hierarchy是一个全局设置(凡是出现在综合设置中的均为全局设置),意味着对设计中的所有模块生效。如果期望模块中的某个层次使用与−flatten_hierarchy的可选值不同的层次优化方式,则要用到综合属性(Synthesis Attribute)中的KEEP_HIERARCHY,它只能在RTL代码中使用,其优先级高于−flatten_hierarchy。
在Verilog版中,KEEP_HIERARCHY的使用方法如下。
(* KEEP_HIERARCHY="yes" *) module uart_r ();
在VHDL版中,KEEP_HIERARCHY的使用方法如下。
作用于entity:
attribute KEEP_HIERARCHY : string;
attribute KEEP_HIERARCHY of uart_rx : entity is "yes";
作用于Instance:
attribute KEEP_HIERARCHY : string;
attribute KEEP_HIERARCHY of uart_rx_u0 : label is "yes";
结论:
① 对于−flatten_hierarchy,通常使用默认值rebuilt即可。使用默认值rebuilt的一个好处是,在使用Vivado Logic Analyzer 时,可快速根据层次找到待观测信号。
② KEEP_HIERARCHY的优先级高于−flatten_hierarchy,因此,可根据设计需求灵活地对某些层次设置此属性。