基于FPGA的水声信号高速采集存储系统设计*

2011-07-28 01:32代明清冯西安耿云辉李晓花
网络安全与数据管理 2011年23期
关键词:状态机寄存器串口

代明清,冯西安,耿云辉,李晓花

(西北工业大学 航海学院,陕西 西安 710072)

数据采集与存储是信号处理的一个重要环节,已被广泛应用于雷达、声纳、语音识别、图像处理等领域。随着信息技术的发展,特别是各种数字信号处理器处理速度的提高,实时处理大量的数据已经成为现实。但是,由于水下环境恶劣,实验成本高、水声信号复杂多变等不利因素的影响,水声信号的实时采集一直比较困难。根据实际问题,本文研制开发了一种基于FPGA和Flash的高速大容量数据采集存储系统。该系统采用蓄电池供电,能在水下工作,可回收,有效解决了水声信号的实时采集、存储及后期处理等问题。

1 系统总体设计

图1是该数据采集存储系统的总体框图。系统主要由信号调理模块、A/D转换模块、Flash数据存储模块和RS-232串行通信模块组成。FPGA是整个系统的核心,主要完成模数转换控制、数据存储控制及数据通信控制等功能。

前端信号调理电路负责接收换能器传来的电压信号,经稳压、放大、滤波、射极跟随后,将信号转变为适合A/D转换的信号进行模数转换。FPGA将读取到的A/D量化后的数据存入内部FIFO中,并将数据最终写入Flash。RS-232串口用来实现系统与PC机的通信功能,以便将Flash中存储的数据传给计算机进行处理。

A/D转换芯片采用ADI公司的AD9224,其转换精度为12 bit,最高采样率可达40 MSPS。FPGA采用Altera公司的EP1C6Q240C8,内部逻辑单元可达到200 60个,RAM可达到288 KB,拥有240个管脚,最大I/O数目为185。Flash采用SAMSUNG公司的K9WAG08U1A芯片,外部接口速度为 40 MHz,接口宽度 8 bit,存储容量为 2 GB。

图1 系统整体框图

2 系统硬件电路设计

2.1 信号调理及A/D转换电路

水声信号在传播过程中衰减得非常严重,换能器接收到的水声信号往往比较微弱,一般为μV级信号,不适合A/D转换器直接采样。因此,必须先经过信号调理电路的处理[1]。信号调理电路能够对目标信号进行适当的放大、滤波,并将单端输入信号变为差分信号提供给A/D转换器,以减少偶次谐波的产生。

图2 信号调理模块框图

2.2 Flash存储电路

Flash芯片的数据与控制引脚均与FPGA相连,由于FPGA没有数据总线和地址总线,因此只能利用FPGA的一般I/O口来模拟总线。此外,还需要使用FPGA的一般I/O口与Flash芯片的控制相连,通过编程实现相应的控制功能。图3为Flash芯片与FPGA的连接情况。

由于Flash是按页存储数据的,当写完一页后,要重新写入下一页地址。因此,为保证采集到的数据能及时存入Flash,而不至于在页与页的交替间丢失,本系统设计了FIFO用于数据缓存。AD9224的采样精度为12 bit,Flash的存储位宽为8 bit,Flash需2 B存放一帧数据,低8 bit存储低8 bit数据,高 4 bit加补充码存储高 4 bit。另外,在FPGA内设计了专门的地址发生器,以便于合理分配Flash的存储空间。

图3 FLASH芯片与FPGA接口电路

2.3 RS-232串口电路

在串行通信中,普遍采用的是RS-232[2]接口标准,该模块主要由FPGA串口模块、MAX3232和DB9组成,具体连接如图4所示。图中左边为EIA RS-232-C连接器DB9,与计算机串口相连,右边 TXD、RXD与FPGA中的UART模块相连,MAX3232为电平转换芯片,完成EIA RS-232-C正、负电压逻辑电平与TTL以高、低电平间的转换。

图4 RS-232串口电路图

3 系统软件设计

本系统主要软件设计包括FIFO、UART及Flash的读、写和擦除控制。开发工具为Altera公司的QuartusII 7.2,开发语言为 VHDL[3]。

3.1 FIFO缓存程序设计

FIFO是一个带有控制逻辑模块的先进先出存储队列,控制逻辑模块能管理读写指示器,产生状态标志。FIFO将前端传来的数据进行缓存,有效解决了速率匹配、数据缓冲和总线匹配等芯片间的通信问题。在本系统中,对Flash芯片写控制字和写数据都需要一定时间,FIF0容量的大小应大于该时段内所能送来的最多数据量,以免堆栈溢出,造成数据丢失。本设计采用的缓存为异步FIFO,数据位宽12 bit,存储深度512 bit。图5为QuartusII环境下FIFO的仿真结果。

3.2 通用异步收发器程序设计[2]

通用异步收发器(UART)用于计算机和RS232接口间的串行通信,主要由接收模块和发送模块组成,两模块均采用状态机编程实现。

