允许寄存器复制 - 2023.2 简体中文

适用于 FPGA 和 SoC 的 UltraFast 设计方法指南 (UG949)

Document ID
UG949
Release Date
2023-11-29
Version
2023.2 简体中文

大部分工具均可复制寄存器来减小关键路径上的高扇出信号线。或者,也可以在特定寄存器或层级上应用属性以指定哪些寄存器可复制或不可复制。例如,复制的信号线上存在 LUT1 即可表明某个属性或常量正在部分阻止最优化。综合期间,可通过在已最优化的信号线所遍历的层级单元上使用 KEEP_HIERARCHY 属性或者不同层级内的信号线段上使用 KEEP 属性来更改复制最优化。综合与实现期间,DONT_TOUCH 约束始终都会阻止有益的复制。

有时,设计师通过在特定信号线上使用 MAX_FANOUT 属性来解决 RTL 或综合中的高扇出信号线问题。这并不总是意味着能够以最优方式来利用布线资源,当 MAX_FANOUT 属性设置过低或者在连接到多个主层级的信号线上设置该属性时尤其如此。此外,如果高扇出信号是寄存器控制信号,并且复制次数多于必要次数,则可能导致控制集数量过多,且因添加时序收敛不需要的额外寄存器而导致增加设计功耗。

通常,要减少扇出,最好对高扇出信号使用平衡树。可考虑根据设计层级手动复制寄存器,因为层级中包含的单元通常布局在一起。

如需对控制集树和高扇出信号线进行重构并减少其数量,可使用 opt_design Tcl 命令并搭配以下任一选项:

-control_set_merge
该选项用于将逻辑等效控制信号的驱动程序主动组合为单一驱动程序。
-merge_equivalent_drivers
该选项用于将逻辑等效的信号(包括控制信号)合并为单一驱动程序。
注释: 请首先尝试该选项,因为运行该选项时,工具将检测到主层级和 Pblock 约束。

这些选项是扇出复制的反向操作,可使信号线更适用于基于模块的复制。此合并也适用于多阶段复位树中的各阶段,如下图所示。

图 1. 使用 opt_design -control_set_merge 合并的控制集

减少复制的对象数量后,即可使用 opt_design Tcl 命令基于层级特性执行有限复制并搭配以下选项:

-hier_fanout_limit <arg>
该选项根据层级复制寄存器,其中,<arg> 表示复制的扇出限制(取决于逻辑层级)。对于由高扇出信号线驱动的每个层级实例,如果层级中的扇出高于指定限制,那么该层级中的信号线由高扇出信号线的驱动程序副本来驱动。复制的驱动程序与原始驱动程序布局在相同层级内,并且复制并不限于控制集寄存器。

下图显示了使用 opt_design -hier_fanout_limit 1000 执行的时钟使能信号线复制,此时钟使能信号线的扇出为 60000。因为每个模块 SR_1K 包含 1000 个负载,驱动程序将复制 59 次。

图 2. 高扇出时钟使能信号线上基于模块的复制

默认情况下,在 place_design 中启用扇出最优化。复制发生在布局器流程早期阶段,并且基于布局信息执行。驱动超过 1000 个负载的寄存器以及驱动 DSP、块 RAM 和 UltraRAM 的寄存器将纳入复制考量范围,如果发生复制,这两种寄存器将与负载放置在一起。您可通过在信号线中添加 FORCE_MAX_FANOUT 属性来强制复制驱动信号线的寄存器或 LUT。FORCE_MAX_FANOUT 的值用于指定完成复制最优化后信号线的最大物理扇出。

您可基于 MAX_FANOUT_MODE 属性的物理器件属性来执行强制复制。受支持的 MAX_FANOUT_MODE 属性为 CLOCK_REGION、SLR 和 MACRO。例如,当 MAX_FANOUT_MODE 属性的值为 CLOCK_REGION 时,即可基于物理时钟区域来复制驱动程序,并将布局到相同时钟区域内的负载聚集在一起。欲知详情,请访问此链接以参阅 Vivado Design Suite 用户指南:实现(UG904) 中的相应内容。

对于 SSI 技术器件,可针对每个 SLR 复制高扇出驱动程序,并可选择将这些驱动程序与其负载一起分配到符合 SLR 的 Pblock。此技巧有助于降低 SLR 交汇延迟的影响,并支持自由选择将复制的高扇出信号线独立布局在每个 SLR 中。