kaiyun官方注册
您所在的位置: 首页> 可编程逻辑> 设计应用> 基于PCIe的DMA传输在UM-BUS测试系统中的设计与应用
基于PCIe的DMA传输在UM-BUS测试系统中的设计与应用
2015年电子技术应用第8期
李昱青1,2,邱柯妮1,2,张伟功1,2,徐远超1
1.首都师范大学 信息工程学院,北京100048;2.北京市高可靠嵌入式系统技术工程研究中心,北京100048
摘要:动态可重构高速串行总线(UM-BUS)是一种利用多通道并发冗余的方式来实现总线动态容错的高速串行总线。它的测试系统可以实现对总线的通信过程进行监测、存储与分析。由于测试系统需要在数据采集终端与PC之间建立高带宽的通信通道,设计了UM-BUS总线测试系统的PCIe2.0 x1通道的应用方案,设计并实现了基于FPGA的PCIe总线DMA数据传输方案。实验测试结果表明,实际传输速度可以稳定达到200 MB/s以上,完全满足总线测试系统中对数据传输速率的要求。
中图分类号:TP391
文献标识码:A
DOI:10.16157/j.issn.0258-7998.2015.08.036

中文引用格式:李昱青,邱柯妮,张伟功,等. 基于PCIe的DMA传输在UM-BUS测试系统中的设计与应用[J].电子技术应用,2015,41(8):128-130,134.
英文引用格式:Li Yuqing,Qiu Keni,Zhang Weigong,et al. Design and application of DMA transmission based on PCIe for the test system of UM-BUS[J].Application of Electronic Technique,2015,41(8):128-130,134.
Design and application of DMA transmission based on PCIe for the test system of UM-BUS
Li Yuqing1,2,Qiu Keni1,2,Zhang Weigong1,2,Xu Yuanchao1
1.College of Information Engineering,Capital Normal University,Beijing 100048,China; 2.Beijing Engineering Research Center of High Reliable Embedded System,Beijing 100048,China
Abstract:Dynamically reconfigurable high-speed serial bus(UM-BUS) is a novel high-speed serial bus with characteristics of dynamic fault-tolerance and multi-channel concurrency and redundancy. Its test system can provide monitoring, storage and analysis for the communication process of UM-BUS. The test system requires a high-bandwidth communication channel between the data acquisition terminal with the PC. A PCIe2.0 based solution for x1 channel is devised for the test system in this paper. Furthermore, Direct Memory Access (DMA) data transfer has been successfully implemented based on PCIe bus on the FPGA platform. The experimental results show that the actual data transfer speed can reach more than 200 MB/s. This design can fully satisfy the requirements of data transfer rate for the test system.
Key words :PCIe bus;DMA data transfer;dynamically reconfigurable high-speed serial bus;test system

0 引言

动态可重构高速串行总线(UM-BUS)是一种利用多通道冗余方式来实现总线动态容错功能的新型总线[1]

为了验证UM-BUS总线在传输速率、带宽灵活性、动态容错能力以及故障隔离能力等方面的优势[2],本文提出UM-BUS总线测试系统。实现测试系统功能的基础是采集总线上传输的数据包,UM-BUS测试系统中的数据采集模块首先将采集到的总线数据缓存到SDRAM存储器中,再将数据传输到PC进行分析和处理。

本文采用PCIe总线实现数据采集模块与PC之间的通信,在研究PCIe总线协议和端点核(PCIe Endpoint Block)的基础上,使用VIRTEX5系列XC5VLX85T芯片实现了PICe接口硬件电路,设计了基于FPGA的PCIe总线直接内存存取(Direct Memory Access,DMA)数据传输方案。该方案不仅实现了数据从PC内存通过PCIe总线传输至SDRAM内存芯片中存储,同时能够将SDRAM芯片中存储的数据读出,并通过PCIe总线接口将数据传输回PC内存显示。

1 研究背景

1.1 UM-BUS总线介绍

如图1所示,UM-BUS采用一种多线路并发冗余的总线型拓扑结构,它最多可使用32条通道并发进行数据传输,能够对31个通道的故障进行动态容错[2]

jsj2-t1.gif

1.2 UM-BUS测试系统简介

UM-BUS总线的测试系统主要实现3个功能:无过滤监听总线通信过程、故障注入以及总线状态分析[3]。实现PC对UM-BUS总线上传输数据包的接收和处理功能是实现总线测试功能的基础。

为了让PC及时分析和处理测试系统采集到总线数据,本文采用PCIe2.0技术完成UM-BUS测试系统中数据与PC之间的传输。

2 基于PCIe的DMA传输方案设计

本方案设计中,FPGA是最关键部分。它主要包括测试系统中数据的采集模块、SDRAM控制时序模块、用于在硬核的用户接口和传输接口实现PCIe时序逻辑的PCIe的控制模块。图2是基于PCIe的数据传输系统结构图,其中宽箭头指向的模块是本文设计的数据传输系统中重点设计的模块。

jsj2-t2.gif

UM-BUS测试系统将采集到的总线数据缓存在SDRAM存储器中。PCIe控制模块根据PC发出的数据传输请求,将SDRAM中存储的总线数据传输到PC上;PCIe控制模块也可以根据PC发出的数据传输请求,将数据从PC内存通过PCIe接口向下传输到FPGA内部,并通过FPGA内部的SDRAM控制逻辑将数据传输到的SDRAM内存芯片中存储。

本文利用Xilinx官网提供的IP核来实现基于PCIe总线的DMA数据传输方式设计。图3是IP核的功能框图及各个接口[4]

jsj2-t3.gif

各个接口的功能:用户逻辑接口用于与 PCIe的IP 核通信;配置接口实现主机对IP 核的配置;物理层接口用于与根复合体或桥连接;系统接口含有时钟信号和系统复位信号。

本文应用PCIe2.0技术,实现UM-BUS总线测试系统与PC之间的通信,通过编写PCIe用户逻辑接口程序实现PCIe的数据传输功能。

3 硬件设计方案

本文在FPGA中设计了PCIe的控制模块和SDRAM控制模块。PCIe 的控制模块有PCIe读写时序控制、对SDRAM控制器的控制。SDRAM控制模块是一个双口SDRAM控制器,它的左口逻辑作为PCIe总线的DMA写传输时数据的读出口,右口逻辑作为PCIe总线的DMA读传输时数据的写入口。本设计的硬件部分主要有PCIe 的控制模块和SDRAM控制模块。下面主要介绍这两个模块的设计。

3.1 PCIe的控制模块设计

本设计中的PCIe总线接口卡含有一片XC5VLX85T芯片,使用该FPGA实现PCIe总线数据传输的时序逻辑,图4为总线接口卡FPGA的程序结构框图及用户逻辑结构图[5]

jsj2-t4.gif

XC5VLX85T芯片内嵌的PCIe IP核为Endpoint Block plus for PCI Express,实现了PCIe总线的基本协议功能。

为了实现PCIe的数据传输功能,主要是要进行用户逻辑的设计。用户逻辑与PCIe的事务层接口直接连接,可发送或接收事务层数据包,用以实现BAR0空间的访问功能和DMA读写功能[6]。下面将分存储器读写两个操作以及DMA数据传输方式的实现来说明PCIe用户逻辑的设计。

3.1.1 Burst存储器写操作的设计与实现

对于存储器写请求,实现的主要方法是数据接收控制器EP_RX将接收到的TLP包头中各个字段进行正确解析,并区分是单字写还是Burst写请求,以及确定写操作的数据长度。如果是单字写请求,就将TLP包中的64 bit数据存入寄存器中;如果是Burst写请求,就将TLP包中的有效数据载荷区的数据按照64 bit写入双口缓冲区,每过一个时钟周期地址自动增加,直到数据全部存入到双口缓冲区,一次Burst写操作完成。

3.1.2 Burst存储器读操作的设计与实现

对于存储器读请求,实现的主要方法是数据接收控制器EP_RX将接收到的TLP包头中各个字段进行正确解析,并将请求数据的起始地址和数据长度发送给数据发送控制器EP_TX,然后启动EP_TX发送完成数据。

3.1.3 DMA功能的实现

本文采用DMA的方式用于FPGA外部存储器SDRAM与系统内存之间的数据传输。采用DMA方式访问外部存储器的最大优势是CPU配置完DMA状态机后可继续执行其他指令操作。DMA状态机通过请求PCIe 总线中断完成数据传输。

本设计中DMA写传输的数据包格式是存储器写请求TLP,DMA读传输的数据包格式是存储器读请求TLP与存储器读完成TLP[7]

下面以DMA写为例说明DMA的设计。PCIe的DMA写数据传输方式主要是将TLP包头中的各个字段进行正确填充,并将数据按照64 bit并行放在TLP的包头,然后传输给PCIe IP硬核,最后硬核以PCIe总线协议串行传输给PC。DMA写数据传输的状态机转换图如图5所示。

jsj2-t5.gif

DMA在进行数据传输时,传输一次TLP包的最大载荷为128 B,图5中当M=128时,表明包的一次传输结束。此时判断当前传输的字节数与DMA所要传输的字节数是否相等,如果不相等则继续传输,直至所有数据传输完毕,DMA传输结束。

3.2 高速缓存SDRAM控制模块设计

高速缓存SDRAM控制模块主要实现SDRAM控制器的功能,进而实现对系统中的高速数据进行缓存的功能。SDRAM控制器直接控制SDRAM存储器进行数据的读取。为了提高整个测试系统的可靠性和高速性,本文使用的SDRAM控制器采用猝发式数据读写模式,可以高速实时地向SDRAM读写数据。

由于PCIe IP核传输的数据是64 bit,而测试系统中SDRAM存储器对数据位宽要求是32 bit,因此要完成对数据位宽的匹配。在进行数据位宽匹配时,一定要兼顾到PCIe数据传输的时序逻辑。本文采用异步FIFO来实现数据位宽的匹配。由于数据传输时采用DMA的方式,所以在进行DMA读写操作时都需要异步FIFO来完成数据匹配功能。图6为在进行DMA写操作时PCIe和SDRAM存储器进行数据位宽匹配的状态机,图7为在进行DMA读操作时PCIe和SDRAM存储器进行数据位宽匹配的状态机。

jsj2-t6.gif

jsj2-t7.gif

4 结果与验证

本文设置使用PCIe的x1通道,经过测试软件多次测试,从PC经过PCIe总线存储到SDRAM存储器的数据正确,满足PCIe总线传输数据的时序要求,同时满足SDRAM存储器的数据读写时序要求。DMA数据传输操作正确,且速度可稳定达到200 MB/s以上,满足UM-BUS总线对测试系统数据传输速率的要求。

经过多次测试,发现传输速率与传输数据包的大小(size)以及包的个数(tlp)有关。设定数据包的大小为32个双字,当数据包的大小和包的个数越多时,数据的传输速率呈现下降趋势。图8为DMA写操作传输数据包的大小(size)为固定值32个双字的传输速率图。

jsj2-t8.gif

5 结束语

本文实现的基于PCIe总线DMA方式的数据传输系统可以完成上位机与SDRAM存储器通过PCIe总线以DMA的方式进行数据传输的功能。

本文的设计方法釆用内嵌在FPGA的PCIe IP核,降低了硬件设计复杂度。实际工程应用表明该PCIe接口达到了较高的数据传输速率,满足UM-BUS总线测试系统对高速数据传输的需求。

参考文献

[1] 王嘉佳.动态可重构总线控制器的设计与实现[D].北京:首都师范大学,2012.

[2] 邓哲,张伟功,朱晓燕,等.动态可重构总线数据传输管理方法设计与实现[J].计算机工程,2013,39(1):264-269.

[3] 陕天龙,周继芹,王春亮,等.USB在动态可重构总线测试系统中的设计[J].计算机工程与设计,2015,36(2):514-519.

[4] Xilinx DS551.LogiCORE IP Endpoint Block Plus v1.15 for PCI Express[Z].2011.

[5] Xilinx.LogiCORE1M IP Endpoint Block Plus vl.14 for PCI Express user guide[Z].USA:Xilinx,2010.

[6] 牛少平,田泽,廖寅龙.PCI Express专用DMA控制器设计与实现[J].计算机技术与发展,2012,22(7):174-176.

[7] 王齐.PCI Express体系结构导读[M].北京:机械工业出版社,2010.

此内容为AET网站原创,未经授权禁止转载。
Baidu
map