接收模块的功能是将外部传来的串行数据转换为字节,存储到内部FIFO中。当数据线RXD由逻辑1变为逻辑0时,数据传送开始。为防止误判,接收时钟设为波特率时钟的16倍,起始位至少要保持8个周期的低电平,才算采集到数据。起始位后面为数据位和停止位,每16个时钟周期采集1 bit数据。

接收状态机由 R_start(等待起始位)、R_center(求中点)、R_wait(等待采样)、R_sample(采样)和 R_stop(停止位)5个状态组成,图6为UART接收状态机状态图。

图6 UART接收状态机状态图

Rsync为数据位RXD的同步信号,没有数据时,接收机一直处于R_start状态,Rsync为逻辑1。当Rsync变为逻辑 0后,状态机进入 R_center状态,通过 Rcnt计数到“1000”,寻找到起始数据中点,紧接着转到 R_wait状态,Rcnt清零。待 Rcnt再次计数到“1110”时,状态机进入R_sample状态采集第一位数据,并将该位数据存入移位寄存器,接着采集下一位数据。Rbitcnt用于判断采集到数据的位数,Rbitcnt不等于Framelen设定的初始常数值(数据位数 8)时,继续采集。否则,进入 R_stop状态,将移位寄存器内数据送入FIFO,结束本帧数据的采集,等待下一帧数据的到来。

发送模块的功能则是将FPGA内部传送来的字节转换为串行数据,传给PC机,该模块产生的串行数据与接收模块串行数据应具有相同的帧格式。发送模块由X_idle(空 闲)、X_start(起 始 位)、X_wait(移 位 等 待)、X_shift(移位)和 Xsop(停止位)5个状态组成,图 7为 UART发送状态机状态图。

复位状态下,UART处于X_idle状态,当接到发送命令Xcmd后,状态机进入X_start状态。在此状态下,UART给TXD发送16个时钟周期的逻辑0作为起始位,而后转入 X_wait状态。X_wait、X_shift的原理与发送模块相似,实现数据的并串转换。X_stop用于产生停止位1,停止位传送完毕后,状态机回到X_idle状态,等待下一转换命令的到来。

图7 UART发送状态机状态图

3.3 Flash读、写、擦除程序设计

Flash的基本操作[5]主要有:读操作、页编程操作和块擦除操作,各种操作必须按顺序写入相应的命令才能顺利执行。图8是Flash三种基本操作的流程图。

图8 Flash三种基本操作流程图

Flash的编程是以页为单位的。首先写入80h,紧接着写入5个地址,然后把一页2 112个数据写入数据寄存器,再写入70h命令,启动读状态寄存器,读取寄存器值,如bit0=0的表示编程成功,为1则表示编程失败。

Flash的擦除操作是以块为单位的。先写入60h命令,载入3个地址周期,再写入D0h命令,启动当前块的擦除操作。当擦除完成后,写入70h命令,启动读状态寄存器,读取寄存器值,如bit0=0,则表示擦除成功,为 1则表示擦除失败。

Flash在读操作时,首先将00h写入到命令寄存器,紧接着写5个地址周期和30h命令,即可读取相应地址单元的数据。

由于在每一片K9WAG08U1A中都包含有少量的不能进行读写的无效块,因而,对K9WAG08U1A开始读写操作之前,必须把无效块检测出来,形成无效块信息列表,并存放在FPGA内。SAMSUNG公司确保每个无效块的第1页或第2页的第2 048列地址处会有非FFh的数据存在。因此,可以读取每块第1页或第2页的第2 048列地址处数据,若不为FFh,则本块为无效块,需要标记出来。建立Flash坏块信息列表如图9所示。

本文介绍了一种基于FPGA的水声信号数据采集存储系统,对系统硬件电路和软件设计都进行了详细介绍。该系统既可以对现场信号进行采集,又可对采集到的信号进行回放,经过多次实验室调试和水池实验,系统工作正常。该系统利用蓄电池工作,存储容量大,适用于水下微弱信号的采集处理,且通道数可根据需要进行扩展,前景广阔,值得推广。

图9 Flash坏块检查流程图

[1]赵志刚.舷侧阵主、被动自导实验系统的硬件设计[D].西安:西北工业大学,2007.

[2]王彦.基于 FPGA的工程设计与应用[M].西安:西安电子科技大学出版社,2007.

[3]潘松,黄继业.EDA技术与VHDL[M].北京:清华大学出版社,2007.

[4]杨夏,王平等.基于 FPGA的简化 UART电路设计[J].微计算机信息,2008,24(23):226-227.

[5]刘加奎.高速大容量存储系统设计[D].西安:西安电子科技大学,2008.

猜你喜欢
状态机寄存器串口
STM32和51单片机寄存器映射原理异同分析
浅谈AB PLC串口跟RFID传感器的通讯应用
Lite寄存器模型的设计与实现
基于有限状态机的交会对接飞行任务规划方法
移位寄存器及算术运算应用
三段式状态机在单片机中的实现
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
串口技术的实物调试和虚拟仿真联合教学模式
Lx5280模拟器移植设计及实施