IBUF和BUFG

打印 上一主题 下一主题

主题 978|帖子 978|积分 2934

在代码中,DATA_IN 和 CLK_IN 都通过IBUF实例举行缓冲。IBUF负责将外部信号转换到FPGA内部标准并驱动内部信号线。这不但在物理上是必要的一步(没有IBUF就无法直接驱动内部逻辑),而且还答应我们指定引脚的约束(如电平标准等)。
BUFG 全局时钟缓冲:bufg_clk 实例将时钟连接到了全局时钟网络。这样做的直接利益是低落时钟的偏斜(skew)抖动(jitter)。时钟偏斜指FPGA内不同触发器接收到同一时钟沿的时间差。如果不使用BUFG,时钟可能走一样平常的可编程布线,导致不同区域时钟耽误不同,偏斜增大。
参考代码:
  1. // 顶层模块:演示 IBUF 和 BUFG 的使用
  2. module top_example (
  3.     input  wire CLK_IN,   // 外部时钟输入,引脚上提供
  4.     input  wire RST_N,    // 外部复位输入,低电平有效
  5.     input  wire DATA_IN,  // 外部数据输入信号
  6.     output reg  DATA_OUT  // 输出寄存后的数据
  7. );
  8. // 中间信号定义
  9. wire clk_ibuf;   // 时钟经IBUF后的内部信号
  10. wire clk_bufg;   // 时钟经BUFG后的全局时钟信号
  11. wire data_buf;   // 数据经IBUF缓冲后的内部信号
  12. // 1) 输入数据的缓冲:将外部DATA_IN通过IBUF转换为内部信号data_buf
  13. IBUF ibuf_data (
  14.     .I(DATA_IN),   // 外部引脚信号
  15.     .O(data_buf)   // 缓冲后的内部信号
  16. );
  17. // 2) 外部时钟的缓冲:先通过IBUF,再送入BUFG实现全局分布
  18. IBUF ibuf_clk (
  19.     .I(CLK_IN),    // 外部时钟引脚
  20.     .O(clk_ibuf)   // IBUF输出的内部时钟
  21. );
  22. BUFG bufg_clk (
  23.     .I(clk_ibuf),  // BUFG输入连接IBUF的输出
  24.     .O(clk_bufg)   // BUFG输出作为全局时钟
  25. );
  26. // 3) 使用全局时钟(clk_bufg)对数据进行寄存,同步输出
  27. always @(posedge clk_bufg or negedge RST_N) begin
  28.     if (!RST_N)
  29.         DATA_OUT <= 1'b0;       // 异步复位:复位时输出清零
  30.     else
  31.         DATA_OUT <= data_buf;   // 时钟上升沿,将缓冲后的数据锁存到输出寄存器
  32. end
  33. endmodule
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表