《[学位论文]高速数据采集系统的设计实现及存储瓶颈问题.pdf》由会员分享,可在线阅读,更多相关《[学位论文]高速数据采集系统的设计实现及存储瓶颈问题.pdf(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、华中科技大学硕士学位论文高速数据采集系统的设计实现及存储瓶颈问题的解决姓名:王元祥申请学位级别:硕士专业:通信与信息系统指导教师:张蕴玉20061216 I摘 要 本文介绍了一种 PCI/PCI-X 高速数据采集存储系统,本系统为一种通用的高速数据采集平台,其采样速率高达 100Msps,连续不间断传输和存储速率达 133MB/s,可以满足数据的连续采集、实时存储的需求。目前,上 GHz 的高速 ADC 采集已经不成问题,但是实时数据存储成了整个系统的瓶颈。对目前基于个人计算机的 32bit/33MHz PCI总线的中速采集系统而言,其存储介质一般为 IDE/ATA 硬盘,受其限制,实时稳定存
2、储速率只能达到 30MB/s 到50MB/s左右。因此,实时数据存储是高速采集存储系统的一个技术瓶颈。通过大量研究,决定采用支持 64bit/66MHz PCI/PCI-X 总线和 SCSI 独立磁盘冗余阵列(RAID)的工控服务器作为计算机平台,采用 SCSI 硬盘构成的 RAID 作为采集系统的存储介质。单个 Ultra-320 接口的 SCSI 硬盘有高达 50MB/s 的存储速率,多个 SCSI 硬盘并行工作,使系统的存储速率达到 133MB/s 以上,实现简单,工作稳定可靠。本文对数据采集系统的基本理论进行了叙述,并对本采集系统的性能指标提出要求。同时用大量篇幅对本采集系统的硬件实现
3、和 WDM 驱动程序/MFC 应用程序的设计进行了详细描述,包括理论验证、仿真结果分析、具体连线以及程序流程图。并着重提出了数据采集系统存在的存储瓶颈问题,并针对性的提出了有效的解决方案。采用高性能的数据拆分重组方法,在硬件上采用 RAID0 技术以获得最大化的磁盘访问速率,在软件上通过增大内存缓冲区以提高磁盘的存储效率。通过这些优化,本系统解决了采集系统中经常遇到的存储速率瓶颈的问题,可广泛应用于电子侦察、电子对抗、雷达信号处理、软件无线电、数字通信、图像采集、视频采集、空间信息采集等需要持续采集并存储的项目中。关键字:高速数据采集;存储瓶颈;RAID;PCI;SCSI IIAbstract
4、 This paper describes a PCI/PCI-X high-speed continuous acquisition and real-time storge system based on PLX PCI9656.The acquisition rate of the system is 100Msps,and continuous transfer and storage speed is up to 133MB/s.It meets the requirement of continuous acquisition and real-time storge.High-s
5、peed Analog-Digital Convert is not the problem nowadays,but real-time storage becomes the bottle-neck of the whole system.For middle-speed acquisition system based on 32bit/33MHz PCI bus of personal computer,its storage media is IDE/ATA hard disk,subject to its restrictions,the stabilized storage ra
6、te is between 30MB/s to 50MB/s.So storage is technical bottle-neck of acquisition and storage system.Through extensive research,decided to adopt a server that support 64bit/66MHz PCI-X and SCSI RAID as the computer platform,and RAID constructed by SCSI hard disks as the storage media.This paper desc
7、ribes the principle of sampling and acquisition,and takes the requirement of the acquisition system.Meanwile,it recites the hardware design and WDM driver/MFC application design,including principle validation,simulation,wiring,flowchart of programming.It also emphasizes the problem of bottle-neck of
8、 storage,and showes the solution.Using high-performance data recombine methods,adopt RAID0 technology to access maximum disk rate,increasing meomery buffer to improve the efficiency of disk,these optimizations solve the problem caused by the bottle-neck of storage,so that the system can be widely us
9、ed in the projects that need continuous acquisition and storge in various fields,such as electronic surveillance,radar signal processing,digital communications,video acquisition,spatial information acquisition,etc.Keywords:High-speed data acquisition;Bottle-neck of storage;RAID;PCI;SCSI 独创性声明独创性声明 本
10、人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到,本声明的法律结果由本人承担。学位论文作者签名:日期:年 月 日 学位论文版权使用授权书学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等
11、复制手段保存和汇编本学位论文。保密,在_年解密后适用本授权书。不保密。(请在以上方框内打“”)学位论文作者签名:指导教师签名:日期:年 月 日 日期:年 月 日 本论文属于 11 绪 论 1.1 数据采集的基本概念 随着计算机技术的发展与普及,数字设备正越来越多地取代模拟设备,在生产过程控制和科学研究等广泛的领域中,计算机测控技术正发挥着越来越重要的作用。然而,外部世界的大部分信息是以连续变化的物理量形式出现的,例如温度、压力、速度等。要将这些信息送人计算机进行处理,就必须先将这些连续的物理量离散化,并进行量化编码,从而变成数字量,这个过程就是数据采集。它是计算机在监测、管理和控制一个系统的过
12、程中,取得原始数据的主要手段1。传统的数据采集就是将被测对象(外部世界、现场)的各种参量(可以是物理量,也可以是化学量、生物量等)通过各种传感元件做适当转换后,再经过信号调理、采样、量化、编码、传输等步骤,最后送到控制器进行数据处理或存储记录的过程。控制器一般均由计算机承担,所以说计算机是数据采集系统的核心,它对整个系统进行控制,并对采集的数据进行加工处理。用于数据采集的成套设备称为数据采集系统(Data Acquisition System,DAS or DAQ)。另外在军事领域,信息战中的电子侦察使用数据采集系统对敌方的无线通信信号或者雷达信号进行采集,经过信号调理、采样、传输等步骤后,送
13、到控制器进行数据处理或者进行存储,以便实时进行盲解调或者脱机进行特征分析,得到敌方信号特征之后可以采取相应的对策(军事行动、电子对抗等)。数据采集系统是计算机与外部世界联系的桥梁,是获取信息的重要途径。数据采集技术是信息科学的重要组成部分,已广泛应用于国民经济和国防建设的各个领域,并且随着科学技术的发展,尤其是计算机技术的发展与普及,数据采集技术特有广阔的发展前景。数据采集系统追求的最主要目标1有两个:一是精度,二是速度。对任何有目的的测试都要有一定的精确度要求,否则将失去测试的意义;提高数据采集的速度不仅仅是提高了工作效率,更主要的是扩大数据采集系统的适用范围。同时,速率提高有助于更好地在信
14、息战场环境下的电子战中捕获到敌方的瞬变脉冲通信信号。1.2 本系统的应用背景 如果要对无线信号进行处理,就需要将信号进行数字化,而直接对载频进行数字化是不太现实的,毕竟载频频率可以高达几 GHz或几十 GHz,因此需要先对载频 2进行下变频之后对中频进行数字化。中频信号的带宽通常在十几 MHz到几十 MHz,根据 Nyquist采样定理,中频采样频率必须不低于 2 倍中频频率,而在应用中根据需要,一般采用 34 倍(也可以多至 10 倍)的中频频率采样,因此对几十 MHz 的中频信号进行采样需要 100MHz以上的采样频率。在空间信息采集领域,可以对雷达高度表回波中频进行采集存储2 3,之后再
15、进行地形算法处理,得到空间信息数据。本课题的研究内容为:开发一个实时的高速数据采集系统,采样速率为 100Msps(sps:Samples per Second),采样精度为 10bit/8bit,要求能够连续采集、实时存储。其具体参数为:采集速率 100Msps,系统分辨率 10bit,系统精度=8bit,动态范围=60dB,非线性失真=8bit,动态范围=60dB,非线性失真=100Msps;系统分辨率10bit:要求ADC的采集位数=10bit,系统的传输带宽=10bit;系统精度(有效比特位数)8bit:要求ADC的有效比特位数=8bit,根据式2.5,模拟电路和ADC整体的信噪比必须
16、大于50dB(假定输入信号幅度可达ADC满幅);动态范围60dB:要求ADC和信号调理电路的动态范围都=60dB;非线性失真0.8%:要求ADC和信号调理电路的非线性失真之和=200MB/s速率=133MByte/s(系统的预期)DMA传输FIFO/2字节a).数 据=FIFO/2中 断 请求 DMAb).数 据FIFO/2DMA 开始 c).DMA结束 数据Rg2/Rf2,取Ri2=Rs-(Rg2/Rf2);(b)若信源内阻Rs=100Msps 满足 系统分辨率 10bit(由ADC保证)=10bit 满足 有效比特位数(ENOB)8.4bit(由ADC决定)=8bit 满足 失真度 略大于
17、0.43%(主要由调理电路决定)=60dB 满足 数据流量(Rate)200MB/s(由PCI传输以及存储系统保证)133MB/s 满足 因此可以判断系统的设计方案理论上可以满足预定的需求。283.6 电磁兼容问题 对于一个速率为100MHz以上的高速系统来说,电磁兼容问题就显得非常重要。如何提高系统的抗干扰性能,提高系统的可靠性,是一个必须解决的问题。本系统采用以下措施保证系统能互不干扰的工作29:(1)模拟地和数字地互相隔离。模拟电路和ADC的模拟电源采用DC-DC供电,进行隔离。另外,为了模拟电路/ADC不受到计算机机箱内的电磁干扰,因而将模拟板放到机箱外,以避开了计算机机箱内的强电磁干
18、扰。(2)在高速线路板设计过程中,PCB 布局布线非常重要,它会直接影响整个系统的性能,如果布线不符合要求,可能会使整个系统无法正常运行。高频信号很容易由于辐射而产生干扰,高速变化的数字信号会导致振铃、反射、串扰等。而模拟电路部分如果线布得不好,会降低系统的信噪比。布线时主要需要考虑电源层和地层的分配、高速信号线端接、串扰的影响及消除、减少电磁辐射等,以满足信号完整性及EMC的要求,另外还要注意数据线和地址线走线尽量等长。(3)信号调理板与PCI采集卡需要用线缆连接起来,线缆中传输的是ADC的采样时钟和ADC输出的并行采样数据。ADC输出数据的每个位都和数字地组成双绞线对,和PCI采集卡相联,
19、这样可以避免ADC输出的各个位互相串扰。294 WDM驱动程序和 MFC 应用程序开发 驱动程序是软件与硬件进行交互的界面。从 Intel80386 开始,出于安全性和稳定性的考虑,x86 系列的 CPU可以运行于 ring0ring3 从高到低四个不同的权限级,对数据也提供相应的四个保护级别。运行于较低级别的代码不能随意调用高级别的代码和访问较高级别的数据,而且也只有运行在 ring0 层的代码可以直接对物理硬件进行访问,因此驱动程序运行在 ring0 层下30。由于WindowsNT/2000/XP 是一个支持多平台的操作系统,为了与其他平台兼容,它只利用了 CPU 的两个运行级别,一个被
20、称为内核模式,对应 x86 的 ring0 层,是操作系统的核心部分,设备驱动程序就是运行在该模式下;另一个被称为用户模式,对应 x86 的 ring3 层,操作系统的用户接口部分(就是我们通常所说的 Win32 API)以及所有的用户应用程序都运行在该级别。图 4.1 WIN2000 系统的分层结构 如图 4.1,在物理硬件与系统核心之间有一个硬件抽象层(HAL,Hardware Abstraction Layer),它屏蔽了不同平台硬件的差异,向操作系统的上层提供了一套统一的接口。从图中我们还可以看到,设备驱动程序(Device Driver)是被 I/O 管理器(I/O Manager)
21、包围起来的,即驱动程序与操作系统上层的通信全部都要通过 I/O 管理器。这给驱动程序的编写带来了很大的便利,因为很多诸如接收用户的请求、与用户程序交换数据、内存映射、挂接中断、同步等等麻烦的工作都由 I/O 管理器代劳了。在 WINDOWS2000 中,驱动程序分为三种:总线驱动程序(bus driver),功能驱动程序(function driver),以及过滤驱动程序(filter driver)。总线驱动,是指 PCI 30总线的 PDO 驱动,由 WINDOWS 提供,不需要设计。在工作过程中,总线驱动将扫描 PCI 插槽,并枚举它们,负责管理 PCI 总线的物理信号。本系统中需要设计
22、的驱动程序,实质上是功能驱动程序。功能驱动程序工作在ring0 层,负责 PCI 设备的逻辑功能实现,提供了一个应用程序与硬件交互的接口;应用程序工作在 ring3 层,负责将存储在内存中的数据存储到硬盘中。图 4.2 为系统驱动程序和应用程序的框图。图 4.2 驱动程序和应用程序框图 应用程序是用户和计算机进行交互的界面。应用程序通过键盘、鼠标或触摸屏等输入设备得到用户的操作,然后通过 API(Application Programming Interface,应用程序编程接口)将命令发送给硬件驱动程序,从而驱动相应的硬件。4.1 WDM 设备驱动程序开发 设备驱动程序就是控制硬件设备的一组
23、函数。在 Windows 环境下,如果要处理硬件中断,实现 DMA 操作,就一定要用到设备驱动程序,开发即插即用(PnP)设备(如PCI 接口卡、USB接口设备)更是这样31,32。Y 应用程序:数据存储 数 据存 储线程1数 据存 储线程2存储进程控制 Ring3 Ring0 初始化 PCI9656 初始化内存缓冲区 处理 IoCtl Code删除硬件 处理 SetEvent 内存 缓冲区 满?设置缓冲区指向下一个将被传送的条块 设置 DMA 参数 调用 SetupBusMaster 启动 MasterDMA DMA 完成 引起中断 卡上FIFO半满,FPGA 发中断 中断引起 Isr_Ir
24、q 调用 禁止中断 清除中断源 允许中断 31WDM(Win32 Driver Model)是 Microsoft 公司力推的全新的驱动程序模式,它的应用平台是 Windows 98/Me/2000/XP 操作系统。在 Windows 平台上,WDM 已经成为主流的驱动模式。WDM 驱动程序是分层的,不同层上的驱动程序有不同的优先级。另外,WDM还引入了功能设备对象 FDO(Function Device Object)与物理设备对象 PDO(Physical Device Object)两个新类来描述硬件,一个 PDO 对应一个真实的硬件。一个硬件只允许有一个 PDO,却可以拥有多个 FDO
25、,在驱动程序中直接操作的不是硬件而是相应的 PDO 和 FDO。WDM 不是通过驱动程序名称,而是通过一个 128 位的全局唯一标识符(GUID)实现驱动程序的识别。在应用程序与 WDM 驱动程序通信方面,系统为每一个用户请求打包形成一个 I/O 请求包(IRP)结构,并将其发送到驱动程序,并通过识别 IRP中的 PDO 来区别是发送给哪一个设备的。内核通常通过发送 IRP 来运行驱动程序的代码。WDM 驱动程序完全支持即插即用。一个 WDM 驱动程序的功能模块可由以下几个部分组成33:驱动程序初始化。创建和删除设备。处理 Win32 程序打开和关闭句柄的请求。处理 Win32 程序输入/输出
26、请求。实现对设备的串行化访问。访问硬件。取消 I/O 请求。超时 I/O 请求。调用其他驱动程序。处理电源管理请求。使用 Windows 管理诊断(WMI)向系统管理员报告。处理一个可热插拔的设备被加入或删除的情况。WDM 驱动程序有一个主要的初始化入口点,即一个称为 DriverEntry()的例程,它有一个标准的函数原型,当 WDM 驱动程序被装入时,内核调用 DriverEntry()例程。所有对各种 IRP 的处理例程都在此入口函数中做出定义。大多数的 WDM 设备对象,都是在即插即用管理器调用 AddDevice()例程入口点被创建的。插入新设备后,当系统找到由安装信息所指示的驱动程
27、序时,这个例程调用在此之后,一系列的即插即用 IRP 被发送到驱动程序,设备驱动程序可进行相应的功能处理。开发 WDM 驱动程序有两种方法,一种利用微软提供的 WinDDK(例如 98 DDK、2000 DDK 和 XP DDK)驱动程序开发包,另外一种是专用驱动程序开发工具,如 32Compuware Numega 公司的 DriverStudio、Tech 公司的 WinDriver。后者给出驱动程序的框架,并对 DDK 中操作进行封装,因此减少了开发时间,提高了效率,并且对运行速度、效率影响很小;缺点是在封装过程中可能产生了一些新的 bug,比如内存泄漏等问题。因此驱动程序采用适用于 W
28、indows98/2000/XP 平台(源代码兼容,二进制代码不完全兼容)的 WDM 架构,选用了 DriverStudio 开发工具开发 PCI 驱动程序。编写工具包括 Visual C+、Win DDK(必须使用与操作系统对应的 DDK)、Driver Studio 2.7。驱动程序的类组成和文件组织结构如图 4.3:图 4.3 WDM 驱动程序的类组成和文件组织 驱动程序中,需要开辟至少两个内存缓冲区,以完成乒乓式的内存读写操作。如图 4.4。33 图 4.4 内存缓冲区的读写乒乓式切换 硬盘的实际存储速率跟持续读写速率、寻道时间、旋转延迟等参数有关。内存缓冲区越大,对磁盘发起写操作的时
29、间间隔越大,因此寻道时间等耗用的时间就会减少,可以大大提高系统的整体性能33,34。驱动程序的结构和流程图如图 4.5。AddDevice创建PCI9656设备DriverEntry驱动程序入口检测到硬件基本驱动例程PCI9656:xxx()Isr_MyIrqIRQ中断服务例程DeviceControl响应应用程序操作StartIo开始I/O传输I/O控制例程PCI9656Device:xxx()DpcFor_MyIrq中断延迟过程调用RequestDpc应用程序写:操作命令应用程序读:缓冲区基地址DMA完成:切换缓冲区本地中断到来:启动DMA初始化和结束PCI9656Device:xxx()
30、OnStartDevice初始化和连接PCI配置资源Create初始化PCI9656申请缓冲区内存ResetDevicePCI9656复位InitializeAdapter初始化适配器InitializePorts初始化端口OnStopDevice释放和断开PCI配置资源DefaultPnp默认PNP操作DefaultPower默认电源管理Dispatch例程PCI9656Device:xxx()图 4.5 驱动程序的结构和流程图 写 读 写 读 缓冲区0 写 读 缓冲区1 写 读 写 写 读 写 读 时间tD M A 过来的数据 数据写入硬盘 344.2 MFC 应用程序开发 程序的类组成和
31、文件组织结构如图 4.6:图 4.6 MFC 应用程序的类组成和文件组织 在 Windows 中,Win32 应用程序调用 WDM 驱动程序的 Win32 函数有五个:CreateFile(),ReadFile(),WriteFile(),DeviceIocontrol(),CloseHandle()。(1)打开一个 WDM 设备 应用程序打开一个 WDM 设备驱动程序,用的是 CreateFile()函数,它的第一个参数不是一个 WDM 文件名,而是一个符号链接名。符号链接名的获得需要调用SetupDiGetClassDevs(),SetupDiEnumDeviceInterfaces(),
32、SetupDiGetDeviceInterfaceDetail()三个函数。SetupDiGetClassDevs()打开指定 GUID 的设备的设备信息集,SetupDiEnumDeviceInterfaces()取出感兴趣的设备实例的信息,35SetupDiGetDeviceInterfaceDetail()获得实例的符号链接名。最后调用 CreateFile()函数获得设备的句柄,这样它就能够调用Win32函数,这将产生对应于此设备对象的 IRP。(2)关闭一个 WDM 设备 WDM 允许多个应用程序打开同一个设备,它为每个应用程序创建一个设备对象。当其中的一个应用程序调用 CloseH
33、andle()函数,驱动程序首先收到清除IRP,驱动程序应当在清除例程中清除和此设备对象有关的待处理的 IRP。然后关闭 IRP,关闭设备对象。(3)ReadFile()、WriteFile()和 DeviceIoControl()函数的调用 这些调用都产生一个请求,产生 IRP 请求包传递给驱动程序,实现对设备的读、写和一些特定的操作。采集开始之后,FillMain0()线程等待驱动程序的 hEvent,当 hEvent 到来之后,把对应的缓冲区存入硬盘。应用程序结构以及流程图见图 4.7。DoModal显示应用程序窗口InitInstanceMFC应用程序类入口应用程序类CDataTran
34、sferApp:xxx()OnPaint窗体显示刷新OnCancel退出,释放资源OnInitDialog初始化窗体窗体类CDataTransferDlg:xxx()OnStart开始采集打开PCI设备获取缓冲区基地址初始化Event,数据存储线程发送开始采集命令全局函数FillMain0数据存储线程当Event到来则将缓冲区数据存入磁盘Timer更新时间信息关闭PCI设备停止数据存储线程OnButtonStop停止采集发送停止采集命令 图 4.7 应用程序结构以及流程图 365 系统中的存储瓶颈及其解决 只有在系统各个部件的数据吞吐量都超过预设的数据流速率之后才能使系统达到预设的采集速率。要
35、是某个部件的速率不够,都会造成系统的采集速率达不到预设值。PCI 采集卡本身能够达到 100Msps 的采集速率,关键还是计算机本身的数据吞吐量和硬盘的存储能力是否足够。对于一般普通 PC 而言,PC 只具有 32bit/33MHz的 PCI插槽,这样的 PCI 的理论极限速率只能达到 132MByte/s,不能满足本系统的需求;而且 PC 一般都不支持磁盘阵列,而单个磁盘的速率在现有条件下最多只能达到 50MByte/s 的实际读写速率,也不能满足本系统的需求。因此需要考虑高端一些的计算机系统,使得系统的传输和存储速率能够稳定可靠的达到 130MByte/s 以上。经过市场调研,选用一款 I
36、ntel构架(IA,Intel Architecture)的服务器。该服务器主板上比普通 PC 主板多出了一个部分,就是 PCI-X 64bit HUB I/O 桥芯片 P64H2。北桥 E7501 和 PCI HUB 桥 P64H2 之间有 1GB/s 的带宽,和 266MHz DDR RAM 之间有 2GB/s 的带宽。图 5.1 即为该服务器主板的结构图35。此服务器支持 2 个独立的快达 64bit/100MHz的 PCI-X 总线接口,并且支持多个SCSI 硬盘组成 RAID 磁盘阵列。系统选用的 PCI 接口芯片 PCI9656 支持 64bit/66MHz的 PCI 总线接口,其
37、理论速率为 528MByte/s,能够满足系统需求。服务器其他配置为:Xeon 至强 2.4GHz 处理器,2GB DDR333 RAM,SCSI Ultra-320 硬盘 36GB4,IDE ATA 硬盘 80GB。由图 5.1 可见,PCI 卡通过 DMA 传输过来的数据通过两个桥芯片暂时存储在内存里面,内存缓冲区存满之后,由应用程序操作将内存中的数据再通过两个桥芯片存入 SCSI 硬盘中。因此两个桥芯片之间的数据通道以及 DDR RAM 的吞吐量由两个方向的数据流所共享。37 图 5.1 服务器主板结构以及数据在主板上的流向图 系统中数据流的流向和系统中各部件的数据吞吐量如图 5.2 所
38、示。数据流在传输过程中都没有碰到瓶颈,而存储是本系统最大的采集瓶颈。38PCI采集卡FPGAPCI9656PCI总线计算机主板桥芯片计算机内存计算机硬盘需求:100Msps实际:105MspsADC模拟信号需求:100M*10bit/s实际:100MHz*32bit(FPGA)66MHz*32bit(PCI9656本地端)需求:100M*10bit/s实际:66MHz*64bit(PCI9656 PCI端)100MHz*64bit(主板PCI总线)需求:100M*10bit/s实际:1GB/s(主板桥间数据通道,双向)需求:100M*10bit/s实际:333MHz*64bit(DDR RAM
39、,双向)266MHz*64bit(北桥DDR控制器,双向)需求:100M*10bit/s实际:4个SCSI Ultra-320硬盘组成RAID0 图 5.2 数据流流经的各部件的数据吞吐量 目前物理存储器介质主要有以下几种:硬盘、Flash ROM、RAM。硬盘的特点是:容量大,速率适中(单盘速率在 50MB/s 左右),机械抗振动性能低;Flash ROM的特点是:容量小,速率低(主流 Flash读写速率仅为几十 ns),无论从容量和速率来说都不能达到系统需求,但其机械抗振动性能高;RAM 的特点是:容量小,速率高(DDR333 RAM 的速率可以达到 2.6GB/s)。但因为系统需要长时间
40、不间断采集,而采集速率比较高,所以需要比较大的存储空间,所以不能使用 Flash ROM 和 RAM 作为主要存储器,因此只有使用硬盘作为主存储器。5.1 硬件优化 RAID0 磁盘阵列 由于单个硬盘无法达到100MB/s及以上的实际存储速率,因此需要采用独立磁盘冗余阵列(Redundant Array of Independent Disks,RAID)技术。RAID把多块独立的物理硬盘按不同的方式组合起来,形成一个逻辑硬盘,从而提供比单个硬盘更高的存储性能和提供数据备份3640。RAID有从RAID 0到6的七种基本的RAID级别4043。其中的RAID0又称为Stripe或Stripin
41、g(条带化),有着所有RAID级别中最高的存储性能44。如图5.3所示,RAID0把连续的数据按照数据块(512字节到数兆字节)分散到多个磁盘上存取,系统的数据请求被多个磁盘并行的执行,每个磁盘执行属于它自己 39的那部分数据请求。图5.3 RAID0工作原理示意图 这种数据上的并行操作将输入/输出负载平均分配到所有的驱动器,可以充分利用总线的带宽,显著提高磁盘整体存取性能。由于驱动器可以同时写或读,性能得以显著提高。但是,它却没有数据保护能力。如果一个磁盘出故障,数据就会丢失。RAID0不适用于关键任务环境,但是,它却非常适合于需要高速存取的采集存储系统、视频/图像生产编辑系统。条带允许从多
42、个磁盘上同时存取信息,可以平衡磁盘间的I/O负载,从而达到最大的数据容量,最快的存取速度。本系统选用 RAID0 以获得最佳存储性能,使用了 4 个 SCSI 硬盘组成 RAID0。5.2 软件优化 加大内存缓冲区 系统在采集数据时,并不是由主板上的PCI总线控制器来操作读取PCI卡的每一个双字,而是将计算机内存中存储采集数据的缓冲区的首地址、数据总长度写入PCI9656的DMA控制寄存器中,然后通过写DMA控制寄存器来启动PCI9656上的DMA传输机制,将PCI卡上FIFO缓存的数据传输到计算机的内存缓冲区中。数据存满缓冲区之后,由应用程序写入到计算机的硬盘上去,等待后端处理。在选择磁盘阵
43、列的时候,选用的 SCSI 硬盘的寻道时间和旋转延迟等参数应该越小越好。硬盘的实际存储速率还跟磁盘的寻道时间、旋转延迟等参数有关。每次对磁盘进行操作时,磁盘磁头需要先移动到目标磁道,然后等待目标扇区旋转到磁头下方,之后才能对目标扇区进行访问。平均寻道时间与平均旋转延迟时间之和称为平均访问时间(Average Access Time)。如图 5.4 为磁盘的操作时序。时间t访问持续传输访问持续传输TdTd 图5.4 磁盘的操作时序 对于采集存储系统而言,不能漏掉任何一个有效比特,所以在做系统需求分析 40时必须以最大访问时间(Maximum Access Time)来计算。另外,在写入数据时必须
44、尽量在连续的物理扇区上进行写操作,这样可以省去下一扇区的寻道时间和旋转延迟。设每次写入数据磁盘都是对连续的物理扇区进行写操作,令硬盘的最大存取时间为Td(s),内存缓冲区大小为Db(Byte),系统的预定工作速率为S(Byte/s),则每秒钟就需要对硬盘进行S/Db次写操作,因此每秒钟内用于寻道等消耗的时间为Td*(S/Db)(s),存储效率为E=1-Td*S/Db*100%。在硬盘选定之后,Td就确定了,而系统的预定采集存储速率S也一定,则效率E随着内存缓冲区大小Db变大而变大。图5.5表示了磁盘的存储效率和内存缓冲区大小的关系。设磁盘阵列的平均持续写速率为Sd,则存储效率E不能小于阈值E1
45、=S/Sd,否则数据将不能够及时写入磁盘,会造成下一个数据块丢失。此时的缓冲区大小为Db1=Td*S*Sd/(Sd-S)。系统内存缓冲区大小必须大于阈值Db1,否则会造成数据块丢失。E=1-Td*S/Db*100%缓冲区大小Db存储效率Db0=Td*S100%0E1=S/SdDb1=Td*S*Sd/(Sd-S)图5.5 磁盘的存储效率和内存缓冲区大小的关系 内存缓冲区越大,那么对磁盘发起写操作的时间间隔越大,因此寻道时间、旋转延迟等非存储操作耗用的时间就会减少。提高缓冲区大小对系统的整体性能来说是不容忽视的,因此在编写底层PCI驱动程序时申请的缓冲区原则上是越大越好。416 调试与验证 6.1
46、 模拟板的调试 模拟板主要有 2 个部分:信号调理电路、ADC,其中信号调理电路分为三级。主要的调试难点是信号调理电路。图 6.1 为模拟板的结构示意图。输入级Vs缓冲级输出级ADC+-参考电压Vref=AVCC/2=1.65VV1=Vs*G1V2=V1*G2V3=V2*G3DataOut/10DC-DC12VAVCC=3.3V 图 6.1 模拟板的各个部分以及测试点示意图 调试步骤:1、电源(测试点:AVCC=3.3V)由于信号调理电路使用的是 DC-DC 电源供电,因此首先保证 DC-DC 电源能正常工作。模拟电源为 3.3V,由 DC-DC 电源从 12V变换而来。2、参考电压(测试点:
47、Vref=1.65V)由于信号调理电路使用的是 3.3V单电源,因此整个调理电路需要一个参考电压(或称偏置电压)作为模拟信号的中间电平。参考电压为 AVCC/2=1.65V。3、第一级输出(测试点:V1=Vs*G1)第一级输出 V1=Vs*G1,直流成分电平为 Vref。4、第二级输出(测试点:V2=V1*G2)第二级输出 V2=V1*G2,直流成分电平为 Vref。5、第三级输出(测试点:V3=V2*G3)第三级输出 V3=V2*G3,为差分信号。6、ADC 输出(测试点:DataOut)ADC 输出 DataOut 应该随着 ADC 的输入模拟信号而变化,低位数据的变化应该 42比高位数据
48、变化得更频繁。6.2 PCI 接口卡的调试 PCI 接口卡主要由 PCI9656、FIFO、FPGA 组成。如图 6.2。PCI9656FIFOFPGAEEPROM有源晶振From ADCTo PCI Bus3.3VLDO线性电源5V-2.5V5V-1.5VFrom PCI BusPower Supply3.3V给大部分器件供电2.5V给PCI9656内核供电1.5V给FPGA内核供电20MHz时钟JTAGJTAG下载程序 图 6.2 PCI 接口卡调试示意图 调试步骤如下:1、电源 PCI 接口卡需要三个电源:?直接从 PCI 插槽取出的 3.3V主电源,给大部分芯片供电;?PCI9656
49、内核需要 2.5V电源,由 LDO 从 PCI 插槽的 5V 稳压得到;?FPGA 内核需要 1.5V电源,由 LDO 从 PCI 插槽的 5V 稳压得到。调试第一步需要检查三个电源电压是否正常。2、时钟 本地时钟由一个有源晶振生成,送入 FPGA,再由 FPGA 内部的 PLL 倍频得到系统需要的各种频率的时钟。系统需要 3 个时钟:?FPGA 输入时钟,由有源晶振供给,频率 20MHz;?PCI9656 本地时钟,由 FPGA 倍频输出,频率 60MHz;?ADC 采集时钟,由 FPGA 倍频输出,频率 100MHz;开始调试的时候只能先测试有源晶振的 20MHz是否有输出,因为现在 FP
50、GA 还不一定能正常工作。PCI9656 本地时钟和 ADC 采集时钟要在 FPGA 正常工作之后才 43有输出。3、PCI9656 的 EEPROM配置 用通用编程器将配置信息烧写进 EEPROM,然后将 EEPROM插入 PCI 接口卡的 EEPROM插座上。4、PCI 接口卡上电测试 此步骤测试 PCI 端以及 PCI9656 工作是否正常。当 PCI 端信号线未连接正确或者 PCI9656 未配置正确,则计算机有可能无法启动。计算机启动之后用 SoftIce 用 PCI 命令查看,如果能够找到 VID=10b5,PID=9656的 PCI 设备,说明 PCI9656 已经被系统识别出来