当前位置:巨优公文网>范文大全 > 公文范文 > FPGA在PCI,Express总线接口中的应用

FPGA在PCI,Express总线接口中的应用

时间:2022-11-10 19:35:08 公文范文 来源:网友投稿

摘 要:随着高速数据采集设备传输带宽的日益提高,开发者需要采用新的计算机总线进行数据传输。这里叙述了使用EP2SGX90系列FPGA完成PCI-Express协议转换,多种DMA工作方式及相关寄存器的作用。以链式DMA传输方式为例,详细介绍该传输方式下的寄存器设置及在驱动程序中的实现范例。实验表明,用FPGA实现协议转换,总线持续传输速率最高可以达到1.2 Gb/s,满足大多数高速数据采集设备的要求。在此摒弃了采用专用总线接口芯片的传统方法,将开发者的逻辑设计和总线协议转换放到同一个FPGA芯片中,不但节省了硬件成本,利用其可编程特性,大大提高了设计可扩展性,同样的硬件很容易完成由PCIE 1.0到PCIE 2.0的升级。

关键词:PCIE总线; 可编程器件; DMA传输; 高速数据采集设备

中图分类号:TN40; TP336 文献标识码:A

文章编号:1004-373X(2010)14-0109-03

Application of FPGA in PCI Express Bus Interface

SHEN Hui, ZHANG Ping

(Nanjing Institute of Electronic Technology, Nanjing 210000, China)

Abstract: Along with increase of transmission bandwidth of the high-speed data acquisition systems, the designers have to use the new computer bus to complete the data transmission. The implementation of PCI-Express protocol transform with aplication of FPGA of EP2SGX90 series, the functions of multiple DMA operation modes and the relative register are described. Taking the chained transmissin mode as an example, the register setup in the chained DMA transmission mode and the implementation in the driver are introduced in detail. By this means, the continuous transmission rate of the bus is up to 1.2 GB. The experiment indicates that it can be applied to mass of data acquisition designs. One FPGA chip is adopted to accomplish the logic control and protocol transform of PCI-Express instead of the special bus interface chip. It lowers the design cost and improves the expandability of design. It is is for the same hardware to upgrade the PCIE1.0 to PCIE2.0.

Keywords: PCIE bus; FPGA; DMA transfer; high-speed data acquisition equipment

0 引 言

PCIE(PCI express)是用来互联诸如计算机和通信平台应用中外围设备的第三代高性能I/O总线。PCIE体系结构继承了第二代总线体系结构最有用的特点,采用与PCI相同的使用模型和读/写通信模型,支持各种常见的事务。其存储器、I/O和配置地址空间与PCI的地址空间相同。由于地址空间模型没有变化,所以现有的OS和驱动软件无需进行修改就可以在PCIE系统上运行[1]。

PCIE是串行协议,与原有的PCI并行总线相比,它没有大量的数据和控制线,对于硬件电路设计者来说,省去了很多硬件设计工作[2]。PCIE的传输速度远远大于PCI总线,PCIE 1.1版本单个链路的单向吞吐量能达到250 MB/s。对于需要与主机进行大容量传输的系统来说,该总线标准的优势是非常明显的[3-4]。

由于PCIE总线硬件设计简单,吞吐量大,软件向下兼容,只要找到合适的总线接口芯片,很容易将现有的PCI总线设备升级为PCI Express设备。Altera公司最新推出的EP2SGX90系列的芯片,给用户提供了PCIE接口IP核。本文将结合实际的应用,详细介绍该IP核的使用情况,包括寄存器设置,DMA操作等。

1 功能描述及参数设置

按照PCIE协议的要求,该FPGA的IP核也采用三层体系结构,即传输层、数据链路层和物理层。这三层功能模块完成了PCIE的协议转换,在传输层上给开发人员提供了非常丰富的接口。开发人员的所有开发,包括DMA传输等都是在传输层以上进行的[5]。

传输层(transaction layer):完成TLP(数据传输包)的收发,含有虚拟信道(VC)缓冲区,具有端口仲裁、VC仲裁、流控制、数据重新排序和数据校验等功能。

数据链路层(data link layer):数据链路层的主要功能是保证在各链路上发送和接收数据包时数据的完整性。在接收端,对数据进行严格的CRC校验,如果有错误,会给发送方返回1个NAK信号。发送端具有重传缓冲区,如果收到NAK信号,则把数据重新发送1次。

