基于PCI Express总线的数据采集设备的实现
扫描二维码
随时随地手机看文章
引言
随着计算机技术的发展,数据传输带宽的日益增长,总线技术也在迅速的发展。高速信号传输,海量数据采集与记录,实时视频图像处理以及其他数据处理的数据吞吐量现以kMb/s为量级。
未来计算机系统对带宽和扩展性的要求已经超越了第二代总线技术。第三代高性能I/O总线技术——PCI Express(PCIE)总线解决了以往总线的不足,它的发展将取代第二代总线成为新的数据总线,其提供了更加完善的性能、更多的功能、更强的可扩展性和更低的成本。
本文研究PCI Express总线技术的发展与构架,介绍采用Xilinx公司的FPGA与NXP公司的PHY器件实现一种经济简单的数据采集设备。在电路设计中,分析了总线信号高速布线的要求。
最后详细介绍数据采集设备的数据通道部分在Xilinx Pipe Core中的实现,并通过WinDriver软件开发简单的驱动程序。
2 PCIE总线发展和构架介绍
2.1 PCIE总线的发展
PCI Express是用来互连诸如计算机和通信平台应用中外围设备的第三代I/O总线技术,第一代总线包括ISA,EISA,VESA和微通道(Micro Channel)总线,而第二代总线则包括了PCI,PCI-X和AGP。PCIExpress是一种能够应用于一点设备、台式电脑、工作站、服务器、嵌入式计算机和通信平台等所有周边I/O设备互连的总线。
PCIE最初由InteI发展,并于1992年在市场发布。PCIE的体系结构继承了第二代总线体系结构最有用的特点,并且采用计算机体系结构中新的开发成果。它保留了原先的通讯模型和下载配置机制,但抛弃了共享总线的方式,采用点到点的总线连接方式。由于它提供了更高的性能特点和越来越大的带宽,从而解决了PCI,PCI-X和AGP的许多缺点,是以后PC发展必然采用的接口总线,其必将取代PCI,PCI-X以及图形加速器(AGP)。
2.2 PCIE总线的构架
PCI Express保持了与PCI寻址模式(加载-存储体系结构具有单层地址空间)的兼容性,从而保证了对现有应用程序和驱动的兼容性。同时,PCI Express的配置机制是与PCI一致的即插即用标准。
软件层发出读写请求,使用基于数据包、分段传输的协议通过物理层传输至I/O设备。链路层向这些数据包添加序列号和循环冗余校验(CRC)以建立一个高度可靠的数据传输机制。基本的物理层包括传输对和接收对两个单工通道,统称为一个信道。1个lane的信道可以保证每个方向约250 MB/s标准带宽,这其中大约200 MB/s用来传输数据,其余被文件的协议部分占用。这一速率为一般PCI设备的2~4倍,同时PCIExpress总线点到点的总线连接结构可以让每个PCIExpress设备都具有这个带宽。
3 基于FPGA与PHY器件的采集设备实现
3.1 采集通道器件和FPGA的选型及设计
采集设备包含2个采集通道,采用模/数转换芯片ADS5102设计。ADS5102是德州仪器的一款10 b-65MSPS采样率并带内部电压参考的模/数转换器,采用1.8 V模拟供电。与同一类型的ADS5103相比,它的采样率更高,而且采用差分信号输入,有效地提高了输入信号的共模抑制比。
FPGA选用Xilinx公司Spartan-3系列XC3S1000。其采用90 nm材料生产,容量高、成本低,具有业界一流的区块和分布,具有多达784个I/O,MicroBlaze 32位RISC软处理器和支持乘法累加器(MAC)功能的嵌入XtremeDSP功能。
Xilinx Spartan-3 PCI Express设计包括一个PCIExpress Pipe Endpoint LogiCore。Xilinx低成本Spartan-3系列提供PCI Express协议层核。PCIE PipeEndpoint LogiCORE整合了分立的PCIE PHY,提供了全面的、完全符合PCI Express基础规范(PCI Express Base Specification)v1.1的PCIE端点解决方案。
3.2 外部PHY器件PX1011A
NXP公司的PX1011A符合PCI Express规范v1.0a和v1.1,是一款与低成本FPGA一起使用而优化的单通道2.5 Gb/s的PCI Express PHY器件。
数据由接收器的差分输入接口进入PXl011A,在被传送到解串化电路之前,这些数据将小振幅的差分信号变为轨对轨的数字信号。一个载波检测电路将检测线路上是否有数据并将这些信息传送到串行器/解串器SERDES和物理编码子层PCS。 SERDES将这些数据串并转化为10位并行数据。然后PCS采用8位/10位解码器来恢复成8位数据格式。
在发送过程中,来自Pipe接口的8位数据通过一个8位/10位编码算法进行编码。8位/10位编码确保串行数据被直流平衡以避免交流耦合系统中的基带漂移,它同时确保足够的数据转换以避免接收端的时钟恢复。
PX1011A的MAC接口采用独立的时钟,由片内100 MHz的基准时钟锁相环产生。锁相环有一个相对较高的带宽来实现可选的扩频并较少EMI。8 b数据接口在250 MFIz上运行并进行SSTL2信号发送,这种模式与流行的FPGA I/O接口兼容。
3.3 硬件电路设计
采集部分硬件电路包含2个通道的ADC和触发电路,每通道ADC转换后的数据 CH1[9:0]和CH2[9:0]传输到FPGA端口。PCIE接口电路包括3个部分:第1部分是PX1011A与FPGA的连接信号线,包括8位的收发信号TXD[7:0]和RXD[7:0];控制信号 RX_DATAK,RX_VALID,RX_CLK,RX_EIDLE,RX_POLAR,RX_PHY_STAT,TX_DATAK,TX_CLK,TX_EIDLE,TX_COMP,TX_DET_LOOP,TX PWRDN0,TX_PWRDN1,状态信号STAT0,STAT1,STAT2和复位信号RESET。第2部分是PX1011A与PCIE接口的连接信号线,包括差分接收信号,差分发送信号,差分时钟。第3部分是PCI Express的配置接口,包括PCIE_TMS,PCIE_TCK,PCIE_TDO,PCIE_TDI和PCIE_TRST。如图1所示。
PCB布线时有以下注意点:终端阻抗布线尽量降低容性;一组信号,避免在参考层断续;高速信号尽量在一层布线,且不打孔,否则要在过孔处打一个 U形的地孔;微波传输带,差分信号布线线宽5 mil,间距7 mil;带状传输线,差分信号布线线宽5 mil,间距5 mil。信号之间的间距在20 mil以上,高压和边缘尖锐的信号尽量远离差分线,避免干扰。
接口上数据采用SSTL2信号发送,传送速率达到250 MB/s。每组数据发送端需串行一个25欧姆电阻,数据接收端上拉50 Ω电阻,提高信号的阻抗匹配。TD和RX每组为8位250 MB/s信号,为了减少信号间的延时误差,每组信号布线时尽量等长且减少走线长度。[!--empirenews.page--]
3.4 Pipe Core实现PCIE总线协议
Xilinx PCI Express Pipe Core符合PCI ExpressBase Specification v1.1规范协议和电特性兼容,提供完整的端点解决方案包括物理链接与处理及配置管理模块。支持同步点对点通信,上行和下行流程控制,与PCI Express处理排序规则完全兼容。
Pipe Core数据管理包括传输层、数据链路层、物理层3个模块。这些模块包括产生和进行传输包、数据流的控制管理、物理接口初始化、并串转换以及其他的接口操作。由Pipe Core组成数据通道,并可以构成多PCI Express设备的拓扑结构。如图2所示。
4 基于WinDriver的驱动程序开发
4.1 采集设备的驱动安装
将数据采集设备安装到计算机PCI express×1插槽,启动计算机时操作系统会检测到此设备并提示添加硬件向导,忽略此提示。然后,从开始菜单选择 WinDriver/DriverWizard,新建工程。此时DriverWizard将会显示所有的计算机中的即插即用设备
根据设备信息(ID号)选择所要测试的设备,如图3所示,数据采集设备ID号为0301,双击此设备,出现设备测试对话框,向指定的设备空间写入数据测试设备是否工作良好。最后由DriverWizard生成简单的驱动程序代码。
4.2 数据传输模式与配置函数
驱动程序得到从数据采集设备发送的数据,并存储在指定的内存空间,根据用户的选择可以实时显示或者存储在磁盘空间。使用WinDriver编写的驱动程序通过WinDriver内核模块与硬件进行通信,本驱动程序要实现的主要功能是从设备读取指定的数据到计算机,并根据要求发送命令到设备控制寄存器对设备的各种状态进行控制。
设备与计算机进行数据传输有2种模式:PIO模式和DMA(直接内存访问)模式。PIO模式主要实现计算机和数据采集卡之间的命令传输;DMA模式主要针对大块数据传输,传输过程中不需要经过CPU,数据直接从设备传送到内存中,数据传输的速率快,可以充分利用PCIE数据带宽。
为了能从设备中读到数据,首先应该获得设备的信息,设备信息主要包括厂家ID号,设备内存映射空间,设备所在插槽号以及其他设备专用配置信息。只有获得了设备信息才能实现对设备的访问,这些信息通过下面2个函数得到:
void WD_PciScanCards函数用于检测安装于PCIE总线上的设备。Void WD_PciGetCardInfo函数获取PCI设备的资源信息,例如内存资源,I/O资源,中断资源等。对设备信息的登记是通过结构 WD_CARD_REGISTER来实现,它包含了硬件的各项信息。这些信息可以通过第一步中的2个函数获得。在确定WD_CARD_REGISTER结构后调用函数WDCardRegister向Windriver Kernel登记设备。在得到了设备信息并且向WinDriver注册了此设备后就可以在设备和计算机之间传输数据。
5 结 语
采用PCI express总线实现数据采集设备可以有效地提高数据的传输带宽,解决总线带宽不足瓶颈带来的种种问题。文中的总线设计为1个通道的PCI express,双向的读写速度为250 MB/s。后面的设计中会不断提高Pcie总线的通道数,以满足更高的总线设计需求。