对BUFG/BUFGCE/BUFH/BUFHCE简单了解。
下图为 7 系列 FPGA 时钟架构图:
BUFG
全局时钟缓冲器。它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。BUFG连接的是芯片中的专用时钟资源,能减少信号的传输延时,提高驱动能力。BUFG可以到达设备上的任何时钟点。
注意:如果内部产生的时钟,只在局部模块使用,可以考虑不使用BUFG。一个BUFG只能驱动一个时钟。
BUFG BUFG_inst (
.O(CLK0), // 1-bit output: Clock output.
.I(CLK) // 1-bit input: Clock input.
);
BUFGCE
带有使能端的全局时钟缓冲,使能端为高电平有效。
BUFGCE #(
.CE_TYPE("SYNC"), // ASYNC, HARDSYNC, SYNC
.IS_CE_INVERTED(1'b0), // Programmable inversion on CE
.IS_I_INVERTED(1'b0), // Programmable inversion on I
.SIM_DEVICE("ULTRASCALE") // ULTRASCALE
)
BUFGCE_inst (
.O(CLK0), // 1-bit output: Buffer
.CE(CE), // 1-bit input: Buffer enable
.I(CLK) // 1-bit input: Buffer
);
BUFH
水平时钟缓冲器,其允许通过水平时钟行访问单个时钟区域中的全局时钟线。 水平时钟缓冲器 (BUFH) 通过 HROW 驱动到该区域中的每个时钟点。
BUFH BUFH_inst (
.O(CLK0), // 1-bit output: Clock output
.I(CLK) // 1-bit input: Clock input
);
BUFHCE
带有使能端,以独立启用或禁用跨越单个时钟区域的时钟。每个时钟区域最多可支持 12 个时钟。
BUFHCE #(
.CE_TYPE("SYNC"), // "SYNC" (glitchless switching) or "ASYNC" (immediate switch)
.INIT_OUT(0) // Initial output value (0-1)
)
BUFHCE_inst (
.O(CLK0), // 1-bit output: Clock output
.CE(CE), // 1-bit input: Active high enable
.I(CLK) // 1-bit input: Clock input
);
BUFMR
多时钟区域缓冲器。将时钟信号驱动到时钟区域内的专用时钟网络,与全局时钟树无关。
注意其允许区域和I/O时钟跨3个垂直相邻的时钟区域。
BUFMR BUFMR_inst (
.O(CLK0), // 1-bit output: Clock output (connect to BUFIOs/BUFRs)
.I(CLK) // 1-bit input: Clock input (Connect to IBUF)
);
BUFR
区域时钟缓冲器,可以驱动现有时钟区域中的I / O逻辑和逻辑资源(CLB,Block RAM等)【驱动区域时钟树】
BUFMRCE
多了使能,如果在多个时钟区域中需要本地时钟,则BUFMRCE可以驱动相邻时钟区域中的多个BUFR组件,以进一步扩展该时钟功能。