原创 掌控全局时钟网络资源

2009-2-13 20:09 10553 8 28 分类: FPGA/CPLD

全局时钟驱动整个FPGA的单元模块,但是相对LCM9K,全局时钟资源很少,所以需要合理的分配。


哪些信号会消耗全局时钟网络呢?外部输入或者内部产生时钟,时钟使能,异步清零信号以及其他高扇出信号。我以前一直认为全局时钟资源交给QuartusII自动分配就可以得到最优结果,其实不然。


如何规划全局时钟是很重要的,以Cyclone3器件为例,FPGA的每一侧可以有五个全局时钟输入,如下图:

点击开大图


举一个极端的例子,我们需要PLL1的四个时钟输出PLL1_C0PLL1_C1PLL1_C2PLL1_C3做为全局时钟,而且还需要一个外部输入的时钟做为全局时钟网络,该五个时钟占用全局时钟资源可以分为下面几种情况:



C0


C1


C2


C3


外部时钟输入脚


GCLK0


GCLK1


GCLK2


GCLK3


CLK0/2


GCLK0


GCLK4


GCLK2


GCLK3


CLK1/2


GCLK0


GCLK4


GCLK2


GCLK1


CLK2/3


GCLK3


GCLK4


GCLK0


GCLK1


CLK0/1


GCLK3


GCLK4


GCLK2


GCLK1


CLK0/3


由上面表可以知道,外部时钟管脚可以根据需要连接CLK[0..3]任意一个专用时钟输入脚,具体选择由QuartusII软件自动分配完成。也就是说,在FPGA的一侧连入五个全局时钟时,我们可以根据布线要求任意把时钟连至CLK[0..3]之一,但是每侧最多只能连五个全局时钟,如果我们需要在外部连入两个时钟时,并假设连接在CLK0CLK1时,它们中的一个将无法占用全局时钟资源,改走普通布线资源,具体哪一个由QuartusII判断决定。由于普通布线资源会造成时钟到达各个寄存器不尽相同,也就是CLK SKEW会很大,时序收敛性能就大大减低,所以,我们需要将CLK0CLK1中的一个连至下一组时钟专用管脚CLK[4..7],全部时钟都在全局时钟网络上。


当我们的系统占用比较多的全局时钟资源时,将外部的时钟和FPGA内部产生的时钟资源综合考虑,充分考虑PLL的位置以及外部输入时钟的管脚位置,保证每个时钟都能分配到全局时钟资源,得到最好的时序性能。


每个全局时钟都有一个时钟控制模块(Clock Control Block),如下图:

点击开大图


该部分的绝大部分配置都是由QuartusII完成,我们能够设置是(2CLKSELECT[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阻止信号分配在全局时钟资源上(不推荐)。

PARTNER CONTENT

文章评论20条评论)

登录后参与讨论

用户418338 2012-12-6 15:15

问一下,如果主时钟从DPCLK输入的话,内部的两个锁相环是不是就不能用了

用户1122702 2009-6-9 16:27

上面的图例的器件中只有10个Gclk,而每个Gclk都分布在整个器件,所以并不是每侧有10个,而是总共只有10个。

coyoo 2009-5-22 11:51

上述分配表是如何得到的? 你给的图应该每测有10个Gclk啊,怎么说只有5个呢?

ilove314_323192455 2009-3-21 17:55

哈哈,明白了。一直把注意力放在了这个aoto grobal clock上了,吧grobal signal忽略了……谢过wind兄

用户1122702 2009-3-21 11:28

看上面第六条和第十一条回复,没必要通过More Setting开关,呵呵。

ilove314_323192455 2009-3-20 23:35

但是还有一个问题,Setting--Fitter Setting--More Setting…开启和关闭其实直接决定了输入时钟信号是否走全局时钟网络。而在assignment里的Aoto Global Clock其实开关根本不起作用了,我测试发现一直都这样。这样是不是说要么全局时钟网络分配交给软件来处理,要么关掉,这也太不合理了吧

ilove314_323192455 2009-3-20 23:26

这么来说,其实内部产生的逻辑分频时钟其实是已经不到了全局时钟网络中了,但是延时确实出乎意料的大。谢谢了

用户1122702 2009-3-20 22:53

看一个信号是否走全局时钟,不需要用时序分析器的,在Compilation Report/Fitter/Resource Section有各种资源的分配情况。

用户1122702 2009-3-20 22:37

对EP1C系列的不是很了解,我记得在比较老的Spartan系列芯片,ISE是不会自动把普通IO的时钟管脚分配到全局资源,需要手动分配BUFG,但是还没有遇到过内部产生的时钟信号没有分配到全局资源,我看一下EP1C的Datasheet确定一下。

用户1122702 2009-3-20 22:30

我上面所说的测试在EP3C5上面测试的,外部输入的pin是否走全局时钟可以通过Global Signal设置,而内部从LC生成的时钟可以通过Auto Global Clock设置,如果FPGA还有全局时钟资源,Quartus会自动把时钟以及异步复位信号分配到全局资源,内部时钟也会自动分配到全局资源,否则按照扇出数决定。如果走全局时钟资源,Clock Skew可以忽略不计(印象中是0.01ns的偏差),应该是由于FPGA密度较大,走线也会较长。 我的软件是QuartusII 8.0 SP1。
相关推荐阅读
用户1122702 2015-12-20 21:29
在Emacs中应用Ctags
适宜人群 具备Emacs使用经验的程序员 什么是Tag? Tag,即标记,记录了程序重要信息(如函数、变量、宏定义等)的位置和相应的文件,方便程序浏览器进行跳转。 ...
用户1122702 2015-12-13 22:23
可综合的SystemVerilog:命名空间
关键名词解释: 编译单元(compilation unit):SystemVerilog 源代码的集合 编译单元域(compilation-unit scope):即编...
用户1122702 2015-12-13 22:15
可综合的SystemVerilog:参数化函数/任务
在Verilog中,参数化模块被广泛应用。参数可重新定义保证模块的可配置性及可复用性。但是,函数及任务并无法像模块一样被参数化,减弱了Verilog的描述化能力。 SystemVer...
用户1122702 2010-10-28 11:34
基于SOPC下RapidIO调试方法
RapidIO的一个难点在于地址转换方法,即将远端的Memory映射到当前Avalon-MM总线,所以地址需要一个转换过程——Local Avalon-MM<->RapidIO Addr&...
用户1122702 2010-08-24 14:22
西行重庆
八月初时离开生活并工作四年的深圳,来到求学四年的重庆。已经过去三周时间,对自己的将来也随之变的不可琢磨。重庆的生活水平并不如想象的低,除了房价不像沿海城市高企,其他诸如公共交通,生活日常用品基本都是一...
用户1122702 2010-07-07 18:05
Tcl用后感
                    Tcl用后感 (by Wind330)    Tcl - Tool Command Language近期做了一个Tcl脚本用于Modelsim仿真,完成如下功能...
EE直播间
更多
我要评论
20
8
关闭 站长推荐上一条 /3 下一条