APP下载

面向国产OS的PCI采集卡软硬件设计与验证

2017-07-31刘军霞杨先文

微处理机 2017年2期
关键词:采集卡命令时钟

刘军霞,杨先文

(1.河南省军区自动化站,郑州450003;2.信息工程大学,郑州450004)

·微机应用·

面向国产OS的PCI采集卡软硬件设计与验证

刘军霞1,杨先文2

(1.河南省军区自动化站,郑州450003;2.信息工程大学,郑州450004)

为了满足国产操作系统上数据采集的性能要求,在研究PCI采集卡原理的基础上,提出一种基于FPGA和Linux的PCI采集卡软硬件设计方案。硬件主要是对时钟模块、数据采集模块、FIFO模块和主控模块等FPGA的控制逻辑进行设计,软件主要包括应用程序和Linux驱动设计。验证结果表明,软硬件设计功能正确,并且与18 MHz时钟频率相比,高时钟频率采集性能提高了约15%至78%。当时钟频率为40 MHz时,采集速率不小于50.2 MByte/s,适用于数据采集速度要求较高的应用系统。

国产操作系统;Linux内核;PCI总线;采集卡;现场可编程门阵列;驱动

1 引言

数据采集系统广泛应用于军事、能源、航天等关键领域,如何将外界数据采集到计算机中,成为数据采集卡需要解决的问题。PCI(Peripheral Component Interconnect)是一种高性能局域总线标准,最大支持64位并行传输,工作时钟可达66 MHz,传输峰值可达528 MByte/s,已成为众多数据采集卡的接口方案[1-2]。

Linux作为一种支持多用户、多任务、多线程和多CPU的开放式操作系统(operatingsystem,OS)内核,已被国产OS广泛采纳,出现了中标麒麟[3]等许多优秀产品。由于OS关系关键领域信息化的自主可控安全,因而推广国产OS的意义重大。目前,针对PCI采集卡的驱动和应用程序设计大多针对Windows平台[4-5],面向国产OS的软件设计是亟待解决的问题。

为了适应国产OS数据采集系统要求,满足关键应用领域对数据采集的现实需要,在研究PCI采集卡原理的基础上,给出了PCI采集卡的软硬件设计方案。验证表明,面向国产OS平台的软硬件设计正确,采集性能满足速率要求高的应用场合。

2 PC I采集卡原理

PCI采集卡软硬件组成如图1所示,主要包括PCI采集卡和主机软件两部分。PCI采集卡主要由A/D转换逻辑、FPGA控制逻辑和PCI接口逻辑组成。基本工作原理:通过高速A/D转换逻辑采集外部模拟信号,通过FPGA控制逻辑实现数据缓存,以及控制PCI接口逻辑执行DMA传输将缓存数据写入主机内存中,便于主机对采集数据进一步处理分析。主机软件主要包括应用程序和PCI驱动。

图1 PCI采集卡软硬件组成

在PCI采集卡中,A/D转换和PCI接口逻辑一般采用专用芯片实现,例如PCI接口芯片采用PLX PCI9054,用户只需根据其时序要求完成I/O交互即可。而FPGA芯片作为采集卡的可编程逻辑,承担着对采集卡上所有时序和逻辑的控制任务,是PCI采集卡承前启后的重要组成部分。因此,FPGA控制逻辑是PCI采集卡嵌入式硬件设计的主要内容。

3 FPG A硬件设计

PCI采集卡的数据采集命令由主机发出,通过PCI9054的Target传输方式向FPGA控制逻辑传送命令。当FPGA控制逻辑收到命令后,控制数据采集模块实现对A/D数字信号的获取,并将采集数据缓存至FPGA中例化的FIFO模块中。当FIFO缓存容量满足中断触发条件时,通过PCI9054向主机发送本地中断请求,主机响应中断后,通过PCI9054的DMA传输方式读取FIFO数据至主机内存。FPGA控制逻辑的硬件设计原理如图2所示。

3.1 时钟模块

图2 FPGA控制逻辑设计原理

