Altera的综合器或者PR工具都会根据实际信号clock和reset,preset的fanout大小确定是不是用全局时钟资源。若用了全局时钟资源,你可以在Q2的technology map view里看到Altclkctrl的cell名称--时钟控制模块(Clock Control Block)。
当我们的系统占用比较多的全局时钟资源时,将外部的时钟和FPGA内部产生的时钟资源综合考虑,充分考虑PLL的位置以及外部输入时钟的管脚位置,保证每个时钟都能分配到全局时钟资源,得到最好的时序性能。
每个全局时钟都有一个时钟控制模块(Clock Control Block),如下图:
该部分的绝大部分配置都是由QuartusII完成,我们能够设置是(2)CLKSELECT[1..0],在MegaWizard…选择I/O--ALTCLKCTRL模块,就可以得到相应的模块,由上图可以知道,该模块的数据必须来自专用时钟管脚或者PLL输出,无法与LC驱动的全局时钟资源连接。当我们需要进行时钟切换时,最好用该功能模块,因为用LC产生的时钟选择模块很容易产生毛刺,另时序电路无法正常工作。
我们知道外部输入或者内部产生时钟,时钟使能,异步清零信号以及其他高扇出信号都会占用全局时钟资源,当系统涉及的上述信号数量过多时,FPGA无法满足,我们就需要有取舍的设置哪些时钟可以占用Global Clock,哪些可以不用。具体设置在Assigment Editor中完成,说明如下:
Auto Global Clock:用于设置时钟是否占用Global Clock;
Auto Global Register Control Signals:用于设置寄存器控制信号(异步复位,寄存器使能等)是否占用Global Clock;
也可在Setting--Fitter Setting--More Setting…将上述设置关闭,则QuartusII阻止信号分配在全局时钟资源上(不推荐)。
2——Xilinx
手工例化BUFG,BUFG的输出可以布线到全局时钟网络。
FPGA的全局时钟路径需要专用时钟驱动器--------全局时钟缓冲器Global Clockbuffer(BUFG),时钟信号只有经过BUFG之后才可以驱动全局时钟网络。
BUFG的例化请参考Xilinx的ISE设计工具内包含的《器件库指南》。这里需要指出的是IBUFG和BUFG不同,IBUFG是全局时钟的引脚的缓冲器,是和其他普通管脚的IBUF对应的;而BUFG是内部的全局时钟的缓冲器。
原帖地址:http://www.eefocus.com/lubee/blog/10-07/192614_88d5f.html