异步FIFO的设计与实现
出处:电子产品世界 发布于:2011-06-23 18:17:26
FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
当数据从一个时钟驱动的模块进入另一个时钟驱动的模块时,未读走数据有可能被新数据覆盖,因而导致数据丢失。为了解决这个问题,就必须增加一些控制信号和状态信号,控制信号如pusb、pop,状态信号。
功能描述
当FIFO中有数据而非空时,POP信号(同步于读时钟)用于控制数据的读出,所读数据来自读指针所指的(AUAL PORT RAM)中的存储单元,并且读指针加一。当读指针赶上写指针时,FIFO为空并且用empty信号(同步于读时钟)来指示这种情况。
当FIFO中有空间而非满时,PUSH信号(同步于写时钟)用于控制数据的写入,所写数据写入写指针所指的双端口RAM中的存储单元,并且写指针加一。当写指针赶上读指针时,FIFO为满足并且用full信号(同步于写时钟)来指示这种情况。
当FIFO中只剩不足三个数据时,almost-empty有效(同步于读时钟)。类似地,当FIFO中还有不足四个空位时almost-full将有效(同步于写时钟)。用户可根据需要修改读、写侧的计数器初始值,从而确定所需要的almost-empty和almost-full提前量。例如当计数器初始化为7时,almost-empty和almost-full将分别比empty和full提前7个位置。读侧和写侧的状态机将根据内部比较器的输出来确定这些状态信号。每侧的状态机都有两上D触发器,构成双同步,这样的设计可大幅度提高系统的可靠性,使得平均元故障时间(MTBF)可大于100年。
结构
图1为AsynFIFO的顶层设计框图(Quicklogic提供全部设计文件),并给出了各相模块的设计文件名。图中各模块可根据要求修改,以增加FIFO的宽度和深度。请注意,本文图中没有给出读侧和写侧的状态机。
RAM块
图1中用了一个64×32的RAM块。该RAM块由Verilog代码定义,该代码由SpDE内的RAM/ROM/FIFO向导自动产生。在向导中用户可自由指定所需的宽度和深度,向导自动产生所需的Verilog/VHDL代码和原理图中所需的symbol。
比较器
当用户修改了RAM块的深度时,比较器的宽度也要与之对应。例如当FIFO深度为256时,地址须为8位,因而是比较器也应为8位。
格雷码计数器
为了提高MTFB,设计中采用了格雷码计数器,该计数器为5位,采用Verilog/VHDL语言实现。它们可以被改成6位、7位、8位、9位,以对应深度为64、128、256、512的FIFO。
锁存器
图中的锁存器为verilog/VHDL语言所写,读侧有三个,写侧有一个,用户可自由地修改其宽度。它们用于状态、控制信号的产生。
性能
RARTS:QuickRAM family
AREA:48 buffer cells
Speed:write colck(WCLK)=136MHz,read clock(RCLK)=129MHz
结论
本文主要研究了用FPGA芯片实现异步FIFO的一种方法。详细阐述了空,满标志信号的产生方法。按照以上思想所设计的异步FIFO已经在实际电路中得到了应用。实践证明他可以解决大多数异步FIFO电路常见的错误。同时增加了系统的可靠性和应用灵活性。
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- ADI 即插即用型 D 类放大器的卓越特性与优势2025/8/8 16:36:07
- 深入解析共集、共基、共射放大器的奥秘2025/8/2 10:49:20
- 线性霍尔 IC 全解析:原理、应用与优势2025/7/25 16:16:43
- 模拟音频耳机和数字音频耳机的区别2025/7/17 17:19:59
- ATA-7020 高压放大器:铁电畴反转研究的关键利器2025/7/11 16:22:16