一种基于FPGA的PCIe总线高速异步传输系统

2018-08-08 07:31,,,
单片机与嵌入式系统应用 2018年8期
关键词:描述符缓冲区寄存器

,,,

(南瑞集团有限公司(国网电力科学研究院有限公司),南京 210003)

引 言

作为第三代I/O总线,PCI express(简称PCIe)总线采用了高速串行传输方式,不但简化了接口部分的硬件连线,而且大幅度提高了传输速率。在单通道模式下,PCIe Gen2的单向传输速率为5 Gbps,PCIe Gen3的单向传输速率达到了8 Gbps;在多通道模式下,PCIe的单向传输速率还可以成倍增加,最高可达128 Gbps。但是在实际使用中,受读写顺序、器件速度和I/O方式等因素影响,PCIe总线的通道带宽难以被充分地利用。

本文在Xilinx PCIe硬核的基础上设计了一个Scatter-Gather DMA(简称SG-DMA)控制器,使得在传输过程中尽量少地调用低速I/O读写操作;在DMA控制器的前后分别设计了环形队列和FIFO,使得主机读写PCIe外设数据包呈异步方式,数据传输和数据处理也呈异步模式。如同多级流水线一样,不同数据包的接收、处理、发送可以在同一个时刻进行,这样可以最大限度地利用PCIe通道的传输带宽,实现基于PCIe总线的高速异步传输。

1 PCIe总线

PCIe总线是2001年由Intel提出的,是一种基于数据包的串行总线。由于其带宽高、延时低、应用灵活等特点,PCIe总线可以将整个I/O系统统一起来,简化设计,提高可扩展性,目前已经成为计算机行业流行的总线结构。

PCIe总线自下而上分为三层,分别是物理层、数据链路层和事务层。

物理层采用了串行差分信号,点对点传输,收发独立,相对于并行共享总线,PCIe总线非常便利和高效,这也是CMOS工艺不断发展的结果。为了嵌入时钟和保持直流平衡,PCIe Gen1和PCIe Gen2还采用了8b/10b编码,单通道实际数据速率分别为2 Gbps和4 Gbps,PCIe Gen3没有使用8b/10b编码,单通道实际数据速率为8 Gbps。

数据链路层主要负责链路管理、电源管理和数据完整性检测。事务层将往来于PCIe主从设备之间的数据封装成一个或多个TLP包,TLP包的类型主要有存储器读写、I/O读写和配置读写。一个完整的TLP包由前缀(Prefix)、头(Header)、数据载荷(Data payload)和摘要(Digest)组成,如图1所示。

图1 TLP包格式

DMA写传输要使用存储器写请求TLP包,DMA读传输要使用存储器读请求TLP包和存储器读完成TLP包。

2 系统设计

2.1 系统结构

本设计的硬件部分主要采用了一片Xilinx FPGA器件,型号是XC7A100T,该器件具有101 440个逻辑门,4 860 KB Block RAM,8个GTP收发器,可以支持四通道的PCIe Gen2。通过逻辑设计,在FPGA内部构建了一个PCIe硬核、TLP包接收引擎、TLP包发送引擎、DMA接收控制器、DMA发送控制器、接收FIFO和发送FIFO。这些模块构成了数据包发送和接收两条通道,通过PCIe总线与驱动程序中的两个环形队列连接,系统结构如图2所示。

图2 系统结构图

2.2 主要功能

DMA描述符表是一个由若干个描述符组成的链表,每一个描述符都指向环形队列中的一个缓冲区。DMA描述符表和每个缓冲区都需要在一个连续的地址空间中,而缓冲区之间不必地址连续,可以分散分布。驱动程序在硬件初始化阶段将DMA描述符表的地址和长度写入FPGA的寄存器中。SG-DMA控制器在读取缓冲区之前首先读入描述符表,根据描述符中的物理地址、总线地址和长度信息向主机发出读请求TLP包,主机回复带数据的TLP包。SG-DMA控制器解析带数据的TLP包就得到了缓冲区中的数据。

