xilinx 时钟问题

来源:互联网 发布:js中如何替换数组 编辑:程序博客网 时间:2024/06/05 02:58

xilinx 时钟问题:

ERROR:Place:1398 - A clock IOB / BUFGCTRL clock component pair have been found that are not placed at an optimal clock IOB / BUFGCTRL site pair. The clock IOB component <cmos_pclk> is placed at site <W10>. The corresponding BUFGCTRL component <cmos_pclk_BUFGP/BUFG> is placed at site <BUFGCTRL_X0Y0>. The clock  IO can use the fast path between the IOB and the Clock Buffer if the IOB is  placed on a Clock Capable IOB site that has dedicated fast path to BUFGCTRL  sites in its half of the device (TOP or BOTTOM). You may want to analyze why this problem exists and correct it. If this sub optimal condition is  acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint  in the .ucf file to demote this message to a WARNING and allow your design to continue. However, the use of this override is highly discouraged as it may  lead to very poor timing results. It is recommended that this error condition  be corrected in the design. A list of all the COMP.PINs used in this clock placement rule is listed below. These examples can be used directly in the  .ucf file to override this clock rule.
   < NET "cmos_pclk" CLOCK_DEDICATED_ROUTE = FALSE; >
ERROR:Pack:1654 - The timing-driven placement phase encountered an error.


遇到上面的问题是因为我们将外部输入的一个时钟管脚  cmos_pclk(摄像头输出给FPGA的像素时钟)分配到了一个普通的IO口上面,如果是zedboard专有时钟管脚 Y9就肯定没这样的错误了。

因为是IO管脚上,所以其周围没有全局时钟 BUFG,所以我们在 XDC 里使用: NET "cmos_pclk" CLOCK_DEDICATED_ROUTE = FALSE;    来屏蔽 Xilinx 的检测,从而通过编译。


下面我们介绍下 xilinx 时钟的管理:


Xilinx 芯片全局时钟资源的使用方法主要有下面5种:

1. GCLK  ->  IBUFG  -->  BUFG.

   IBUFG 后面连接 BUFG的方法是最基本的全局时钟资源的使用方法, 其等效于  BUFGP


2.  GCLKP&&GCLKN   -->   IBUFGDS    --->  BUFG

   当输入时钟为差分信号时候,需要使用 IBUFGDS 原语


3.  IBUFG +  DCM  +  BUFG 

   通过 DCM(digital clock manage) 不仅能对时钟进行同步、移相、分频、倍频等变换,而且可以使用全局时钟的输出无抖动和小延迟。


4.  Logic + BUFG 

    BUFG 不但可使用 IBUFG 的输出,还可以驱动其他普通信号的输出。当某个信号的扇出非常大,并且要求抖动延迟最小时,可以使用BUFG驱动该信号,使该信号利用全局时钟资源。


5.  Logic  +  DCM  +  BUFG

   DCM 可以改变也可以控制变换普通时钟信号。




demo1:

          从全局时钟管脚(晶振)作为时钟输入,让其驱动多个模块。  success


 


demo2:

        从全局时钟输入一个时钟,让其驱动一个 PLLE2_BASE 原语,以及很多模块  。  success




demo3:

    从全局时钟输入一个时钟,让其驱动一个 clock IP 核(输入加BUFG),以及很多模块  。  false

 ERROR:  Xst:2035 - Port <clk_100> has illegal connections. This port is connected to an input buffer and other components.

     修改为 clock 输入不加 BUFG 即可. success





demo4:

    从全局时钟输入一个时钟,让其驱动一个 clock IP 核(输入加或者不加BUFG都可以),然后从clock IP 核输出的时钟来驱动很多模块  。   success










ise中的引脚分为几种,有的是适合clock的,有些是适合组合逻辑的。

一个clock引脚,需要分配到GC pin上面,但是你分配到了CC或者其它的引脚上面了,不过如果不想换引脚位置,可以在RTL里面通过Global buffer来转换下。GC pin一般是用于连接clock的。

GC - global clock inputs drive the IBUFG/BUFG components.  GC pin has the dedicated routing to BUFG/PLL/DCM.

CC - clock capable IO are the regional clock inputs and drive the BUFIO/BUFR。 CC pin has the dedicated routing to BUFIO/BUFR.


所用的CLOCK PIN是不是DATA PIN,并不适合作为时钟使用的。上面说IOB输入离CLOCK BUFFER太远,一般情况下,作为CLOCK PIN的输入后应很快就能找到CLOCK BUFFER资源的,要么换个PIN试试,要么先加个IBUFG,再BUFG,或者先IBUFG,再DCM,再BUFG出去, 而且需要对其使用约束: NET "cmos_pclk" CLOCK_DEDICATED_ROUTE = FALSE

0 0
原创粉丝点击