IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUFG单元,否则在布局布线时会报错。IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和 SSTL等多种格式的IO标准。[理解就是任何时钟信号 在管脚分配步骤中,都必须映射在FPGA的全局时钟管脚上,同时在编程逻辑中必须使用IBUFG对该全局时钟引脚进来的信号进行缓冲]
IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。
BUFG是全局缓冲,它的输入是IBUFG的输出,此设计元素是一个高扇出缓冲器,用于将信号连接到全局路由资源,以实现信号的低偏斜分布。
BUFG通常用于时钟网络以及其他高扇出网络,如设置/复位和时钟启用
BUFG连接的是芯片中的专用时钟资源,目的是减少信号的传输延时,提高驱动能力,对于时序电路中的关键时钟信号,这是非常重要的,关系到系统设计的成功与否。如果内部产生的时钟,只在局部模块使用,可以考虑不使用BUFG。一个BUFG只能驱动一个时钟。
常见的使用方法:IBUFGDS差分转单端后进BUFG,再进PLL/DCM.
全局时钟资源必须满足的重要原则是:使用IBUFG或IBUFGDS的充分必要条件是信号从专用全局时钟管脚输入。换言之,当某个信号从全局时钟管脚输入,不论它是否为时钟信号,都必须使用IBUFG或IBUFGDS;如果对某个信号使用了IBUFG或IBUFGDS硬件原语,则这个信号必定是从全局时钟管脚输入的。如果违反了这条原则,那么在布局布线时会报错。这条规则的使用是由FPGA的内部结构决定的:IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接,与普通IO和其它内部CLB等没有物理连接。另外,由于BUFGP相当于IBUFG和BUFG的组合,所以BUFGP的使用也必须遵循上述的原则。
DLL模块(delay locked loop),xilinx fpga的底层内嵌功能模块,完成时钟高精度,低抖动的倍频和分频。
DCM:数字时钟管理模块,其配置界面如下图:
各个管脚的意义可以在help中找到,要说明的是其中的CLK Source选项,External代表输入的时钟管脚CLKIN是全局时钟信号IBUFG或IBUFGDS,这时在顶层模块中例化的DCM模块的输入时钟必须布线在全局时钟管脚,否则在布局布线时会出现错误。Internal代表不经过IBUFG或IBUFGDS直接将输入时钟连接至CLKIN管脚。
通过IP核生成DCM模块,输入是external,输入时钟将自动连接BUFG,不需要手动添加,可以从生成的DCM模块的.v文件看出:
1 `timescale 1ns / 1ps
2
3 module search_dcm(CLKIN_IN,
4
5 CLKIN_IBUFG_OUT,
6
7 CLK0_OUT,
8
9 CLK2X_OUT,
10
11 LOCKED_OUT);
12
13 input CLKIN_IN;
14
15 output CLKIN_IBUFG_OUT;//此句表明已经连接BUFG,不需要手动添加
16
17 output CLK0_OUT;
18
19 output CLK2X_OUT;
20
21 output LOCKED_OUT;
22
23
24
25 wire CLKFB_IN;
26
27 wire CLKIN_IBUFG;
28
29 wire CLK0_BUF;
30
31 wire CLK2X_BUF;
32
33 wire GND_BIT;
34
35 wire [6:0] GND_BUS_7;
36
37 wire [15:0] GND_BUS_16;
如果通过IP核生成DCM模块,输入是Internal,输入时钟将不会连接BUFG,需要手动添加,同样可以从生成的DCM模块的.v文件看出是没有CLKIN_IBUFG_OUT的输出的:
1 `timescale 1ns / 1ps
2
3 module MyDCM(CLKIN_IN,
4 RST_IN,
5 CLK0_OUT,
6 CLK2X_OUT,
7 LOCKED_OUT);
8 input CLKIN_IN;
9 input RST_IN;
10 output CLK0_OUT;
11 output CLK2X_OUT;
12 output LOCKED_OUT;
13 wire CLKFB_IN;
14 wire CLK0_BUF;
15 wire CLK2X_BUF;
16 wire GND_BIT;
17 wire [6:0] GND_BUS_7;
18 wire [15:0] GND_BUS_16;
这里的CLKIN_IBUFG_OUT输出是输入时钟信号通过IBUFG后的缓存输出信号,这个信号即作为DCM的输入信号,又以输出端口的形式供底层需要使用全局时