APP下载

基于PCIe的无线电数据传输接口实现

2019-01-21常振杰

西安邮电大学学报 2018年6期
关键词:工控机中断数据包

刘 鹏, 常振杰

(1. 陕西省无线电监测站, 陕西 西安 710000;2. 国家无线电频谱管理研究所有限公司 陕西省信息通信网络及安全重点实验室, 陕西 西安 710061)

无线电宽带记录仪是无线电监测过程中的重要设备[1]。随着无线电通信事业的高速发展,无线电设备的使用量越来越大,通信业务种类越来越多样化,对宽带记录仪的性能要求也越来越高[2]。为了满足无线电监测的实时性和高速性,需要开发出具备大带宽和高速率数据采集与传输功能的宽带记录仪。其中,数据传输模块的高速性能至关重要。为满足传输速率要求,可以采用快速外围设备互连 (peripheral component interconnect express,PCIe)作为数字板卡与工控机之间的数据传输接口。

本文拟设计基于现场可编程门阵列(field programmable gate array,FPGA)的PCIe总线控制逻辑,并重点设计直接存储器读取 (derect memery access,DMA)模式下的写控制逻辑。其中,FPGA采用赛灵思公司的Kintex-7系列xc7k325tffg900芯片,工控机端采用Windows 7, 64位操作系统。

1 原理概述及方案选择

1.1 无线电宽带记录仪原理

无线电宽带记录仪的结构如图1所示,其中包含射频板、FPGA数字板卡、工控板、电源板以及显示操作平台等板块。射频板将接收到的射频信号转换成中频信号之后传输给数字板,显示操作平台通过工控板向FPGA数字板卡发送相关指令,数字板卡针对相应指令将采集处理之后的数据经过PCIe高速总线发送至工控板进行存储和回放。

图1 宽带记录仪结构

1.2 数据传输总线方案选择

宽带记录仪中,经数字板处理后的数据接口位宽为64比特,时钟频率为62.5 MHz,所以,要求所选用的数据传输总线带宽至少要达到4 Gb/s。PCIe总线具有全新的点对点互联架构,传输带宽高且对外兼容性好。对单向通道而言,PCIe 1.0 ×1通道的峰值带宽为2.5 Gb/s,数据传输过程中编码方式为8/10(每传输10比特数据,实际有效数据有8比特)[3]。由于编码方式损耗,有效带宽仅为2 Gb/s[4],考虑传输过程中的损耗,在此选用PCIe 1.0×8通道,其理论有效带宽可达16 Gb/s[5],性能稳定,完全满足设计需求。

2 DMA模式控制逻辑设计与分析

DMA模式是在数据传输过程中,不需要处理器干预,主机内存与外设内存之间即可直接进行数据交换。每次DMA可以传输多包数据,使得设备具有大的数据吞吐量,适用于大带宽数据传输[6]。在数据传输过程中,需要对地址信息和传输数据包大小进行配置,只有配置信息与工控机端PCIe驱动部分匹配,才能对数据进行准确无误的传输。

在数据传输过程中,需要根据PCIe驱动设置的信息控制每个传输包的数据大小、地址信息、组包信息等[7]。如果传输的数据包过大,会导致工控机死机,数据无法正常传输。传输过程中每传输一包数据,需要根据基地址信息准确控制DMA写偏移地址的递增,如果偏移地址控制出错,会导致工控机蓝屏等问题。为了确保数据传输的准确性,考虑对FPGA逻辑部分进行模块化设计,以遵循PCIe协议控制各模块之间的时序关系[8],避免出现数据包丢失等问题。

2.1 DMA模式控制逻辑设计

DMA模式控制逻辑包含6个模块,各模块之间的结构关系如图2所示。

图2 无线电数据传输技术结构

根据实际情况,由上位机向FPGA板卡发送的数据可能包括数据传输包长度信息和大小信息,或信号带宽、频率、通道选择等信息[9]。Xilinx FPGA中的PCIe内核PCIE-CORE封装了数据链路层和物理层的协议信息,并且预留了数据接口,在PCIE-CORE中对传输的数据进行串并转换[10]。上位机通过PCIe串行接口将指令发送至PCIE-CORE进行串并转换,数据接收模块PCIE_RX对转换后的指令数据进行解析并存储在寄存器控制模块REG中。在RW模块中如果接收到DMA数据传输启动指令,则向DMA控制模块DMA_Crl发送DMA写使能信号。随后,DMA控制模块DMA_Crl向数据发送模块PCIE_TX发送DMA写请求,如果PCIE_TX模块准备就绪,则开始DMA模式下的数据传输[11]。

