||
在工程中,发现有编译的警告,如下:
PLL "<name>" output port <name> feeds output pin "<name>" via non-dedicated routing -- jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance。
初步断定是PLL的输出引脚不在特定的走线上造成的,于是决定研究一下EP3C40的时钟资源。
图一
从图一可知,EP3C40上下左右各有4个专用时钟引脚CLK[..],其中上下四个布置紧凑。两用时钟引脚DPCLK有12个。CPDCLK较为特殊一点,,它们首先通过选择器再接入时钟控制模块,共有8个。这20个两用时钟引脚通常用于接入时钟或者异步控制信号,比如异步复位信号。
我们还可以在图中看到GCLK,这个就是全局时钟数,它的概念很重要,全局时钟数就是一个网络,它能为FPGA内部的所有资源提供时钟信号,为什么要它来运作时钟信号呢?一句话,它能保证到达各种资源的时钟沿同步,skew非常小。
上图中我们还可以看出,EP3C40包含了四个锁相环(PLL),锁相环支持单端的时钟输入和差分的时钟输入两种输入方式,值得注意的是,只有使用专用的时钟输入管脚的时钟信号才能驱动锁相环。
如图一所示的CLK[0..15]就是特定的时钟脚。不但PLL有特定的输入引脚,而且如果PKK(注:应为PLL)供给外部时钟的话,那么这个外部时钟引脚也是需要特定的,当然,这只是要求,用其他普通引脚也行,但是会产生…. jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance这样的报警。
从何区分这些引脚了呢?我们来看芯片引脚鸟瞰图:
图二
图二中的表示的就是专用时钟输入引脚,共有16个CLK专用脚。(里面的颜色代表着引脚划分的Bank,这里附带说一下,做原理图时,最好把同一功能模块的用脚划分到一个Bank内,这样减少布线长度,有利于时序达成)
表示的就是专用PLL供给外部时钟引脚,这里成对出现,就是时钟的PLLx_CLKOUTp & PLLx_CLKOUTn差分信号。具体哪个是p哪个是n可在手册里查找:(如下图三)
图三
除了专用的输出引脚,需要注意的是只有C0才能不使用全局时钟数GCLK来供给专用的外围时钟引脚,其它输出(C1-C4)需要通过全局时钟树GCLK来驱动外围IO。
图四
图四所示,全局时钟数资源有限,在一个大系统里为了利用好它,C0供给外部器件的时钟是一个可用的办法。
还有个需要提醒的是,实践证明:PLLx_CLKOUTp & PLLx_CLKOUTn这两者,如果只用一端的话,应该取用PLLx_CLKOUTp,配置成PLLx_CLKOUTn警告还是无法消除。
最后一个疑问:我们在系统中随意创建的一个PLL,到底是哪一个呢(PLL1-PLL4),本质上来说这和编译器有关,编译器会自动优化,但是影响它的比较重要的因素还是引脚位置,经过我的工程实践,输入引脚和输出引脚会很大程度上影响PLL分配,
图五
假设AB11引脚供给系统时钟的话,经过锁相环PLL输出到T16(可参考图二鸟瞰图),编译器会把这个PLL优化成PLL4。而在图三中已经显示了F484系列的PLL4专用输出引脚是T16,正是因为工程中没有把T16分配给PLL输出时钟脚,所以才产生...jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance的报警。
(欢迎转载,请注明出处---愤怒de狂奔)