打印

FPGA中全局时钟的运用(转贴)

[复制链接]
3046|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
明天我还来|  楼主 | 2011-3-29 18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
FPGA的全局时钟应该是从晶振分出来的,最原始的频率。其他需要的各种频率都是在这个基础上利用PLL或者其他分频手段得到的;因为全局时钟需要驱动很多模块,所以全局时钟引脚需要有很大的驱动能力,FPGA一般都有一些专门的引脚用于作为全局时钟用,他们的驱动能力比较强。但是如果这些引脚用完了,就只能用一般的引脚了,而他们的驱动能力不强,有可能不能满足你的时序要求。(驱动能力小的,产生的延迟会大一些)
理论上,FPGA的任意一个管脚都可以作为时钟输入端口,但是FPGA专门设计了全局时钟,全局时钟总线是一条专用总线,到达片内各部分触发器的时间最短,所以用全局时钟芯片工作最可靠,但是如果你设计的时候时钟太多,FPGA上的全局时钟管脚用完了就出现不够用的情况。
与全局时钟资源相关的原语
常用的与全局时钟资源相关的Xilinx器件原语包括:IBUFG、IBUFGDS、BUFG、BUFGP、BUFGCE、BUFGMUX、BUFGDLL和DCM等。
1. IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错。IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和SSTL等多种格式的IO标准。
2. IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。
3. BUFG是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。
4. BUFGCE是带有时钟使能端的全局缓冲。它有一个输入I、一个使能端CE和一个输出端O。只有当BUFGCE的使能端CE有效(高电平)时,BUFGCE才有输出。
5. BUFGMUX是全局时钟选择缓冲,它有I0和I1两个输入,一个控制端S,一个输出端O。当S为低电平时输出时钟为I0,反之为I1。需要指出的是BUFGMUX的应用十分灵活,I0和I1两个输入时钟甚至可以为异步关系。
6. BUFGP相当于IBUG加上BUFG。
7. BUFGDLL是全局缓冲延迟锁相环,相当于BUFG与DLL的结合。BUFGDLL在早期设计中经常使用,用以完成全局时钟的同步和驱动等功能。随着数字时钟管理单元(DCM)的日益完善,目前BUFGDLL的应用已经逐渐被DCM所取代。
8. DCM即数字时钟管理单元,主要完成时钟的同步、移相、分频、倍频和去抖动等。DCM与全局时钟有着密不可分的联系,为了达到最小的延迟和抖动,几乎所有的DCM应用都要使用全局缓冲资源。DCM可以用Xilinx ISE软件中的Architecture Wizard直接生成。
全局时钟资源的使用方法
全局时钟资源的使用方法有以下5种。
1. IBUFG + BUFG的使用方法: IBUFG后面连接BUFG的方法是最基本的全局时钟资源使用方法,由于IBUFG组合BUFG相当于BUFGP,所以在这种使用方法也称为BUFGP方法。
2. IBUFGDS + BUFG的使用方法:当输入时钟信号为差分信号时,需要使用IBUFGDS代替IBUFG。
3. IBUFG + DCM + BUFG的使用方法:这种使用方法最灵活,对全局时钟的控制更加有效。通过DCM模块不仅仅能对时钟进行同步、移相、分频和倍频等变换,而且可以使全局时钟的输出达到无抖动延迟。
4. Logic + BUFG的使用方法: BUFG不但可以驱动IBUFG的输出,还可以驱动其它普通信号的输出。当某个信号(时钟、使能、快速路径)的扇出非常大,并且要求抖动延迟最小时,可以使用BUFG驱动该信号,使该信号利用全局时钟资源。但需要注意的是,普通IO的输入或普通片内信号进入全局时钟布线层需要一个固有的延时,一般在10ns左右,即普通IO和普通片内信号从输入到BUFG输出有一个约10ns左右的固有延时,但是BUFG的输出到片内所有单元(IOB、CLB、选择性块RAM)的延时可以忽略不计为“0”ns。
5. Logic + DCM + BUFG的使用方法: DCM同样也可以控制并变换普通时钟信号,即DCM的输入也可以是普通片内信号。
使用全局时钟资源的注意事项
全局时钟资源必须满足的重要原则是:使用IBUFG或IBUFGDS的充分必要条件是信号从专用全局时钟管脚输入。换言之,当某个信号从全局时钟管脚输入,不论它是否为时钟信号,都必须使用IBUFG或IBUFGDS;如果对某个信号使用了IBUFG或IBUFGDS硬件原语,则这个信号必定是从全局时钟管脚输入的。如果违反了这条原则,那么在布局布线时会报错。这条规则的使用是由FPGA的内部结构决定的:IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接,与普通IO和其它内部CLB等没有物理连接。另外,由于BUFGP相当于IBUFG和BUFG的组合,所以BUFGP的使用也必须遵循上述的原则。
全局时钟资源的例化方法
全局时钟资源的例化方法大致可分为两种:一是在程序中直接例化全局时钟资源;二是通过综合阶段约束或者实现阶段约束实现对全局时钟资源的使用;第一种方法比较简单,用户只需按照前面讲述的5种全局时钟资源的基本使用方法编写代码或者绘制原理图即可。第二方法是通过综合阶段约束或实现阶段的约束完成对全局时钟资源的调用,这种方法根据综合工具和布局布线工具的不同而异。另外,大多数综合工具会自动分析时钟信号的扇出数目,在全局时钟资源富裕的情况下,将扇出数目最大的信号自动指定使用全局时钟资源,这时用户必须检查综合结果是否满足上述使用IBUFG、IBUFGDS、BUFGP的原则。如果某个信号因扇出很大,而被综合器自动指定使用IBUFG、IBUFGDS、BUFGP全局时钟资源,而该信号并没有从专用全局时钟管脚输入,在布局布线时会报错,这时应该在综合时指定该信号不使用全局时钟资源。具体的综合约束命令和操作因综合工具不同而异。

相关帖子

沙发
钻研的鱼| | 2011-3-29 18:38 | 只看该作者
挑个错误:全局时钟总线是一条专用总线,到达片内各部分触发器的时间最短,
     不见得是时间最短,而是到达片内各部分触发器的skew最小

使用特权

评论回复
板凳
dan_xb| | 2011-3-30 10:23 | 只看该作者
一般情况,你如果例化了DCM或者PLL核,你就不用写BUFG了,你在生成核的时候自己选一下就可以了
一般的设计,你如果是一个同步设计,你也不用写BUFG,软件会自动加上的
但是你如果是一个差分时钟,同时你又没有用DCM的情况下,你需要写一个IBUFGDS

使用特权

评论回复
地板
linas| | 2011-3-30 10:27 | 只看该作者
哦,长见识了。

使用特权

评论回复
5
年轻不再| | 2011-4-20 20:17 | 只看该作者
:handshake

使用特权

评论回复
6
小云001| | 2011-4-21 22:03 | 只看该作者
:)

使用特权

评论回复
7
奔腾2.0| | 2011-4-21 22:11 | 只看该作者
见识了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

505

帖子

1

粉丝