Xilinx FPGA常用时钟原语有哪些?

作者: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)
);


最新文章

最新文章