基于FPGA的异步FIFO设计

时间:2022-10-23 02:29:42

基于FPGA的异步FIFO设计

摘 要:设计完成了一种基于FPGA的异步FIFO,运用Verilog HDL高级可编程语言和原理图相结合的设计方法实现FIFO读、写控制算法和数据查询、存储中断模块。运用时钟同步技术,解决了FIFO设计中亚稳态和竞争冒险的难点。最后采用QuartusII9.0设计仿真验证了该设计,测试结果表明该方案工作原理简单,性能稳定可靠。

关键词:FIFO FPGA 数据采集

1、引言

异步FIFO作为数据采集和存储的关键组成部分之一,在数据采集系统中发挥着举足轻重的作用。在传统设计方法中,常常采用微处理器和具有FIFO功能的专用RAM芯片实现异步FIFO,达到数据的高速采集和存储功能,其系统成本较高,实现起来较困难[1]。而FPGA作为一种集成度很高的设计芯片,可以将微处理器和RAM集成到一块FPGA上,大大简化了系统设计流程,降低了系统成本和设计风险。运用VerilogHDL高级可编程语言和原理图设计相结合的方法,选定Altera公司Cyclone III系列FPGA作为设计平台,设计完成了一种稳定可靠的异步FIFO。

2、设计方案

本文提出了一种异步FIFO的设计方案,系统主要由FIFO控制模块、读/写地址信号产生模块和RAM模块组成,其中:

1)FIFO控制模块为整个系统的核心,实现了与上位机的数据通讯、RAM的数据读写和控制、读/写地址信号产生单元的控制、外部数据的采集,以及保证整个系统可靠稳定的工作,其中,外部数据的采集采用中断处理的方式,当接收到外部数据储存中断申请,提供握手信号;如果连接成功,则将数据存储到RAM中;与上位机通讯同样采取中断查询的方式,当接收到上位机数据查询请求,提供握手信号,如果连接成功,则发送RAM中的数据到上位机;同时,对读、写地址信号产生模块的控制以及内部读、写指针均采用时钟同步技术,保证每次进行数据读写时,地址信号处于稳定状态,保证了时序,提高了系统性能。

2)读、写地址信号产生模块为RAM提供地址信号,采用二进制计数器,与FIFO控制模块的通讯采用了时钟同步技术,避免了系统的亚稳态现象,提高了系统的安全性和稳定性。

3)RAM作为系统数据的存储器,用于中间数据的存储。

3、主要模块设计

3.1 FIFO控制模块

FIFO控制模块为整个系统的核心,主要完成的功能包含以下四个方面:

1)与上位机的通讯

提供中断接口,控制模块接收到上位机中断数据查询请求之后,根据FIFO控制算法判断是否可以读取数据,如果可以,则经过数据处理,将数据提供给上位机,并提供握手信号,提示上位机可以读取数据。

2)外部数据采集的通讯

提供中断接口,控制模块接收到外部数据存储请求,根据FIFO控制算法判断是否可以存储数据,如果可以,则经过数据处理,将数据存储到RAM中,并提供握手信号,提示数据已经存储完毕,可以进行下次存储。

3)RAM的数据交换控制

通过算法,控制RAM的数据读写,协调系统各个部分的工作,保证系统各个部分满足时序要求,按照设定的流程工作。

4)读/写地址信号产生模块的时钟信号

提供地址信号产生模块所需要的时钟信号和复位信号。经过算法计算,判定当前地址是否增加1或者复位。

控制时序:系统上电,发送复位信号RET,系统完成初始化,等待接收系统外部读取、存储中断信号。

当接收到中断存储信号DatInFlag,首先判断是否可以进行写入数据,如果不行,则丢失该中断信号;如果可以,则进行算法计算,通知写地址信号产生单元得出当前的存储地址WrAddr[15:0],并且将需要的输入数据DatIn[7:0]准备好输出到RAM的数据输入口上,然后给出RAM写信号时钟WrClk=1,将数据输入到RAM中,并回复握手信号ReWrEn。

