正文:The solution of the host computer based on PCI-e high speed data
WANG Wen-cong, SAI Jing-bo
(Collage of electronic information and control engineering, Beijing University of Technology,Beijing,100022)
Abstract: In order to solve the problem of high speed data transmission between the user interface and the hardware, a new scheme based on PCI-e bus is proposed, which is based on the high speed data acquisition card. The problems of software in data transmission is explored. The use of multi-thread technology to solve the problem of real-time data acquisition, as well as significantly improving the use of CPU, and the use of PCI-e bus configuration process to send user commands to the hardware, saving bus resources; finally, the windows message in the window thread caused system lock problem is analyzed and solved. Experimental results show that the good performance of the PCI-e * 1 link bus data acquisition and processing which based on 2.5GHZ in the Labwindows/CVI environment.
Key words: high speed acquisition; PCI Express; labwindows
1 引言
随着信息化时代的到来,电子通信领域高速发展,硬件水平不断提高,通信速度的不断加快,引发了对用户界面的加速探索。实际应用中,海量数据的信息处理、高帧频图像的数据采集以及在线视频的实时显示的实现,都需要强大的用户界面来支撑。如何制作出一款简介,流畅的用户界面是急需解决的问题
[1]。
PCI-e作为第三代I/O技术由Intel公布,作为串行连接方式的总线,PCI-e协议规范定义了一种分层的设备体系结构,包括事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer),所有数据的接收和发送过程中均以包的形式在各层之间传输。其链路可由多条Lane组成,本实例使用×1链路总线,理论峰值带宽2.5GT/s
[2-3]。
为实现用户界面对硬件的良好控制,必须要一种高效,专业的软件来实现上位机的构建,本例使用近几年来比较新的labwindows/CVI作为虚拟仪器软件平台来进行上位机的开发。它以ANS工C为核心,将功能强大、应用广泛的C语言与测控专业工具有机地结合起来,并支持多线程,利用它的集成开发环境,在编程过程中直接调用用户界面函数和高级分析库函数,从而大大缩短软件的开发时间
[4-5]。
2 系统架构
本文硬件所用是自行设计的基于PCI-e总线的数据采集卡,逻辑框图如图1所示。采集卡使用Xilinx公司的Virtex-5系列FPGA作为控制核心器,并在内部配置了发送引擎(TX engine),DMA控制器,缓存空间FIFO以及存储空间RAM,其中DMA控制器作为与上位机通信的最主要模块,控制整个DMA数据传输过程。PCI-e IP硬核是Xilinx公司提供的PCI-e LogiCORE IP Endpoint Block Plus核,PCI-e采用源文件的形式加入工程。

图1 PCI-e逻辑框图
Figure1 PCI-e Logical block diagram
整个系统运行流程如下:如图2示,首先数据从IO 口接收传入FPGA,存入RAM中;RAM等待应用程序发送的指令,开启DMA传输;数据从RAM进入FIFO,通过DMA引擎,将数据打包并通过PCI-e链路向上位机发送数据,并解析数据;最后上位机将数据处理,显示并判断是否保存。由此可见,上位机作为整个系统的必不可少的部分,它运行的是否流畅,直接决定着用户体验。
图2 系统整体框图
Figure2 Diagram of whole system
3应用程序设计
本设计通过用NI公司的labwindows/CVI进行软件平台设计。CVI是一款近几年来流行的虚拟仪器开发软件,它是一款基于C语言,且集成了大量用户函数,便于开发的用户软件。并且CVI提供了使用简介高效的多线程技术,可以方便用户在主线程创建显示用户界面,在次线程中运行其余对实时性要求较高的数据采集处理过程。而且在用户使用辅助线程的时候,还需要注意数据保护问题,当多个线程同时访问某个变量的时候,程序需要能分别对全局变量,局部变量等进行保护,这样才不会导致不可预知的逻辑错误。CVI正好提供了三种保护数据的机制,方便使用
[6]。
3.1 多线程编程
实时控制中,常常都会遇到需要多个线程同时进行的情况,比如要求数据采集和数据处理同时进行,有时还要加上数据显示。普通的单线程编程算法,往往需要在数据采集结束完成之后才能进行数据处理,在处理结束之后再能进行数据显示,这样逻辑虽然简便,但不利于程序运行,程序效率太低,有时还会产生错误
[7]。而多线程技术可以将任务分给几个单独的线程同时进行,其中一个线程进行数据接收的同时,另外的线程执行数据处理以及显示的功能,这样可以最大限度的保证数据采集的实时性,尤其在数据量很大,数据处理很多的时候。
由于本系统采用PCI-e作为系统传递数据链路,查表1可得,×1链路理论峰值在2.5GT/s,这么高的数据传递速度,必须用到多线程接收数据。CVI提供了两种多线程运行的机制,分别为线程池机制和异步定时器机制,线程池适用于执行若干次或者一个循环内的任务,而异步定时器适用于定期执行的任务
[8]。由于数据采集卡需要实时性,因此需要循环采集数据,这就需要采用线程池机制。采用如下多线程流程图3。
PCI-e总线规范 |
总线频率/GHZ |
单lane峰值带宽GTs |
编码方式 |
1.X |
1.25 |
2.5 |
8b编码 |
2.X |
2.5 |
5 |
8b编码 |
3.0 |
4 |
8 |
128b编码 |
表1 PCI-总线规范与总线频率与编码关系
Table 1 PCI- bus specification and encoding relationship
但是数据处理速度取决于计算机,并且处理速度以及显示速度远不如PCI-e总线数据接收速度快,这就会造成数据拥堵,进而发生错误。因此就需要数据接收线程与数据处理线程之间存在一种数据保护的机制。
图三 多线程流程图
Figure3 Multi thread flow chart
3.2 线程间通信数据保护问题
在使用辅助线程的时候,我们需要解决的一个非常关键的问题是数据保护,当多个线程同时访问一个变量的时候,尤其会造成间歇性逻辑性错误,并且这种问题不一定每次运行都会发生,所以极难排除
[9-10]。
1/3 1 2 3 下一页 尾页