时钟模块主要向数据采集模块提供采样时钟,并向FIFO模块提供数据写入时钟wrclk。由于FIFO稳定工作时要求写时序不大于读时序,因此时钟模块一般是将晶振输入分频后作为数据采集模块和FIFO写入端的时钟输入。在FPGA中,大多集成有成熟的时钟分频装置,例如:Altera的FPGA都带有一个或多个PLL(Phase Locked Loop),可有效的对时钟进行分频、倍频和延时等处理。Xilinx的FPGA中集成的DCM(Digital Clock Manager),可有效的对时钟进行分频、去skew和相移等处理。

3.2 数据采集模块

数据采集模块主要是采集数字输入信号,产生FIFO的写请求wrreq及写数据din。若数字输入位宽和写数据din位宽 不相等(一般地, ),则需要计数??W??个时钟周期产生的wrreq,同时?W?将?W?个时钟周期内采集到的输入信号级联作?W?为写数据din。在设计中,多周期内输入信号的级联采用移位寄存器方式实现。

此外,由于数字输入所用时钟和采样时钟clk分属不同的时钟域,在使用clk对数字输入进行异步采样时,若数字输入不满足采样触发器的建立时间(Tsu)和保持时间(Th),就可能产生亚稳态[6]。在设计中,采用对异步信号进行同步处理方式消除亚稳态,通过多级寄存器提取边沿信号方式,保证采样数据的稳定性。

3.3 FI FO模块

为了实现数据采集和PCI9054本地传输的速度匹配,设计异步FIFO缓存采样数据。具体地,采用FPGA内部块存储器例化FIFO模块方式设计,在最大限度利用FPGA存储资源的同时,可使得设计更加灵活高效。目前,Altera和Xilinx的FPGA都提供FIFO例化功能,根据需要设置FIFO深度及其接口,即可完成FIFO模块设计。在本文中,我们基于Altera的EP1C12Q240C8型FPGA,设置FIFO深度为16 KB,FIFO接口包括aclr,wrclk,wrreq,din,wrusedw,rdclk,rdreq,dout,rdusedw。

3.4 主控模块

主控模块是FPGA控制逻辑最关键的设计,主要包括以下功能:

(1)控制数据采集模块

当LRESET#有效时,通过rst复位数据采集模块。当接收到数据采集命令时,解析该命令后置enable有效,使能数据采集模块工作。设置FIFO为计数wrusedw的上限,当wrusedw达到上限时,置位stop有效关闭数据采集功能,待FIFO数据读取至wrusedw低于上限时,置stop失效,开启数据采集功能。

(2)控制FIFO读取

当LRESET#有效时,通过aclr清除FIFO模块工作状态。设置FIFO为可读计数rdusedw的下限,当rdusedw达到下限时置LINT#有效,向主机发送本地中断请求。当接收到DMA传输命令时,解析该命令后置rdreq有效,通过DMA传输方式读取FIFO数据到主机内存中。

(3)控制PCI9054本地总线

当LHOLD#有效时,下一个时钟置位LHOLDA#有效,允许PCI9054使用本地总线。通过ADS#,BLAST#,LWR#,本地数据和本地地址接收主机命令,当接收到数据采集命令时,解析命令内容(由本地数据输入)置enable有效或无效;当接收到DMA传输命令时,解析命令内容(由本地地址输入)置rdreq和READY#有效或无效。根据FIFO缓存容量是否满足中断触发条件置LINT#有效或无效。同时,为了本地总线正常工作,置CCS#无效,通知PCI9054不选择配置寄存器;置BTERM#无效,通知PCI9054当前突发操作始终连贯完成。

4 Li nux软件设计

4.1 应用程序设计

为了快速使用PCI芯片,PLX公司提供了成熟的软件开发套件(Software Development Kit,SDK),包括一整套PCI9054的API访问接口[7]。基于PLXAPI接口,本文所述的PCI采集卡应用程序流程及关联API如图3所示,主要包括5个环节:发现PCI、打开PCI、发送数据采集命令、DMA传输和关闭PCI。

在应用程序设计中,需要注意以下问题:

(1)发送数据采集命令是通过PlxPci_PciBar-Sp-aceWrite()向PCI本地指定地址写入1个Bit-Size8数据实现的。BitSize8理论上可编码256个系统命令,满足大多数应用的命令编码空间需求。

