基于FPGA的高速实时数据采集系统设计
扫描二维码
随时随地手机看文章
摘要:设计的基于FPGA的高速实时数据采集系统,可控制6路模拟信号的采集和处理,FPGA中的6个FIFO对数据进行缓存,数据总线传给DSP进行实时处理和上传给上位机显示。程序部分是用Verilog HDL语言,并利用QuartusⅡ等EDA软件进行仿真,验证了设计功能的正确性。
关键词:FPGA;Verilog HDL;FIFO;数据采集
0 引言
随着当今社会信息技术的快速发展,高速数据采集及处理在人们生活、现代工业和科学研究等很多领域中广泛地应用。同样,在一些高精度、快速的测量中需要对数据进行高质量、高速度的采集。传统的数据采集系统往往采用单片机或数字信号处理器(DSP)作为控制器,来控制模/数转换器(ADC)、存储器和其他外围电路的工作。但由于单片机本身的指令周期以及处理速度的影响,效率较低,很难满足系统对数据采集系统实时性和同步性的要求。同时,FPGA具有高的时钟频率,运行速度快,开发周期短,集成度高,功耗低,设计费用低,组成形式灵活等诸多优点。因此,设计利用FPGA的高速实时数据采集系统有着重要的价值。
1 FPGA硬件设计
1.1 数字系统设计介绍
6路模拟信号经过模拟信号处理模块,形成电压差分模拟信号,其目的是减少直流漂移,去除共模干扰,为后级的模/数转换器(ADC)做准备,系统的硬件框图如图1所示。经过ADS8364模数转换器件后,将输入的模拟差分信号变换为适用于控制过程、存储、处理、执行计算并显示读出等其他目的的数字信号。在FPGA的控制下,数字信号被存储在异步FIFO中,再按照设计要求将存储在异步FIFO中的数据通过总线接口实时、高速、大量地传输到DSP芯片中进行实时处理,最后再传输到上位机。
1.2 外围主要电路
1.2.1 外部开关控制信号
外部开关控制信号的作用是给整个系统提供开关信号。为了满足工业应用,避免长线传输中的共地和电平不一致,采用了光电隔离,实现了将输入的24 V电压转化为3 V输出电压的功能,然后再通过整形电路整形后,传输到FPGA的I/O接口上。
1.2.2 A/D转换电路
对于采集的6个通道的信号,由于采样速率高,因此选择了ADS8364芯片进行模数转换。其工作电压为+5V,独立6通道全差分输入,2.5V参考电压的REFIN和REFOUT引脚、有效数据位为14位、采样频率可以根据设计要求进行调节并且最高的采样频率可以达到250 KSPS、带有6级深度的FIFO输出、功耗只有450 MW、6个差分采样放大器以及高速并行接口等主要参数。
ADS8364芯片的输入通道分为三组(A,B和C)的6路模拟信号输入通道,每个端口含有ADCS和保持信号引脚,这两个信号用来保证几个通道能同时进行采样和转换,同时输入电压是从-VREF到+VREF之间变化的差分模拟输入电压信号。6个十六位ADCS可以同时工作,即6通道同时进行转换。HOLDA,HOLDB,HOLDC这三个转换保持信号启动相对应的通道进行模数转换。如果这些保持信号同时有效时,这6个通道转换的结果就被保存在6个寄存器中,如果FPGA中的AD控制模块对ADS8364芯片执行每一个读操作时。ADS836就会输出十六位数据到FPGA中,A0,A1,A2这3个是地址/模式信号,它们决定ADS8364芯片采用何种方式读取数据。有单通道,单周期或FIFO模式三种模式供选择。HOLDA,HOLDB,HOL DC至少20 ns保持低电平,相应的通道才能开始转换。20 ns的低电平使得相应通道的采样保持放大器处于保持状态,进而所选择的模数转换通道就开始进行数据转换,本设计方案所选择的ADS8364地址/模式信号是单通道模式读取数据,6通道同时进行数据转换,其器件连接图如图2所示。
1.2.3 UART通信模块
在本设计中,采用了一片CP2101芯片来实现与PC机的USB接口通信,其电路原理图如图3所示。
[!--empirenews.page--]
CP2101是一种高度集成的USB转UART桥接器,提供一个使用最小化的元件和PCB空间实现RS 232转USB的简便的解决方案。该芯片包含一个USB 2.0全速功能控制器、USB收发器、振荡器和带有全部的调制解调器控制信号的异步串行数据总线(UART),全部功能集成在一个5 mm×5 mm MLP-28封装的IC中。无需其他的外部USB元件。主要引脚有:
VDD:2.7~3.6 V电源电压输入或者3.3 V电压调节器输出;
:器件复位。内部端口或VDD监视器的漏极开路输出。一个外部源可以通过将该引脚驱动为低电平至少15 s来启动一次系统复位;
REGIN:5 V调节器输入。此引脚为片内电压调节器的输入;
VBUS:VBUS感知输入。该引脚应连接至一个USB网络的VBUS信号,当连通到一个USB网络时,该引脚上的信号为5 V;
D+:USB D+;
D-:USB D-;
TXD:异步数据输出(UART发送);
RXD:异步数据输入(UART接收);
CTS:清除发送控制输入(低电平有效);
RTS:准备发送控制输出(低电平有效);
DSR:数据设置准备好控制输出(低电平有效);
DTR:数据终端准备好控制输出(低电平有效);
DCD:数据传输检测控制输入(低电平有效);
RI:振铃指示器控制输入(低电平有效);
SUSPEND:当CP2101进入USB终止状态时该引脚被驱动为高电平;
:当CP2101进入USB终止状态时该引脚被驱动为低电平;
NC:这些引脚应该为未连接或接到VDD的引脚。
CP2101内部及接口连接示意图如图4所示。
2 FPGA内部逻辑设计
2.1 内部逻辑框图
FPGA内部各个模块的逻辑框图如图5所示。
2.2 主要逻辑设计
本设计系统中FPGA内部模块主要有:Time模块、A/D模块、Outcontrol模块、FIFO模块、Bus模块和UART模块。其中,最主要的模块为A/D模块、FIFO模块和UART模块,下面就这三个模块进行描述和实现。[!--empirenews.page--]
2.2.1 A/D模块
本文A/D控制模块主要就是为了控制ADS8364芯片,提供各个控制信号,以便ADS8364芯片能够正常进行模数转换、A/D转换芯片转换后的数字信号的接收并将这些数字信号写入对应的FIFO中进行缓存。
输入引脚:din(15:0):16位A/D模数转换器转换后的数字信号的输入引脚;full(5:0):6路FIFO的满标识引脚,如果该引脚有效则停止往FIFO中写入数据,如果该引脚无效则可继续向FIFO中写入数据,直到该引脚有效为止;ad:开始结束采集引脚;clk:5 MHz时钟输入引脚;rst:复位引脚。
输出引脚:dout(1 5:0):16位的数字信号输出引脚;wr_en(5:0):6路FIFO的写使能引脚;xa(2:0):ADS8364的数据读取模式选择引脚,单通道读取模式为本设计系统的读取数据模式;ad clk:5 MHz的ADS8364的时钟引脚;cs clk:开关模块时钟引脚;hold:控制AD芯片开始采集引脚;wr_clk:FIFO写时钟引脚;xcs0:ADS8364芯片片选引脚;xr:ADS8364读使能引脚;xrs:ADS8364芯片复位引脚;xw:ADS8 364芯片写使能引脚,A/D模块在Modelsim中的仿真图如图6所示。
从Modelsim仿真图可以看出,当ADS8364的读使能信号即xr为上升沿时,则表示通过A/D转换后的数字信号就转入到相应的FIFO中,从而达到数字信号的缓存作用,为后续信号实时、大量地传输到DSP进行处理做好了准备。
2.2.2 FIFO模块
FIFO(先入先出)既是最先写入的数据也是最先读出的数据的一个堆栈。FIFO具有两个单一方向的端口,然而没有像其他存储器那样,没有地址的输入:一个用于写,另一个用于读。FIFO中的数据是列队结构,因此,会出现上溢和下溢现象。当向一个满的FIFO中再写入数据时,就会出现上溢,同时如果对一个空的FIFO进行操作时,就会出现下溢。
FIFO由一个双端口存储器块、一个读端口、一个写端口和一个控制逻辑模块组成,存储器模块通常采用的是SRAM,但是对某些应用也可以使用DRAM。它的结构示意图如图7所示。
FIFO是把存储器结成一个环,用内部的两个指针来寻址的。FIFO的状态并不是看两个指针的绝对大小,而是根据他们的相对大小来进行判断的。一个空的FIFO开始时把读的指针和写的指针生成相同的值,写数据时,写指针增加;读地址时,读指针增加。因此,当读指针和写指针相等时,可能存在两种情况,即空状态和满状态。在不同时钟域里对FIFO空或满状态的判断必须遵守的一个原则就是必须保证FIFO为满的情况下,不能再进行写操作,在FIFO为空的状态下,就不能再进行读操作,这就是异步FIFO设计的关键点同样也是难点。
本文用的是指针附加位比较法,这种方法是给每一个指针的前面多加一个附加位。写指针:当存储完最后一个数据单元后,将向最高位即附加位进位,除最高位外的所有位都将变为零;读指针:当读完最后一个数据单元后,也将向最高位进一位。如果两个地址指针除了最高位外其余位相同时,则表明写指针比读指针多循环了一次,此时马上停止向FIFO里面再写入数据,FIFO存储器为满状态。如果两个地址指针所有位完全相同,则表示写指针和读指针具有相同的循环次数,此时,说明FIFO存储器为空状态,此时,就会马上停止读取数据。
FIFO模块的输入端:wdata(15:0):来自A/D的16位写数据端;rclk:渎数据时钟端;rreq:读数据允许端;rrst_n:读复位端;wcl k:写数据时钟端;wreq:写数据允许端;wrst_n:写数据复位端。输出端:rdata(15:0):写入数据总线的读数据端;rempty:读空端;wfull:写满端。本文采用的每一个FIFO的模块图如图8所示。
[!--empirenews.page--]
2.2.3 UART模块
UART即为通用异步收发器,在发送时,将并行数据转换成为串行数据;而在接收端,是将串行数据转换为并行数据。其传送数据主要是以帧的形式进行传输的,一个基本的帧包含有一个起始位、7位或8位数据、奇偶校验位和停止位组成,UART的结构示意图如图9所示。
起始位按照习惯,线路闲置时的逻辑值一般都是1,起始标志的逻辑值为0。对于奇偶校验位的值是所有数据位的异或结果,并且随着数据会一起传输的,如果采用偶校验,当数据中有奇数个1时,那么奇偶校验位就设置为1;如果有偶数个1时,那么奇偶校验位就设置为0。采用奇校验,其结果恰恰相反。对于停止位的逻辑值,一般都是设置为0。
发送模块中引脚功能为:din(7:0):8位并行数据的输入端;sdo:并行数据转串行数据输出端;rst:复位信号输入端,低电平有效;wrn:写控制信号,高电平有效,高电平时写入数据;tsre:并串转换过程标志信号,低电平有效,转换过程中始终保持为0;clk16x:时钟信号输入端波特率发生器产生;tbre:整个工作过程标志信号。
UART模块发送模块在Modelsim中的仿真图如图10所示。
从Modelsim仿真图可以看出,在并串转换过程标志信号(tsre信号)有效时,即为低电平时,则8位并行数据就实现了并串转换,然后通过USB接口传输给上位机显示。
接收模块中引脚功能:rxd:串行数据输入端口;dout[7:0]:并行数据输出端;rdn:写控制端口,高电平有效,此时数据输出;data_ ready:数据是否准备好的标志端口;parity_error:校验位是否出错的标志端口;framing_error:帧是否出错的标志端口。UART模块的接收模块在Modelsim中的仿真图如图11所示。
从Modelsim仿真图可以看出,当UART写控制信号(rdn信号)为高电平,即有效时,则串行数据就实现了并串转换,将上位机的反馈信号传输给系统。
3 结语
本文基于FPGA的高速实时数据采集系统的设计,能够实现数据的高速、实时地采集。系统能够实现6通道同步采集,并通过FIFO解决了A/D转换速率和DSP处理数据的速率不匹配的问题,使系统具有高效、快速的特点。在仿真中验证了所设计功能的正确性,因而在高速实时数据采集方面有着广泛的应用空间。