文章来源:FPGA入门到精通
Xilinx FPGA的输入时钟原语(Primitives)是连接外部时钟源与内部时钟网络的最底层硬件模块,它们定义了信号的电气特性、布线路径和驱动能力,是构建稳定、高性能时钟系统的基础。
Xilinx原语可以在Vivado的"Language Templates"(语言模板)中直接查找和调用,方便获取官方实例化代码。
输入时钟网络通常遵循“I/O缓冲器 -> 全局缓冲器 (-> 时钟管理模块) -> 全局/区域时钟网络”的基本结构。
一、常用输入时钟原语详解
1、单端与差分输入缓冲器
(1)IBUF
通用输入缓冲器。
用于普通I/O引脚(包括时钟信号),将外部信号引入FPGA内部逻辑。
对于时钟,建议先进入BUFG再使用。Vivado通常会自动为输入端口添加此原语。
(2)IBUFDS
差分输入缓冲器。
接收一对差分信号(如I和IB),并将其转换为内部单端信号O。
常用于数据和源同步时钟。
(3)IBUFG
专用单端全局时钟输入缓冲器。
必须与芯片的专用全局时钟引脚(Clock-Capable Pin)相连,是外部单端时钟进入全局时钟网络的首选和必须路径。
(4)IBUFGDS
专用差分全局时钟输入缓冲器。
功能与IBUFG类似,但用于接收外部高质量的差分时钟信号(如LVDS, LVPECL)。
2、全局与区域时钟缓冲器
(1)BUFG
全局时钟缓冲器。
将时钟信号驱动到整个芯片的低延迟、低抖动时钟网络。
高扇出信号(如复位)也可使用。
(2)BUFR
区域时钟缓冲器。
将时钟信号驱动到特定时钟区域,能同时为I/O逻辑和CLB逻辑提供时钟,并具备整数分频功能。
适合源同步接口或局部逻辑模块。
(3)BUFIO
I/O时钟缓冲器。
专门驱动单个I/O Bank内的时钟网络,延迟极低,仅能为I/O逻辑(如ILOGIC/OLOGIC)提供时钟,不能驱动CLB等内部逻辑。
常用于高速源同步接口的数据采集。
二、原语代码示例
1、处理外部单端系统时钟 (IBUFG + BUFG)
当你的板卡上有一个50MHz的单端晶体振荡器,连接到FPGA的专用时钟引脚时,典型的处理方式是:

2、处理外部差分系统时钟 (IBUFGDS + BUFG)
对于来自外部时钟源或晶振的高质量差分时钟信号(如LVDS),处理方式如下:

3、综合应用 (IBUFDS + BUFG 或 BUFR + IDDR)
对于高速ADC(模数转换器)的源同步接口,通常会提供一个随路差分时钟。


