描述
当负载处于不同的层次结构并保留层次结构时,为什么MAX_FANOUT不起作用?
此答复记录还列出了一些场景,在这些场景中,由于保留的层次结构边界,MAX_FANOUT不会按预期减少扇出。
解
预计扇出优化不能跨越保留的层次结构边界。
Vivado Synthesis倾向于破坏层次结构,以便计算另一个层次结构中的扇出并执行网络复制。
但是,当层次结构边界由-flatten_hierarchy“none”或其他属性保留时,Vivado Synthesis不会破坏层次结构。
- 当具有MAX_FANOUT的触发器在同一层次结构中具有负载扇出时,即使使用flatten_hierachy“none”选项,MAX_FANOUT也能工作。
- 当具有MAX_FANOUT的触发器具有不同层次的负载扇出并且flatten_hierachy = rebuild时,MAX_FANOUT工作。
- 当具有MAX_FANOUT的触发器具有不同层次的负载扇出并且flatten_hierachy = none时,MAX_FANOUT不起作用。
下面是一些场景,其中MAX_FANOUT不会因保留或固体层次结构边界而按预期减少扇出。
- 在基于max_fanout执行扇出优化时,EDIF或NGC网表中的扇出将不计入。另见(Xilinx答复51163) 。
- 在基于max_fanout执行扇出优化时,不会计算DCP中的扇出。
- 当max_fanout应用于IP之外的对象时,只要将IP添加到设计源中,使用基于max_fanout执行扇出优化时,基于RTL或超出上下文模式的IP中的扇出将不会计入。 .xci文件。
这是因为在综合期间将为每个IP应用dont_touch属性。 - keep_hierarchy属性还可以防止在综合期间跨层次结构进行扇出优化。
- 安全属性保留层次结构,如keep_hierarchy,通常用于IP。
当max_fanout应用于IP内的对象时(在非OOC模式或IP OOC综合运行中使用IP),由于IP源代码中使用的安全属性,可能无法满足max_fanout值。
请参阅(Xilinx答复65212) 。 - 在2014.3之前,模块/实体级别上应用的模块级属性(如use_dsp48和rom_style)可防止整个层次结构中的扇出优化。
这是从Vivado 2014.3开始修复的。
遇到上述情况时可以尝试的解决方法:
- 尝试在需要保留的层次结构中应用max_fanout。
例如,通过在原始代码中添加max_fanout重新生成EDIF / NGC / DCP,或者通过修改IP源代码以在IP内部应用max_fanout。 - 使用phys_opt_design的扇出优化。
例如,“phys_opt_design -force_replication_on_nets [get_nets <net name>],”phys_opt_design -fanout_opt“,”phys_opt_design -fanout_opt_nets [get_nets <list of nets>]“。
没有回复内容