物理层(physical layer):对于发送端,接收数据链路层的数据包,把这些数据进行8 b/10 b编码,送到串行发送器上;对于接收端则刚好相反,收到串行码后,先解码,然后送给数据链路层。

在生成PCIE的IP核时,至少选择2个存储区,一个是BAR[1:0],用作用户开发板的扩展存储区用;还有一个是BAR2,下面所有的寄存器操作都是基于该地址的。新生成的IP核不带有DMA功能,但是在工程文件夹下面有一个xxx examples(xxx代表工程名称)的文件夹,文件夹里有简单DMA和链式DMA的例子代码,开发者只需要对这些代码进行修改,就能开发出适合自己的DMA功能模块。

2 简单DMA

该DMA传输模式相对比较简单,只需要对相应的寄存器进行设置即可完成,DMA传输步骤如下所示,每进行1次DMA传输,都需要按照下面的步骤进行1次设置。下面所述的偏移量都是相对于BAR2地址[5]。

(1) 设置偏移量为0x00和0x04的寄存器,写入DMA传输的主机端地址;

(2) 设置偏移量为0x14的寄存器,写入DMA传输的PCIE端点地址;

(3) 在偏移量为0x08的寄存器中写入本次DMA传输的长度,以字节为单位;

(4) 设置偏移量为0x0C的寄存器,设置DMA传输的属性,对该寄存器的写操作将启动本次DMA传输;

(5) 读取0x0C的寄存器DMA传输状态位,察看本次DMA是否完成。

3 链式DMA

链式DMA是一种效率远远高于简单DMA的传输方式,它只需要1次启动操作,就可以完成多次DMA传输。这里将结合实际使用情况,详细介绍链式DMA的传输过程。

3.1 描述符表

实现链式DMA传输时,需要开发人员在主机内存中开辟一块空间,用来存储描述符表,它由一个表头和多个描述符组成,其中每一个描述符对应一次DMA操作。用户根据自己的需求填写该描述符表,关于该描述符表的详细说明如表1和表2所示[6-7]。

控制区域中含有一些控制信息,其中第16位用来控制传输方向,为0是DMA写,为1是DMA读,这里的读/写是以主机端为参考的,如果以PCIE核为参考,方向刚好相反。第18位用来使能DMA传输计数,如果该位使能为1,那么在DMA传输过程中,PCIE核每完成1次DMA操作,都会进行1次计数操作,然后把这个计数结果传送给主机,主机把这个结果填写到描述符表的RCLAST字段中。

表大小是指本次链式DMA操作对应的描述符个数,每个描述符对应一次DMA操作。

RCLAST是一个计数单元,它有两个作用,在链式DMA传输前,表示还有多少个DMA操作等待传输,由于它是从0开始计数的,所以这个值等于表大小减1。还有一个重要作用是在链式DMA传输过程中,用来表示链式DMA传输的状态。如上所述,如果控制区域的第18位设置为1,那么每完成1次DMA操作,主机都会更新这个计数器。当计数器的数值(也是从0开始计数的)等于前面设置的期望传输的DMA次数,就表示链式DMA传输操作结束。开发人员可以用这个状态单元来察看本次传输是否结束,从而开始一个新的传输周期。

表1 描述符表表头

31 16 15 0

控制区域表大小

描述符表高32位基地址

描述符表低32位基地址

保留RCLAST

表2 描述符

31222116150

保留控制区域DMA长度

PCIE端点地址

主机端高32位地址

主机端低32位地址

DMA长度用来设置本描述符对应的DMA传输的长度,是以32位为单位的。主机端地址用来指示数据存放存放的位置。

3.2 实现范例

根据上面介绍的描述符表,下面给出一个链式DMA读的驱动程序例子。首先生成一个描述符表,然后把描述符表表头的4个字段的内容分别写入BAR2地址偏移量为0x0,0x4,0x8和0xC寄存器中。写完后即开始此次链式DMA读传输,while循环用于等待链式DMA结束。从下面的代码可以看出,2个描述符对应2次DMA操作[8-9]。

#define DMA BLOCK 16

/*描述符表头*/

DmaTableVirtualAddress[0]=0x50002;

DmaTableVirtualAddress[1]=DmaTablePhysicalAddress.HighPart;

