基干FPGA异步FIFO设计.doc
文本预览下载声明
基于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均采用系统时钟同步,且比地址信号
显示全部