基于FPGA的异步FIFO设计与实现

基于FPGA的异步FIFO设计与实现

王伟国;张振东

【摘要】随着现代数字电路系统密度和规模的不断扩大,一个系统中通常会包含多个时钟,因此不同时钟之间的数据传输成为亟待解决的问题.而一种可靠易行的解决方案就是异步FIFO.异步FIFO需要非常严格的多时钟技术,难以作出正确的设计合成和分析.本文提出了一种利用格雷码作为读写地址计数器的异步FIFO的设计方法,有效的避免了数据在不同时钟时间传输时遇到的亚稳态问题.并给出了综合仿真结果.%With the expanding of the density and scale of modern digital circuitry,a system will contain multiple clock.Therefore,the transfer of data between different clock becomes a serious problem needs to be solved.A reliable and feasible solution is asynchronous FIFO.Asynchronous FIFO require very strict clock technology,it is difficult to make the correct design of synthesis and analysis.This paper presents a design method of asynchronous FIFO which based on read/write counter in terms of gray code.This method effectively avoid the metastable state in the data transmission between different clock and given a comprehensive simulation results.

【期刊名称】《聊城大学学报(自然科学版)》

【年(卷),期】2012(025)003

【总页数】6页(P79-84)

【关键词】多时钟;异步fifo;verilog;HDL;格雷码

【作者】王伟国;张振东

【作者单位】中国科学院长春光学精密机械与物理研究所,吉林长春130033;中国科学院长春光学精密机械与物理研究所,吉林长春130033/中国科学院研究生院,北京100039

【正文语种】中文

【中图分类】TN433

0 引言

随着现代数字电路系统的实时数据处理能力的不断提高,逻辑电路的复杂程度和内核处理器的运算速度也快速增长,在使得一些复杂算法得以实现的同时也加剧了快速CPU与慢速外设之间的冲突.异步FIFO大量数据缓存的能力成功的解决了这一问题,但专用的高速异步FIFO芯片价格昂贵,且容量受限,随着现场可编程逻辑器件容量和速度的不断提高,利用现场可编程逻辑器件设计异步FIFO成为可行的方法.本文首先讨论了异步FIFO设计中经常出现的亚稳态问题和二进制计数器多位同时改变的问题,并给出解决办法,然后讨论了两种格雷码计数器的形式并作出比较,最后给出一种以格雷码为读写地址计数器的异步FIFO的设计方法和在设计异步FIFO时必须要注意的细节.

1 多时钟电路中的亚稳态问题

在一个时序电路中,合理的建立时间和保持时间是触发器正常工作的前提条件.对于下降沿触发的触发器而言,下降沿触发之前输入数据持续的最短时间是建立时间(setup time),下降沿触发之后输入数据持续的最短时间是保持时间(hold time).当电路时序不能满足setup time/hold time的要求时,系统时序就会出

现混乱.在异步时序电路中,不同时钟之间是不存在任何关系的,必然会产生建立

时间和保持时间冲突.解决系统时序问题常用双锁存器法如下图1所示,即在不同

时钟之间传输数据时连续锁存两次.但是这种方法只是保证了电平的稳定,而在实

际的系统中还需要FIFO作为不同时钟之间传输多位数据的接口.

图1 避免亚稳态出现的双锁存器法

2 异步FIFO指针

对于同步FIFO来说,使用一个计数器计算读出和写入到FIFO缓存器中的数据量,计数器在只有写没读是递增,只读没写是递减,既读又写和没读也没写时保持不变.当计数器到达设定值时FIFO满信号置位,为零时空信号置位.

在异步FIFO中,由于这种计算数据个数增减的计数器会被两个不同的时钟控制,因此这种计数器不能使用.所以,为了决定FIFO“空”和“满”状态,读指针和写指针必须相互比较.

设计FIFO最主要的困难是生成FIFO指针和找到一个决定FIFO“空”和“满”状态的可靠方法.在FIFO设计中,读指针和写指针总是指向下一个要读和写的地址空间.当读或写操作完成后指针自动递增,当FIFO是空时读指针和写指针相等,当FIFO满时读指针和写指针也是相等.一种解决的方法是增加一个多余的MSB位来

区分两种状态,当写指针递增超过地址范围时,写指针会递增MSB位,其他位清零,读指针同样也是.当读指针和写指针的MSB位不同时,意味着写指针比读指针多走了一圈,当MSB位相同时意味着走的圈数相等(如图2所示)

图2 增加多余MSB后区分FIFO空和FIFO满的方法示意图

当FIFO存储缓冲区需要(n-1)位地址时,地址指针用n位,当指针相等(包括MSB位)时空标志置位,当指针低(n-1)位相等且MSB位不等时满标志置位.

2.1 二进制FIFO指针的情况

二进制地址计数量会有多个位同时变化,因此在把二进制量在不同时钟域之间同步

时会出现问题.一个解决的方法是取样并把周期计数量寄存在一个保持寄存器中,

并发出一个ready信号,新时钟域收到信号并发出确认信号,这样变化的计数量

就安全的传送到新时钟域.

用这种方法不会产生上溢和下溢,因为当读指针递增到与写指针相等时,空信号置位,取样的写指针不反映当前写指针的值,而是小于当前值,故永远不能产生下溢,满信号也是如此.最常用的解决方法是用格雷码计数器,格雷码在每个时钟只有一

位变换可以极大的减少在同步计数时错误的发生.

3 格雷码计数器

设计格雷码计数器的方法有很多,这里介绍二种简单直接的方法.下面详细介绍两

种方法.

3.1 格雷码计数器中的问题

为了更好的理解把n-bit计数器转换成(n-1)-bit计数器时出现的问题,先考虑一下一个双重4-bit和3-bit格雷码计数器的例子如图3.

图3 4-bit格雷码计数器示例及转换成3-bit格雷码时出现的问题

在4-bit计数器中除了MSB位其余位关于中间对称,我们把2nd MSB位反相后,上半部分与下半部分的LSBs便相等.但是经过反相操作后整体便不是格雷码了,例如15(1100)到0(0000)的转变过程有两个bits变化,在下面的第一种格雷

码计数器中会有解决方法.

3.2 第一种格雷码计数器

图4是第一种计数器的框图并是双重格雷码计数器中两个bits同时跳变的解决方法.其中假设输出寄存器的值是格雷码(ptr),此格雷码被输出到格雷码到二进制的转换器中,然后通过一个有条件递增的加法器并输出下一个格雷码值(gnext),连接到输出寄存器的输入端,如框图上半部分所示.(n-1)-bit格雷码简单地通