(2)使用PlxPci_DmaChannelOpen()打开DMA通道时,需使用PLX_DMA_PROP结构数据定义通道属性,本文定义为:

PLX_DMA_PROP DmaProp;

memset(&DmaProp,0,sizeof(DmaProp));

DmaProp.ReadyInput=1;

DmaProp.Burst=1;

DmaProp.BurstInfinite=1;

DmaProp.SglMode=1;

DmaProp.DoneInterrupt=1;

DmaProp.ConstAddrLocal=1;

DmaProp.LocalBusWidth=2。

图3 应用程序流程及关联API

(3)使用 PlxPci_NotificationRegisterFor()注册DMA中断时,需使用PLX_INTERRUPT结构数据定义中断属性,本文定义为:

PLX_INTERRUPT PlxInt;

memset(&PlxInt,0,sizeof(PlxInt));

PlxInt.LocalToPci=(1<<DMAChannel);

其中,DMAChannel表示DMA通道,一般为0或1。

(4)使用PlxPci_DmaTransferUserBuffer()获取DMA数据时,需使用PLX_DMA_PARAMS结构数据定义DMA参数,本文定义为:

PLX_DMA_PARAMS PlxParams;

memset(&PlxParams,0,sizeof(PlxParams));

PlxParams.UserVa=(PLX_UINT_PTR)pUserBuffer;

PlxParams.LocalAddr=LocalAddress;

PlxParams.ByteCount=sizeof(pUserBuffer);

PlxParams.Direction=PLX_DMA_LOC_TO_PCI。

其中,pUserBuffer为自定义内存指针,LocalAddress为自定义本地地址。LocalAddress应与FPGA控制逻辑中定义的DMA本地地址保持一致。

4.2 PC I驱动设计

在PLX SDK中,提供了PCI9054 Windows驱动程序。由于Linux系统具有差异性,只提供了Linux系统驱动开放解决方案,基于该方案,编译中标麒麟操作系统驱动的步骤如下:

(1)uzip命令解压PLX_SDK_Linux_*.zip,得到PlxSdk.tar,并拷贝到工作目录下(建议为/usr/src/);

(2)tar命令解压PlxSdk.tar,得到PlxSdk目录;

(3)以编辑模式打开/etc/environment,按下语句设置系统环境变量:

export PLX_SDK_DIR=/usr/src/PlxSdk;(4)根据机器配置设置如下环境变量:export PLX_CPU_BIG_ENDIAN=1;export PLX_CPU_BITS=64。

(5)在Driver目录下进行驱动编译(使用builddriver或builddriverall命令),编译后,Plx9054目录中的Plx9054.ko就是PCI9054驱动。

驱动编译完成后,在每次操作系统启动时,使用Bin目录下Plx_load(或Plx_unload)命令向驱动列表中加载(或卸载)驱动。加载成功后,PCI采集卡和应用程序才能正常交互,否则 PLX API将返回ApiNoActiveDriver错误。

5 实现与验证

基于PCI DTK(V2.0)实验板[8],在中标麒麟操作系统(V3.2.2)[3]下,对PCI采集卡的软硬件设计进行了实现。FPGA控制逻辑基于Altera的EP1C12-Q240C8芯片实现,Linux应用软件基于Qt环境[9]开发。为了检验设计的正确性及采集性能,采用两个实验进行验证。

实验1:采用FPGA实现方式,在数据采集模块前端放置一个实验数据产生逻辑,用来仿真A/D数字信号(此时A/D转换逻辑不参与实验)。在数据内容上,仿真数据可按某种规则产生(如使得相邻两个数据之差为1)。在Linux应用程序中增加数据检查功能,通过检查采集数据是否满足数据产生规则,判断设计是否正确。经过验证,本文PCI采集卡软硬件设计正确。

实验2:采用多通道信号发生器产生随机模拟信号,向PCI采集卡提供真实的模拟输入(此时A/D转换逻辑参与实验)。为了检验PCI采集卡的效率,性能验证包括两部分:①以采集固定量的内存数据为目标,通过配置不同的FIFO写入时钟频率(通过时钟模块分频得到,也是数据采集模块的采样时钟),比较应用程序多次运行的数据采集性能;②分别固定FIFO写入时钟频率,以采集不同量的内存数据为目标,分别比较应用程序的数据采集性能。试验结果如图4所示。运行平台为:中标麒麟64位操作系统(V3.2.2)、Intel酷睿I5处理器四核、主频(3.2 GHz)、内存4 GByte。

