时钟资源
在上一篇文章提到过相应模块之间的延迟最小最好用全局时钟,这个概念就涉及到时钟资源的概念。这个玩意还和全局、长线、短线、分布式有关。
在一些需要严格同步的系统设计中需要搞清楚到底要用、怎么用fpga中的时钟资源。
FPGA全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而
使全局时钟到达芯片内部的所有可配置单元(CLB)、I/O引脚和内嵌的块RAM以及硬核,且其时延和抖动都最小。因此最好的时钟方案都是由专业的全局时钟输入引脚驱动单个全局时钟,再由它去驱动设计中的其他时序模块。
Xilinx的FPGA中集成 的专用时钟资源与时钟管理单元(DCM,后来PLL的性能要更好,DCM是用进行同步、移相、分频、倍频等)。
全局时钟
调用原语
fpga的全局时钟要通过原语来提供。包括
- IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从
全局时钟管脚输入的信号必须经过IBUFG单元,否则在布局布线时会报错。IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和SSTL等多种格式的IO标准。 - IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。
- BUFG是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。即输入全局缓冲后面还需要加全局缓冲。
- BUFGCE是带有时钟使能端的全局缓冲。它有一个输入I、一个使能端CE和一个输出端
O。只有当BUFGCE的使能端CE有效(高电平)时,BUFGCE才有输出。 - BUFGMUX是全局时钟选择缓冲,它有I0和I1两个输入,一个控制端S,一个输出端O。 当S为低电平时输出时钟为I0,反之为I1。需要指出的是BUFGMUX的应用十分灵活,I0和I1两个输入时钟甚至可以为异步关系。
- BUFGP相当于IBUFG加上BUFG。
- BUFGDLL是全局缓冲延迟锁相环,相当于BUFG与DLL的结合。BUFGDLL在早期设计中经常使用,用以完成全局时钟的同步和驱动等功能。随着数字时钟管理单元(DCM)的日益完善,目前BUFGDLL的应用已经逐渐被DCM所取代(DCM现在都快被PLL取代了吧)。
- DCM即数字时钟管理单元,主要完成时钟的同步、移相、分频、倍频和去抖动等。DC
M与全局时钟有着密不可分的联系,为了达到最小的延迟和抖动,几乎所有的DCM应用都
要使用全局缓冲资源。
原语使用方法
全局时钟资源的使用方法有以下5种,如图2所示。
- IBUFG + BUFG的使用方法:
IBUFG后面连接BUFG的方法是最基本的全局时钟资源使用方法,由于IBUFG组合BUFG相当于BUFGP,所以在这种使用方法也称为BUFGP方法。 - IBUFGDS + BUFG的使用方法:
当输入时钟信号为差分信号时,需要使用IBUFGDS代替IBUFG。 - IBUFG + DCM + BUFG的使用方法:
这种使用方法最灵活,对全局时钟的控制更加有效。通过DCM模块不仅仅能对时钟进行同步、移相、分频和倍频等变换,而且可以使全局时钟的输出达到无抖动延迟。 - Logic + BUFG的使用方法:
BUFG不但可以驱动IBUFG的输出,还可以驱动其它普通信号的输出。当某个信号(时钟、
使能、快速路径)的扇出非常大,并且要求抖动延迟最小时,可以使用BUFG驱动该信号,使该信号利用全局时钟资源。但需要注意的是,普通IO的输入或普通片内信号进入全局时钟布线层需要一个固有的延时,一般在10ns左右,即普通IO和普通片内信号从输入到BUFG输出有一个约10ns左右的固有延时,但是BUFG的输出到片内所有单元(IOB、CLB、选择性块RAM)的延时可以忽略不计为“0”ns。
5. Logic + DCM + BUFG的使用方法:
DCM同样也可以控制并变换普通时钟信号,即DCM的输入也可以是普通片内信号。
第二全局时钟
相当于长线,用来跨bank使用,因此一般讲频率较高、扇出数目多、高速路径信号使能为第二全局时钟信号。通过再约束文件进行添加就行(这个玩意在xdc文件中怎么加?)。
使用全局时钟资源并不占用逻辑资源,也不影响其他布线资源;第二时钟资源占用的是芯片内部的资源,占用部分逻辑资源,各个部分的布线会相互影响,所以建议在设计中逻辑占用资源不超过70%时使用。