在数据传输过程中,每次DMA传输的数据包大小受工控机硬件系统的配置限制,因而不能连续不断地向工控机传输数据,对此采用中断方式以避免因数据量过大而导致的死机问题。FPGA逻辑每完成一次DMA操作,发起一次中断,待收到驱动的中断反馈信号后继续进行下一次传输。最后,工控机端通过PCIe驱动把接收到的数据存储到固态硬盘中。实际传输过程中,每次中断完成一次 DMA 传输,每次DMA传输10 240包数据,每包数据包含16个数。

2.2 DMA模式控制逻辑模块设计分析

2.2.1 数据接收模块PCIE_RX设计

根据用户的需要,用户需要通过上位机对无线电信号记录时长,传输启动信号等信息进行设置,与此同时,PCIe驱动还要发送DMA传输的配置信息,从而保证PCIe硬件逻辑与驱动匹配。在数据传输的过程中这些信息非常重要的,在此设计数据接收模块对来自工控机端的配置信息进行接收和存储。接收数据流程如图3所示。为了与PCIe驱动程序配合,在进行数据传输之前,数据接收模块PCIE_RX首先接收驱动发过来的复位信号对硬件进行复位,然后接收驱动反馈的基地址信息、传输包长度信息、传输包大小的设置信息等[12]。用户根据需求在上位机端输入所需要的无线电信号参数信息,包括信号带宽、频率、通道选择信息等,当PCIE_RX模块收到这些信息之后,接收DMA传输启动命令,随之进行数据传输。

图3 接收数据流程

2.2.2 寄存器控制模块REG设计

DMA模式下的数据传输过程中,工控机端通过PCIe驱动向FPGA板卡发送传输数据包的大小信息以及工控机端分配的地址信息。FPGA板卡端根据这些信息对数据包进行组包,并对数据写入地址进行控制[13]。在此设计寄存器控制模块用以存储上述关键信息。数据类型如表1所示,其中BASE_ADDR表示驱动反馈的基地址信息,基地址分配由系统硬件决定,在RW模块中把基地址信息储存到偏移地址0x08中,再发送至DMA控制模块用于控制DMA数据传输的地址[14]。

TLP_Size表示每包数据的大小,其值由系统硬件决定,当前测试系统是Windows 7, 64位操作系统,TLP_Size被限定在0xXXXX_0020,低13位是有效位,即128字节,并存储在偏移地址0x0C中。TLP_Count表示每次中断传输的数据包数,在驱动中设置为0xXXXX_2800,低16位是有效位,即10 240包数据,并写入偏移地址0x10中。TLP_Payload_Pattern表示在上位机设置的用户所需要的无线电信号信息,包括信号带宽,频率,通道选择信息等,并写入偏移地址0x14中。DMA_Start表示DMA启动信号,其值为0x0000_0001,其中最低位是有效位,并写入偏移地址0x04中。启动DMA操作后,FPGA板卡根据以上配置信息,向工控机传输相关数据。

表1 存储数据类型

2.2.3 DMA控制模块DMA_Crl设计

PCIe协议中每包数据的第一个数包含了数据读写类型信息,字段信息以及传输包长度信息,第二个数的高32位表示待传输的数据信息,低32位是地址信息。DMA数据传输控制模块DMA_Crl完成DMA写数据传输过程中数据包长度的控制和相应的DMA写偏移地址的控制[13]。传输控制的状态迁移过程如图4所示,包含四个状态,分别是初始状态IDLE,读数据包长度状态READ_Length,准备待发数据状态Prepare_D_H以及发送DMA写请求状态SEND_WR_REQ。

图4 DMA写数据控制状态迁移

在IDLE状态中等待数据传输包请求信号,如果RW模块中接收到了DMA_Start信号,发出数据传输包发送请求信号,状态机跳转到READ_Length状态。在READ_Length状态中,根据系统反馈的传输包可携带的最大数据长度信息,确定每包数据携带的数据长度。目前测试系统中每包数据可携带的最大数据长度为32 DW。在PCIe协议中数据长度以DW为单位计数,每DW等于4 字节。

在Prepare_D_H状态中对对每包数据的传输个数进行计数,根据RW模块中存储的DASE_ADDR对传输数据对应的DMA写偏移地址进行控制。传输过程中每传输1包数据,在基地址基础上增加一包数据对应的偏移地址大小。DMA写偏移地址的增量等于实际传输的1包的数据的大小。目前的测试系统中,偏移地址每次递增0x80。

当每包数据都准备好后,状态跳转至SEND_WR_REQ状态向PCIE_TX发送DMA写请求信号,然后当收到PCIE_TX模块发出的DMA写请求反馈信号之后,将准备好的数据发送至PCIE_TX模块进行传输。每发送完成一包数据,则跳转至IDLE状态等待下一次发送请求。

2.2.4 数据发送模块PCIE_TX设计