过n-bit格雷码的2个MSBs的异或操作产生,(n-2)个LSBs不变.

图4 第一种格雷码计数器示意图及其如何避免了两位同时跳变问题

3.3 第二种格雷码计数器

此种风格的格雷计数器(如图5所示)用了两组寄存器避免了把格雷码转换成二进制数的步骤.而且第二组寄存器也可以直接用来寻址FIFO存储器.n-bit格雷码指针仍然需要同步到不同的时钟域中.二进制指针可以更容易的通过计算产生“几乎满”和“几乎空”信号.因此在本论文的设计中用此种风格的格雷码计数器.

图5 第二种格雷码计数器工作示意图

4 总体设计及“空”和“满”信号的产生

总体设计如图6所示,本设计方案共有四个模块,双口RAM模块,读控制模块,写控制模块,格雷码同步模块.写控制模块主要是当写使能信号有效且写满信号无效时产生写地址并实行地址递增功能,读控制模块实现相似功能,双口RAM模块用来使缓冲数据其读写动作可同时进行.

4.1 “空”和“满”信号的产生

“空”信号的产生比较简单,只需同步到读时钟域的写地址格雷码与n-bit的读指针的格雷码完全相等即可代码如下

图6 异步FIFO总体设计框图及其信号说明

但是,“满”信号的产生就没那么容易,简单地用n-bit格雷码作比较判断“满”信号是不可靠的.因为格雷码除了MSB位外是对称的如图3所示.在图3中假如写指针和读指针都指向地址7,此时写指针递增一次后,写指针指向地址8,读指针和写指针相比较,除了MSB位不同外其余各位均相等,满信号此时有效,但这是不符合实际情况的,错误的.

这也是为什么在图4中应用双重n-bit格雷码计数器的一个原因.正确判断满信号的条件是:读写指针的n-bit格雷码的前两个MSBs都不相等,其余的写指针和同

步读针相等.代码如下

4.2 不同时钟速度

因为异步FIFO被两个不同的时钟控制,很明显两个时钟运行在不同的速度下.当把较快的时钟同步到较慢的时钟时,会有一些计数值被跳过.当被同步的格雷码递增两次只被取样一次时也不会出现亚稳态问题,因为亚稳态出现在同步时钟上升沿附近有多位同时跳变时,而在两个同步时钟沿之间有格雷码跳变两次,第一次跳变距离同步时钟条边沿较远,只有第二次跳变在同步时钟沿附近,故不会产生亚稳态.当较快的格雷码计数器在较慢时钟沿之间递增多于一次,不会出现已经溢出却没有检测到的现象,因为同步到写时钟域的读指针滞后于当前的读指针,而写指针只会小于或等于同步读指针,故不会出现溢出.

5 设计仿真及总结

本设计采用Xilinx公司Spartan3A系列的XC3S1400A,封装时PG484,速度是-4,仿真器是ISE Simulator(VHDL/Verilog),硬件描述语言是Verilog,开发工具是ISE.最后对电路进行时序分析,结果为该FIFO运行速度可达到

90.63MHz.

wclk、rclk时钟周期分别为:75MHz、80MHz.先向FIFO中写入18个数据,当第16个数据被读入后wfull立即被置位如下图7.

图7 写满仿真结果

同时向FIFO中写入和读出数据,由于wptr要经过两个读周期才能同步到读时钟域,故在waddr递增后的第二个rclk的上升沿rempty才清零如下图8所示.

本文对异步FIFO的结构和重要时序问题给予了详细的阐述,并得到了可靠的仿真结果.在高速数据采集系统中,采用高性能FPGA作为数据预处理和高速异步FIFO 作为数据采集缓存的应用都十分广泛.把FIFO集成在FPGA中简化了电路设计的

复杂程度,增加了电路的集成化程度和可靠性,是未来高速数据采集系统的重要发展方向.

图8 同时写入读出时的仿真结果

参考文献

【相关文献】

[1] Clifford E.Cummings,Synthesis and Scrip ting Techniques for De signing Multi-Asynchronous Clock Designs[A].SNUG-2001,2001(3):2-8.

[2]吴自信,张嗣忠.异步FIFO结构及FPGA设计[J].单片机及嵌入式系统应用,2000,22(3):1.

[3]赵雅兴.FPGA原理、设计与应用[M].天津:天津大学出版社,1999.

[4]夏宇闻.数字系统设计-Verilog实现[M].北京:高等教育出版社,2006.

[5]王金明.Verilog HDL程序设计教程[M].北京:人民邮电出版社,2004.

quartus 异步fifo用法

quartus 异步fifo用法 在Quartus中使用异步FIFO,可以通过IP Core Catalog中的"ALTAsyncFIFO"来实现。以下是使用异步FIFO的步骤: 1. 打开Quartus Prime软件。点击"File"菜单,选择"New Project"来创建一个新的项目。 2. 在"New Project Wizard"中,选择项目的名称、储存位置和顶层实体的文件。点击"Next"继续。 3. 在"Add Files"步骤中,添加设计文件,包括顶层实体和其他组件文件。点击"Next"继续。 4. 在"Family and Device Settings"步骤中,选择您的目标FPGA 器件。点击"Next"继续。 5. 在"EDA Tool Settings"步骤中,选择Quartus使用的EDA工具。点击"Next"继续。 6. 在"Summary"步骤中,查看项目设置的摘要。点击"Finish"完成项目创建。 7. 在Quartus主界面的左侧面板中,点击"IP"选项卡,然后选择"Library"。在IP Core Library窗口中,搜索"ALTAsyncFIFO"。 8. 在搜索结果中,选择"ALTAsyncFIFO"并点击"OK"来添加该

IP到项目中。 9. 在设计文件中实例化ALTAsyncFIFO组件。可以使用Quartus的"IP Catalog"来生成实例化代码。 10. 配置ALTAsyncFIFO的参数,包括FIFO大小、输出宽度、寄存器位宽等。 11. 连接适当的信号到ALTAsyncFIFO组件的输入和输出端口。 12. 运行Quartus中的"Analysis & Synthesis"和"Implementation" 工具,以生成逻辑网表和比特流文件。 13. 下载比特流文件到FPGA器件,并验证异步FIFO的功能。 注意:在使用异步FIFO时,需要特别注意时序设计和异步信 号的同步,以确保正确的数据传输和避免异步冲突。

