IBUF和BUFG

在代码中,DATA_IN 和 CLK_IN 都通过IBUF实例进行缓冲。IBUF负责将外部信号转换到FPGA内部标准并驱动内部信号线。这不仅在物理上是必要的一步(没有IBUF就无法直接驱动内部逻辑),而且还允许我们指定引脚的约束(如电平标准等)。

BUFG 全局时钟缓冲 :bufg_clk 实例将时钟连接到了全局时钟网络。这样做的直接好处是降低时钟的偏斜(skew)和抖动(jitter)。时钟偏斜指FPGA内不同触发器接收到同一时钟沿的时间差。如果不使用BUFG,时钟可能走一般的可编程布线,导致不同区域时钟延迟不同,偏斜增大。

参考代码:

复制代码
// 顶层模块:演示 IBUF 和 BUFG 的使用
module top_example (
    input  wire CLK_IN,   // 外部时钟输入,引脚上提供
    input  wire RST_N,    // 外部复位输入,低电平有效
    input  wire DATA_IN,  // 外部数据输入信号
    output reg  DATA_OUT  // 输出寄存后的数据
);

// 中间信号定义
wire clk_ibuf;   // 时钟经IBUF后的内部信号
wire clk_bufg;   // 时钟经BUFG后的全局时钟信号
wire data_buf;   // 数据经IBUF缓冲后的内部信号

// 1) 输入数据的缓冲:将外部DATA_IN通过IBUF转换为内部信号data_buf
IBUF ibuf_data (
    .I(DATA_IN),   // 外部引脚信号
    .O(data_buf)   // 缓冲后的内部信号
);

// 2) 外部时钟的缓冲:先通过IBUF,再送入BUFG实现全局分布
IBUF ibuf_clk (
    .I(CLK_IN),    // 外部时钟引脚
    .O(clk_ibuf)   // IBUF输出的内部时钟
);
BUFG bufg_clk (
    .I(clk_ibuf),  // BUFG输入连接IBUF的输出
    .O(clk_bufg)   // BUFG输出作为全局时钟
);

// 3) 使用全局时钟(clk_bufg)对数据进行寄存,同步输出
always @(posedge clk_bufg or negedge RST_N) begin
    if (!RST_N)
        DATA_OUT <= 1'b0;       // 异步复位:复位时输出清零
    else
        DATA_OUT <= data_buf;   // 时钟上升沿,将缓冲后的数据锁存到输出寄存器
end

endmodule
相关推荐
szxinmai主板定制专家10 小时前
AMR 项目落地:机器人控制器硬件定制化需求复盘
arm开发·单片机·fpga开发·系统架构·机器人·am62x
FPGA小迷弟1 天前
FPGA 与卫星:从星载硬件到在轨智能的完整技术解析
fpga开发·架构·fpga·1024程序员节·无线电
NamoAmitabha1281 天前
CPU 内部结构是什么?---deepseek
fpga开发
abc light1 天前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
156082072192 天前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理
XMAIPC_Robot2 天前
-40~85℃宽温实测:RK3588 机器人控制器硬件底座,长时间 SLAM 定位稳定性验证
人工智能·fpga开发·机器人·边缘计算·arm+fpga·rk3588+fpga
樱木花道長2 天前
AMD Ross 深度系列 8:FAQ 七问七答(文末附网盘链接)
人工智能·fpga开发
FPGA小迷弟2 天前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
低慢小uav2 天前
(已解决)Zynq芯片lwip协议栈,使用tcp作为服务器Service,接收大量数据时,长度接收正常,接收对数据校验,校验和异常分析
网络协议·tcp/ip·fpga开发
szxinmai主板定制专家2 天前
ARM+FPGA 数控机床控制器:选 CODESYS SoftMotion CNC,还是基于 LinuxCNC 自研搭建?架构、授权、实时性、量产风险深度对比
arm开发·fpga开发·codesys·数据采集卡·linuxcnc·rk3576