作者:FPGA入门到精通
在FPGA设计中,时钟管理是至关重要的一环,它直接影响到系统的性能和稳定性。Xilinx提供了一系列的时钟管理原语,这些原语是针对其FPGA器件特性开发的,能够高效地实现时钟的各种功能。
今天来聊一聊Xilinx时钟管理原语,包括它们的定义、分类以及在设计中的应用。
一、时钟管理原语概述
Xilinx的时钟管理原语是一系列针对其FPGA器件特征开发的常用模块,它们代表了FPGA中实际拥有的硬件逻辑单元,如LUT、D触发器、RAM等。
这些原语可以直接在设计中例化使用,是实现时钟功能的最直接方式。
二、时钟管理原语分类
Xilinx FPGA中的时钟管理原语是一组特殊的硬件模块,它们提供了对时钟信号进行各种操作的能力,包括时钟缓冲、分频、倍频、相位调整、时钟选择等。
1. 输入时钟缓冲原语(Input Clock Buffers)
(1)IBUFG
全局输入缓冲器,专为驱动全局时钟网络设计,提供最小的时钟延迟和抖动。
IBUFG #(
.BUFG_LOW_PWR("TRUE") // 低功耗模式
) ibufg_instance (
.I(input_clk), // 输入时钟信号
.O(clk_global) // 输出全局时钟信号
);
代码示例说明:将外部时钟信号 input_clk 缓冲后输出为全局时钟信号 clk_global ,同时设置为低功耗模式
(2)IBUFGDS
差分全局输入缓冲器,用于接收差分时钟信号。
IBUFGDS #(
.DIFF_TERM("TRUE"), // 差分终止
.IOSTANDARD("LVDS") // 差分信号的IO标准
) ibufgds_instance (
.I(clk_p), // 差分时钟信号的正端
.IB(clk_n), // 差分时钟信号的负端
.O(clk_global) // 输出全局时钟信号
);
代码示例说明:用于接收差分时钟信号,并将它们缓冲输出为全局时钟信号 clk_global ,同时启用差分终止并设置IO标准为LVDS
2. 全局时钟缓冲原语(Global Clock Buffers)
(1)BUFG
全局时钟缓冲器,用于驱动高扇出时钟网络,最小化时钟延迟和抖动。
BUFG bufg_instance (
.I(clk_input), // 输入时钟信号
.O(clk_output) // 输出时钟信号
);
(2)BUFGP
带使能端的全局时钟缓冲器,允许通过使能信号控制时钟的输出。
// 实例化BUFGP,并配置为低功耗模式
BUFGP #(
.BUFGP_CTRL("TRUE") // 配置为低功耗模式
) bufgp_instance (
.I(clk_in),
.CE(clk_enable),
.O(clk_out)
);
3. 时钟选择原语(Clock Selection Primitives)
BUFGMUX:全局时钟选择缓冲器,允许在两个时钟输入之间进行选择,基于控制信号选择输出。
BUFGMUX #(
.CLK_SEL_TYPE("SYNC"), // 同步选择信号
.INIT_OUT(1'b0) // 初始化输出状态为低电平
) bufgmux_instance (
.I0(clk_input_0),
.I1(clk_input_1),
.S(clk_select),
.O(clk_output)
);
4. 专用时钟原语(Specialty Clock Primitives)
BUFH:带有延迟的缓冲器,用于时钟对齐。
DELAY_TYPE :指定延迟类型,可以是 "FIXED" 或 "VARIABLE"。
REFCLK_FREQUENCY :参考时钟频率,用于设定延迟值。
BUFH #(
.DELAY_TYPE("FIXED"), // 固定延迟
.REFCLK_FREQUENCY(200.0) // 参考时钟频率为 200 MHz
) bufh_instance (
.I(clk_in),
.O(clk_out)
);