DmaTableVirtualAddress[2]=DmaTablePhysicalAddress.LowPart;

DmaTableVirtualAddress[3]=0x1;

/*2个描述符*/

DmaTableVirtualAddress[4]=DMA BLOCK;

DmaTableVirtualAddress[5]=0;

DmaTableVirtualAddress[6]= DmaBufferPhysicalAddress.HighPart;

DmaTableVirtualAddress[7]=DmaBufferPhysicalAddress.LowPart;

DmaTableVirtualAddress[8]=DMA BLOCK;

DmaTableVirtualAddress[9]=0;

DmaTableVirtualAddress[10]=DmaBufferPhysicalAddress.HighPart;;

DmaTableVirtualAddress[11]=DmaBufferPhysicalAddress.LowPart+DMA BLOCK*4;

/*填写寄存器,启动DMA传输*/

WRITE REGISTER ULONG((PULONG)(RegBase+0x0),DmaTableVirtualAddress[0]);

WRITE REGISTER ULONG((PULONG)(RegBase+0x4),DmaTableVirtualAddress[1]);

WRITE REGISTER ULONG((PULONG)(RegBase+0x8),DmaTableVirtualAddress[2]);

WRITE REGISTER ULONG((PULONG)(RegBase+0xc),DmaTableVirtualAddress[3]);

while(dx->DmaTableVirtualAddress[3]!=0x44040001)

{

}

图1是用SignalTap工具获取的链式DMA读时序图。PCIE核接收tx req0请求信号,然后给出一个tx ack0,同时将tx dv0置为有效,该信号套住的TX Data就是需要读取的有效数据[10]。在每次DMA结束之后,PCIE核都会用同样的控制逻辑给主机传送1个已完成DMA次数的状态字,如图1中的44040000h。

图1 链式DMA传输时序图

4 性能测试

在做总线性能测试时,采用链式DMA传输方式,共4个描述符表。根据实际使用的PCIE总线通道数和DMA长度的不同,实际测试得到的总线速度也不同,表3给出了参考数据。

表3 实测数据

PCIE通道数

48

DMA长度 /B8 19216 38432 7688 19216 38432 768

总线传输速率 /(MB/s)5005806509801 0501 200

5 结 语

使用FPGA来设计PCIE总线扩展卡,可以省去专用的PCIE接口芯片,降低了硬件设计成本,提高了硬件的集成度。利用FPGA的可编程特性,大大提高了设计灵活性、适应性和可扩展性。PCIE总线提供了高速、独享的数据交换通道,确保在大数据量的数据交换时不会出现瓶颈,而且作为新一代总线,它使系统在获得更高性能的同时,具有了良好的升级性。

参考文献

[1]田玉敏,王崧,张波.PCI Express系统体系结构标准教材[M].北京:电子工业出版社,2005.

[2]PCI Special Interest Group. PCI Express Base Specification Revision 1.0a[EB/OL]. [ 2009-10-16] . http://netyi.net/Book.

[3]PCI Special Interest Group.PCI Local Bus Specification 2.2[EB/OL]. [ 1998-12-02] . http://ftp.sandpile.org/docs/intel/PCI.htm.

[4]李贵山,戚得虎.PCI局部总线开发者指南[M].西安:西安电子科技大学出版社,1997.

[5]Altera Corporation.PCI Express Compiler User Guide 9.1[EB/OL]. [ 2010-04-03] . http://altera.com.cn.

[6]Chris Cant.Windows WDM设备驱动程序开发指南[M].北京:机械工业出版社,2001.

[7]ONEY Waher. Programming the Microsoft Windows Driver Model[M]. USA: Micorsoft, 2003.

[8]张惠娟,周利华,翟鸿呜.Windows环境下的设备驱动程序设计[M].西安:西安电子科技大学出版社,2002.

[9]Microsoft. DDK Document[ M] . USA: Microsoft Press, 2000.

[10]姜立冬.VHDL语言程序设计及应用[M].北京:北京邮电大学出版社,2001.

推荐访问:总线接口 FPGA PCI Express

版权所有:巨优公文网 2018-2024 未经授权禁止复制或建立镜像[巨优公文网]所有资源完全免费共享

Powered by 巨优公文网 © All Rights Reserved.。备案号:沪ICP备18054162号-1