Bootstrap

FPGA 时钟约束

时钟约束
物理 XDC 约束驱动时钟树的实现并控制使用高扇出时钟资源。由于 UltraScale 器件时钟比采用以前架构的时钟更灵
活,并且包括额外的体系结构约束,因此了解如何正确约束时钟以实现是非常重要的。
使用 LOC 约束 IO/MMCM/PLL/GT
要约束时钟,您可以按如下所示分配布局约束:
I/O 端口的时钟输入
GCIO 上的时钟分配 PACKAGE_PIN 约束或为 IOB 分配 LOC 会影响时钟网络。直接连接到输入端口的 MMCM/PLL
和时钟缓存必须布局在相同的时钟区域中。
MMCM PLL
直接连接到 MMCM PLL 输出的时钟缓存,连接到 MMCM PLL 输入的输入时钟端口自动布局在相同的时钟区
域中。如果输入时钟端口和 MMCM PLL 直接连接并限制在不同的时钟区域,则必须手动插入时钟缓存并在连接
MMCM PLL 的网络上设置 CLOCK_DEDICATED_ROUTE 约束。
GT*_CHANNEL IBUFDS_GTE3 单元上
由单元驱动的 BUFG_GT 布局在相同的时钟区域中。
注意! 赛灵思不推荐在时钟缓存单元上使用 LOC 约束。此方法将时钟强制到特定轨道 ID ,这可能导致无法合法布线的
布局。当您明确设计的整个时钟树并且设计中的布局一致时,只能使用 LOC 约束在 UltraScale 器件中布局高扇出时钟
缓存。即使在采取这些预防措施后,由于设计或约束变化,在实现期间可能会发生冲突。
在时钟缓存上使用 CLOCK_REGION 属性
您可以使用 CLOCK_REGION 约束为时钟区域分配时钟缓存,而不指定 site 位置。这在优化所有时钟树以及确定适当的
缓存 site 位置以成功布线所有时钟时,将赋予布局器更大的灵活性。
您还可以使用 CLOCK_REGION 约束来提供关于级联时钟缓存或由非时钟原语 (例如,构造逻辑)驱动的时钟缓存的布
局的指导。
在以下示例中, XDC 约束将 clkgen/clkout2_buf 时钟缓存分配给 CLOCK_REGION X2Y2
set_property CLOCK_REGION X2Y2 [get_cells clkgen/clkout2_buf]
注释: 在大多数情况下,时钟缓存由已经约束到时钟区域的输入时钟端口, MMCM PLL GT*_CHANNEL 直接驱动。
在这种情况下,则时钟缓存将自动布局在同一时钟区域中,并且您不需要使用 CLOCK_REGION 约束。
使用 Pblock 限制时钟缓存布局
当不需要将时钟缓存布局在特时序钟区域中时,可以使用 Pblock 指时序钟区域的范围。例如,当需要 BUFGCTRL 来复
用位于不同区域的两个时钟时,使用 Pblock 。您可以将 BUFGTRL 分配给包含两个时钟驱动程序之间的时钟区域的
Pblock ,并让布局器识别有效的布局。
注释: 赛灵思不推荐在单个时钟区域使用 Pblock
在时钟网络上使用 USER_CLOCK_ROOT 属性
您可以使用 USER_CLOCK_ROOT 属性,来强制限时序钟缓存驱动的时钟根位置。指定 USER_CLOCK_ROOT 属性会影响
设计布局,因为它通过修改时钟布线来影响插入延迟和偏移。 USER_CLOCK_ROOT 值对应时钟区域,并且必须在由高
扇出时钟缓存直接驱动的网段上设置属性。下面给出一个实例:
set_property USER_CLOCK_ROOT X2Y3 [get_nets clkgen/wbClk_o]
如下例所示,布局后,您可以使用 LOCK_ROOT 性查询实际的时钟根。 CLOCK_ROOT 将报告分配根,无论是由用户分
配还是由 Vivado 工具自动分配。
get_property CLOCK_ROOT [get_nets clkgen/wbClk_o]
=> X2Y3
另一种查看已实现设计的时钟根分配的方法是使用 report_clock_utilization Tcl 命令。例如:
report_clock_utilization [-clock_roots_only]
下图显示了此报告。
在多个时钟网络上使用 CLOCK_DELAY_GROUP 约束
您可以使用 CLOCK_DELAY_GROUP 约束来匹配由不同时钟缓存驱动的多个相关时钟网络的插入延迟。此约束通常用于
最小化源自同一 MMCM ,或 PLL 的时钟之间的同步 CDC 时序路径上的偏移。您必须在与时钟缓存直接联通网段上设
CLOCK_DELAY_GROUP 约束。下面的示例显示了 clk1_net clk2_net 时钟网络,这些网络由时钟缓存直接驱
动:
set_property CLOCK_DELAY_GROUP grp12 [get_nets {clk1_net clk2_net}]
;