寄存器复制可通过复制寄存器来减少给定信号的扇出,从而提升关键路径的速度。这便于实现工具更加灵活地对各类不同负载和相关逻辑进行布局布线。综合工具广泛采用了这种方法。
大多数综合工具使用扇出阈值限值来自动判定是否需要复制寄存器。降低此全局阈值即可自动复制高扇出信号线。但这样就无法控制需复制的寄存器范围以及这些寄存器的负载分组方式。此外,全局复制机制无法准确评估时序裕量,导致不必要的复制单元、逻辑占用率增加以及潜在功耗增加。
对于高频率设计,要减少扇出,最好对高扇出信号使用平衡树。可考虑根据设计层级手动复制寄存器,因为层级中包含的单元通常布局在一起。例如,在下图所示的平衡复位树中,在 RTL 中复制高扇出复位 FF RST2 以平衡不同模块之间的扇出。如果需要,物理综合可以基于布局信息执行进一步的复制以改进 WNS。
提示: 要在综合中保留重复寄存器,请使用 KEEP 属性,而不是 DONT_TOUCH。在实现流程后期进行物理最优化期间,DONT_TOUCH 属性会阻止进行进一步最优化。
注释: 如果复制的是 LUT1 而不是寄存器,表明应用的属性或约束错误。
图 1. 高扇出复位变换为平衡复位树
建议: 在全局高扇出信号上使用 MAX_FANOUT 属性会导致复制结果欠佳,与在综合中降低全局扇出限制时类似。因此,AMD 建议仅在支持中低扇出的局部信号上的层级内使用 MAX_FANOUT。
切勿复制用于同步跨时钟域的信号的寄存器。如果这些寄存器上存在 ASYNC_REG 属性,将导致工具无法复制这些寄存器。如果同步链扇出极高且复制必须满足时序要求,那么请在不含 ASYNC_REG 约束的同步链之后添加额外的寄存器。
下表提供了可能适用于您的设计的扇出数量相关指南。
条件 | 扇出 > 5000 | 扇出 > 200 | 扇出 > 100 |
---|---|---|---|
低频:1 到 125 MHZ | 同步逻辑之间几乎无逻辑级数,最高频率时逻辑级数小于 13 | 不适用 | 不适用 |
中频:125 到 250 MHz | 如果设计不满足时序要求,可能需降低扇出和/或逻辑级数。 | 最高频率时逻辑级数小于 6。(驱动和负载类型会影响性能。) | 不适用 |
高频 > 250 MHz | 对大多数设计不建议使用。 | 通常速度越高所需逻辑级数越少。 | 需要先进的流水线方法、精心完成的逻辑复制、紧凑的功能、较少逻辑级数。(驱动和负载类型会影响性能。) |
提示: 如果时序报告表明高扇出信号正在限制设计性能,请考虑使用实现工具选项(例如,
opt_design -hier_fanout_limit
、place_design
和 phys_opt_design
)来复制信号。提示: 复制寄存器时,请考虑针对寄存器使用命名约定(例如,
<original_name>_a
、<original_name>_b
等)来使其更便于了解复制的意图,并且更便于维护 RTL 代码。