不只是解决 error ,更多是记录和总结。加油!
目录
说明
VIVADO IDE :2021.1
操作系统:WIN 10
FPGA芯片系列:Kintex 7 (xc7k410tffg900-2L)
问题描述
最近在调试一块信号处理板卡,板载芯片为XILINX的7系列FPGA(xc7k410tffg900-2L)。MGT BANK的参考时钟是156.25MHz的差分时钟,是由CDCM6208时钟芯片的输出来驱动。CDCM6208配置完成后,首要的工作便是验证其产生的156.26MHz差分时钟有没有真正进入FPGA 的MGT BANK。具体验证步骤如下:
第一步:使用 原语 IBUFDS_GTE2 将MGT BANK 的差分参考时钟引入并转为同频率的单端时钟。
在代码里面进行例化:
IBUFDS_GTE2 #(
.CLKCM_CFG("TRUE"), // Refer to Transceiver User Guide
.CLKRCV_TRST("TRUE"), // Refer to Transceiver User Guide
.CLKSWING_CFG(2'b11) // Refer to Transceiver User Guide
)
IBUFDS_GTE2_inst (
.O(O_CLK_156M25), // 输出156.25M的单端时钟
.ODIV2(), // 该端口可闲置不用
.CEB(1'b0), // 该端口低电平输入有效 要一直给 0
.I (I_CLK_156M25_P), // BANK 参考时钟 输入端口 P
.IB(I_CLK_156M25_N) // BANK 参考时钟 输入端口 N
);
第二步:将原语输出的单端时钟送入MMCM或者PLL进行分频,供系统设计使用
问题可能就是出在这里,如果不进MMCM或者PLL,可能就不会出现错误
clk_wiz_1 instance_name1
(
// Clock out ports
.clk_out1(CLK_10M), // output clk_out1
// Status and control signals
.reset(0), // input reset
.locked(locked), // output locked
// Clock in ports
.clk_in1(O_CLK_156M25)); // input clk_in1
然后再实现的过程中就会报DRC的错误,违背了设计规则(Design Rule):
[DRC PDCN-2721] IBUFDS_GT_loads_clock_region: IBUFDS_GTE2 IBUFDS_GTE2_inst drives MMCME2_ADV instance_name1/inst/mmcm_adv_inst in a different clock region and must do so using local routing resources which may negatively affect clock performance. Use CLOCK_DEDICATED_ROUTE set to FALSE to indicate this is intended.
错误的大致原因就是IBUFDS_GTE2原语出来的时钟区域和所驱动的MMCM或PLL的时钟区域不一致。注意,个人认为此处的时钟区域的概念是物理层面的时钟资源分布的区域,有别于STA(静态时序分析)的时钟域概念。
解决错误
其实在错误的最后已经给出了解决方法。需要在XDC文件里面做如下约束:
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets O_CLK_156M25]
而后就可以无误生成比特流~
以上就是对错误 [DRC PDCN-2721] 的记录,欢迎留言交流,补充~
解决思路参考官网:官方论坛