PCIe IP核连接Serdes收发器,负责TLP包编解码、从数据流中恢复时钟。Xilinx的PCIe IP核提供的用户接口是AXI总线接口形式,因此TLP接收引擎从AXI总线上获取TLP包,然后分发到不同的DMA控制器或者是MEM寄存器。RX-FIFO和TX-FIFO的作用是允许DMA传输和后面的业务处理能够异步并行,也允许DMA接收和发送异步并行。

2.3 SG-DMA操作流程

DMA操作的过程需要主机驱动程序和FPGA内部的DMA控制器协同工作,二者通过DMA描述符表来联系。主机将待发数据包写入环形队列的缓冲区后,通过修改FPGA中的更新寄存器来触发DMA控制器进行下一阶段的操作。当DMA控制器将处理好的数据包发送到主机的缓冲区后,以中断方式通知主机驱动程序。详细过程如图3所示。

图3 DMA操作流程

主机读写FPGA内部寄存器和响应中断,相对于DMA读写一个数据包的时间要长得多,如果频繁地读写FPGA内部寄存器,会产生大量的中断,极大地限制主机与PCIe卡之间的传输速度。为了提高效率,主机每写8个待传输的数据包到环形队列后,再写一次FPGA内部寄存器;SD-DMA发送控制器将128个数据包发送到环形队列后向主机申请一次中断,避免主机将过多的CPU时间片耗费在中断上下文切换过程中。图3所示步骤可以分为6个阶段:①主机写入环形队;②DMA读入RX-FIFO;③从RX-FIFO中读出处理;④处理后写入TX-FIFO;⑤DMA写入环形队列;⑥中断服务程序将环形队列中的数据交给用户程序。

在传输和处理过程中,一个特定的数据包顺序经过这6个阶段。在本设计中,当主机传输请求的速度大于一个包的传输处理速度时,将有多个步骤同时执行,每个步骤处理不同的数据包。整个系统的速度取决于处理速度最慢的那一个处理步骤。

3 实验验证

本设计的实验验证是在一个基于FPGA的PCIe加密卡上进行的。该加密卡以一片Xilinx XC7A100T芯片作为核心处理器,并通过芯片内置的IP Core实现四通道的PCIe Gen2接口。加密卡上配置了两片对称密码算法芯片,最大可以实现2 Gbps速度的加解密速度。主机处理器是Cavium CN7230,具有64位MIPS指令集处理器、4个内核,主频为1.2 GHz,支持四通道PCIe Gen2接口,运行的操作系统为Linux-3.12。

首先在固定包长1024字节的条件下,测试在不同读写模式下对传输性能的影响。测试数据如表1所列。

表1 不同模式下的读写速度

实验结果表明,异步并发模式可以显著提升系统的传输性能,减少中断次数有利于降低主机CPU的负荷,将更多的时间片投入到数据包的搬运操作中。另外,加密芯片的处理速度也制约着系统性能。

实验还在数据包不经过加密芯片、全速异步并发的情况下,测试了包长对系统传输速度的影响,结果如图4所示。

图4 速度与包长关系

结果表明,数据包长度对传输速度也有着明显的影响,包长越大传输速度越高,在1024字节时包长对性能的影响深度最大。在实际应用时,可以考虑对小于256字节的小包进行拼接,以提高系统性能。

实验还发现,在速度较快的情况下,主机CPU读取接收环形队列中数据包的速度总是慢于主机向发送环形队列中写入数据包的速度,主机写操作往往要等待读操作腾空一些接收缓冲区。在多核CPU中通过使用中断广播功能或者多个内核线程可以大幅度提高主机读取并腾空环形队列的速度,从而提高系统的整体性能。

结 语

猜你喜欢
描述符缓冲区寄存器
基于结构信息的异源遥感图像局部特征描述符研究
基于AKAZE的BOLD掩码描述符的匹配算法的研究
Lite寄存器模型的设计与实现
Linux单线程并发服务器探索
嫩江重要省界缓冲区水质单因子评价法研究
分簇结构向量寄存器分配策略研究*
利用CNN的无人机遥感影像特征描述符学习
关键链技术缓冲区的确定方法研究
地理信息系统绘图缓冲区技术设计与实现
AVS标准中的视频码流缓冲区校验模型分析