本文和设计代码由FPGA爱好者小梅哥编写,未经作者许可,本文仅允许网络论坛复制转载,且转载时请标明原作者。
在设计中,经常遇到需要将PLL的输出时钟通过FPGA的管脚输出到外部供外部器件使用,例如SDRAM的同步时钟脚,千兆以太网的GTXCLK时钟。在大多数的情况下,我们随便选择一个脚将该时钟引出,不会有任何问题,但是,在全编译的时候,会报一个15064的警告,例如在千兆以太网系统中,输出到千兆PHY的GMII接口发送时钟的PLL1的C0就会报出如下警告.(看不清可以点击图片,查看高清大图哦)
Warning (15064): PLL "pll:pll|altpll:altpll_component|pll_altpll:auto_generated|pll1" output port clk[0] feeds output pin "GMII_GTXC~output" via non-dedicated routing -- jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance
先给这句话翻译一下吧:
警告(15064): "pll:pll|altpll:altpll_component|pll_altpll:auto_generated|pll1" (这是一个PLL的名字)的输出端口clk[0] 驱动"GMII_GTXC~output"脚是通过非非专用的布线路径,其抖动程度(时钟抖动概念可以某度)取决于其他设计单元的翻转速度,使用专用的PLL时钟输出脚来保证抖动的程度(尽量小)
那么好,现在的问题来了,怎样知道哪个引脚才是哪个PLL的对应的专用输出IO呢?挺简单的。
在Quartus II软件中引脚分配时候的时候,找以L标识的引脚,然后把鼠标光标移到该引脚上,就会弹出该引脚信息,在弹出的信息框中,就会标明该引脚是属于哪个PLL的CLKOUTn或者CLKOUTp,如例如,在EP4CE30中,AA3脚就是标识为L的脚,其引脚信息显示,其为PLL1的CLKOUTp管脚(PLL1_CLKOUTp),同样的,AB3引脚的标识符也为L,如果把光标移动到AB3引脚上,可以看到该引脚信息为(PLL1_CLKOUTn)。如果是使用单端时钟输出,那么就应该将PLL的这个输出分配到CLKOUTp引脚上。如果是差分时钟输出,那么就应该将PLL的时钟以差分模式分别分配到CLKOUTp和CLKOUTn上。
例如上述千兆网例子中,将GMII_GTXC信号分配到AA3管脚后,报错信息就消失了。(当然,由于硬件板卡上以太网PHY芯片的GMII_GTX中信号并没有连接到该引脚,这样改,警告是没了,但是功能怕也是没咯)。要两者都能保证,只能改硬件板卡了耶。不过根据Intel官网上一些工程师的说法,这个警告其实一般可以不用太在意。
还有一个纠结的事情就是,一个PLL虽然最多可以产生5路输出,但是每个PLL却只对应有一个专用时钟输出管脚,意思也就是,如果你用一个PLL产生多个输出,还都需要通过IO输出到外部器件,那么总会只有一时钟能享受该专用输出脚,其他的几个时钟信号还是只能走通用IO。
上述所述的情况其实非常的常见,典型的如图像采集显示系统—— CMOS摄像头采集图像存储到SDRAM中,然后再由VGA接口输出。
该系统中,需要使用PLL产生3个时钟输出到外部器件,一个CMOS_XCLK用以给CMOS摄像头提供基本参考时钟,一个SDRAM_CLK用来作为SDRAM器件的同步时钟,一个VGA_CLK用来驱动VGA数模转换器。
所以,针对这个警告,我们也就只能佛系对待了,本身影响不是十分大,要解决的代价却还比较大,因此,阿弥陀佛。
|