打印

基于FPGA的海量数据采集系统

[复制链接]
1826|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Tianya283|  楼主 | 2012-11-29 19:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近几年,FPGA以其应用的灵活方便蓬勃发展,在通信、航空航天、医疗设备、消费类电子产品等领域一展身手。使用FPGA控制CF的技术到目前为止还没有成熟,本文从硬件和软件角度出发,介绍了FPGA与CF卡的接口设计、给出了用双RAM访问CF卡的编程,并且利用FPGA作为FIFO对AD采集的数据进行缓冲,然后存储到大容量的CF卡中。
1 系统方案设计
数据存储和采集系统主要由三部分组成,CF卡的存储、FPGA的数据双缓冲器、状态寄存器和A/D转换器组成。
1)CF卡数据存储,其作用是将AD采集到的数据进行存储,当数据容量存储满时,发送满信息。FPGA得到满信息后,停止对数据的采集并提示用户更换CF卡。

2)FPGA主要利用内部的SRAM提供数据输出/输入的双缓冲作用,采用双缓冲的原因是防止数据的溢出和保证数据传输的连续性。当接收到满信息时,停止AD采集,并做出提示。
3)A/D转换器的作用,是将所要采集的模拟量转换成数字量;通过滤波和放大后,由FPGA接收、缓冲、存储至CF卡。高速AD转换器采用的是转换速率为20MHz的MAX1425。
系统工作过程为:系统通过外部一个按键的低电平给数据采集系统一个采样开始控制命令,FPGA根据该命令向AD转换器发出相应控制信号;由于ADC采样率为20MHz,为和CF卡存储速度相匹配,在FPGA内部生成一个FIFO缓存器。AD
转换器在FPGA的ADC接口控制电路控制下,把模拟信号转换成数字信号,并将采样数据存入FPGA内部FIFO缓存。同时FPGA的查询CF卡是否有容量,如果CF卡未满,那么由FPGA的CF卡接口控制逻辑将采样结果从FPGA内部FIFO缓存送入CF卡中。当CF卡的容量达到一定程度后,FPGA发出满信息,向AD状态机发送停止采集的命令,并提示用户已满。由于把FPGA设置为特定的自动模式,因此FPGA控制AD采集以及把数据送往CF卡间的所有操作不需要外部干预,从而保证足够的数据传输速率。采样过程中FPGA的CF卡接口控制逻辑依次取走批量数据。在进**的数据存储时AD仍然持续转换,FPGA内部FIFO也被持续写入转换结果。


2硬件设计
系统的硬件由模数转换接口电路、数据存储与传输控制电路和接口电路构成。

2.1模数转换电路设计
模数转换接口电路是整个系统的重要组成部分,它由低通滤波器、多路选择开关和AD转换器构成,如图2所示。在系统
中起这个作用的核心器件是AD转换芯片MAX1425。


模拟输入信号分别经过由运放THS4052构成的抗混叠低通滤波器去除高频成分,防止信号产生“混叠现象”。模数转换器
MAX4125将模拟信号转换为数字信号。MAX4125的控制信号由FPGA板提供,MAX4125在控制信号的作用下,以适当的时序完成转换工作。

2.2数据采集与传输控制电路
数据采集与传输控制电路的开发工作主要集中在FPGA上。FPGA负责在CF卡与ADC芯片之间的缓冲与控制。一边与ADC接口,另一边与CF卡接口,产生数据采集、AD转换、FIFO所需的全部控制信号。实现对传输数据的缓存、读/写控制、时钟、输出使能以及对ADC的控制等功能。

2_2.1 FPGA内部总体设计
FPGA设计内部结构简图如图3所示,由FIFO、CF卡控制状态机、ADC接口控制状态机三部分构成。图中由右向左的宽
箭头表示数据流,Fd[15:0]是与CF卡连接的数据总线。单线箭头表示输入输出及FPGA内部各个模块间的控制信号线。


从数据流向看,数据在ADC接口控制状态机的协调下通过ADC接口送入FPGA的FIFO中,经过FIFO的缓冲后,在CF
卡控制状态机的协调下,数据传输到FPGA外的CF卡;当CF卡存储满时,FPGA通过ADC状态机停止AD的采集,并提示用户更换CF卡。

