您的位置:首页 > 其它

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

2016-08-04 13:21 441 查看
转自http://blog.sina.com.cn/s/blog_75df3ad50100pmi3.html

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的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。BUFG连接的是芯片中的专用时钟资源,目的是减少信号的传输延时,提高驱动能力,对于时序电路中的关键时钟信号,这是非常重要的,关系到系统设计的成功与否。如果内部产生的时钟,只在局部模块使用,可以考虑不使用BUFG。一个BUFG只能驱动一个时钟。

全局时钟资源必须满足的重要原则是:使用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文件看出:

`timescale
1ns /
1ps

module search_dcm(CLKIN_IN,

                  CLKIN_IBUFG_OUT,

                  CLK0_OUT,

                  CLK2X_OUT,

                  LOCKED_OUT);

input CLKIN_IN;

output CLKIN_IBUFG_OUT;//此句表明已经连接BUFG,不需要手动添加

output CLK0_OUT;

output CLK2X_OUT;

output LOCKED_OUT;

 

wire CLKFB_IN;

wire CLKIN_IBUFG;

wire CLK0_BUF;

wire CLK2X_BUF;

wire GND_BIT;

wire
[
6:0] GND_BUS_7;

wire
[
15:0] GND_BUS_16;

       如果通过IP核生成DCM模块,输入时Internal,输入时钟将不会连接BUFG,需要手动添加,同样可以从生成的DCM模块的.v文件看出是没有CLKIN_IBUFG_OUT的输出的:

`timescale
1ns /
1ps

module MyDCM(CLKIN_IN,

             RST_IN,

             CLK0_OUT,

             CLK2X_OUT,

             LOCKED_OUT);

input CLKIN_IN;

input RST_IN;

output CLK0_OUT;

output CLK2X_OUT;

output LOCKED_OUT;

 

wire CLKFB_IN;

wire CLK0_BUF;

wire CLK2X_BUF;

wire GND_BIT;

wire
[
6:0] GND_BUS_7;

wire
[
15:0] GND_BUS_16;

这里的CLKIN_IBUFG_OUT输出是输入时钟信号通过IBUFG后的缓存输出信号,这个信号即作为DCM的输入信号,又以输出端口的形式供底层需要使用全局时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: