引言
本文基于Virtex6 FPGA,分别实现了三种协议在4x链路、5.0 Gb/s线速率模式下的数据通信,测得协议的实际传输速率,并对三种协议的特点与应用进行了对比分析。
1 测试平台简介
本文以实验室自行开发设计的PCIe光纤接收处理板(以下简称测试电路板)为测试平台。测试电路板的结构图和实物图分别如图1、图2所示。其中,FPGA选用XC6VLX240T2FF1156,该芯片含20个GTX收发器,链路线速率可达6.6 Gb/s。DSP选用TMS320C6678,该芯片含有SRIO接口,支持1x、2x和4x链路。光电转换模块选用FCBG410QB1C10,它包含4条链路,带宽可达40 Gb/s。故而测试电路板的硬件设计符合本测试对数据传输速率的要求。
图1 测试电路板模块结构和链路连接图
图2 测试电路板实物图
图3 测试平台搭建
如图3所示,将测试电路板插入服务器主板的PCIe插槽中,并将光纤接入测试电路板,完成测试平台的搭建。本测试中,PCI Express 2.0协议用于实现FPGA与服务器的数据通信,Serial RapidIO 2.0协议用于实现FPGA与DSP的数据通信,Aurora 8B/10B协议用于实现FPGA的光纤自发自收通信。由于三种协议都在物理层进行8B/10B编码,故在本测试工作模式下,它们的极限速率均为:
2 Aurora 8B/10B通信测试
Aurora 8B/10B协议是Xilinx公司针对高速传输开发的一种可裁减的轻量级链路层协议,通过一条或多条串行链路实现两设备间的数据传输。协议Aurora协议可以支持流和帧两种数据传输模式,以及全双工、单工等数据通信方式[5]。
本测试中,Aurora 8B/10B IP核配置为双工、流模式,参考时钟频率为250 MHz。
使用ChipScope软件观察到的FPGA相关信号如图4所示。观察RX_SRC_RDY_N可以发现,平均每4 992周期出现7个周期的数据无效信号。由于接收数据时钟频率为250 MHz,数据位宽为64位,故本测试中,Aurora 8B/10B协议单向传输速率为:
图4 Aurora 8B/10B协议通信测试信号波形
3 PCI Express 2.0通信测试
PCI Express(简称PCIe)总线技术是取代PCI的第三代I/O技术。本测试中,PCIe 2.0通信测试通过FPGA对服务器内存的DMA读/写操作来实现。
服务器方面,本测试选用Windriver软件进行PCIe驱动程序的开发。利用该软件提供的PCIe驱动程序及用户接口函数,编写符合本测试功能需求的程序。
FPGA方面,本测试通过设计用户模块,实现对PCIe IP核的控制,完成DMA读/写操作。FPGA模块结构如图5所示。
图5 PCIe 2.0通信测试FPGA模块结构
为便于服务器对测试电路板FPGA进行控制,在FPGA的PCIe存储空间模块中,定义了若干控制/状态寄存器,这些寄存器的作用有:DMA读/写初始化、控制DMA读/写的启动与停止、标志一次DMA传输是否完成、设置一次DMA传输的数据量等。
图6 PCIe 2.0 DMA传输控制流程图
服务器通过PCIe接口对测试板FPGA控制/状态寄存器进行读/写操作,来控制DMA的进程。每次DMA完成后,处理板FPGA会向服务器CPU发送一次中断。服务器对测试电路板FPGA DMA传输的控制流程如图6所示。
本测试将TLP包载荷数设为256字节(IP核允许的最大值),每次DMA传输的TLP包的数量为16 384,故每次DMA传输的数据量为4 MB。使用ChipScope软件观察FPGA内部的PCIe 2.0 DMA读/写相关信号略——编者注。本测试开发了PCIe读写功能测试软件,实现PCIe传输数据量和传输速率的实时显示。传输速率通过1 s内DMA传输完成的次数来计算。测试结果如图7所示。PCIe 2.0 DMA读的数据传输速率为1.770 GB/s,DMA写的数据传输速率为1.820 GB/s。
图7 PCIe 2.0 DMA读写速率测试结果
由于PCIe 2.0定义了流量控制缓存管理机制,允许服务器返回完成报文的同时接收FPGA发来的存储器读报文,故DMA读测试中可忽略FPGA发送存储器读报文带来的开销。
故PCIe 2.0 DMA读/写的理论速率相同,均为:
DMA读的实际通信效率为:
DMA写的实际通信效率为:
4 Serial RapidIO 2.0通信测试
FPGA模块结构如图8所示。通过VIO控制模块,可对包事务类型、包载荷、发送地址等参数进行设置。本测试将包载荷设为256字节,读/写内存空间设为DSP的MSM(Multicore Shared Memory)空间。
图8 SRIO 2.0通信测试FPGA模块结构
DSP方面,需要进行相关寄存器的配置,完成SRIO的初始化,使DSP作为目标端处理FPGA发来的SRIO读/写请求。DSP主要配置流程,包括使能SRIO接口、串并转换模块以及链路数目、链路线速率、设备ID等参数的设置。
使用ChipScope软件观察FPGA相关信号信号波形略——编者注。
本测试中,FPGA每连续发送16 384个SWRITE或NREAD包后,都会向DSP再发送1个门铃消息。因此,可以通过计算DSP收到的相邻两个门铃的时间间隔来计算SRIO读/写速率。
经测算,当FPGA执行SRIO读/写操作时, DSP接收的相邻两个门铃的平均时间间隔为分别为2.490 ms和2.266 ms。故SRIO 2.0读操作的数据传输速率为:
SRIO 2.0写操作的数据传输速率为:
下面计算本测试条件下SRIO读/写的理论数据传输速率和实际通信效率。
SRIO 2.0协议的主要开销为物理层编码开销和数据包开销。本测试采用8位路由和34位偏移地址。该条件下SWRITE事务、RESPONSE事务的数据包结构分别如图9、图10所示。
图9 SRIO 2.0 SWRITE包结构
图10 SRIO 2.0 RESPONSE包结构
由图9可知,FPGA每发送一个SWRITE包,会带来10字节的开销,另外,DSP会返回一个4字节确认接收符号。故本测试中SRIO写操作的理论数据传输速率为:
SRIO写操作的实际通信速率为:
与PCIe 2.0类似,SRIO 2.0可以流水地处理多个未完成的操作,应答开销与发送开销之间没有竞争。故而SRIO 2.0读操作可只考虑RESPONSE包开销而忽略NREAD包开销。由图10可知,DSP每返回一个RESPONSE包,会带来8字节的开销。另外,DSP接收到NREAD包后,会返回一个4字节确认接收符号,FPGA接收到响应包后,也会返回一个4字节确认接收符号。故本测试中SRIO读操作的理论数据传输速率为:
SRIO读操作的实际通信效率为:
SRIO读操作的实际通信效率较低的原因是DSP响应FPGA读请求的时间较长。
5 三种协议的分析比较
本测试中,Aurora 8B/10B、PCIe 2.0、SRIO 2.0均实现了在4x模式下的高速数据传输。下面将结合测试结果和协议的具体内容,从以下各方面对三种协议进行比较。
(1) 协议分层结构
Aurora 8B/10B协议仅定义了链路层和物理层。属于较为底层的协议。SRIO 2.0协议定义了物理层、传输层和逻辑层、PCIe 2.0协议定义了物理层、数据链路层、事务层和软件层,这两种协议的内容和功能均比Aurora 8B/10B协议复杂。
(2) 链路数目和链路线速率
Aurora 8B/10B协议在链路数目和链路线速率选择上比较灵活,链路数目可以在1x至16x之间自由选择,链路线速率可以在0.5~6.6 GB/s间自由选择。PCIe 2.0支持1x、2x、4x、8x、12x、16x、32x链路,链路线速率支持2.5 Gb/s和5.0 Gb/s。SRIO 2.0支持1x、2x、4x、8x和16x链路,链路线速率支持1.25 Gb/s、2.5 Gb/s、3.125 Gb/s、5.0 Gb/s和6.25 Gb/s。
(3) 数据传输方式
SRIO 2.0数据传输方式更为灵活。在具备对目标设备地址空间可见性的情况下,可通过NWRITE、NWRITE_R、SWRITE、NREAD、ASTOMIC等事务对目标设备的地址空间进行直接读写。在不具备目标设备地址空间可见性的情况下,SRIO还提供了消息传递机制。用户将数据和信箱号通过MESSAGE事务发至目标设备,目标设备根据信箱号与自身存储空间的映射关系将数据写入存储空间。
综上可知,数据传输方式的灵活性上,SRIO 2.0>PCIe 2.0>Aurora 8B/10B。
(4) 协议开销和数据传输速率
协议的理论传输速率由通道带宽和协议开销决定,而协议的实际传输速率还受设备本身性能的影响。本测试中, PCIe 2.0 DMA读操作数据传输速率速率高于SRIO 2.0 NREAD的主要原因是,服务器对FPGA的PCIe读请求的响应要快于DSP对FPGA的SRIO读请求响应。
(5) 设备寻址
PCIe协议中,各设备共享一个PCIe地址空间。整个PCIe地址空间先被分成块,根据后来的下级总线再进一步划分。树形结构中的每个设备在整个地址空间映射中被指定一个地址空间,通过执行全部地址译码来查找设备。在支持带有大容量存储器的设备系统中,这种设备寻址机制不适合灵活拓展。
SRIO采用基于设备ID寻址的方案[8]。采用该方案,使得拓扑结构的变化仅需要更新事务路径中的设备,从而使系统的拓展与拓扑结构的更改比PCIe协议更为灵活。
Aurora 8B/10B协议未定义设备寻址机制。
(6) 网络拓扑
PCIe规定了生成树拓扑结构,这种结构适合于单个主机,多个外围设备通信模式,但限制了端点数量,且不支持任意节点与节点间直接通信。PCIe的典型网络拓扑结构如图11所示[9]。
图11 PCIe网络拓扑结构
(7) 应用领域
Aurora 8B/10B协议作为Xilinx公司开发的轻量级链路层协议,协议开销小,链路数目和链路线速率选择灵活,适用于两片Xilinx FPGA之间的数据流传输。用户也可在其基础上开发高层协议。但其应用范围较为有限,尚未见在其他芯片中使用。
PCIe 2.0作为PCI总线的继承,带宽和拓展的灵活性大大提高,适合于主机与外部设备的互联,在PC/Server平台、VPX平台有广泛应用,如声卡、显示卡、网络设备(包括以太网和Modem)、光纤接口卡、磁盘阵列卡等。
SRIO 2.0作为一种高性能包交换的互连技术,数据传输方式和拓扑结构灵活,为多处理器系统的实现提供便利,广泛用于嵌入式系统内的微处理器、DSP、通信和网络处理器、系统存储器之间的高速数据传输。
结语
本文基于Virtex6 FPGA芯片,对Aurora 8B/10B、PCIe2.0、SRIO 2.0三种串行通信协议进行了速率测试,并通过分析协议开销和协议的流控制机制,计算了三种协议的理论传输速率和实际通信效率。结合测试结果和三种协议的具体内容,对三种协议的相关参数和应用领域进行了对比分析。