Vivado2020.1 ERROR: [Place 30-681] Sub-optimal placement for a global clock-capable IO pin and MMCM

目录

错误log:

报错路径分析:

该类型问题解决方法:

如何加物理约束?


最近跑工程,跑一个小时后place阶段报错,完整的错误截图:

错误log:

翻译一下报错log:

全局时钟IO管脚和MMCM之间非最优布局。为了解决这错误,可在IO和MMCM之间插入BUFG。

IO锁定在IOB_X1Y132 (在SLR 0区域)

MMCM被时钟布局引擎暂时放置在MMCME3_ADV_X1Y5 (在SLR1区域)

log中的SLR为Super Logic Region,多个die用SLR编号区分。

两个die之间用SSI互联(Stacked Silicon Interconnect)。

 

报错路径分析:

 

管脚输入rx_clk时钟经过IBUF直接接到MMCM。

现在布局结果 MMCM放置在 SLR1区域  MMCME3_ADV_X1Y5。

而pin 布局在SLR 0区域IOB_X1Y132。

可以看到从时钟pin到mmcm输入跨SLR,所以信号必须经过BUFG走全局时钟网络,否则就会报错。

该类型问题解决方法:

  1. log提到的修改代码,在pin与mmcm之间插入BUFG。
  2. 增加物理约束,把mmcm放置在SLR0 区域。

     个人建议资源不冲突情况下用方法2 更方便,节省综合时间。

如何加物理约束?

首先我们打开综合网吧,ctrl+f 查找BELs类型,关键字输入MMCM,回车即可得到该FPGA所有MMCM资源,如下图

 

 

整个VU440 FPGA用clock region分区

X0Y0 -> X8Y14  一共9*15=135区域

其中

SLR0 :Y0 -> Y4

SLR1 :Y5 -> Y9

SLR2 :Y10 - Y14

MMCME3_ADV_X0Y14  对应时钟区域X0Y14

MMCME3_ADV_X1Y14  对应时钟区域X7Y14

一共2*15 = 30个MMCM资源

每个mmcm资源带两个PLLE3_ADV  一共60个PLL资源

通过网表我们查看输入时钟pin属于哪个时钟区域,可以设置对象高亮在device里面直接看到,如下图所示:

 

rx_clk 输入pin用黄色标识,可以看到输入时钟管脚在时钟区域(clock region)X7Y2

管脚所在时钟区域X7Y2,该时钟区域里面包含一个MMCM,即MMCME3_ADV_X1Y2

所以新增加以下约束即可:

set_property LOC MMCME3_ADV_X1Y2 [get_cells fpga_top/eth_wrapper/rx_clk_mmcm_inst/mmcme3_adv_inst]

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值