精华内容
下载资源
问答
  • 本文介绍一种充分利用FPGA内部的RAM资源,在FPGA内部实现异步FIFO模块的设计方法。这种异步FIFO比外部FIFO 芯片更能提高系统的稳定性。  1 FIFO的基本结构和工作原理  FIFO(First In First Out)是一种采用环形...
  • 本文介绍一种充分利用FPGA内部的RAM资源,在FPGA内部实现异步FIFO模块的设计方法。这种异步FIFO比外部FIFO 芯片更能提高系统的稳定性。  1 FIFO的基本结构和工作原理  FIFO(First In First Out)是一种采用环形...
  • 基于FPGA异步FIFO设计完整报告,发送 接收模块
  • FPGA内部具有丰富的存储单元,易于实现各种存储器(如FIFO、双口RAM等);另外,基于查找表的逻辑单元可用于实现各种数字信号处理(如滤波等),以辅助DSP处理器做各种预处理。  TI公司推出的高性能数字信号处理芯片...
  • 大侠们,江湖偌大,有缘相见,欢迎一叙,今天来聊一聊在数字电路设计中,基于FPGA异步FIFO的实现,在很多厂商的开发软件中都有异步FIFO IP核,为安全起见推荐使用IP核定制FIFO,本文的目的只是作为思路参考。...

    大侠们,江湖偌大,有缘相见,欢迎一叙,今天来聊一聊在数字电路设计中,基于FPGA的异步FIFO的实现,在很多厂商的开发软件中都有异步FIFO IP核,为安全起见推荐使用IP核定制FIFO,本文的目的只是作为思路参考。

    首先,我们来了解一下什么事FIFO,FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。

     

    分类以及用途

    可分为同步FIFO和异步FIFO,同步FIFO是指读时钟和写时钟为同一个时钟,在时钟沿来临时同时发生读写操作;异步FIFO是指读写时钟不一致,读写时钟是互相独立的。

    异步FIFO读写分别采用相互异步的不同时钟。在现代集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟,多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路。异步FIFO是这个问题的一种简便、快捷的解决方案,使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据。

    对于不同宽度的数据接口也可以用FIFO,例如单片机8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。

     

    FIFO的常见参数

    FIFO的宽度:即FIFO一次读写操作的数据位;

    FIFO的深度:指的是FIFO可以存储多少个N位的数据(假设宽度为N)。

    满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。

    空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。 

    读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。

    写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。

     

    读写指针的工作原理

    写指针:总是指向下一个将要被写入的单元,复位时,指向第1个单元(编号为0)。

    读指针:总是指向当前要被读出的数据,复位时,指向第1个单元(编号为0)。

     

    FIFO的“空”/“满”检测

    FIFO设计的关键:产生可靠的FIFO读写指针和生成FIFO“空”/“满”状态标志。

    当读写指针相等时,表明FIFO为空,这种情况发生在复位操作时,或者当读指针读出FIFO中最后一个字后,追赶上了写指针时,如下图所示:

    当读写指针再次相等时,表明FIFO为满,这种情况发生在,当写指针转了一圈,折回来(wrapped around)又追上了读指针,如下图:

    为了区分到底是满状态还是空状态,可以采用以下方法:

    在指针中添加一个额外的位(extra bit),当写指针增加并越过最后一个FIFO地址时,就将写指针这个未用的MSB加1,其它位回零。对读指针也进行同样的操作。此时,对于深度为2n的FIFO,需要的读/写指针位宽为(n+1)位,如对于深度为8的FIFO,需要采用4bit的计数器,0000~1000、1001~1111,MSB作为折回标志位,而低3位作为地址指针。

    如果两个指针的MSB不同,说明写指针比读指针多折回了一次;如r_addr=0000,而w_addr = 1000,为满。

    如果两个指针的MSB相同,则说明两个指针折回的次数相等。其余位相等,说明FIFO为空;

     

    二进制FIFO指针的考虑

    将一个二进制的计数值从一个时钟域同步到另一个时钟域的时候很容易出现问题,因为采用二进制计数器时所有位都可能同时变化,在同一个时钟沿同步多个信号的变化会产生亚稳态问题。而使用格雷码只有一位变化,因此在两个时钟域间同步多个位不会产生问题。所以需要一个二进制到gray码的转换电路,将地址值转换为相应的gray码,然后将该gray码同步到另一个时钟域进行对比,作为空满状态的检测。

     

    使用gray码进行对比,如何判断“空”与“满”

    使用gray码解决了一个问题,但同时也带来另一个问题,即在格雷码域如何判断空与满。

    对于“空”的判断依然依据二者完全相等(包括MSB);

    而对于“满”的判断,如下图,由于gray码除了MSB外,具有镜像对称的特点,当读指针指向7,写指针指向8时,除了MSB,其余位皆相同,不能说它为满。因此不能单纯的只检测最高位了,在gray码上判断为满必须同时满足以下3条:

    1.wptr和同步过来的rptr的MSB不相等,因为wptr必须比rptr多折回一次。

    2.wptr与rptr的次高位不相等,如上图位置7和位置15,转化为二进制对应的是0111和1111,MSB不同说明多折回一次,111相同代表同一位置。

    3.剩下的其余位完全相等。

     

    总体实现

    系统的总体框图如下:

    1) 顶层模块

    2)DualRAM模块

    3)同步模块

    a

    b

    4)空判断逻辑

    5)满判断逻辑

     

    大侠们,江湖偌大,继续闯荡!

    展开全文
  • 利用异步FIFO实现FPGA与DSP进行数据通信的方案。FPGA在写时钟的控制下将数据写入FIFO,再与DSP进行握手后,DSP通过EMIFA接口将数据读入。文中给出了异步FIFO的实现代码和FPGA与DSP的硬件连接电路。经验证,利用异步...
  • FPGA异步FIFO

    2021-04-15 20:54:16
    FPGA异步FIFO篇1 异步FIFO的用途1.1 解决读写时钟不一致的数据传输1.2 解决数据宽度不一致的接口问题2 异步FIFO的关键原理3 异步FIFO代码 1 异步FIFO的用途 异步FIFO的用途可以总结为两块: 1.1 解决读写时钟不...

    1 异步FIFO的用途

    异步FIFO的用途可以总结为两块:

    1.1 解决读写时钟不一致的数据传输

    异步FIFO读写分别采用相互异步的不同时钟。在现代集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟,多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路。异步FIFO是这个问题的一种简便、快捷的解决方案,使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据。

    1.2 解决数据宽度不一致的接口问题

    对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。

    2 异步FIFO的关键原理

    所谓异步FIFO,是指读写时钟不一致的FIFO,也就是读写操作是独立的,是分别在各自的时钟域内完成的。

    原型考虑<

    展开全文
  • FPGA异步FIFO设计中的问题与解决办法.PDF
  • 摘要:首先介绍异步FIFO的概念、应用及其结构,然后分析实现异步FIFO的难点问题及其解决办法;在传统设计的基础上提出一种新颖的电路结构并对其进行综合仿真和FPGA实现。  关键词:异步电路 FIFO 亚稳态 格雷码 ...
  • FPGA内部具有丰富的存储单元,易于实现各种存储器(如FIFO、双口RAM等);另外,基于查找表的逻辑单元可用于实现各种数字信号处理(如滤波等),以辅助DSP处理器做各种预处理。  TI公司推出的高性能数字信号处理芯片...
  • 异步fifo设计(FPGA)

    2021-01-19 17:12:35
    可以作为数据缓存 异步FIFO可以解决跨时钟域的问题,在应用时需根据实际情况考虑好fifo深度即可 本次要设计一个异步FIFO,深度为8,位宽也是8. 代码是学习Simulation and Synthesis Techniques for Asynchronous ...
  • 这篇代码主要讲一下异步...异步fifo设计因为读写所用的时钟不一致因而设计比较复杂,会涉及到读指针和写指针的同步化。 异步fifo设计主要要解决两个问题: 1)如何产生fifo的读写指针 2)如何判断fifo的空满状态
  • 在视音频嵌入解嵌系统中,嵌入音频、音频解嵌与音频转换成音频帧标准格式输出都是工作在不同的时钟频率下的。...针对这个问题,本文介绍了一种适合音频解嵌的高效异步FIFO,对通用异步FIFO进行了一些改
  • Verilog实现的异步FIFO

    2019-04-05 12:47:12
    Verilog实现的异步FIFO,不调用IP核,两级寄存器实现读写指针的同步,地址采用格雷码形式防止亚稳态
  • 基于FPGA异步FIFO设计与实现.pdf
  • 硬件采用Micron公司的1GB SODIMM DDR3 和Kintex-7系列FPGA的片上FIFO,软件通过研究DDR3的基本工作原理编写用户接口模块,同时结合片上FIFO的控制模块完成异步FIFO缓存系统的设计,通过改变异步FIFO的读写时钟就可以...
  • 摘要:FIFO经常应用于从一个时钟域传输数据到另一个异步时钟域...为解决异步FIFO设计过程中空满标志判断难以及FPGA亚稳态的问题,提出一种新颖的设计方案,即利用格雷码计数器(每次时钟到来仅有1位发生改变)表示读/写
  • 异步fifo的verilog实现

    2020-07-08 15:38:34
    该资源是实现了的通过异步fifo进行跨时钟域传输的vivado工程,在不同的时钟域进行fifo数据读写,并用读写地址的格雷码判断fifo空满产生空满标志。工程代码基于vivado2017.4,并在modelsim10.6上仿真成功。工程中附有...
  • 异步FIFO设计思路指导

    2019-02-20 13:08:56
    在大规模ASIC或FPGA设计中,多时钟系统往往是不可避免的,这样就产生了不同时钟域数据传输的问题,其中一个比较好的解决方案就是使用异步FIFO来作不同时钟域数据传输的缓冲区,这样既可以使相异时钟域数据传输的时序...
  • 首先介绍异步FIFO的概念、应用及其结构,然后分析实现异步FIFO的难点问题及其解决办法;在传统设计的基础上提出一种新颖的电路结构并对其进行综合仿真和FPGA实现。
  • FPGA跨时钟域异步FIFO设计,Vivado仿真工程
  • 江 苏 科 技 大 学 本 科 毕 业 设 计论文 学 专 院 业 学生姓名 班级学号 指导教师 二零壹叁年六月 江苏科技大学本科毕业论文 基于 FPGA异步 FIFO 设计 Asynchronous FIFO design based on FPGA 江苏科技大学...
  • 为了满足高速实时数据采集系统对所采集海量数据进行缓存的要求,通过研究FIFO的基本工作原理,利用FPGA和DDR2 SDRAM设计了一种高速大容量异步FIFO。使用Xilinx提供的存储器接口生成器(MIG)实现FPGA与DDR2的存储器...
  • 异步FIFO 结构及FPGA 设计 吴自信,张嗣忠. 单片机及嵌入式系统应用,2000摘要:首先介绍异步FIFO的概念、应用及其结构,然后分析实现异步FIFO的难点问题及其解决办法;在传统设计的基础上提出一种新颖的电路结构并对...

     

    异步FIFO 结构及FPGA 设计

    吴自信,张嗣忠. 单片机及嵌入式系统应用,2000  

    摘要:首先介绍异步FIFO的概念、应用及其结构,然后分析实现异步FIFO的难点问题及其解决办法;在传统设计的基础上提出一种新颖的电路结构并对其进行综合仿真和FPGA实现。

    1、异步FIFO介绍

    在现代的集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟。多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路。异步 FIFO(First In First Out)是解决这个问题一种简便、快捷的解决方案。使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据。在网络接口、图像处理等方面, 异步FIFO得到了广泛的应用。

    异步FIFO是一种先进先出的电路,使用在需要产时数据接口的部分,用来存储、缓冲在两个异步时钟之间的数据传输。在异步电路中,由于时钟之间周期和相位完全独立,因而数据的丢失概率不为零。如何设计一个高可靠性、高速的异步FIFO电路便成为一个难点。本文介绍解决这一问题的一种方法。

    由图1可以看出:整个系统分为两个完全独立的时钟域——读时钟域和写时间域;FIFO的存储介质为一块双端口RAM,可以同时进行读写操作。在写时钟域部分,由写地址产生逻辑产生写控制信号和写地址;读时钟部分由读地址产生逻辑产生读控制信号和读地址。在空/满标志产生部分,由读写地址相互比较产生空/满标志。
    异步FIFO结构框图

    2、异步FIFO的设计难点

    设计异步FIFO有两个难点:一是如何同步异步信号,使触发器不产生亚稳态;二是如何正确地设计空、满以及几乎满等信号的控制电路。

    下面阐述解决问题的具体方法。

    2.1 亚稳态问题的解决

    在数字集成电路中,触发器要满足setup/hold的时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q端的值是不确定的,并且在未知的时刻会固定到高电平或低电平。这个过程称为亚稳态(Metastability)。图2所示为异步时钟和亚稳态,图中clka和clkb为异步时钟。
    1_28123658.JPG

    亚稳态必定会发生在异步FIFO中。图中在异步FIFO中,电路外部的输入和内部的时钟之间是毫无时间关系的,因此setup/hold冲突是必然的;同在电路内部的两个没有关系的时钟域之间的信号传递,也必须会导致setup/hold冲突。

    虽然亚稳态是不可避免的,但是,下面的设计改进可以将其发生的概率降低到一个可以接受的程度。

    ①对写地址/读地址采用格雷码。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。对多个触发器的输出所组成的写地址/读地址可以采用格雷码。由于格雷码每次只变化一位,采用格雷码可以有效地减少亚稳态的产生。

    ②采用触发器来同步异步输入信号,如图3中的两极触发器可以将出现亚稳态的几率降低到一个很小的程度。但是,正如图3所示,这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意。
    1_28123629.JPG

    2.2 空/满标志的产生

    空/满标志的产生FIFO的核心部分。如何正确设计此部分的逻辑,直接影响到FIFO的性能。

    空/ 满标志产生的原则是:写满不溢出,读空不多读。即无论在什么进修,都不应出现读写地址同时对一个存储器地址操作的情况。在读写地址相等或相差一个或多个地址的时候,满标志应该有效,表示此时FIFO已满,外部电路应对FIFO发数据。在满信号有效时写数据,应根据设计的要求,或保持、或抛弃重发。同理,空标志的产生也是如此,即:

    空标志<=(|写地址-读地址|<=预定值)AND(写地址超前读地址)

    满标志<=(|写地址-读地址|<=预定值)AND(读地址超前写地址)

    最直接的做法是,采用读写地址相比较来产生空满标志。如图4所示,当读写地址的差值等于一个预设值的时候,空/满信号被置位。这种实现方法逻辑简单,但它是减法器形成的一个比较大的组合逻辑,因而限制了FIFO的速度。所以,一般只采用相等不相等的比较逻辑,避免使用减法器。
    1_28123607.JPG

    1_28123452.JPG

    图5 是另外一种常用的设计,比较器只对读写地址比较是否相等。在读写地址相等的时候有两种情况:满或者空。所以,附加了一个并行的区间判断逻辑来指示是空还是满。这个区间判断逻辑将整个地址空间分为几个部分,以指示读写地址的相对位置。这种做法提高了整个电路的速度,但是也有其缺点。主要是直接采用读写地址等于不等于的比较逻辑来进行空/满标志的判断,可以带来误判。

    3、新颖的FIF0空/满标志控制逻辑

    3.1 对读写地址的分析

    由以上对FIFO的分析可以看出,由地址直接相减和将地址相互比较产生空/满标志都不可取。如何简单地进行直接比较,又不提高逻辑的复杂程度呢?对地址加延时可以做到这一点。设读地址为Rd_bin_addr,用读地址Rd_addr产生读地址的格雷码Rd_next_gray_addr,将 Rd_next_gray_addr延一拍得到Rd_gray_addr,再将Rd_gray_addr延一拍得到Rd_last_gray_addr。在绝对时间上,Rd_next_gray_addr、Rd_gray_addr、Rd_last_gray_addr这些地址先后关系,从大到小排列,并且相差一个地址,如图6所示。
    1_28123426.JPG
    图6 经过延时后格雷码之间的关系

    写地址的格雷码的产生也与此类似,即:Wt_next_gray_addr、Wt_gray_addr、Wt_last_gray_addr。利用这6个格雷码进行比较,同时加上读写使能,就能方便而灵活地产生空/满标志。

    以空标志Empty的产生为例,当读写格雷码地址相等或者FIFO内还剩下一个深度的字,并且正在不空的情况下执行读操作,这时Emptr标志应该置为有效(高电平有效)。

    即EMPTY<=(Rd_gray_addr=Wt_gray_addr)and(Read_enable=1)或EMPTY<=(Rd_next_gray_addr=Wt_gray_addr)and(Read_enable=1)

    同理可类推满标志的产生逻辑。

    3.2 基于延时格雷码的FIFO标志产生逻辑

    1_28123146.JPG
    图7 是使用上述思想设计的地址产生和标志产生的逻辑。首先,在地址产生部分,将产生的格雷码地址加一级延时,利用其前一级地址与当前的读地址作比较。其次,在空/满标志有效的时候,采用了内部保护机制,不使读/写地址进一步增加而出现读写地址共同对一个存储单元操作的现象。

    3.3 仿真信号波形

    利用图7电路设计的思想构造了一个256×8的FIFO,用MODELSIM进行仿真。图8为系统中主要信号对读空情况的仿真波形。

    1_28123100.JPG

    图8 读空情况的仿真波形图
    图8 中,WDATA为写数据,RDATA为读数据,WCLK为写时钟,RCLK为读时钟,REMPTY为空信号,AEMPTY的几乎空信号,RPTR为读地址 WPTR为写地址,RGNEXT为下一位读地址格雷码,RBIN读地址二进制,RBNEXT为下一位读地址的二进制码。

    由图8可以看出,由于读时钟高于写时钟,读地址逐渐赶上写地址,其中由AEMPTY信号指示读地址和写地址的接近程度。当这个信号足够长而被触发器捕捉到时,真正的空信号REMPTY有效。

    4、电路优点的分析
    由图7可见,该电路最大的瓶颈为二进制到格雷码和比较器的延时之和。由于这两个组合逻辑的延时都很小,因此该电路的速度很高。经测试,在Xilinx的FPGA中,时钟频率可达140MHz。另外,由于将异步的满信号加了一级锁存,从而输出了可靠而稳定的标志。

    5、总结
    在实际工作中,分别用图4、图5与图7中所示的逻辑实现了一个256×8的FIFO。综合工具为SYNPLIFY7.0,由Foundation Series 3.3i布局布线后烧入Xilinx公司的WirtexEV100ECS144。三者的性能指标比较见表1。

    表1 三种不同设计的比较

    逻辑设计方式时钟频率/MHz有效结果输出频率/MHzslice数目/个
    图4所示逻辑16078.917
    图5所示逻辑1609215
    图7所示逻辑16014013


    由表1可知,图7所示的异步FIFO的电路速度高,面积小,从而降低了功耗,提高了系统的稳定性。

    转载于:https://www.cnblogs.com/asic/archive/2011/05/22/2053326.html

    展开全文
  • 在大规模ASIC或FPGA设计中,多时钟系统往往是不可避免的,这样就产生了不同时钟域数据传输的问题,其中一个比较好的解决方案就是使用异步FIFO来作不同时钟域数据传输的缓冲区,这样既可以使相异时钟域数据传输的时序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,716
精华内容 1,086
关键字:

fpga异步fifo设计