天天看点

与全局时钟资源相关的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通常用于时钟网络以及其他高扇出网络,如设置/复位和时钟启用

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

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:数字时钟管理模块,其配置界面如下图:

与全局时钟资源相关的Xilinx原语:BUFG, IBUFG, 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后的缓存输出信号,这个信号即 

继续阅读