Vivado - [Place 30-678]无法进行时钟区域分区

描述

运行实现时,会看到来自place_design的以下错误:

第2阶段全球安置
错误:[地方30-678]无法进行时钟区域分区:将时钟源u_california / u_lax / u_ahbpmu / u_pmu / u_clm / u_clk_tport_mux0 / u_bufgctrl置于新位置所需的时钟路由,以便此缓冲区驱动的时钟网络可以使用特定的时钟路由轨道,但此操作由于时钟区域X2Y3中没有BUFGCTRL站点可用,因此失败
解决方案:尝试删除在相同时钟区域中竞争资源的时钟(源和/或负载)上设置的区域约束。如果需要对时钟负载进行区域约束,请扩展区域约束以覆盖时钟源,或者确保时钟源受限制/放置在与其中一个区域相同的行或列中的时钟区域中在指定的区域约束。还可以尝试通过组合一些时钟网络或通过更改时钟基元的位置来减少设计中的时钟资源量,以减少时钟路由利用率较高的区域中涉及的每个时钟网络的源和负载之间的距离。

是什么导致争用?

争用可能有很多原因,但是对于这个例子,特定的时钟结构导致了争用。

该用例具有两个MMCM,驱动五个多路复用BUFGCTRL(MMCM - > BUFG - > BUFGCTRL)。下图显示BUFGCE(红色)和驱动MMCM位于器件的中心。

然后将BUFGCTRL(粉红色)放置在器件的顶部,并驱动另一个BUFG(黄色)。但是,一些负载最终会朝向器件的底部。

让时钟路由像这样上下移动会导致争用和失败。


下面是完整结构的图像:


这不是Vivado放置的预期用例。虽然有MMCM的规则 - > BUFG路径,BUFG没有规则 - > BUFGCTRL - > BUFG路径。有两种方法可以解决此问题:

  1. 使用CLOCK_REGION约束将BUFGCTRL实例约束到器件的中心,这将缓解争用。使用有限的BUFGCTRL资源时,可能需要CLOCK_REGION约束的不同值。

  2. 使用pblock作为完整的时钟结构,以确保它们位于器件的中心。
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-30 19:35:48 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它