(完整版)异步FIFO设计

异步FIFO设计文档 一、概述 在大规模ASIC或FPGA设计中,多时钟系统往往是不可避免的,这样就产生了不同时钟域数据传输的问题,其中一个比较好的解决方案就是使用异步FIFO来作不同时钟域数据传输的缓冲区,这们既可以使相异时钟域数据传输的时序要求变得宽松,也提高了它们之间的传输效率。此文内容就是阐述异步FIFO的设计。 二、设计原理 2.1结构框图 Fig. 2.1.1 如上图所示的同步模块synchronize to write clk,其作用是把读时钟域的读指针rd_ptr采集到写时钟(wr_clk)域,然后和写指针wr_ptr进行比较从而产生或撤消写满标志位wr_full;类似地,同步模块synchronize to read clk 的作用是把写时钟域的写指针wr_ptr采集到读时钟域,然后和读指针rd_ptr进行比较从而产生或撤消读空标志位rd_empty。 另外还有写指针wr_ptr和写满标志位wr_full产生模块,读指针rd_ptr和读模块。RAM产生模块,以及双端口存储rd_empty空标志位 2.2 二进制计数器存在的问题 异步FIFO读写指针需要在数学上的操作和比较才能产生准确的空满标志位,但由于读写指针属于不同的时钟域及读写时钟相位关系的不确定性,同步模块采集另一时钟域的指针时,此指针有可能正处在跳变的过程中,如图Fig.2.2.1所示,那么采集到的值很有可能是不期望的值,当然,不期望的错误结果也会随之发生。

Fig. 2.2.1 上图中,rd_ptr2sync 3和4以及4和5之间的中间态是由于到各寄存器的时钟 rd_clk存在偏差而引起的。二进制的递增操作,在大多数情况下都会有两位或者两以上的bit位在同一个递增操作内发生变化,但由于实际电路中会存在时钟偏差和不同的路径延时,二进制计数器在自增时会不可避免地产生错误的中间结果,如图Fig.2.2.2。 Fig.2.2.2 上升沿到达rd_clk的电路原型以及局部波形的放大。由于Fig.2.2.1上图是 三寄存器的时间各不相同,这就导致了rd_ptr2sync的值从3'b011跳变3'b100的过程中经历了3'b111和3'b101,直到最后一个时钟(rd_clk0)沿的到来rd_ptr2sync 才跳变到正确结果3'b100。中间结果的持续的时间虽然相对短暂,但是这些不正确的结果完全有可能被其它时钟域的同步模块采集到而产生错误的动作,见上图。由此可见,要避免中间结果的产生,其中一个可行的方案就是使被同步模块采集的数据递变时,每次只有一个bit位发生改变。格雷码计数器就是一个不错的选择。 2.3 格雷码计数器的实现 2.3.1 格雷码的表现形式 格雷码一个最大的特点就是在递增或递减的过程中,每次只变化一位,这是它最大的优点。同时它也有自己的局限性,那就是循环计数深度必须是2的n次幂,否则就失去了每次只变化一位的特性。深度为16的二进制及格雷码递变表如下:Binary Gray 0 0000 0000

异步fifo程序

高速异步FIFO的设计与实现 摘要:本文主要研究了用FPGA芯片实现异步FIFO的一种方法。通过对FPGA芯片内部EBRSRAM的深入研究.提出了一种利用格雷码对地址进行编码的异步FIFO设计方案。实践证明.增加了系统可靠性和应用灵活性。 引言 现代集成电路芯片中,随着设计规模的不断扩大.一个系统中往往含有数个时钟。多时钟带来的一个问题就是,如何设计异步时钟之间的接口电路。异步FIFO(First In First Out)是解决这个问题的一种简便、快捷的解决方案。使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据.在网络接口、图像处理等方面,异步FIFO都得到广泛的应用。异步FIFO是一种先进先出的电路,使用在数据接口部分,用来存储、缓冲在两个异步时钟之间的数据传输。在异步电路中,由于时钟之间周期和相位完全独立,因而数据的丢失概率不为零。如何设计一个可靠性高、速度高的异步FIFO电路便成为一个难点。 1 异步FIFO的工作原理及逻辑框图 本文根据实际工作的需要.给出了一种利用片内RAM构造FIFO器件的设计,重点强调了设计有效.可靠的握手信号FULL和EMPTY的方法。并在LATTICE公司的FPGA芯片LFXP2-5E上实现。LFXP2-5E属于LATIICE 公司XP2系列的一款,他采用优化的FlexiFLASH结构。内部包含有基于查找表的逻辑、分布式和嵌入式存储器,锁相环(PLL)。工程预制的源同步I/0以及增强的Sys DSP块。有166Kbits的EBRSRAM。利用其内部的EBRSRAM可以实现一定容量的异步FIFO.而无需单独购买FIF0器件。 由图1可以看出:异步FIFO一般由四个模块构成:数据存储单元,写地址产生模块,读地址产生模块,标志位产生模块。整个系统分为两个完全独立的时钟域—读时钟域和写时钟域:在写时钟域部分由写地址产生逻辑产生写控制信号和写地址:读时钟域部分,由读地址产生逻辑产生读控制信号和读地址;在标志位产生模块部分,由读写地址相互比较产生空/满标志。异步FIFO的操作过程为:在写时钟的上升沿.当写使能有效时,将数据写入到双口RAM中写地址对应的位置中:在读时钟的上升沿,当读使能有效时。则按先进先出顺序读出数据。在FIFO写满或读空的情况下。分别对满标志FuLL或空标志EMPTY信号置位。来表示FIFO的两种特殊状态。

高速异步FIFO的设计与仿真毕业设计

华中科技大学文华学院 毕业设计(论文) 题目:高速异步FIFO的设计与仿真 学生姓名:孙光源学号: 080110011111 学部(系):信息学部电子科学与技术系 专业年级:电子科学与技术2008级 指导教师:雷鑑铭职称或学位:副教授 2012 年5 月13日

