原创 FPGA研发之道(11)-设计不是凑波形(一)FIFO(上)

2014-7-14 21:52 3454 11 18 分类: FPGA/CPLD 文集: FPGA研发之道

FIFOFPGA内部一种常用的资源,可以通过FPGA厂家的的IP生成工具生成相应的FIFOFIFO可分为同步FIFO和异步FIFO,其区别主要是,读写的时钟是否为同一时钟,如使用一个时钟则为同步FIFO,读写时钟分开则为异步FIFO。一般来说,较大的FIFO可以选择使用内部BLOCK RAM资源,而小的FIFO可以使用寄存器资源例化使用。

    一般来说,FIFO的主要信号包括:

信号

数据信号

读信号

rd_en

读数据

dout

读空信号

empty

写信号

wr_en

写数据

din

写满信号

full

    实际使用中,可编程满的信号(XILINX FIFO)较为常用,ALTERAFIFO中,可以通过写深度(即写入多少的数据值)来构造其可编程满信号。通过配置threshold(门限)的值可以设定可编程满起效时的FIFO深度。

20140714214727301.jpg

 

     上图所示为FIFO的模型,可以看做一个漏桶模型,其中输入、输出、满信号、空信号、可编程满等信号如图所示,一目了然。 其中threshold信号可以看做水位线,通过此信号可以设置可编程满信号。FIFO的其他的信号也大都与其深度相关,如有特殊需求,可通过厂商提供的IP生成工具的图形界面进行选择使用。

     FIFO的使用场景有多种,其中主要如下所示:

(1)       数据的缓冲,如模型图所示,如果数据的写入速率高,但间隔大,且会有突发;读出速率小,但相对均匀。则通过设置相应深度的FIFO,可以起到数据暂存的功能,且能够使后续处理流程平滑,避免前级突发时,后级来不及处理而丢弃数据。

(2)       时钟域的隔离。对于不同时钟域的数据传递,则数据可以通过FIFO进行隔离,避免跨时钟域的数据传输带来的设计与约束上的复杂度。

    FIFO设计中有两个需要注意事项,首先,不能溢出,即满后还要写导致溢出,对于数据帧的操作来说,每次写入一个数据帧时,如果每写一个宽度(FIFO的宽度)的数据,都要检查满信号,则处理较为复杂,如果在写之前没满,写过程不检查,则就容易导致溢出。因此可编程满的设定尤为必要,通过设置可编程满的水位线,保证能够存储一个数据帧,这样写之前检查可编程满即可。

其次,另一更容易出错的问题,就是空信号。对于FIFO来说,在读过程中出现空信号,则其没有代表该值没有被读出,对于读信号来说,如设定读出一定长度的值,只在一开始检测非空,如状态机的触发信号,容易出现过程中间也为空的信号,会导致某些数据未读出,特别是写速满而读速快的场景下。 因此rden!empty信号要一起有效才算将数据读出。

空信号处理相对容易出错,懒人自有笨方法,下面介绍一种应用于数据帧处理的FIFO使用方式,只需在读开始检测空信号即可,可以简化其处理读数据的流程:

20140714214802539.jpg

     其处理结构如上图所示,数据缓存以大FIFOBLOCK RAM实现)为主,而每存储完毕一个数据帧向小FIFO(寄存器实现)内写入值。当小FIFO标示非空时,则标示大FIFO中已存储一个整帧。则下一级模块可以只需检测小FIFO非空时,从而读出一个整帧,过程中大FIFO一直未非空,可以不用处理非空信号,从而简化设计和验证的流程。

      此外还有FIFO其他应用方式,下节接着介绍。(未完待续)

PARTNER CONTENT

文章评论7条评论)

登录后参与讨论

用户377235 2015-5-5 16:06

写的很不错,学习了

用户1774390 2014-7-20 23:10

对于网络数据包整包传输提供了一个很好的解决方案!继续加油!

用户1763807 2014-7-20 17:04

首先谢谢作者的分享,然后真的谢谢作者的分享!感谢大家智慧的分享!

用户1774275 2014-7-19 10:21

楼主好有才啊。继续关注。

用户377235 2014-7-19 09:34

谢谢大家,有问题欢迎交流啊

用户1516610 2014-7-17 17:28

感谢作者,我现在也准备学FPGA

用户1616109 2014-7-15 13:59

作者介绍的很形象啊,易于理解。 是广大FPGA爱好者的福音啊。 希望继续加油。
相关推荐阅读
阿昏豆 2015-11-21 23:25
把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现
把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现   目前,存储领域包括eMMC,SATA SSD ,PCIe SSD等控制器是一个非常热门的领域。通常,由于...
阿昏豆 2015-11-09 22:25
平行宇宙的追逐--异步FIFO控制器的设计
  平行宇宙的追逐--异步FIFO控制器的设计。    在逻辑设计中,通常会用到异步FIFO,异步FIFO控制器是经典的异步信号传输的范例,通过FIFO控制器与异步双端口RAM的组合实现数据的...
阿昏豆 2014-08-23 23:36
FPGA研发之道(25)-管脚
     管脚是FPGA重要的资源之一,FPGA的管脚分别包括,电源管脚,普通I/O,配置管脚,时钟专用输入管脚GCLK等。 (1)电源管脚:    通常来说: FPGA内部的电压包括...
阿昏豆 2014-08-10 22:22
FPGA研发之道(24)-控制(下)
   首先依次回答上篇提出的几个问题:       第一个问题:如何避免状态机产生lacth 示例如下,通过在always(*)语句块中,添加默认赋值,ns_state = cs_state; alw...
阿昏豆 2014-08-07 21:53
FPGA研发之道(23)-控制(上)
本质上说,FPGA的模块设计就是将输入转化成想要得到的输出结果。而除了某些简单模块,即在当拍内完成,即将输入进行逻辑操作后,再输出。(如简单加法器等)。其余大部分的设计需要通过时序逻辑和组合逻辑混合实...
阿昏豆 2014-08-06 23:12
FPGA研发之道(23)-控制(上)
本质上说,FPGA的模块设计就是将输入转化成想要得到的输出结果。而除了某些简单模块,即在当拍内完成,即将输入进行逻辑操作后,再输出。(如简单加法器等)。其余大部分的设计需要通过时序逻辑和组合逻辑混合实...
EE直播间
更多
我要评论
7
11
关闭 站长推荐上一条 /3 下一条