BUFG
BUFG是把局部时钟转为全局时钟,减少时钟延迟。.它可以驱动所有的IO和逻辑,
BUFIO
BUFIO是IO时钟网络,顾名思义,它只能驱动IO Block里面的逻辑,不能驱动CLB里面的LUT,REG等逻辑。BUFIO可以被如下节点驱动:
1、SRCCs and MRCCs in the same clock region
2、MRCCs in an adjacent clock regionusing BUFMRs
3、MMCMs clock outputs 0-3 driving the HPC in the same clock region
BUFR
BUFR是regional时钟网络,顾名思义,它的驱动范围只能局限在一个clock region的逻辑,但是它可以同时驱动IO和内部逻辑。BUFR可以被如下节点所驱动:
1、所有能驱动BUFIO的节点
2、MMCMs clock outputs 0-3
3、General interconnect
IBUFDS
在使用差分时钟转单端时,对于普通的bank,可以使用IBUFDS。
BUFR和BUFMR有什么区别?
BUFMR是7系列才有的时钟buffer,它是在有些源同步设计中逻辑IO跨上中下三个Bank;而BUFR仅仅能够驱动一个Bank,所以需要BUFMR级联BUFR来完成每个Bank的功能功能,如下图:
BUFH怎么用?
BUFH,BUFH驱动区域中的水平全局时钟树,Xilinx的时钟是通过时钟树来分布的。可用于互联逻辑、SelectIO逻辑,DSP48E1模块或者Block RAM资源的时钟驱动。
IBUFDS_GTE2
对于高速bank,需要使用IBUFDS_GTE2,如果仍然使用IBUFDS,此时在编译或者生成bit时报错,提示该时钟约束有问题,正常差分时钟的电平是不需要约束的,约束完后可以生成bit,但是转出的单端时钟不能使用。
IBUFDS_GTE2原语如下
IBUFDS_GTE2 #(
.CLKCM_CFG("TRUE"), // Refer to Transceiver User Guide
.CLKRCV_TRST("TRUE"), // Refer to Transceiver User Guide
.CLKSWING_CFG(2'b11) // Refer to Transceiver User Guide
)
IBUFDS_GTE2_inst (
.O(clk_156_25M), // 1-bit output: Refer to Transceiver User Guide
.ODIV2(), // 1-bit output: Refer to Transceiver User Guide
.CEB(1'b0), // 1-bit input: Refer to Transceiver User Guide
.I(Q0_CLK1_GTREFCLK_PAD_P_IN), // 1-bit input: Refer to Transceiver User Guide
.IB(Q0_CLK1_GTREFCLK_PAD_N_IN) // 1-bit input: Refer to Transceiver User Guide
);