摘要 (4) ABSTRACT (5) 第一章绪论 (6) 1.1 FIFO的研究背景与意义 (6) 1.2本文的设计任务 (7) 1.3本文的主要工作和论文安排 (7) 第二章主要问题分析以及解决方案 (8) 2.1如何避免亚稳态产生 (9) 2.1.1 同步器 (9) 2.1.2 格雷码计数器 (9) 2.2空满标志如何正确的产生 (11) 2.3小结 (11) 第三章EDA开发环境介绍 (12) 3.1硬件描述语言 (12) 3.2M ODELSIM +S YNPLIFY +DC开发环境 (13) 3.2.1 Modelsim (13) 3.2.2 逻辑综合和综合工具Synplify (14) 3.2.3 Design complier简介 (15) 3.3设计方法 (16) 3.4本章小节 (17) 第四章高速异步FIFO的设计 (18) 4.1写指针控制模块 (18) 4.1.1 重要部分代码: (18) 4.1.2 结构图: (19) 4.1.3 仿真结果 (19) 4.2读指针控制模块 (19) 4.2.1 其中重要部分代码: (19) 4.2.2 结构图 (20) 4.2.3 仿真结果 (20) 4.3双端口SRAM模块 (21) 4.3.1.结构图 (21) 4.3.2 仿真图 (22) 4.4空满信号生成电路 (22) 4.4.1 重要部分代码 (23) 4.4.2.结构图 (24) 4.4.3.仿真图 (24) 4.5结束语 (25) 第五章系统的仿真和测试 (26)

基于FPGA的异步FIFO设计与实现

基于FPGA的异步FIFO设计与实现 王伟国;张振东 【摘要】随着现代数字电路系统密度和规模的不断扩大,一个系统中通常会包含多个时钟,因此不同时钟之间的数据传输成为亟待解决的问题.而一种可靠易行的解决方案就是异步FIFO.异步FIFO需要非常严格的多时钟技术,难以作出正确的设计合成和分析.本文提出了一种利用格雷码作为读写地址计数器的异步FIFO的设计方法,有效的避免了数据在不同时钟时间传输时遇到的亚稳态问题.并给出了综合仿真结果.%With the expanding of the density and scale of modern digital circuitry,a system will contain multiple clock.Therefore,the transfer of data between different clock becomes a serious problem needs to be solved.A reliable and feasible solution is asynchronous FIFO.Asynchronous FIFO require very strict clock technology,it is difficult to make the correct design of synthesis and analysis.This paper presents a design method of asynchronous FIFO which based on read/write counter in terms of gray code.This method effectively avoid the metastable state in the data transmission between different clock and given a comprehensive simulation results. 【期刊名称】《聊城大学学报(自然科学版)》 【年(卷),期】2012(025)003 【总页数】6页(P79-84) 【关键词】多时钟;异步fifo;verilog;HDL;格雷码

在FPGA上实现自行FIFO设计的方法

在FPGA上实现自行FIFO设计的方法 设计工程师通常在FPGA上实现FIFO(先进先出寄存器)的时候,都会使用由芯片提供商所提供的FIFO。但是,由于其通用性使得其针对性变差,某些情况下会变得不方便或者将增加硬件成本。此时,需要进行自行FIFO设计。本文提供了一种基于信元的FIFO设计方法以供设计者在适当的时候选用。这种方法也适合于不定长包的处理。FIFO在数字通讯芯片领域中有两个主要的作用,缓冲数据和隔离时钟。对于FIFO的设计,最关键的问题是如何实现RAM的读写双方的信息交换。一般情况下,设计者都直接调用厂商为自己的FPGA专门打造的FIFO核。基本单元是FIFO所使用的RAM的一次读写操作的最小单元,如一个字节,一个字或者是一个双字。所谓操作粒度,即FIFO的读写双方的信息交换是基于这些基本单元。 ATM应用中的FIFO设计 以ATM的设计为例,在ATM的相关设计中,设计者则更多希望一个FIFO对外给出的信息是“现在FIFO中还剩下几个信元”。要实现这一功能通常有两种方法: 1. 调用厂商提供的以操作粒度为基本单元的通用FIFO,然后在这个FIFO的外面再加上一个“套子”。这个套子里面设计一些计数器,根据计数内容对外提供相应的信息。 2. 设计操作粒度为信元的定制FIFO。这样对外直接提供设计者最希望得到的信息,即FIFO中还有多少个信元。 设定FIFO最多可以存放4个信元。基本单元为字节,因此RAM的数据宽度为8位,一个信元的长度为53字节。 把RAM分成4个信元区域,读写地址的高二位指明信元区域,低六位指明信元区域内的字节地址,这样组合成8位读写地址。读写双方的信息交换是互相通知对方还有多少个信元在FIFO中。读写双方都拥有自己的记分牌(Scoreboard),这个记分牌可以由一个四位的寄存器来实现,每一位对应一个信元区域。当一个信元区域中有一个完整的信元的时候,记分牌的相应的寄存器被设置为‘1’,否则为‘0’。读出方读出一个信元,修改自己记分

异步FIFO结构及FPGA设计

异步FIFO结构及FPGA设计 摘要:首先介绍异步FIFO地概念、应用及其结构,然后分析实现异步FIFO地难点问题及其解决办法;在传统设计地基础上提出一种新颖地电路结构并对其进行综合仿真和FPGA实现. 关键词:异步电路FIFO 亚稳态格雷码 1 异步FIFO介绍 在现代地集成电路芯片中,随着设计规模地不断扩大,一个系统中往往含有数个时钟.多时钟域带来地一个问题就是,如何设计异步时钟之间地接口电路.异步FIFO(First In First Out)是解决这个问题一种简便、快捷地解决方案.使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据.在网络接口、图像处理等方面,异步FIFO得到了广泛地应用. 异步FIFO是一种先进先出地电路,使用在需要产时数据接口地部分,用来存储、缓冲在两个异步时钟之间地数据传输.在异步电路中,由于时钟之间周期和相位完全独立,因而数据地丢失概率不为零.如何设计一个高可靠性、高速地异步FIFO电路便成为一个难点.本文介绍解决这一问题地一种方法. 图1是异步FIFO地结构框图. 由图1可以看出:整个系统分为两个完全独立地时钟域——读时钟域和写时间域;FIFO地存储介质为一块双端口RAM,可以同时进行读写操作.在写时钟域部分,由写地址产生逻辑产生写控制信号和写地址;读时

