大容量数据采集与存储系统在工业自动化生产、国防和军事监控及环境监测等方面被广泛应用。为了能够完整、准确地捕获到各种信号或者故障发生时的特征信号,需要对其进行状态监测,并且要求监测系统具备长时间连续采集和存储的功能。但是为了支持系统中大量高速数据的暂时存储,这就需要很大的中间缓存,而专用的高速FIFO芯片价格昂贵且容量受限,大大增加了商业成本,因此在实际应用中寻找可靠的、低成本的采集存储系统是很有必要的。为此本文提出利用FPGA作为桥梁,实现对SDRAM的控制,从而对采集的数据进行缓冲,然后存储到大容量的CF卡中,满足系统所要求的速度快、实时性高、成本低和容易扩展等要求;接着详细论述了系统各个功能电路的设计思路和具体实现过程。
1系统方案设计
数据采集和存储系统主要由三部分组成:A/D转换器、FPGA的数据双缓冲器和CF卡的存储。
1)A/D转换器的作用是将所要采集的模拟量转换成数字量,通过光耦隔离后,由FPGA接收、缓冲、存储至CF卡。高速A/D转换器采用的是采样率为250kS/s的16位A/D转换芯片ADS8515,它属于逐次逼近寄存器型(简称SAR型)A/D转换器,其内部通常具有采样保持器,转换速率快。
2)FPGA采用ALTERA公司CycloneⅡ系列的EP2C35F672I8N,静态功耗小于0.25W。采用+3.3V、+2.5V、+1.2V分别给不同区进行供电。灵活的I/O控制使得编程简化,电路设计方便。采用AS和JTAG配置模式,配置芯片是EPCS16SI8N,器件的时钟配置为50MHz。
FPGA主要利用片外的SDRAM提供数据输出/输入的双缓冲作用,之所以选取SDRAM,主要是因为在各种随机存取器件中,SDRAM的容量较大,价格较低,且其数据突发传输模式能大大提高存取速度,能够满足应用的要求。
3)CF卡作用是将A/D采集到的数据进行存储,当数据容量存储满时,发送满信息,FPGA得到满信息后,停止对数据的采集并提示用户更换CF卡。
系统工作过程为:系统加电后,FPGA向A/D转换器发出相应控制信号,由于ADC采样率为250kS/s,为和CF卡存储速度相匹配,需要一个FIFO缓存系统。A/D转换器在FPGA的ADC接口控制电路控制下,把模拟信号转换成数字信号,并将采样数据存入FIFO缓存系统。同时FPGA查询CF卡是否有容量,如果CF卡未满,那么由FPGA的CF卡接口控制逻辑将采样结果从FIFO缓存送入CF卡中;当CF卡的容量达到一定程度后,FPGA发出满信息,向A/D状态机发送停止采集的命令,并提示用户已满,更换CF卡。
由于把FPGA设置为特定的自动模式,因此FPGA控制A/D采集以及把数据送往CF卡的所有操作不需要外部干预,从而保证足够的数据传输速率。采样过程中FPGA的CF卡接口控制逻辑依次取走FIFO中的批量数据,在进行CF卡的数据存储时A/D仍然持续转换,FIFO也被持续写入转换结果,避免两者的冲突。
2硬件设计
系统的硬件由模数转换电路、数据采集存储与传输控制电路、接口电路构成。
2.1模数转换电路设计
模数转换电路是整个系统的重要组成部分,它由差分放大适配电路、A/D转换器构成,如图1所示,其核心器件是A/D转换芯片ADS8515。
图1 信号适配和模数转换电路原理图
模拟输入信号经过由OPA2604和OP604构成的差分放大适配电路将信号适配到ADS8515的采集范围。ADS8515将模拟信号转换为数字信号。ADS8515的控制信号由FPGA提供,ADS8515在控制信号的作用下,以适当的时序完成转换工作。
2.2数据采集存储与传输控制电路设计
数据采集存储与传输控制电路的开发工作主要集中在FPGA上。FPGA负责在CF卡与A/D芯片之间的缓冲与控制,一边与A/D接口,另一边与CF卡接口,产生数据采集、A/D转换、FIFO所需的全部控制信号,实现对传输数据的缓存、读/写控制、时钟、输出使能以及对A/D的控制等功能。
2.2.1FPGA内部总体设计
FPGA设计内部结构简图如图2所示,由FIFO、CF卡控制状态机、ADC接口控制状态机三部分构成。
图中由左向右的宽箭头表示数据流,ADdata[15..0]是与A/D转换连接的数据总线,CFdata[15:0]是与CF卡连接的数据总线。单线箭头表示输入输出及FPGA内部各个模块间的控制信号线。从数据流向看,数据在ADC接口控制状态机的协调下通过ADC接口送入FIFO中,经过FIFO的缓冲后,在CF卡控制状态机的协调下,数据传输存储到CF卡;当CF卡存储满时,FPGA通过ADC状态机停止A/D的采集,并提示用户更换CF卡。
2.2.2数据双缓存器FIFO
由于与CF卡接口的数据传输方式是突发的数据块传送,每个数据块是用很高的速率传送到CF卡,这样就必须有缓存把A/D采集来的数据先缓存,然后发送到CF卡进行存储。然而FPGA内部的FIFO不足以支持系统中大量数据的暂时存储,这就要求很大的中间缓存。在本系统中利用FPGA对外部SDRAM的控制,以达到大量高速存取数据的功能。SDRAM选用MICRON公司的MT48LC4M32B2,存储容量为128MB,数据带宽为32位,内部由4个BANK组成,每个BANK有4096行和256列。
图2 数据采集与传输控制结构示意图
本文设计的FIFO系统由FPGA和SDRAM两部分组成。其中FPGA内部包含FIFO监控器、缓冲器、SDRAM控制器三个模块。FIFO监控器的作用是将SDRAM的状态转变成SDRAM控制器的读、写信号。若操作为向SDRAM写数据,则在SDRAM满时,FIFO监控器送出一个信号,以阻止写操作继续向SDRAM中写数据而造成溢出;若操作为向SDRAM读数据,则在缓冲器已空时,FIFO监控器送出一个信号,以阻止读操作继续从SDRAM中读数据而造成无效数据的读出。FIFO系统的模块结构如图3所示。
图3 FIFO模块结构示意图
2.3接口电路设计
2.3.1FPGA内ADC接口模块的设计
对A/D转换器的编程,主要是FPGA对ADS8515的控制信号进行写逻辑,其接口示意图如图4所示。
图4 A/D转换模块接口示意图
2.3.2FPGA内CF卡接口控制状态机的设计
CF卡有三种访问方式,分别为I/O模式、Memory模式和TrueIDE模式。本系统采用TrueIDE模式访问CF卡。需要在电源加电启动时将OE接地,见图5,让CF卡工作在TrueIDE模式。当CSEL输入信号接地时,CF卡工作方式为主模式;CSEL输入信号接高电平时,CF卡工作方式为从模式。本系统中将CF卡配置成从模式工作方式。当采用TrueIDE访问模式工作时,第3位到第10位地址线接地,WE信号接高电平。
图5 FPGA与CF卡接口示意图
3软件设计
CF卡的数据存储以扇区为基本单位。系统向CF卡写入一个扇区的数据,如图6所示。首先根据控制命令设定16位工作模式,设置将写入的扇区数目、相应地址和访问模式,然后发送写命令,等待CF卡准备就绪后,从数据缓冲区SDRAM写入CF卡中。
图6 向CF卡写数据流程图
4结束语
基于FPGA的高速大容量低成本数据采集系统以FPGA作为桥梁,控制片外高速SDRAM缓冲器,以CF卡作为大容量存储介质,既利用了FPGA的内部资源丰富和设计方便的优点,同时利用了CF卡容量大、体积小和价格低廉等优点,给出了高速大容量数据采集的方法,该方法已成功应用于实际系统中。