基于FPGA的多接口高速PCI传输系统设计
2012-09-30董海兰康怀祺
董海兰 康怀祺 钟 午
(电子科技大学 成都 611731)
1 引言
由于实时观测的要求和外场试验环境复杂性的限制,在现代科学实验和高速实时仪器的开发中,探测器前端和存储模块常常需要将大量数据高速传输到PC机端进行实时观测或者数据转存。因此,大部分高速采集系统和存储系统都需要设计相应的数据传输模块[1~7]。同时,随着采样技术和存储技术的飞速发展,日益增长的数据量也对数据传输速率提出了更高的要求。高速数据传输模块的单独开发使得这些大型系统的开发周期变长,开发难度加大。采用高速、通用的数据传输系统可以有效地缩短它们的开发周期,同时也可以降低其开发难度。考虑到千兆以太网接口以及高速光纤接口板间高速通信中应用广泛[8~10],同时32位的PCI接口也能很好地兼容大部分普通的PC机,本文设计了一个基于FPGA的多接口高速PCI传输系统。它具有千兆以太网接口、高速光纤接口以及32位PCI接口,可以将前端探测器和存储芯片的数据通过千兆以太网或者光纤接口传入,再由PCI接口高速传输到PC机端。通过PCI设备驱动的开发,PCI接口的数据可以通过DMA(Direct Memory Access,直接内存存取)传输方式,高速地传输到PC机。通过大量数据传输的测试,整个传输系统能够以102 MB/s的速度稳定、无丢失地将数据传输到PC机端中。传输系统具有接口通用、接口间连接灵活、数据传输速率高等优点,可以推广应用于各种大型的采集系统和存储系统,能够有效降低这些系统大型系统的开发难度、缩短其开发周期,具有很高的工程应用价值。
2 系统构成
整个传输系统主要分为PCI板卡和PCI驱动两个部分。PCI板卡主要包括千兆以太网接口、光纤接口、PCI接口以及控制模块。千兆以太网接口、光纤接口以及PCI接口模块主要是各个接口的硬件实现;控制模块是整个系统的核心,在FPGA中编程实现,主要包括千兆以太网控制器、光纤控制器、PCI控制器以及速度转换FIFO,如图1所示。采用Xilinx公司的Virtex-4 LX25作为主控的FPGA芯片,实现了板卡的控制模块。
2.1 接口简介及实现
2.1.1 千兆以太网接口
作为一种成熟的高速传输方案,千兆以太网技术具有传输速度快、稳定性高、接口简单,传输距离远,已经成为目前局域网的主流解决方案,同时也是高速电路开发中的通用接口之一[6~9]。
千兆以太网接口实现的关键在于千兆以太网物理层和MAC控制器的实现,它们分别对应着TCP/IP协议中的物理层和数据链路层。本文中千兆以太网的物理层采用Marvell公司生产的88E1111芯片实现,负责MAC控制器和双绞线接口RJ45的通信。MAC控制器则主要根据IEEE 802.3协议中的以太网帧协议,利用FPGA编程实现。
图1 PCI传输系统构成
2.1.2 光纤接口
光纤通信具有抗干扰性强、传输距离远、易集成以及传输速率高等优点,在目前的高速数字通信系统中被广泛采用[10]。典型的光纤模块主要由光收发器件和高速 SerDes(Serializer/Deserializer,串/并行器)器件组成,其中光收发器件主要实现光电信号转换以及数据收发,而高速SerDes器件则主要负责将光收发器件传出的高速串行信号转换成并行数据或者将并行数据转换成高速串行信号发送到光收发器件。
设计采用Infineon公司的光纤产品V23818-M305-L57作为系统的光收发器件,其具有体积小、接口通用、功耗低、传输速率高(支持1.0625Gbps到2.125Gbps串行传输速率)等优点,是光收发模块的理想选择之一。TI公司生产的高速收发器TLK2501支持1.5Gbps到2.5Gbps的串行传输速率,片内8B/10B编解码和全双工工作模式,可以很好地兼容V23818-M305-L57接口,所以选用其作为系统的高速SerDes器件。
2.1.3 PCI接口
PCI总线是微机中处理器/存储器与外围部件、扩展接口之间的连接总线,能够满足工业和实时通信应用的高速、稳定、可靠、易于使用和维护等要求,自问世以来就迅速成为了开放性的工业计算机标准。考虑到大多数PC端PCI插槽为32位,同时64位PCI插槽也支持32位PCI接口,系统的PCI接口选用32位的PCI接口,可以有效的提高接口的通用性。为了减少开发时间,系统采用PLX公司生产的专用PCI接口芯片PCI9656作为PCI板卡和PC机PCI总线之间的桥接芯片。PCI9656采用数据流水线架构技术,可以提供32位/33MHz、32位/66MHz以及64位/66MHz的局域总线连接模式,具有灵活的连接性和高性能的I/O加速器特性,可以很好地实现高性能PCI接口。
2.2 控制模块设计
2.2.1 千兆以太网控制器
千兆以太网控制器主要包括MAC核、帧封装模块以及帧解封模块,在FPGA中实现,如图2所示。MAC核主要实现协调PHY芯片、地址过滤、数据校验等功能;帧封装模块接收从FIFO的发送数据,然后依据以太网协议,加入前导码、定界符、目的地址、源地址等帧头信息封装成帧格式,通过MAC核发送给PHY芯片;帧解封模块是帧封装模块的逆过程,接收从MAC核接收到的数据,去掉协议中的帧头,将其中的数据部分提取出来,通过FIFO发送给PCI控制器。
图2 MAC控制器框图
2.2.2 光纤控制器
图3 光纤控制器连接示意图
光纤控制模块实现 SerDes芯片TLK2501与FIFO之间的数据通信,分为接收和发送两部分,如图3所示。接收部分通过判断接收有效信号(RXDV)以及接收错误标志(RX-ER)来判断接收到的数据是否有效,若RX-DV为高,而RX-ER为低,则表示数据有效,应接收TLK2501发送的有效数据(RXD),然后通过FIFO速率转换后发送给PCI控制器。发送部分接收FIFO的数据及数据使能信号,把数据使能信号通过寄存器赋给发送有效信号(TX-EN),此时发送错误标志(TX-ER)可置低电平,通过 TLK2501则可以向光纤接口发送有效数据。
2.2.3 PCI控制器
PCI控制器依据PCI9656从模式或者DMA工作模式下时序图,在FPGA中采用状态机设计方式来实现,状态机跳转如图4所示。其中 ADS#、BLAST#及 WAIT#由 PCI9656驱动,DataEn#和FIFOEn#则由控制器驱动。初始化情况下,控制器处于空闲状态。当PC机发起任务时,PCI9656将会给ADS#信号一个低电平脉冲,这时候控制器将会根据LW/R的值进入读操作或者写操作。正常情况下,读/写操作一直进行到PCI9656向BLAST#输出一个低电平脉冲。如果在读/写过程中,本地端的FIFO为空或FIFO写满,状态机将会跳转到本地读忙状态或本地写忙状态,直到FIFO再次准备就绪。同时,如果PCI9656处于忙状态,它将置低WAIT#信号,PCI控制器将会进入PCI9656忙状态,暂停任务直到PCI9656再次准备就绪,并置高WAIT#信号。
图4 PCI控制器状态机示意图
2.2.4 速率转换FIFO
由于系统接口的数据传输速率并不一致,为了保证数据在接口间传输时不出现数据丢失,在数据传输过程中采用握手机制保证数据的完整性。在FPGA中例化了一个接收FIFO和一个发送FIFO来实现。当接收FIFO接近满容量时,向千兆以太网接口和光纤接口发送传输暂停指令,数据发送的前端在收到传输暂停指令后,暂停发送数据。此时PCI控制器依然继续接收数据,当接收FIFO中的数据小于半容量时,发送继续传输指令,恢复数据传输。发送FIFO接收PCI控制器发送的开始传输指令以及判断接收FIFO产生的暂停指令、恢复传输指令,而千兆以太网控制器和光纤控制器接收到这三个指令后执行发送数据、暂停发送数据、继续发送数据操作。通过这样严格的数据传输握手机制的加入,可以保证整个传输系统数据传输的完整性。
2.2.5 PCI驱动模块
WDK(Windows Driver Kit)开发的驱动程序与其他开发工具开发相比,具有代码非常简洁、结构清晰、执行效率高,能更好地提高DMA传输性能等优点。PCI设备驱动程序利用C++和WDK开发的WDM(Windows Driver Model)驱动程序,它可以根据不同的操作系统,生成相应的驱动文件。驱动支持的操作系统有 Windows sever 2003/2008,Windows XP以及 Windows 7系统,具有很好的通用性[11]。PCI设备驱动流程图如图5所示。
图5 驱动流程图
内核驱动在接收到用户模式下的DeviceIOControl的IRP请求之后,启动DMA任务传输,同时开启1s定时器。如果在1s之内,驱动成功地从PCI板卡读取到预定的数据量,驱动程序将向应用程序返回正确结果。否则,在1s结束时,向应用程序返回实际从板卡上读取的数据量。
3 系统测试及分析
3.1 数据完整性测试
对于数据传输系统来说,数据传输的正确性和完整性是系统应用的前提和保障。为了测试系统传输数据的正确性和完整性,利用MATLAB生成了一个255个点的正弦波形,然后将这些数据分别从光纤接口和以太网接口循环向传输系统发送。在PC端,利用VC++编写的应用程序调用PCI设备驱动接收板卡发送过来的数据,同时与之前生成的正弦波形点进行循环比对,从而测试接收数据的正确性和完整性。通过大量数据传输的测试,整个传输系统由于传输链路中握手机制的加入,并没有出现数据错误或者丢失的情况,可以很好地保证传输数据的正确性和完整性。
图6所示为应用程序端接收到的波形图,测试环境为:32位/33MHz插槽,E5800(3.2GHz)处理器,2GB物理内存。从图中可以看到,接收到的数据在界面上具有很好的正弦波形,没有出现数据丢失或者错位的情况。
图6 应用程序接收到波形示意图
3.2 传输速率测试
数据传输速度是传输系统能否满足各种高速数据传输应用的重要指标。为此,在测试阶段,分别测试了光纤接口与PCI接口之间链路,千兆以太网接口与PCI接口之间链路的传输速度。在37min的测试时间内,PC端分别接收到从千兆以太网接口和光纤接口传入超过220 GB的数据。为了测试链路的传输速度,应用程序1min记录抽取记录四次DMA传输所需的时间。由于每次DMA传输的数据量为32MB,再除以每次DMA传输的时间就可以得到链路的传输速度。
图7所示为传输系统两个传输链路之间的传输速度测试结果。从图中可以看出,系统的传输速度在整个测试期间基本上稳定在102MB/s。
图7 系统传输速度测试结果
4 结束语
本文设计了一个基于FPGA的多接口高速PCI传输系统,具有32位PCI接口、千兆以太网接口以及高速光纤接口这三种通用的接口,可以以102MB/s的速度将前端探测器或者存储器的数据无丢失地传输到PC端。系统的逻辑控制采用FPGA编程实现,具有很高的灵活性,同时传输速率也能满足大部分高速数据传输的要求,可以推广应用于军事、工业以及科研实验等领域各种数据传输的应用,具有很高的实际应用价值。
[1]刘鑫,王涌天,刘越.基于DSP的红外标志点实时跟踪方法研究[J].仪器仪表学报,2010,31(12):2654-2659.
[2]郭永彩,苏渝维,高潮.基于FPGA的红外图像实时采集系统设计与实现[J].仪器仪表学报,2010,32(3):514-519.
[3]葛起翔.基于PCI总线的高速雷达数据采集回放系统的研制[D].南京:南京信息工程大学,2007.
[4]秦莹莹,郭喜庆,刘伟.基于PCI和FPGA的转台检测系统[J].仪表技术与传感器,2011(3):74-76.
[5]徐江丰,张 涌,汤心溢,王世勇.基于Wishbone-PCI Bridge核的红外图像高速采集系统[J].红外与激光工程,2006,35(6):713-716.
[6]马腾飞,高世杰,吴志勇.基于千兆以太网的图像采集系统设计[J].微型机与应用,2010,29(9):72-74.
[7]曹书华.基于千兆以太网的雷达数据高速采集与传输技术[D].南京:南京信息工程大学,2008.
[8]FRAZIER H.The 802.3z Gigabit Ethernet Standard[C].Network,IEEE,1998,3(12):6-7.
[9]UCHIDA T.Hardware-based TCP processor for gigabit ethernet[J].IEEE Transactions on Nuclear Science,2007,55(3):1631-1637.
[10]陈兰姑.基于FPGA的多路数字视频光纤传输系统的研究与设计[D].上海:华东师范大学,2009.
[11]张帆,史彩成等.Windows驱动开发技术详解[M].北京:电子工业出版社,2008.