钟部分由读地址产生逻辑产生读控制信号和读地址.在空/满标志产生部分,由读写地址相互比较产生空/满标志. 2 异步FIFO地设计难点 设计异步FIFO有两个难点:一是如何同步异步信号,使触发器不产生亚稳态;二是如何正确地设计空、满以及几乎满等信号地控制电路. 下面阐述解决问题地具体方法. 2.1 亚稳态问题地解决 在数字集成电路中,触发器要满足setup/hold地时间要求.当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q端地值是不确定地,并且在未知地时刻会固定到高电平或低电平.这个过程称为亚稳态(Metastability).图2所示为异步时钟和亚稳态,图中clka和clkb为异步时钟. 亚稳态必定会发生在异步FIFO中.图中在异步FIFO中,电路外部地输入和内部地时钟之间是毫无时间关系地,因此setup/hold冲突是必然地;同在电路内部地两个没有关系地时钟域之间地信号传递,也必须会导致setup/hold冲突. 虽然亚稳态是不可避免地,但是,下面地设计改进可以将其发生地概率降低到一个可以接受地程度. ①对写地址/读地址采用格雷码.由实践可知,同步多个异步输入信号出现亚稳态地概率远远大于同步一个异步信号地概率.对多个触发器地输出所组成地写地址/读地址可以采用格雷码.由于格雷码每次只变化一位,采用格雷码可以有效地减少亚稳态地产生. ②采用触发器来同步异步输入信号,如图3中地两极触发器可以将出现亚稳态地几率降低到一个很小地程度.但是,正如图3所示,这种方法同时带来了对输入信号地一级延时,需要在设计时钟地时候加以注意.

FPGA先进先出存储器 FIFO

1.什么是FIFO? FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。 2.什么情况下用FIFO? FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端时AD数据采集,另一端时计算机的PCI总线,假设其AD采集的速率为16位 100K SPS,那么每秒的数据量为 100K×16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。 3.FIFO的一些重要参数 FIFO的宽度:也就是英文资料里常看到的THE WIDTH,它只的是FIFO一次读写操作的数据位,就像MCU有8位和16位,ARM 32位等等,FIFO的宽度在单片成品IC中是固定的,也有可选择的,如果用FPGA自己实现一个FIFO,其数据位,也就是宽度是可以自己定义的。 FIFO的深度:THE DEEPTH,它指的是FIFO可以存储多少个N位的数据(如果宽度为N)。如一个8位的FIFO,若深度为8,它可以存储8个8位的数据,深度为12 ,就可以存储12个8位的数据,FIFO的深度可大可小,个人认为FIFO深度的计算并无一个固定的公式。在FIFO实际工作中,其数据的满/空标志可以控制数据的继续写入或读出。在一个具体的应用中也不可能由一些参数算数精确的所需FIFO深度为多少,这在写速度大于读速度的理想状态下是可行的,但在实际中用到的FIFO深度往往要大于计算值。一般来说根据电路的具体情况,在兼顾系统性能和FIFO成本的情况下估算一个大概的宽度和深度就可以了。而对于写速度慢于读速度的应用,FIFO的深度要根据读出的数据结构和读出数据的由那些具体的要求来确定。 满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。 空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。 读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。 写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。 读指针:指向下一个读出地址。读完后自动加1。 写指针:指向下一个要写入的地址的,写完自动加1。 读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。 4.FIFO的分类 根均FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO是指读时钟和写时钟为同一个时钟。在时钟沿来临时同时发生读写操作。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。 5.FIFO设计的难点 FIFO设计的难点在于怎样判断FIFO的空/满状态。为了保证数据正确的写入或读出,而不发生益处或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。在空的

LabVIEW FPGA模块实现FIFO深度设定

LabVIEW FPGA模块实现FIFO深度设定 FIFOFIFOFIFO作为主控计算机和FPGA之间的缓存,若DMAFIFO深度设置的合适,FIFO不会溢出和读空,那么就能实现数据输出FPGA是连续的。 本文在介绍了LabVIEW FPGA模块程序设计特点的基础上,结合DMA FIFO的工作原理,提出了一种设定FIFO深度的方法,解决了FIFO溢出、读空的问题,实现了数据的连续传输。实验结果表明该方法正确、可行,程序设计满足系统对数据传输连续性的要求。 1 LabVIEW FPGA模块 LabVIEW FPGA是LabVIEW的一个子模块,使用该模块可以通过图形化的编程对NI公司RIO(Reconfigurable I/O)设备上的FPGA进行配置。图形化的程序直接在硬件上实现,通过对RIO设备上的I/O接口的控制,可以灵活地对I/O信号进行分析和处理,表现出比固定I/O 硬件更加优异的特性。使用LabVIEWFPGA模块开发出来的系统具有开发周期短、结构模块化、升级方便等优点。例如,图1表示了一个用LabVIEW FPGA模块设计的程序,在FPGA上实现方波发生器。该方波发生器通过数字接口DIO_1输出方波,其占空比和周期可调。LabVIEW FPGA 模块在程序的设计与实现上都展现出了极大的灵活性。 1.1 LabVIEW FPGA程序开发流程 使用LabVIEW FPGA模块开发应用程序的流程。首先创建FPGA vi,之后用FPGA设备仿真器在主控计算机上运行程序,反复地调试、修改,直至程序正确无误。然后编译FPGA vi,并把程序下载到FPGA上。FPGA部分的程序完成后,再根据需要在主控计算机上创建用户界面程序Host vi,最终就完成整个系统的设计。 FPGA设备仿真器的打开方法是:首先在“项目浏览器”窗口中的打开“我的电脑”子菜单,右击子菜单中的“FPGA Target”并在快捷菜单中选择“Execute vion”下一级子菜单中的“Development Computer with Simulated I/O”。然后再在FPGA vi中点击“Run”按钮,这时程序在FPGA 的设备仿真器上运行。 1.2 开发FPGA vi 发应用程序的第一步是创建用于配置PXIe-5641R板载FPGA的程序。在FPGA vi中可以实现算法逻辑,包括信号同步,定制数字通信协议,板载控制和预警处理判决机制等功能。通过LabVIEW FPGA模块,可使用LabVIEW开发环境和许多类似的功能。但是由于FPGA不支持浮点操作,所以LabVIEW FPGA模块较之LabVIEW完整Windows版开发软件缺少了一些操作符和分析函数。另外,由于PXIe-5641R板卡没有硬盘和操作系统,因此不支持文件I/O和ActiveX功能。LabVIEW FPGA模块的函数面板。 硬件对象不管是FPGA设备还是FPGA仿真器,都可以访问LabVIEW FPGA函数。仿真器使用RIO设备的I/O接口,可在主机处理器上执行逻辑算法。检验vi设计中的一些简单性错误,避免不必要的反复编译,尤其是在程序比较大的时候可节省大量的时间,提高编程效率。也可使用仿真器验证vi的执行流程,但无法验证硬件的确定性,若需要验证硬件性能的确定性,必须对FPGA vi进行编译。与其他FPGA开发工具一样,根据应用程序的复杂程度和计算机资源的不同,编译步骤可能要花上几分钟到几个小时的时间。 1.3 开发Host vi 在FPGA vi完成调试、编译、下载到板卡之后,就需要在主控计算机上创建一个用户界面程序Host vi。在用户界面应用程序中可以完成一些实时性要求不高的操作,例如配置系统参数,管理数据等。Host vi通过FPGA接口函数与FPGA vi进行通信,以及处理中断。FPGA 接口函数面板会在安装LabVIEW FPGA模块之后,自动添加到LabVIEW的函数面板中。LabVIEW 函数面板中的FPGA接口函数面板。 2 不同时钟域的数据连续传输