当接收到中断读取信号DatOutFlag,首先判断是否可以进行读取数据,如果不可以,则丢失该中断信号;如果可以,则进行算法计算,通知读地址信号产生单元得出当前的存储地址WrAddr[15:0],然后给出RAM读信号时钟RdClk=1,数据读出,然后输出到通讯模块,并回复握手信号ReRdEn,提示上位机读取。

3.2 地址信号产生模块

读地址信号产生模块和写地址信号产生模块均采用16位2进制计数器,且实现原理基本一样。FPGA设计中,广泛存在亚稳态现象,它会使系统出现临界状态,导致系统不稳定,甚至崩溃。常见设计中,采用格雷码计数器用于读、写指针和地址信号产生,在本设计中为了简化设计流程,采用2进制计数器加时钟同步设计的方法,在计数器地址信号的输出端,经过一个计数器将地址信号同步输出到RAM模块,并且读、写RAM时钟信号RdClk 、WrClk均采用系统时钟同步,且比地址信号多同步输出一个时钟脉冲周期,保证了信号RdClk、WrClk与地址信号之间不会存在临界状态。同时RAM的数据信号输出也采用了时钟同步技术,将数据输出也进行了相应的同步,大大提高了系统稳定性。

3.3 RAM模块

Quartus II软件提供了软件IP核,直接通过软件进行简单的配置调用即可。如图3所示,该模块为系统自动生成的RAM模块。

4、设计实现与仿真验证

以Altera公司Cyclone III系列的一款FPGA为设计平台,基于QuartusII7.2设计软件,采用VerilogHDL高级可编程语言和原理图相结合的设计模式。并且该方案可以无需更改任何代码即可移植到Altera公司其它系列FPGA上。

系统分为三个大的部分,FIFO控制模块、读、写地址信号产生单元和RAM,其中设计的重点和难点是FIFO控制模块,在FIFO控制模块设计中,采用状态机的设计方式,使各个功能都按照设计好的时序工作,强化了系统的执行状态、同步了工作时序、提高了系统稳定性,但需要注意的是降低了系统的执行速度,从仿真波形图,可以看出系统存储和读取的速度大约为400ns/字节。

中断存储:系统采集到外部数据中断存储信号ReWrFlag,然后经过计算,如果可以进行数据存储,则提供RAM模块写时钟WrClk两个脉冲,第一个脉冲将地址信号输入到RAM,第二个脉冲将数据写入到RAM,完成数据存储。

中断查询:系统采集到上位机数据中断查询信号ReRdFlag,然后经过计算,如果可以进行数据读取,则提供RAM模块读时钟WrClk两个脉冲,第一个脉冲将地址信号输入到RAM,第二个脉冲将数据写输出到数据总线,完成数据读取。

注意:当上位机一直提供中断查询信号,若此时RAM中的数据已经读取完毕,则不再提供RAM读时钟信号,不进行RAM读操作,且系统输出Empty=1,表示RAM中已经没有数据,系统重新开始等待。

5、结束语

本文简要分析和介绍了一种基于FPGA的异步FIFO的设计原理和方法,分成几个模块,其中详细地介绍了FIFO控制核心模块的设计,最后选择Altera公司Cyclone系列FPGA为设计平台,运用QuartusII9.0的时序仿真模块对该设计方法进行了仿真验证。测试结果表明该设计方法设计简单灵活,易于实现,大大简化了设计流程,降低了设计成本与风险,是一个值得推广和应用的方法。

参考文献:

[1]高礼忠. FIFO在高速数据采集系统中应用[J]. 电子测量技术, 2005(1).

[2]刘凤伟. 一种并行异步FIFO控制算法设计[J]. 微处理机, 2012(4).

上一篇:论自媒体时代政府公信力的提升 下一篇:燃油加油机示值误差的测量结果扩展不确定度