当前位置: 首页 > article >正文

IBUF和BUFG

在代码中,DATA_INCLK_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


http://www.kler.cn/a/576745.html

相关文章:

  • DeepSeek如何变现?完整版学习资料合集【可下载】
  • 【开题报告+论文+源码】基于SSM的宿舍管理系统的设计与实现
  • 2025网络安全工程师:软考新挑战与职业发展探析
  • python用户图形界面pygtk库安装与使用
  • 代码随想录 回溯
  • 高速率高耐压国产CAN FD芯片技术特性与应用前景
  • TON基金会确认冠名赞助2025香港Web3嘉年华,并将于4月8日重磅呈现“TON生态日”
  • 广度优先遍历(BFS):逐层探索的智慧
  • 大模型开发(五):P-Tuning项目——新零售决策评价系统(二)
  • k8s scheduler源码阅读
  • .net 与 Pythonnet库的使用心得
  • MySQL作业一
  • React + React-intl @3.xx + TypeScript
  • 网络安全等级保护2.0 vs GDPR vs NIST 2.0:全方位对比解析
  • 手写简易Tomcat核心实现:深入理解Servlet容器原理
  • 科技快讯 | 中国团队发布通用型AI Agent产品Manus;谷歌安卓原生 Linux Terminal 终端应用上线
  • IPD(集成产品开发)简介
  • 共绘智慧升级,看永洪科技助力由由集团起航智慧征途
  • 图库 | 基于图增强的智慧审计系统革新
  • 平衡二叉树(110)