零基础学FPGA(十一)一步一脚印之基于FIFO的串口发送机设计全流程及常见错误详解

零基础学FPGA(十一)一步一脚印之基于FIFO的串口发送机设计全流程及常见错误详解 关键词: FPGA , FIFO 记得在上几篇博客中,有几名网友提出要加进去错误分析这一部分,那我们就从今天这篇文章开始加进去我在消化这段代码的过程中遇到的迷惑,与大家分享。 今天要写的是一段基于FIFO的串口发送机设计,之前也写过串口发送的电路,这次写的与上次的有几分类似。这段代码也是我看过别人写过的之后,消化一下再根据自己的理解写出来的,下面是我写这段代码的全部流程和思路,希望对刚开始接触的朋友来说有一点点的帮助,也希望有经验的朋友给予宝贵的建议。 首先来解释一下FIFO的含义,FIFO就是First Input First Output的缩写,就是先入先出的意思,按照我的理解就是,先进去的数据先出,例如一个数组的高位先进,那么读出来的时候也就高位先出。下面是百度百科的解释。 FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端是AD数据采集,另一端是计算机的PCI总线,假设其AD采集的速率为16位 100K SPS,那么每秒的数据量为100K×16bit=1.6Mbps,而PCI总线的速度为33MHz,总线宽度 32bit,其最大传输速率为1056Mbps,在两个不同的时钟域间就可以采用FIFO来作为数据缓冲。另外对于不同宽度的数据接口也可以用FIFO,例如单片机位8位数据输出,而DSP可能是16位数据输入,在单片机与DSP连接时就可以使用FIFO来达到数据匹配的目的。 下面我们开始设计。 这次设计我们要设计一个串口发送机,想一下的话,我们要发送数据,总得有一个数据产生模块和数据发送模块吧。好,那么在我们的脑海里就出现了这两个模块。由于我们这次是借用Altera公司提供的IP核FIFO来完成,所以要加入这个模块,这个模块作为一个数据缓冲器,需要我们例化,等会我们按照思路来例化它。 好,模块出来了,我们将这三个模块分别定义为dataoutput块,fifo_ctrl块和uart_ctrl块。现在考虑连线。我个人感觉在设计之前,把要设计的东西在草稿纸上将大体框图画出来,具体到每一根连线,这样根据图来写代码要比直接用脑子构图要方便的多。三个模块,先考虑时钟和复位信号线,三个模块都有,然后,数据产生模块要将产生的数据发给FIFO模块,所以要有数据写入线,我们定义它为wr-datain,数据写入FIFO块后总要输出,这些数据就是我们要发送的数据,所以定义输出数据线tx_data,先不管FIFO,我们再来定义数据发送模块的连线,数据发送总要有个启动信号,所以我们定义变量 tx_start,之后,还要有一个输出端给PC机,我们定义这个输出端位rs232,对于FIFO模块的例化过程很简单就不做过多的说明,只把接口说一下,FIFO

基于FPGA的FIFO存储器设计

基于FPGA的FIFO存储器设计 摘要: 如何匹配两个传输速率不同的系统间数据传输,避免因为速率的不同而在接口部分产生的复写、丢失以及读入无效数据的问题,这些已经成为设计者必须思考的问题。FIFO缓冲存储器正是解决这种数据传输问题的理想方法。文章简单介绍了FPGA(现场可编程逻辑门阵列)的发展历程,结构特点与应用价值,简单介绍了FIFO 的功能和实用价值。提出了FIFO(先进先出)存储器分别在同步和异步两种状态下的设计方案。在QuarterⅡ环境中,以VHDL作为描述语言,遵循EDA标准设计的开发流程,实现了用FPGA器件对FIFO(先进先出)存储器进的设计。并对相应的模块下载到GW48系列EDA实验开发系统上进行硬件实现。最后比较了同步FIFO存储器和异步FIFO存储器各自的优缺点和使用范围。体现了FPGA在数据处理方面的优越性。 关键词同步FIFO,异步FIFO ,FPGA

基于FPGA的FIFO存储器设计 1.绪论 1.1 FPGA的发展及结构特点 1.1.1 FPGA的含义及发展 FPGA是现场可编程逻辑门阵列(Field Programmable Gates Array)的缩写,自从1985年Xilinx公司推出第一片现场可编程逻辑门阵列至今[1]。FPGA已经成为当今电子设计市场上应用最广泛的可编程逻辑器件之一。可编程逻辑器件按集成度来区分,可大致分为简单PLD和复杂PLD。如图[2]1,它的发展大致经历了一下三个阶段[3]: 1.早期的可编程逻辑器件:70年代初期的PLD器件主要用于各种类型的存储问题,主要有PROM(可编程只读存储器)、EPROM(紫外线可擦出只读存储器)、和EEPROM (电可擦出只读存储器),由于结构简单,它们只能完成简单的逻辑功能。 2.结构上稍微复杂的可编程芯片:70年代末到80年代初,AMD公司和Lattice 公司先后推出了可编程逻辑器件PLD,产品主要有PAL(可编程逻辑阵列,Programmable Array Logic)、GAL(通用阵列逻辑,Generic Array Logic)和PLA (可编程逻辑阵列,Programmable Logic Array).这一类在设计上有很强的灵活性,可以实现速度特性较好的逻辑功能,但由于结构简单,它们只能实现规模较小的电路。 3.功能齐全、变成灵活的可编程逻辑器件:80年代中期,Altera公司和Xilinx 公司同期推出了CPLD(复杂可编程逻辑门阵列,Complex Programmable Logic Device)和FPGA(现场可编程逻辑门阵列,Field Programmable Gates Array),它们都具有体系结构和逻辑单元灵活,集成度高以及适用范围宽等特点,可以实现较大规模的电路。 图1 进入90年代以后,可编程逻辑集成电路进入了飞速发展时期,在系统可编程技术ISP(In—System Programmability)和世界扫描测试技术的出现,使得可编程逻辑器件在器件编程技术和器件测试技术方面也获得了划时代的进步。FPGA/CPLD已成为当今应用最广泛的可编程集成电路之一。《FPGA器件的应用研究》工程师可在办公室和实验室进行设计。它还具有静态可重复编程和在系统重构特性,使硬件和软件一样,能够通过编程来修改。 1.1.2FPGA的结构特点 一些基本的器件如GAL、CPLD之类都是基于乘积项的可编程结构,即由可编程的与阵列和固定的或阵列组成。而FPGA则是另一种可编程逻辑结构----查找表

