文献标识码:A
文章编号: 0258-7998(2011)12-0040-04
工业自动化设备的快速发展,对控制精度的要求越来越高,对数据采集的可靠性和实时性的要求也不断提高。提高数据采集系统性能的方法有:(1)采用高性能的ADC器件,配合低噪声、低静态偏移的前端驱动电路,以达到极高的采样吞吐和采样分辨率。目前高端的ADC器件分辨率可达24 bit,采样率已达40 GS/s[1]。(2)设计数据存储为FIFO,以提高数据采样实时性和数据存储深度。(3)采用高速数据通信技术,完成由底层数据采集单元到上位计算机的数据传输,利用上位机软件平台进行数据的分析处理和多样化的输出显示[2]。数据采集系统的性能瓶颈在于高速采样数据实时存储,以及上下位机间的数据传输能力。
针对ADC器件,一般采用微控制器以指令方式控制其执行时序,但微控制器的速度有限,而且一般需要3~4条指令完成一次数据采样工作,制约了ADC的采样吞吐[3]。如目前高性能的浮点型DSP TMS320C6713B的外部总线时钟也仅为100 MHz[4],难以直接控制超过50 MS/s ADC器件的数据采样或存储。此外,微控制器对外访问为标准时序,并不具备针对精密复杂采样时序ADC器件的能力。而FPGA具有较高的运行主频,用于控制底层器件的执行时序,具备良好的接口能力,能最大限度地保障ADC的采样率[5]。
为保证数据采样的实时性,应尽可能减少数据实时采集、预处理、存储和传输过程中的时间开销,需设计高性能的数据链路,一方面实现高速采样数据的实时存储,另一方面实现底层数据采集单元与上位机之间的数据交互。DMA(Direct Memory Access)方式由专用的DMA控制器完成多系统单元之间的快速数据交互,包括微处理器内核、存储区、外部接口等,不占用大量的处理器时间,而且数据传输速率不受处理器执行速度限制,能有效减轻处理器的负担,提高数据传输的效率,从而提高系统性能[6]。
本文提出了一种基于FPGA的DMA方式高速实时数据采集系统设计方案:基于FPGA实现高速ADC器件采样时序控制与实时存储;采用带DMA控制器的PCI接口,将数据实时传输到上位机;数据采集、存储与传输呈流水线方式进行。
1 数据采集系统总体结构
DMA方式数据采集是指数据采集过程由底层数据采集单元完成,而数据采集结果不经过微处理器而被直接写入系统内存。底层数据采集单元依照上位机设定而高效运行,对微处理器的依赖程度低,能有效节省上位机软件开销,且数据采集实时性高。
数据采集系统的总体架构如图1所示,其中PCI核、DMA控制器与A/D控制器均在FPGA内部实现。为实现多路并行采样,可选用多片A/D器件并行处理的方式,在FPGA的高速状态机控制下,完成模拟信号经过多片A/D器件流水转换,并将数据采样结果储存到由Block RAM构建的高速缓冲RAM阵列中,采样时序由FPGA生成,保证了多路并行采样的高同步性。
FPGA采用Altera公司的Cyclone IV系列 EP4CGX150,内部带有6.3 MB嵌入式 Block RAM,支持最高频率167 MHz的存储区访问,易于设计接口友好的存储区[7]。在FPGA内部设计了数据FIFO用于实现总线速率匹配,PCI总线速率为32 bit、33 MHz,而数据采样流水速率为16 bit、20 MHz。为提高总线利用率,需设计数据缓冲来实现不同速率数据传输之间的速度匹配,而数据缓冲的深度取决于采样数据实时性要求。
采用以上结构具有如下优点:(1)底层A/D控制器提供精密采样时序,保证了ADC器件的采样吞吐,最大化地保证数据采样的实时性;(2)采用带DMA控制器的PCI接口与上位机进行数据交互,减少了上位机软件负荷; (3)基于单片FPGA芯片设计,结构简单而优化,可靠性高,可降低成本。
2 数据采集系统的实现
2.1 PCI IP核
PCI总线是独立于处理器的32 bit或64 bit局部总线,在32 bit/33 MHz时,可达到132 MB/s的带宽;在64 bit/66 MHz 时,可达到528 MB/s的带宽[1]。通常PCI总线接口通过专用的PCI桥芯片或带PCI控制器DSP器件(如TMS320C6205等)实现。
Altera公司推出的 PCI Compiler 软件包可以参数化地生成应用于PCI总线的IP核,基于该IP核可生成符合32 bit/33 MHz PCI 2.2规范的主从控制器,包含了PCI总线的全部功能,能实现总线协议的转换,并将复杂的、时序要求高的PCI总线操作,转换成易于使用本地总线(Local 总线)的接口逻辑[6]。
PCI IP核的结构如图2所示,包括:(1)配置寄存器:用于保存PCI设备的基本信息;(2)PCI地址数据缓存:用于缓存PCI总线上的地址信号;(3)主模式接口控制模块:负责在主模式(Master)下对PCI总线的操作;(4)从模式接口控制模块:负责在从模式(Slave)下PCI总线的操作;(5)奇偶校验器:当数据校验出错时,生成一个错误信息输出到配置寄存器;(6)本地主模式控制模块:负责主模式下的本地接口控制逻辑;(7)本地从模式控制模块:负责从模式下本地接口控制逻辑;(8)本地逻辑接口模块:负责控制本地端接口的地址、数据、控制、字节使能等[6]。
2.2 DMA控制器
针对高带宽、低延时和大量数据存储与传输需求,设计了基于PCI IP核的DMA控制器。该DMA控制器是系统中的核心单元,实现高速采样数据向上位机的DMA方式实时传输。DMA控制器结构如图3所示,内部寄存器堆定义了DMA控制器的行为,而上位机可通过PCI总线设置相应的寄存器。
系统的数据链路中包含有两种设置:(1)上位机对PCI IP核配置寄存器的设置,其对应的访问操作完全遵循标准的PCI总线配置读写操作时序;(2)上位机对DMA控制器内部寄存器的设置,作为PCI目标地址映射到系统的PCI地址空间,其访问操作符合PCI Target访问时序。DMA内部寄存器堆被直接映射到上位机的PCI地址空间,其基地址由PCI 核中配置寄存器设定,上位机通过设置DMA寄存器控制DMA的执行。PCI IP核完成标准PCI访问与Local总线访问之间的时序转换,而DMA控制器按照其寄存器堆的设置,完成各个Local总线设备之间的数据传输,并通过PCI IP核申请PCI总线,向上位机进行数据传输。
DMA控制器设计了两个通信接口:接口0可以进行主、从模式通信;接口1仅能进行主模式通信。在主模式下,每个通信接口可主动对Local总线进行访问;而处于从模式时,仅能接收来自Local总线的命令及返回相应的数据至Local总线。考虑到总线速率并不一致,即采用FIFO进行数据缓冲;A/D采样数据被缓冲到FIFO中,而DMA引擎将读取该数据并发送到上位机,数据存储和读取呈流水线方式并行进行,其实时性损耗仅在于DMA引擎启动延迟。值得注意的是:在上位机连续发起对后端的访问时,需确定上次的Local总线访问是否已结束;而当总线速率差异过大时,应该在PCI访问时序中插入等待周期,以避免造成数据丢失。
DMA引擎支持多通道模式(提供4个通道),可对应多个A/D器件,大大提高了系统数据传输的并行度。每个通道都可在两个接口之间通信,当两个接口都处于主模式时,一个接口负责从目标设备读取数据,数据通过DMA控制器的寄存器缓存,而通过另一个接口写入目的设备。当多个通道同时收到DMA请求时,如果所访问的端口不冲突,则每个通道可以各自独立地通过所访问的端口资源进行DMA传输,从而提高DMA数据传输的效率。考虑到通道对接口访问可能产生冲突,则需要引入通道优先级仲裁机制。多个通道间的仲裁机制如图4所示。
当多个通道同时请求时,DMA引擎应该进行优先级仲裁,来判定哪个通道占据数据传输接口。DMA控制器工作过程如下:(1)上位机通过DMA控制器接口0向其寄存器写入配置信息,包括中断设置、DMA传输接口配置、各通道的工作方式设置、传输数据长度、源地址及目的地址等。(2)待配置信息写入完毕,DMA数据传输开始。若设置使用两个接口传输数据,则处于主模式的接口从数据源读取数据,经过通道内部缓存,由另一个处于主模式的接口写入目的地址。(3)某个通道数据传输完成后,会设置其控制状态寄存器的对应位,若对应中断没有被屏蔽,则DMA引擎通过接口0向微处理器提交中断;若在传输过程中出现错误,则控制状态寄存器对应位置位,而DMA引擎同样会向微处理器提交中断。
2.3 A/D采样控制及数据存储
TLC5510A是CMOS 8 bit精度、20 MS/s采样速率的ADC器件,采用Semi-flash架构[8],支持5 V单电源供电,典型功耗为130 mW,包含内部采样保持电路、高阻抗的并行接口以及内部采样参考。Semi-flash架构减少了功耗而且简化了数据比较转换逻辑。TLC5510A实现流水线方式采样,每个时钟周期完成一次数据采样。在FPGA内部设计了A/D控制器,负责提供ADC器件采样时序控制信号,完成采样及存储控制,将采样数据实时写入数据FIFO。值得注意的是:ADC的数据采样结果会延迟3个周期输出,则FIFO存储地址输出应该有对应的延迟时序,如图5所示。将逻辑存储地址以采样时钟速率延迟3个周期,即可生成实际存储地址,而将采样数据存储到缓存FIFO的对应空间中。
上位机通过设置采样序列,可完成特定采样率的若干次采样(通过设置采样存储深度),且采样数据被无延迟地存储入数据FIFO,A/D控制器随后申请DMA传输,在DMA控制器的作用下,该采样数据高效传输至上位机。
3 实验平台与结果分析
为了验证本文介绍的高速实时数据采集系统性能,建立如图6所示的实验平台。上位机提供设备驱动程序,实现对数据采集卡的初始化,能对端口进行读写操作、中断设置和响应及中断调用,以及对内存的直接读写等。驱动设备基于Driver Studio完成,其包含完善的源代码生成工具以及相应的类库和驱动程序样本,提供了在VC++下进行驱动程序开发的支持。
接触传感器CIS(Contact Image Sensor)广泛用于扫描仪、清分机以及其他机器视觉应用中。本实验平台中采用山东华菱电子公司的LT2R183N-090723传感器,该器件最大支持1 440×800的图像扫描分辨率,传感器信号采用三路式模拟信号输出方式。自行设计的数据采集卡与上位机共同构成了本文所介绍的数据采集系统,系统中包含3个并行的TLC5510a 器件,以实现对CIS器件三路输出的采样。图7为CIS传感器输出的图像信号波形,图8为采用SignalTap II工具获取的数据存储时序。
本系统完全支持8 MS/s采样率的DMA方式数据存储与传输。目前,数据采集系统的性能瓶颈在于CIS传感器输出速率较低(最大10 MHz,试验中采用8 MHz),但本文讨论的方法理论上支持最高66 MS/s采样速率的应用。
本文提出了一种基于FPGA的DMA方式数据采集系统设计方案,数据采集结果不经过微处理器而直接被写入系统内存,而采样时序定义由底层控制提供,确保了ADC器件的采样吞吐;采用带DMA控制器的PCI接口与上位机进行数据交互,既减少了上位机软件负荷,又最大限度地保证了采样数据的实时性。即使进一步提高A/D器件采样速率,本架构依然适用。本数据采集系统已应用于高速图像采集中,具有良好的移植性,可应用于采样速率高、数据采集量大、数据实时性要求的数据采集系统。
参考文献
[1] 唐林波,赵保军,韩月秋.超高速数据采集与处理系统的设计及应用[J].系统工程与电子技术,2005,27(7):1203-1206.
[2] 罗伟林.基于USB2.0的高速数据采集系统[D].哈尔滨:哈尔滨工业大学,2008.
[3] 肖金球,冯翼,仲嘉霖.高速多路实时数据采集处理系统设计[J].计算机工程,2004,30(24):180-182.
[4] Texas Instruments Incorporated.Floating-point digital signal processor(DSP):TMS320C6713B.2006:13-73.
[5] 邓庆绪,宁宝锋,金曦,等.基于局部动态可重构技术的多通道数据采集系统[J].小型微型计算机系统,2010,9(9):1778-1883.
[6] 张浩,徐宁仪,周祖成.基于PCI Core的链式DMA控制器设计[J].电子技术应用,2005,31(3):11-13.
[7] Altera Incorporated. Cyclone IV device handbook,volume 1. 2010:15-29.
[8] Texas Instruments Incorporated.TLC5510,TLC5510A high-speed analog-to-digital converters handbook.1999:1-4.