【FPGA】FPGA中的缓冲与驱动那些事

举报
李锐博恩 发表于 2021/07/15 08:38:32 2021/07/15
【摘要】 目录   转载说明 原文精彩片段 缓冲: 驱动: 转载说明 为解决问题而学习才是由效率的,今天重新看了以前的那个项目的Verilog HDL程序,到现在我还没有弄明白细节,只有慢慢蚕食。看到了这样一串程序: generate genvar j; for(j=0;j<10;j=j+1): ibufds10 begin IBUFDS ibuf...

目录

 

转载说明

原文精彩片段

缓冲:

驱动:


转载说明

为解决问题而学习才是由效率的,今天重新看了以前的那个项目的Verilog HDL程序,到现在我还没有弄明白细节,只有慢慢蚕食。看到了这样一串程序:


  
  1. generate
  2. genvar j;
  3. for(j=0;j<10;j=j+1): ibufds10
  4. begin
  5. IBUFDS ibufds_inst1
  6. (
  7. .I(ad1_bp[j]),
  8. .IB(ad1_bn[j]),
  9. .O(ad_data_b[j])
  10. );
  11. end
  12. endgenerate

这都不是关键,我的注意点在于里面的那个IBUFDS,这个东西,说实话,我以前看FPGA的时候经常出现,我很头疼,不知道它到底是什么?我甚至今天还认为它是一个IP核,真是愚蠢至极!终于忍不住问了师兄,我记得之前他也和我讲过,看他的博客,可当时并没有特意去了解这个东西,时间也比较紧张,所以就没有侧重这东西。师兄说这是一个原语,并给我发了一篇它的博文,这才有点明白了。这里转载过来,以便查看。我看了一遍,觉得肯定不够,还得继续看下去,并且配合其他相关知识一起理解,这里也不禁感叹,同样是九年义务教育,为什么人家就这么优秀?

原文地址:【FPGA】FPGA的输入、输出、扇出的那些琐事

原文精彩片段

FPGA全局时钟资源一般使用全铜层工艺实现,并设计了专用时钟缓冲与驱动结构,从而使全局时钟到达芯片内部的所有可配置单元(CLB)、I/O单元(IOB)和选择性块RAM(Block Select RAM)的时延和抖动都为最小。

然后将那些原语分为两类:1 缓冲;2 驱动。

缓冲:

就是输入缓冲或者输出缓冲,这些缓冲主要用来片外输入时钟或者片外差分输入的信号处理,因为FPGA有对时钟的专门资源,同时也要保证时钟的精准,有效解决颤抖、延迟等问题,另外就是差分信号(包括差分时钟)进入片内之后不经过IBUFGDS、IBUFDS缓冲无法直接处理。另外对于时钟来说,时钟引脚的输入只能接IBUGDS缓冲器,IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接,与普通IO和其它内部CLB等没有物理连接。如果不用原语链接这两部分时钟信号无法到达芯片内部的CLB等资源,也就是无法使用。(补充:IBUGDS和时钟输入引脚为对应的,也就是IBUGDS的输入必须为时钟引脚,时钟引脚必须链接IBUFGDS。这段中IBUFGDS   也可以换成 IBUFG)   对了还有一个OBUFDS就是差分输出缓冲。

驱动:

驱动在时钟约束部分说过,当信号扇出过大是可以通过加BUFG来增加扇出,这里的BUFG就是全局缓冲,以BUFG为例,该原语的输入信号可以是IBUFGDS的输出也可以是逻辑信号的输出(内部信号),但是过一次BUFG有大约10ns的延时,但是通过BUFG之后输出到片内所有单元的延时可以忽略不计,另外一个典型的TTL逻辑门最多有10个扇出信号,而缓冲器可以驱动20到30个扇出信号,在这里可以理解为反相器,反相器一般情况下扇出较大。

    一般情况下IBUFGDS+BUFG或者IBUFG+BUFG可配套使用,当全局时钟扇出较少的时候可以不加BUFG。


    另外缓冲分为全局时钟缓冲和局部时钟缓冲,局部始终缓冲BUFH、BUFR,对于BUFH在Xilinx FPGA 学习笔记——时钟资源这篇文章中有写,可移步查看。(虽然我没用过局部时钟缓冲)另外在例化PLL或者MMCM这种时钟IP核时,要对输入输出时钟的类型进行选择,大家可以看到有BUFG和BUFH的下拉选项。


    IBUFDS、IBUFGDS和OBUFDS都是差分信号缓冲器,用于不同电平接口之间的缓冲和转换。IBUFDS 是差分输入的时候用,OBUFDS是差分输出的时候用,而IBUFGDS则是时钟信号专用的输入缓冲器。

    IBUFDS是一个输入缓冲器,支持低压差分信号(如LVCMOS、LVDS等)。在IBUFDS中,一个电平接口用两个独特的电平接口(I和IB)表示。一个可以认为是主信号,另一个可以认为是从信号。主信号和从信号是同一个逻辑信号,但是相位相反。


  
  1. IBUFDS instance_name (.O (user_O),
  2. .I (user_I),
  3. .IB (user_IB));

OBUFDS是一个输出缓冲器,支持低压差分信号。与IBUFDS对应:


  
  1. OBUFDS instance_name (.O (user_O),
  2. .OB (user_OB),
  3. .I (user_I));

IBUFGDS是一个连接时钟信号BUFG或DCM的专用的差分信号输入缓冲器。在IBUFGDS中,一个电平接口用两个独立的电平接口(I和IB)表示。一个可以认为是主信号,另一个可以认为是从信号。主信号和从信号是同一个逻辑信号,但是相位相反。


  
  1. IBUFGDS instance_name (.O (user_O),
  2. .I (user_I),
  3. .IB (user_IB));

原文链接:【FPGA】FPGA的输入、输出、扇出的那些琐事

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/81289891

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。