同步FIFO与异步FIFO的Verilog实现(附源代码和测试代码)

FIFO FIFO即First In First Out,是一种先进先出数据存储、缓冲器,我们知道一般的存储器是用外部的读写地址来进行读写,而FIFO这种存储器的结构并不需要外部的读写地址而是通过自动的加一操作来控制读写,这也就决定了FIFO只能顺序的读写数据。下面我们就介绍一下同步FIFO和异步FIFO。 1、FIFO分类 同步FIFO,读和写应用同一个时钟。它的作用一般是做交互数据的一个缓冲,也就是说它的主要作用就是一个buffer。 异步FIFO,读写应用不同的时钟,它有两个主要的作用,一个是实现数据在不同时钟域进行传递,另一个作用就是实现不同数据宽度的数据接口。 2、FIFO的主要参数 同步FIFO和异步FIFO略有不同,下面的参数适用于两者。 宽度,用参数FIFO_data_size表示,也就是FIFO存储的数据宽度; 深度,用参数FIFO_addr_size表示,也就是地址的大小,也就是说能存储多少个数据; 满标志,full,当FIFO中的数据满了以后将不再能进行数据的写入; 空标志,empty,当FIFO为空的时候将不能进行数据的读出; 写地址,w_addr,由自动加一生成,将数据写入该地址; 读地址,r_addr,由自动加一生成,将该地址上的数据读出; 同步FIFO和异步FIFO的最主要的不同就体现在空满标志产生的方式上,由此引出两者一些不同的参数。 同步FIFO 时钟,clk,rst,读写应用同一个时钟; 计数器,count,用计数器来进行空满标志的判断; 异步FIFO 时钟,clk_w,rst_w,clk_r,rst_r,读写应用不同的时钟; 指针,w_pointer_gray,r_pointer_gray,用指针来判断空满标识; 同步指针,w_pointer_gray_sync,r_pointer_gray_sync,指针的同步操作,用来做对比产生空满标志符;

fpga中异步信号处理

fpga中异步信号处理 (原创实用版) 目录 一、FPGA 中异步信号处理的背景和需求 二、FPGA 中异步信号处理的方法 三、FPGA 中异步信号处理的实例分析 四、FPGA 中异步信号处理的优势和挑战 正文 一、FPGA 中异步信号处理的背景和需求 FPGA(现场可编程门阵列)是一种集成电路,可以由用户编程和配置,以实现特定的功能。在 FPGA 中,时序分析和时钟管理是设计过程中非常重要的环节。由于 FPGA 外部系统的限制,只使用一个时钟往往不现实,因此,FPGA 需要能够在两个不同时钟频率系统之间交换数据,通过多 I/O 接口接收和发送数据,处理异步信号,以及为带门控时钟的低功耗设计提供支持。 二、FPGA 中异步信号处理的方法 在 FPGA 中处理异步信号的主要方法有以下几种: 1.使用多时钟域:通过将 FPGA 设计划分为多个时钟域,每个时钟域可以独立地进行时序分析和时钟管理,从而降低设计复杂度。 2.异步信号转换:通过使用异步信号转换器(如双寄存器同步器、多级寄存器同步器等),将异步信号转换为同步信号,以便在 FPGA 内部进行处理。 3.异步 FIFO:使用异步 FIFO(先进先出寄存器)来缓存异步信号,以便在 FPGA 内部进行处理。异步 FIFO 的读写操作通常需要使用双寄存器同步器来实现。

4.异步复位:通过使用异步复位信号,可以在不需要时钟信号的情况下对 FPGA 内部的寄存器进行复位。异步复位信号可以是低电平有效的复位信号,也可以是高电平有效的复位信号。 三、FPGA 中异步信号处理的实例分析 假设一个 FPGA 系统需要与外部系统进行数据交换,外部系统的时钟频率为 27MHz。在 FPGA 内部,需要对数据进行处理,并将处理后的数据发送回外部系统。为了实现这个功能,可以采用以下方法: 1.使用多时钟域:将 FPGA 设计划分为两个时钟域,一个时钟域用于处理外部系统的数据,另一个时钟域用于处理内部数据。这样可以有效地降低设计复杂度。 2.异步信号转换:使用双寄存器同步器将外部系统的异步信号转换为同步信号,以便在 FPGA 内部进行处理。 3.异步 FIFO:使用异步 FIFO 来缓存外部系统的数据,以便在 FPGA 内部进行处理。异步 FIFO 的读写操作可以使用双寄存器同步器来实现。 4.异步复位:使用异步复位信号对 FPGA 内部的寄存器进行复位。异步复位信号可以是低电平有效的复位信号,也可以是高电平有效的复位信号。 四、FPGA 中异步信号处理的优势和挑战 FPGA 中异步信号处理的优势主要有以下几点: 1.降低设计复杂度:通过使用多时钟域、异步信号转换、异步 FIFO 等技术,可以降低 FPGA 设计的复杂度。 2.提高系统性能:通过使用异步信号处理技术,可以实现高速数据传输和低延迟的数据处理。 3.灵活性:FPGA 具有很高的灵活性,可以根据需要灵活地配置和修改设计,以满足不同应用场景的需求。

基于LabVIEW的FPGA模块FIFO深度设定实现

