长春市网站建设_网站建设公司_在线商城_seo优化
2026/1/16 18:53:25 网站建设 项目流程

问题描述:

我把7020的工程移植到XCZU19EG上用Vivado编译时报错:

[DRC REQP-1741] IDELAY3 drivers invalid load :IDELAY3 data_progress_U0/u_delay_rxd DATAOUT pin(net: data_progress_U0/data_clk)may not drive a BUFG*

原因:

除了时钟信号外,任何输入信号都可以使用 IDELAYE3 原语进行延迟,然后直接转发到设备逻辑,或者使用输入/输出互连(IOI)内的单数据速率(SDR)时钟或双数据速率(DDR)时钟在简单的触发器、IDDR 或 ISERDESE3 中进行寄存。不应使用 IDELAYE3 延迟时钟,因为 IDELAY 无法直接连接到全局时钟缓冲器。如果必须延迟时钟,使用 MMCM 或 PLL 进行时钟生成,并使用精细相位偏移功能延迟时钟。

IDDELAYE3 原语包含一个 512 级延迟线。请参阅 UltraScale 数据表中的抽头分辨率。每个单独的抽头都是未校准的。但是,用于校准延迟线的逻辑在 IDELAYCTRL 组件中可用。IDDELAYE3 可以在两种模式下使用,即计数模式和时间模式。

XCZU19EG是Zynq UltraScale+ MPSoC FPGA,相比于XC7Z020底层约束更加严格,所以在XC7Z020上编译时不会报错,XC7Z020允许使用IDELAY的输出驱动BUFG,但是XCZU19EG不能。

解决方法:

1、如果想用DATAOUT驱动BUFG、MMCM或PLL,必须插入一个基本的LUT1,如下所示:

(*dont_touch="yes")LUT1#(.INIT(2'b01))LUT1_Inst(.O(to_BUFG_orMMCM_orPLL),.I0(from_DATAOUT));

根据下表确定INIT值(不同输入的LUT,INIT位宽也不同,例如LUT3的INIT值位宽为8bit):

作用INIT值例化
信号直通(输出=输入)INIT = 2’b01LUT1 #(.INIT(2’h1))
信号取反(输出=反相)INIT = 2’b10LUT1 #(.INIT(2’h2))
生成逻辑0(输出=0)INIT = 2’b00LUT1 #(.INIT(2’h0))
生成逻辑1(输出=1)INIT = 2’b11LUT1 #(.INIT(2’h3))

以上方法亲测有效

2、使用 MMCM 或 PLL 进行时钟生成,并使用精细相位偏移功能延迟时钟。
参考:https://adaptivesupport.amd.com/s/question/0D52E00006hpRavSAE/idelaye3-output-cannot-drive-a-bufg-in-ultrascale?language=en_US

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询