与全局时钟资源相关的Xilinx原语:BUFG, IBUFG, DCM

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的输入信号,又以输出端口的形式供底层需要使用全局时