2.2.2数据双缓存器FIFO
FIFO主要由三部分组成:FIFO主体、FIFO读模块、FIFO写模块。FIFO主体部分利用FPGA内部的RAM,通过coregenerator来生成所使用的FIFO。FIFO读模块、FIFO写模块主要接收外界给出的读写开始与停止脉冲信号,转换为读写请求信号,给到fifo主体中,同时读写模块会处理接口两边的时钟信号,分别反向后再作为fifo的读写时钟使用,具体结构见图4、5。


与CF卡连接的CF卡接口的数据传输方式是突发的数据块传送,并且数据块的大小可以设置,每个数据块是用很高的速
率传送到CF卡,这样就必须有缓存把AD采集来的数据先存缓存,然后发送到CF卡,进行存储。

2.2.3 FPGA内ADC接口模块设计
MAX4125的控制信号都由FPGA产生,接口电路见图6。


FPGA的工作时钟为60MHz,该时钟经分频成20MHz提供给MAX4125作为工作时钟,同时也作为FPGA内其他逻辑
的工作时钟。由FPGA内状态机控制当CS#为低和ADC_Convst为高,MAX4125进入采样保持状态。当Clock的第一个上升沿到来,MAX4125开始转换。MAX4125把转换结果放到数据总线上,FPGA开始读入10位数据(FD[15:0】中10一15六位数据线悬空,使数据线和AD的位数匹配)。完成一次转换后,当ADC_Convst再次为高,开始下一轮转换。

2.2.4 FPGA内CF卡接口控制状态机的设计
图7是本控制系统的框图。CF卡的访问方式有三种,分别为I/O模式、Memory模式和True IDE模式。本系统采用True
IDE模式访问CF卡。需要注意的是当主机电源一直接通时,拔插CF卡将会使其从原来的True IDE方式重新配置成Memory式。所以要让CF卡一直工作在True IDE模式,需要在电源加电启动时将OE输入信号接地。


当CSEL输入信号接地时,CF卡工作方式为主模式;CSEL输入信号接高电平时。CF卡工作方式为从模式。本系统中将CF卡配置成从模式工作方式。
当采用TruelDE访问模式工作时,第3位到第10位地址线需要接地,WE信号需要接高电平。
3 软件设计
CF卡的数据存储以扇区为基本单位。系统读写CF卡时都是以扇区为单位进行的。为了满足系统对速度和控制连续性的
要求,系统的程序设计中,利用FPGA的内部资源开辟了两块RAM,用于存储一个扇区的数据,这样从CF卡读数据到RAM和将RAM中的数据读到被控系统中就成了两个相对独立的工作过程,这样既利用了CF卡大容鼋的存储特性又利用了FPGA的工作速度快和内部资源丰富的优点。图8是具体流程图。


从CF卡读取一个扇区的数据,如图9所示。首先根据控制命令设定16位工作模式、设置读取的扇区数目、相应地址和访问模式;然后发送读命令(0x20),等待CF卡准备就绪后,从数据寄存器中连续读取一个扇区的数据放入到数据缓冲区。


4 结束语
基于FPGA的海量数据采集系统采用FPGA作为控制器,CF卡作为大容量存储介质。采用FPGA读写CF卡,既利用了FPGA的内部资源丰富和设计方便的优点,同时利用了CF卡容量大、体积小和价格低廉等优点,给出了高效读写CF卡的方法,该方法已成功应用于实际系统中。

本文创新点:用FPGA读写控制CF卡,并且通过用双RAM方式存储数据,利用了FPGA的速度快和可以并行处理数据的优点。大大提高了工作效率。

相关帖子

沙发
GoldSunMonkey| | 2012-11-29 20:23 | 只看该作者
:lol

使用特权

评论回复
板凳
笑溜溜+| | 2012-12-8 12:12 | 只看该作者
:D

使用特权

评论回复
地板
jahnson066| | 2012-12-8 13:48 | 只看该作者
学习一下,我学fpga的主要应用目的就是高速及大容量数据采集处理

使用特权

评论回复
5
Backkom80| | 2012-12-10 08:43 | 只看该作者
:)

使用特权

评论回复
6
mr.king| | 2012-12-10 08:46 | 只看该作者
好像是好几年前的论文吧,瓶颈受制CF卡的写入速度

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

240

帖子

0

粉丝