基于DWC PCIE Core的数据传输系统设计

2024-01-30 13:56刘肖婷
铁路通信信号工程技术 2024年1期
关键词:接收数据数据通信中断

刘肖婷

(1.北京全路通信信号研究设计院集团有限公司,北京 100070;2.北京市高速铁路运行控制系统工程技术研究中心,北京 100070)

1 概述

铁路信号设备是铁路运输的基础设施,是保证行车安全、提高运输效率的重要设备,在传递信息和改善行车人员劳动条件等方面发挥着重要的作用。为提高铁路信号的安全性和可靠性,铁路信号设备多采用冗余结构或混合冗余结构。结合铁路设备冗余结构,基于现场可编辑门阵列(Field Programmable Gate Array,FPGA)可扩展处理平台,开发一种高速数据传输系统,同时有效减小CPU 负载。

本系统利用ARM Cortex-A9 双核处理器高速数据通信的功能,同时基于该处理器高性能和高能耗的特性,降低功耗和成本。利用FPGA 可编程平台,设计高速率、多通道的高速串行计算机扩展总线标准(Peripheral Component Interconnect Express, PCIE)接口。同时设计千兆以太网和万兆以太网接口,以满足不同速率以太网的需求。

2 硬件系统基本结构

硬件系统采用Xilinx 公司的UltraScale+XCVU9P-L2FLGA2104 FPGA。 上位机与FPGA 间通过PCIE 2.0 通信,使用直接内存存取(Direct Memory Accessuart,DMA)的数据传输方法,能有效减少CPU 负载,提高数据传输速率。FPGA 之间通过千兆或万兆以太网通信。硬件系统还包括串行外围设备(Serial Peripheral Interface,SPI)接口、通用异步接收/传送器(Universal Asynchronous Receiver/Transmitter,UART) 接 口、SD 卡 接口、片内RAM 以及外部存储器控制器等。硬件系统基本结构如图1 所示。硬件系统外接SD 卡存储驱动程序,并通过PCIE2.0 与Host PC 通信。

图1 硬件系统基本结构Fig.1 Hardware system basic structure

3 数据通信系统

FPGA 通过PCIE 2.0×4 连接上位机,FPGA之间通过10 G 或者1 G 以太网通信。发送主机Host PC-A、接收主机Host-B、发送下位机FPGA-a 和接收下位机FPGA-b 之间数据通信系统结构如图2 所示。该通信系统主要实现PCIE 系统逻辑、以太网数据传输以及DMA 数据传输。其中PCIE 系统逻辑实现PCIE 总线协议的核心部分,包括物理层和数据链路层的全部功能,以及应用逻辑数据传输所依赖的传输层部分。

图2 数据通信系统结构Fig.2 Data communication system structure

图2 中上位机与FPGA 之间的通信是基于DWC PCIE Core 的DMA 数据传输,上位机系统内存为DMA 通道分配内存,即DMA 映射区,也叫DMA 缓冲区。用户将应用数据写入上位机系统内存,DMA 把数据从DMA 缓存区传送至FPGA片内RAM。上位机系统内存与FPGA 片内RAM之间就建立了一条DMA 通道。

下位机之间通过以太网进行数据通信。该系统设计成6 组以太网接口,4 路千兆以太网和2 路万兆以太网,以满足不同场景对以太网速率的差异化需求。

4 数据传输过程

上位机与FPGA 及FPGA 之间数据通信过程如图3 所示,FPGA 之间以GMAC 为例说明。Host PC-A 为数据发送端,Host PC-B 为数据接收端。Host PC-A 发送数据时,首先查询FPGA 片内PCIE 接收数据缓存状态寄存器。如果该缓存状态为空,Host PC-A 把数据帧发送出去并启动DMA操作。

图3 数据传输流程设计Fig.3 Data transmission process design

