在上一篇文章中,我们对高扇出信号线的基本概念、查询方法以及综合和逻辑优化阶段的应对策略有了一定的了解。接下来,我们将继续深入探讨在布局、布局后优化以及物理优化阶段,如何对高扇出信号线进行有效优化。
在全局布局中,尤其是在 PSIP 中,会进行多种复制优化操作。关键单元优化适用于负载数小于等于 30 的关键信号线的复制;扇出优化则针对负载数大于 30 且小于等于 100 的关键信号线;超高扇出优化会对驱动高扇出信号线(扇出大于 1000,裕量小于 2.0 NS)的寄存器进行复制;按 SLR 进行复制优化会对驱动其他 SLR 内关键负载的 FF 进行复制;动态 / 静态区域接口信号线复制会对 DFX 设计的每个静态区域 / 动态区域的驱动程序进行复制,但需要注意的是,在 Versal 默认流程和 Explore 流程中,该优化已停用。
除了上述优化,还可以通过一些属性来影响高扇出信号线的初始布局。
- MAX_FANOUT 属性:该属性会将每个驱动程序的扇出限制告知工具,布局器会根据这个限制来分配高扇出的负载。此属性可同时应用于 FF 与 LUT 驱动程序。当 MAX_FANOUT 值小于约束的信号线的实际扇出时,工具会对该信号线进行寄存器复制评估,但仅当时序会得到改善时,才会进行优化。
- MAX_FANOUT_MODE 属性:该属性指定了强制执行扇出限制的方式。开发者可以基于物理器件属性(如 CLOCK REGION、SLR、MACRO)来强制执行复制。如果设置了该属性,高扇出信号线的负载会被集中到同一个 SLR 中,或者采用为该属性设置的任意值。支持该属性的宏(MACRO)包括块 RAM、UltraRAM 和 DSP。
- FORCE_MAX_FANOUT 属性:该属性应用于特定信号线,用于限制复制优化后信号线的物理扇出。借助该属性,可以在 PSIP 期间强制进行复制优化,并且工具不考虑时序因素。

在图 9 所示的示例中,将 MAX_FANOUT_MODE 属性设置为 MACRO 并将 FORCE_MAX_FANOUT 设置为 1,针对每项 MACRO 负载,驱动程序均已执行复制。需要注意的是,MAX_FANOUT_MODE 优先于 FORCE_MAX_FANOUT 属性。
在布局后流程中,有一个重要的操作是 BUFG 插入阶段。在这个阶段,工具会将高扇出信号线推广到全局布线。满足特定条件的信号线会被纳入插入考量范围,例如在 Versal 中扇出大于 10,000 的信号线,以及在 UltraScale/UltraScale+ 中扇出大于 1,000 并且所驱动的控制信号裕量大于 1 ns 的信号线。这是一种时序驱动的插入,仅当插入有助于改善时序时才会发生。如果开发者想要关闭此优化,可以在 place_design 命令中使用 -no_bufg_opt 选项。
在物理优化(phys_opt_design)期间,有多种优化方法可用于应对高扇出信号线,部分优化默认已启用。
- 高扇出优化:此优化在流程中默认启用。对于高扇出信号线,如果其所含负时序裕量在 WNS 的某一百分比范围内,会被纳入复制考量范畴。但只有当复制有助于改善时序时,才会进行复制操作。
- -force_replication_on_nets 选项:该选项可用于强制对任意指定信号线进行驱动程序复制,而不考虑该信号线的时序裕量。如果在布线后发现高扇出信号线变得非常关键,使用此优化可能会有所帮助。开发者可以在该特定信号线上再次运行物理优化并强制复制,以查看是否能改善情况。
- -directive AggressiveFanoutOpt 指令:在某些情况下,物理优化可能无法解决所有关键的高扇出信号线问题。此时,建议搭配该指令重新运行物理优化,以进行更为激进的优化。
- -lut_opt 选项:该选项旨在通过移动或复制 LUT 来减少路径延迟。需要注意的是,如果开发者熟悉先前被称为 “High fanout optimization”(高扇出优化)和 “Very high Fanout optimization”(超高扇出优化)的旧优化,在架构中,这些旧优化已不再支持,而是由 -interconnect_retime(Vivado 2022.1+)选项和 -lut_opt(Vivado 2023.1+)选项来代替。
- -iphys_opt_design 命令:此命令描述了由 phys_opt 执行的特定优化。如果在 write_iphys_opt_tcl 中包含 -place,该命令也可以写出由布局完成的优化。它可在不同阶段用于应用优化,例如允许在布局前设计上执行通常在 phys_opt 之后执行的各项优化,帮助开发者通过 Tcl 复用 / 重复优化。

物理优化期间执行的优化取决于运行物理优化的实现阶段。如果在布局后运行物理优化,默认会执行 “Fanout optimization”(扇出优化)和 “Very High Fanout Optimization”(超高扇出优化);但如果在布线后运行物理优化,这两个选项则不可用。具体信息可参考图 11。
