FPGA在数据采集与传输中的应用
2012-08-08陶卫国
EDA技术是以高级语言描述、系统级仿真和综合技术为特征的第三代电路CAD技术。在我们研制的数据采集板上使用了该先进技术,采集板主要完成如下功能:A/D转换、数据缓存、数据传输。该板使用一片ALTERA公司的FPGA(Field Programmable Gate Array)芯片FLEX10K,完成了对A/D转换的控制,数据缓存,以及采集板与计算机的数据异步传输(UART)功能。如果用传统的设计方法完成上述功能至少需要使用MCU(微控制单元)、RAM、RS232的接口芯片等多块芯片。正是使用了先进的EDA技术使系统更紧凑、更可靠。本文将简要介绍FPGA的结构,开发方法,以及在我们的采集板中的应用。
1 FLEX10K芯片的结构与工作原理
大部分的FPGA是采用基于SRAM的查找表逻辑形成结构的,用SRAM来形成逻辑函数发生器,我们的数据采集板中的FLEX10K芯片主要由嵌入式阵列块、逻辑阵列块、快速通道和I/O单元四部分构成。其中逻辑阵列块由逻辑单元组成,逻辑单元又是由查找表与附加电路组成。逻辑阵列块是形成逻辑功能的基础,多个逻辑阵列块可以级联构成更大的单元。快速通道在逻辑单元与I/O单元间起连接作用。嵌入式阵列块是在输入、输出口带有寄存器的RAM块,可以提供存储器的功能。
2 开发系统与语言
我们用的是ALTERA公司的器件,所以开发软件平台使用MAXPLUSII,开发硬件平台使用GW48系统,HDL语言我们选择了Verilog,verilog语言一般用于硅片逻辑功能设计。
3 FPGA在采集板中的功能划分
采集板数据采集模块由A/D转换芯片ADC0809来实现。我们利用FLEX10K芯片的内部逻辑阵列块实现数据采集控制器ADCINT;利用其内部的嵌入式阵列块形成一个先进先出的存储器FIFO;利用快速通道和I/O单元实现向主机传送数据的通用异步收发器UART。其系统框图如图1:
图1 采集板系统框图
4 采集控制器和存储器功能的实现
4.1 采集控制器的实现
A/D转换器件ADC0809为单极性输入,8位转换逐次逼近A/D转换器,可对0~5V的INT0~INT7的8路模拟电压信号分时进行转换,当时钟频率为500 KHz,A/D完成一次转换的时间为130us。CBA作为8路通道选择地址,ALE是地址锁存允许信号,EOC为状态结束标志,START为转换启动信号,上升沿有效;OE为数据输出允许端,〔D0…D7〕为数据输出端。
可用硬件描述语言按有限状态机模式编写一个模块实现控制器的定制。其中:ST0初始态,ST1发送地址锁存信号ALE,ST2发送启动转换信号START,ST3检测转换结束信号EOC的下降沿,ST4检测EOC的上升沿,ST5发送输出使能信号OE,ST6发送输出锁存信号LOCK。
控制器的源程序如下:
4.2 FIFO存储器的实现
利用FLEX10K内部固有的存储模块,通过MAXPLUSII的兆功能块定制一个带20字节缓存的FIFO存储器,因为先入先出存储器不需要寻址,可以节省时钟周期,适合动态采集数据.存储器和控制器组成的控制存储电路AD_FIFO如下图2:
图2 控制存储电路AD_FIFO电路图
图中ADCINT就是采集控制模块,FIFO2是先进先出存储模块。AD_FIFO的工作分两个阶段,即采样阶段和数据读取阶段,在采样阶段WR_EN为高电平,CLK使能,ADCINT开始工作,读请求被禁止,当某一采样周期结束,ADCINT发LOCK信号,把出现在D[7.0]的采样数据存入FIFO2中。
在完成采样后进入读取阶段,在读取阶段,WR_EN为低电平,FIFO2的读时钟CLOCK由RD_EN控制,在每个上升沿,FIFO2的数据将逐一出现在端口Q[7.0]上。
应当注意的是,读时钟与采样时钟的区别:采样时钟是ADCINT的LOCK信号形成的,要与A/D转换速度匹配;读时钟是由外部时钟发生器的RD_EN形成的,同时读时钟应该与后面的数据传输的波特率匹配。
5 FPGA中UART功能的集成
UART是基于RS232协议的通用异步收发方式,有免费的软ip core经过裁剪功能后,再经过MAXPLUSII编译和综合到我们的FPGA中。在我们的采集板中的UART只集成了发送器的功能,确定发送方式为:波特率为9600bps;帧格式为,一个起始位、8个数据位、一个停止位。我们用16倍的发送速率做定时信号,还需要做一个16倍波特率发生器。
6 FPGA的整体功能配合和时序分配的问题
FLEX10K芯片中功能模块的连接情况如下图3:
图3 FLEX10K芯片内功能模块图
图中的CLK_PULSE单元用于为整个系统功能提供时钟信号,共需4种时钟信号:CLK_WRE采样周期,CLK_RDE采样数据的读周期,CLK_WRN数据的传输周期,BCLK为16倍的波特率。
整个时序配合情况如下:CLK_WRE根据ADC0809的转换速率130 US和设定的缓存区大小决定的采样时间;CLK_RDE要根据缓存的数据以及UART的传输速率,决定的数据的读时间;CLK_WRN要根据每帧的位数和发送波特率决定的传输时间;BCLK是波特率的16倍。在本系统中时序配合非常重要,它决定了数据传输是否能可靠实现,因此我们除了要准确计算各个时钟周期外,还利用MAXPLUSII的时序仿真功能,分析整个系统功能是否正确。
在时序仿真正确的情况下,在我们的数据采集板上做了实际验证,实际验证中发现接受的数据有误码。经分析后,发现是在传输中没有考虑芯片延时造成的,经过对时序的仔细调整后,最终解决了传输中的误码问题。
[1] FLEX 10K Embedded Programmable Logic Device Family[EB/CD] .http://www.altera.com/literature/ds/archives/dsf10k.pdf.January 2003,Ver.4.2.
[2] Donald E.Thomas,Philip R.Moorby.The Verilog Hardware Description Language[M] .Fifth Edition.New York:Kluwer Academic Publishers,2002.