![Vivado从此开始(进阶篇)](https://wfqqreader-1252317822.image.myqcloud.com/cover/973/47378973/b_47378973.jpg)
第1章 综合阶段
1.1 综合设置分析
1.1.1 −flatten_hierarchy
−flatten_hierarchy在综合设置(Synth Design)中的位置如图1.1所示。
![img](https://epubservercos.yuewen.com/AEF021/26763875301469706/epubprivate/OEBPS/Images/txt001_1.jpg?sign=1738878962-1cEhLuIvs3hsQWpt7oVijk9s38go3nof-0-2c7140b357c492ccb1e2da12330cbdb8)
图1.1
−flatten_hierarchy有三个可选值,每个值的具体含义如表1.1所示[1]。通常来讲,当−flatten_hierarchy为none时,工具进行的优化最少,消耗的资源最多,层次保留最为完整。相反,当其为full时,工具进行的优化最多,消耗的资源最少,层次完全被打平(只能看到顶层)。从这个角度来说,−flatten_hierarchy的三个值体现了工具对设计层次完整性和优化力度的折中。在通常情况下,使用默认值rebuilt即可。
表1.1
![img](https://epubservercos.yuewen.com/AEF021/26763875301469706/epubprivate/OEBPS/Images/txt001_2.jpg?sign=1738878962-b6G9HFkV0vGvlYux7QoB5vDtIJgtfIt6-0-7a36c5e43e9e78b2c3c65f686d0b424f)
−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,因此,可根据设计需求灵活地对某些层次设置此属性。