Vivado综合 – 当负载处于不同的层次结构并保留层次结构时,为什么MAX_FANOUT不起作用?-Xilinx-AMD社区-FPGA CPLD-ChipDebug

Vivado综合 – 当负载处于不同的层次结构并保留层次结构时,为什么MAX_FANOUT不起作用?

描述

当负载处于不同的层次结构并保留层次结构时,为什么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>]“。
请登录后发表评论

    没有回复内容