基于LabVIEW的FPGA模块FIFO深度设定实现 引言 数据进入FPGA 的速率高于传出的速率,持续的传输会造成数据的溢出,断续的传输可能会造成数据不连续。使用基于LabVIEW FPGA 的DMA FIFO 作为主控计算机和FPGA 之间的缓存,若DMAFIFO 深度设置的合适,FIFO 不会溢出和读空,那么就能实现数据输出FPGA 是连续的。 本文在介绍了LabVIEW FPGA 模块程序设计特点的基础上,结合DMA FIFO 的工作原理,提出了一种设定FIFO 深度的方法,解决了FIFO 溢出、读空的问题,实现了数据的连续传输。实验结果表明该方法正确、可行,程序设 计满足系统对数据传输连续性的要求。 1 LabVIEW FPGA 模块 LabVIEW FPGA 是LabVIEW 的一个子模块,使用该模块可以通过图形化的编程对NI 公司RIO(Reconfigurable I/O)设备上的FPGA 进行配置。图形化的程序直接在硬件上实现,通过对RIO 设备上的I/O 接口的控制,可以灵活地对I/O 信号进行分析和处理,表现出比固定I/O 硬件更加优异的特性。使用LabVIEWFPGA 模块开发出来的系统具有开发周期短、结构模块化、升级方便等优点。例如,图1 表示了一个用LabVIEW FPGA 模块设计的程序,在FPGA 上实现方波发生器。该方波发生器通过数字接口DIO_1 输出方波,其占空比和周期可调。LabVIEW FPGA 模块在程序的设计与实现上都展现出了极大的灵活性。 1.1 LabVIEW FPGA 程序开发流程 使用LabVIEW FPGA 模块开发应用程序的流程如图2 所示。首先创建FPGA vi,之后用FPGA 设备仿真器在主控计算机上运行程序,反复地调试、

基于FPGA的异步FIFO的设计

基于FPGA的异步FIFO的设计 1.任务 基于FPGA设计实现异步FIFO。 2.目的 掌握自顶向下的全正向设计方法,掌握使用verilogHDL硬件描述语言进行硬件电路设计的方法,熟练使用Quartus II和Modelsim工具。 3.使用环境(软件/硬件环境,设备等) 设计验证过程将使用以下的环境和工具进行: 1)、windows环境下使用ModelSim仿真工具进行逻辑仿真和时序仿真; 2)、windows环境下使用QuartusII工具进行设计综合。 4.设计方案 1)功能描述: 本设计用16*8 RAM实现一个异步FIFO,具体功能定义如下: 1. 异步复位。 2. FIFO不为满时,当写使能有效时,在写时钟的上升沿向FIFO中写入数据。 3. FIFO不为空时,当读使能有效时,在读时钟的上升沿从FIFO中读出数据。 4. 当FIFO写满的时候,产生满信号;当FIFO读空的时候,产生空信号。 5. FIFO一旦空或者满时候,复位FIFO; 2)系统设计框图: 3)系统端口信号列表:

4)模块划分: 1.RAM :存储器模块,用于存放及输出数据; 2.Waddr_Reg : 保存访问RAM的写地址; 3.Raddr_Reg : 保存访问RAM的写地址; 4.Wbin_addr : 计算RAM下一个写地址; 5.Rbin_addr : 计算RAM下一个读地址; 6.Gwaddr_reg : 将写地址的二进制编码转换成格雷码,并保存; 7.Graddr_reg : 将读地址的二进制编码转换成格雷码,并保存; 8.Syn_Rfield : 将写地址同步到读时钟域,并产生空标志; 9.Syn_Wfield : 将读地址同步到写时钟域,并产生满标志; 10.Reset_Unit : 复位信号产生单元 5)子模块设计: 1) RAM 模块设计: 1、功能描述 本设计中的FIFO采用采用16*8双口RAM,以循环读写的方式实现。

异步FIFO的设计与实现

摘要 随着数字系统规模的不断增大,单时钟域设计会极大地限制数字系统性能,现代数字系统为了提升性能,常采用多时钟域的设计.跨时钟域的信号在传输时会遇到亚稳态现象,如何保持系统稳定地传输数据是多时钟域系统设计者重点关注的问题,在跨时钟域传递数据的系统中,常采用异步FIFO(First In First Out,先进先出队列)口来缓冲传输的数据,以克服亚稳态产生的错误,保证数据的正确传输。常规的异步FIFO 设计采用先同步读写指针后比较产生空/满标志和用先比较读写指针产生空/满标志,再同步到相应时钟域的方法,但由于常规异步FIFO 模块中的RAM存储器读写寻址指针常采用格雷码计数器以及“空满”控制逻辑的存在,工作频率低,面积大,将使通过这两个模块的信号通路延时对整个模块的工作频率造成制约。本文提出了一种新型异步FIFO 的设计方法,该方法省略“了满”信号产生模块和多余的存储器位深来简化常规的FI FO 模块,而只保留“空”信号产生模块,避免使用大量的同步寄存器,减少了面积空间。FPGA 验证的结果表明,改进后的异步 FIFO 性能有了显著的提高. 关键词:现场可编程门阵列(FPGA )亚稳态空/满标志产高速FIFO

ABSTRACT Withthe increasing of digitalsystemsize,a sing leclock domain designwill greatlylimit thedigital system performance. Toenhancethe performance of modern digital systems,multiple clock domaindesign is conventio nally adopted.While being transmitted,Cross-clock dom ainsignals will come across the phenomenonof metastability, hence itwill be a major concern for the multi —clock domain system designers to probe howto maintain the systemstability and to havedatatransmission conductedsmoothly。Asto the bus system data transmissionin thesystemwher ethe two data interface clocks don’tmatch,one ofsuper andeffective solutions is to useasynchronousFIFObuffermemory。How To solve thekey and diffic ult issue thatmetastabilityandhow togenerate empty and fullflag correctly inasynchronous FIFOdesign。Traditional FIFO design often synchronizes write/read addressfirst,then compares them togenerate emp ty/full signals or empty/full flagfirst compare the readandwrite pointer,and then synchronized to the clockdomain, This design takes on too much area andcan only workat a lowfrequency,this will allowthesignaling pathways of these twomodules delay caused by constraints oftheoperating frequency ofthe entire module. A new method of asynchronous FIFO is proposed to overcomethese pro blems,omit the”full” signal generator module andredundan tmemory bit depthto simplifythe conventional FIFO module, leaving only the"empty”signal generation module,avoid the useof a largenumberofsynchronization registers,reducing the area of space。FPGA verification results show that t heasynchronous FIFO improved performance has been significantly improved。 Keywords:Field Programmable GateArray(FPGA);Metastable;Mmpty/ Full Flag production;High-speed FIFO

相关主题
相关文档
最新文档