图4 PCI采集卡性能验证

由图4(a)可知,随着FIFO写入时钟频率的增大,PCI采集卡性能呈上升趋势。相比于18MHz,20、24、30、40MHz效率分别提高了约15%、41%、56%、78%。由图4(b)可知,从纵向角度看,可得出与图4(a)类似的结论;从横向角度看,对于每一时钟频率,随着采集数据量的增多,PCI采集卡效率经历下降阶段后趋于平稳。当FIFO写入时钟频率为40 MHz时,PCI采集卡性能不小于50.2 MByte/s,可满足数据采集速度要求高的应用系统。

6 结束语

在军事、能源、航天等关键领域,采用国产OS是保证信息安全的基础。为满足国产OS对数据采集的应用需要,提出了一种PCI采集卡的软硬件设计方案,并检验了方案的正确性及实际性能,对实现PCI采集卡向国产OS的集成应用具有参考价值。

[1]王海明,胡金龙,吴丽华.基于PCI总线的高速数据采集卡设计[J].计算机测量与控制,2012,20(12):3393-3396. Wang Haiming,Hu Jinlong,Wu Lihua.Design of hignspeed data acquisition board based on PCI bus[J].Computer Measurement&Control,2012,20(12):3393-3396.

[2]马涛,郑鑫.基于PCI数据采集卡的高速多通道数据采集系统[J].电子技术应用,2015,41(2):75-77. Mao Tao,Zheng Xin.High speed multi-channel data acquisition systembased on PCI data acquisition card[J].Application ofElectronic Technique,2015,41(2):75-77.

[3]中标软件.中标麒麟操作系统[EB/OL].[2016-01-18]http: //www.cs2c.com.cn/product/index.php?id=9 Standard Software.NeoKylin domestic operating system [EB/OL].[2016-01-18]http://www.cs2c.com.cn/product/index.php?id=9

[4]冉义兵,魏东,王义.实时图像识别系统PCI驱动程序设计与开发[J].计算机工程与设计,2014,35(9):3337-3340. Ran Yibing,Wei Dong,WangYi.Design and development of PCI driver for real-time recognition systems[J].Computer EngineeringAnd Design,2014,35(9):3337-3340.

Design and Verification of Software and Hardware of PCI Acquisition Card for Domestic OS

Liu Junxia1,Yang Xianwen2

(1.Automatic Command Station,Henan Provincial Military Command,Zhengzhou 450003,China; 2.Information Engineering University,Zhengzhou 450004,China)

To meet the performance requirements of data acquisition in the domestic operating system,after researching the principle of PCI acquisition card,a design of software and hardware for PCI acquisition card based on FPGA and Linux is proposed.The hardware is mainly designed for FPGA control logic,including clock module,data acquisition module,FIFO module and main control module.The software mainly includes the design of application program and Linux driver.Validation results show that the design of hardware and software is correct,and the acquisition speeds of high clock frequency,compared with that of 18MHz clock frequency,are increased by about 15%to 78%, and the speed is not less than 50.2 MByte/s when the clock frequency is 40MHz,,which is suitable for the system with high requirements on the acquisition speed.

Domestic operating system;Linux core;PCI bus;Acquisition card;Field Programmable Gate Array(FPGA);Driver

10.3969/j.issn.1002-2279.2017.02.014

TP274.2

A

1002-2279-(2017)02-0059-05

刘军霞(1973-),女,河南省滑县人,高级工程师,主研方向:计算机网络与信息安全。

2016-07-07

猜你喜欢

采集卡命令时钟
只听主人的命令
高精度AD采集卡性能测试及评价方法研究
别样的“时钟”
古代的时钟
血液采集卡存储装置的设计与应用
移防命令下达后
面向数控机床的多通道传感数据采集卡设计
有趣的时钟
脉冲采集卡的开发
时钟会开“花”