数据发送模块首先根据DMA_Crl模块发送的包头信息和地址信息对每包数据进行组包,然后将组好的数据包发送至PCIe核,经过PCIe核传输至工控机进行存储。为了避免数据传输过程中出现的丢包现象,在此采用状态机的方式根据PCIe协议的数据包格式将数据分状态发出。此外,为了解决因传输数的据量过大而出现的工控机死机问题,在此采用消息信号中断(message signaled interrupt,MSI)的方式进行处理。MSI中断机制是PCIe协议规范中的内部中断机制,当数据发送模块PCIE_TX发起MSI中断时,停止数据传输,等待来自工控机端的中断反馈信号[15]。如果数据发送模块收到了中断反馈信号,继续进行数据传输。这样就可以保证在工控机正常工作的情况下数据可以持续高速传输。数据发送模块状态迁移如图5所示。状态机包含6个状态:初始 IDLE 状态,传输第一个数据状态 TX_H,传输第二个数据状态TX_D_H,传输数据状态TX_D,中断状态MSI_trig以及传输结束状态TXDONE。

在数据传输的过程中,需要对数据流量进行实时控制,主机系统会实时向FPGA反馈当前剩余的内存容量,只有内存充足时才能进行高速传输。在IDLE状态如果检测到当前的内存充足,并且接收到了DMA写请求信号,进入TX_H状态将组好的第一个数据包头信息发送出去,下一周期跳转至TX_D_H状态传输第二个数据,包含数据和地址信息,第三周期跳转至TX_D传输数据状态。

TX_D状态传输包数据的大小由TLP_Size决定。TLP_Size在存储器控制模块REG中存储。目前测试系统中TLP_Size为0x0000_0020,即128字节,而各数据大小是8字节,所以,每包数据携带16个数据。完成16个数据的传输,需要16时钟周期,第16个数据传输完成时一包数据传输结束。在存储器控制模块REG中存储了驱动设置的每次中断传输的数据包数TLP_Count,目前测试系统中TLP_Count为0x0000_2800,即10240包数据,一次中断传输的包数未达到TLP_Count时状态机跳转至IDLE状态,继续传输数据包,当传输包数达到TLP_Count时,标志一次DMA传输完成,状态机跳转至中断响应状态MSI_trig。在MSI_trig状态中FPGA向工控机端发送中断信号,等待系统的响应。如果收到了工控机端的中断相应信号,状态机跳转至传输TXDONE状态,随后状态机跳转至IDLE状态继续传输数据。

图5 数据发送模块状态迁移

3 测试结果和分析

根据以上设计分析,在Xilinx官方开发工具Vivado 2017.2上实现了各逻辑模块的编写。FPGA数字测试板卡采用Xilinx KC705开发板与主机进行联调测试,主机系统是Windows 7, 64位,固态硬盘容量128 GB。PCIe总线采用PCIe 1.0版本,数据链路8倍通道,理论传输速率16 Gb/s[16]。测试过程中采用Vivado开发软件提供的Debug IP核对各模块的主要信号波形进行捕捉。图6是DMA数据传输控制模块DMA_Crl中的信号波形,图7是数据传输模块PCIE_TX中的信号波形。

图6 DMA_Crl模块波形

图7 PCIE_TX模块波形

经多次调试,测试波形时序与PCIe协议一致。PCIE_TX模块波形中trn_td信号为发送数据信号,由波形图可见,发送一包有效数据所占用的时间为30时钟周期,各时钟周期4 ns,每包数据大小为128字节,由此可以估算出传输带宽为8.5 Gb/s。测试过程中使用的上位机界面如图8所示。

图8 上位机界面

由于系统硬件配置限制,目前所使用的固态硬盘在当前使用的系统中能达到的最大写入速率为180 MB/s,所以,8.5 Gb/s的传输带宽已经完全满足需求,从上位机界面可以看到数据写入固态硬盘的速率为170 MB/s,已达到最佳效果。

4 结语

采用Xilinx FPGA实现了PCIe高速总线上的数据传输,完成了DMA模式下的控制逻辑。实际测试结果表明,在Windows 7, 64位操作系统、128 GB固态硬盘、PCIe 1.0版本、数据链路8倍通道条件下,采用DMA模式进行数据传输,传输带宽可达8.5 GB/s,数据写入硬盘的速率可达170 MB/s,满足宽带记录仪的性能要求。如果采用更高配置的操作系统、性能更好的固态硬盘以及更高的PCIe协议版本,数据的传输存储速率会更进一步提高。PCIe总线技术在未来的无线电监测领域中将会有更加广泛的应用。

猜你喜欢

工控机中断数据包
二维隐蔽时间信道构建的研究*
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
定制工控机在老旧线路计算机联锁设备中的应用
C#串口高效可靠的接收方案设计
中压电子束焊工控机Windows NT系统文件丢失故障的修复方法
基于FPGA的中断控制器设计*
Linux中断线程化分析及中断延时测试
跟踪导练(二)(5)
千里移防,卫勤保障不中断
中国工控机市场新Style