启动DMA 操作主要包括检查与配置DMA 控制寄存器。首先查询DMA 通道状态是否空闲,如果正在使用则返回错误,空闲则获取数据帧大小。然后使能DMA 读引擎和Linked List 操作模式,将linked list data 写入DMA channel context寄存器中,使DMA 能够多次对多块内存进行读写操作。最后配置Doorbell Number 指定DMA 传输通道并开启DMA 数据传输。由于在驱动程序中使能了iATU 单元,内核首先需要检查TLP 地址域首尾地址是否在outbound 寄存器组中,如果匹配成功,DMA 将会启动数据传输,把Host PC-A 系统内存数据读至FPGA 片内PCIE 接收数据缓存中。之后Cortex-A9 处理器-a 会收到PCIE 控制器的INTR1。如果INTR1 为数据传输错误中断,处理器会进入相应的中断响应程序。如果为数据传输完成中断,处理器会把PCIE 缓存区状态置为满状态。

FPGA 将通过PCIe 总线接收的数据保存至片上RAM,FPGA 接收数据之后给Cortex-A9 处理器发送中断,Cortex-A9 处理器接收中断之后将控制权交给以太网DMA,以太网DMA 将FPGA 片上RAM 中的数据读出,保存至以太网模块的内存中。GMAC 控制器等待DMA 数据传输完成后,通过以太网把数据发送出去,同时触发中断INTR2给本地处理器,处理器检测到GMAC 中断之后将缓存区状态置为空。

接收端GMAC 接收数据后发送中断INTR3 给Cortex-A9 处理器-b,处理器检测到接收数据中断后,将GMAC 接收缓存区状态置为满状态,同时会发送MSI 中断给Host PC-B。Host PC-B 检测到MSI 中断就会启动DMA。DMA 数据传输如果出现错误,就会给Host PC-B 发送错误中断,Host PC-B 响应的中断。如果数据传输完成且没有出错,PCIE 控制器发送中断INTR4 给处理器-b,处理器-b 将内存状态置为空,这就完成了一次DMA 读写数据过程。

5 TCP/IP协议的实现

FPGA 之间的通信基于MAC 层的数据传输。基于ucosii 驱动程序,通过socket 编程实现TCP/IP协议,以保证数据的可靠性传输。socket 编程的实现以及TCP 服务器端和客户端通信过程如图4 所示。

图4 TCP服务器与客户端通信过程Fig.4 Communication process between TCP server and client

服务器端调用NetSock_Open 和NetSock_Bind 函数分别创建并监听套接字。之后调用NetSock_Listen 函数允许操作系统开始接收客户、完成连接阶段并把他们放入被服务的列表。之后服务器进程开始循环,并且依次对客户进行服务。每次循环,服务器进程都会调用NetSock_Accept 函数从服务列表里取出一个客户对其进行服务。如果列表为空,那么NetSock_Accept 函数进入阻塞状态,直到出现一个客户待服务。NetSock_Accept函数返回一个新套接字,该套接字是由内核为服务器接受客户连接创建的已连接套接字。

客户端首先调用NetSock_Open 函数创建套接字,然后调用NetSock_Conn 函数建立与TCP 服务器的连接,发起三路握手。建立连接后,客户端与服务器端可以交换数据。

使用Wireshark 软件捕获建立连接前3 次握手,建立连接后数据发送与接收,数据传输完成后、握手结束的完整过程。Wireshark 捕捉到的数据传输过程如图5 所示。

图5 基于TCP/IP协议的数据传输Fig.5 Data transmission based on TCP/IP protocol

6 结论

本文采用FPGA 设计了上位机与FPGA 之间基于DWC PCIE Core 的DMA 数据传输,以及FPGA 之间基于以太网的数据传输。通过DMA 的数据传输以及共享内存的设计,能够大大减少上位机CPU 负载,提高数据传输效率。通过TCP/IP socket 编程,保证数据的可靠性传输。如果采用更高版本的PCIE 或者16 通道,传输速率还会有更大的提升空间。

猜你喜欢
接收数据数据通信中断
冲激噪声背景下基于幅度预处理的测向新方法*
基于快牙平台实现全站仪与计算机的数据通信
低复杂度多输入多输出雷达目标角度估计方法
监测系统接口数据通信方式
跟踪导练(二)(5)
千里移防,卫勤保障不中断
单片机模拟串口数据接收程序的实现及优化
一种高效可靠的串行数据通信协议及处理算法
TCN实时协议栈过程数据通信研究
AT89C51与中断有关的寄存器功能表解