FPGA在PCIExpress总线接口中的应用
摘要:随着高速数据采集设备传输带宽的日益提高,开发者需要采用新的计算机总线进行数据传输。
这里叙述了使用EP2SGX90系列FPGA完成PCI-
Express协议转换,多种DMA工作方式及相关寄存器的作用。
以链式DMA传输方式为例,详细介绍该传输方式下的寄存器设置及在驱动程序中的实现范例。实验表明,
用FPGA实现协议转换,总线持续传输速率最高可以达到1.2Gb/s,满足大多数高速数据采集设备的要求。在此
辑设计和总线协议转换放到同一个FPGA芯片中,不但节
摒弃了采用专用总线接口芯片的传统方法,将开发者的逻
省了硬件成本,利用其可编程特性,大大提高了设计可扩展性,同样的硬件很容易完成由PCIE1.0到
PCIE2.0的升级。
关键词:PCIE总线;可编程器件;DMA 传输;高速
数据采集设备
中图分类号:TN40;TP336 文献标识码:A文章编号:1004-373X(2010)14-0109-03
Applicationof FPGA in PCI Express Bus Interface
SHEN Hui, ZHANG Ping | |
(NanjingInstitute of Electronic Technology,
Nanjing210000, China)
Abstract:Along with increase of transmission
bandwidthof the high-speed data acquisition systems, the designers have to usethe new computer bus to
completethe data transmission. The implementation of PCI-Express protocoltransform with aplication of FPGA of EP2SGX90 series, the functionsof multiple DMA
operationmodes and the relative register are described. Taking the chainedtransmissin mode as an example, the register setup in the chained DMAtransmission mode
detail.By this means, the continuous transmission rate of
andthe implementation in the driver are introduced in
thebus is up to 1.2 GB. The experiment indicates that it can be appliedto mass of data acquisition designs. One FPGA chip is adopted toaccomplish the logic control and protocol transform of PCI-Expressinstead of the special bus interface chip. It lowers the design costand improves the expandability of design. It is is for the samehardware to upgrade the PCIE1.0 to PCIE2.0.
Keywords:PCIE bus; FPGA; DMA transfer;
high-speeddata acquisition equipment
0引言
PCIE(PCIexpress)是用来互联诸如计算机和通信平
台应用中外围设备的第三代高性能
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]。
传输层(transactionlayer):完成TLP(数据传输包)的收发,含有虚拟信道(VC)缓冲区,具有端口仲裁、VC仲裁、流控制、数据重新排序和数据校验等功能。
数据链路层(datalink layer):数据链路层的主要功能是保证在各链路上发送和接收数据包时数据的完整
性。在接收端,对数据进行严格的CRC校验,如果有错误,会给发送方返回1个NAK信号。发送端具有重传缓冲区,如果收到NAK信号,则把数据重新发送1次。
物理层(physicallayer):对于发送端,接收数据链路层的数据包,把这些数据进行8b/10 b 编码,送到串行发送器上;对于接收端则刚好相反,收到串行码后,先解码,然后送给数据链路层。
在生成PCIE的IP核时,至少选择2个存储区,?┮桓霆?是BAR[1:0],用作用户开发板的扩展存储区用;还有一个是BAR2,下面所有的寄存器操作都是基于该地址的
。新生成的IP核不带有DMA功能,但是在工程文件
夹下面有一个 xxxexamples(xxx代表工程名称)的文件
夹,文件夹里有简单DMA和链式DMA的例子代码,开发者只需要对这些代码进行修改,就能开发出适合自己的DMA功能模块。
2简单DMA
该DMA传输模式相对比较简单,只需要对相应的寄存器进行设置即可完成,DMA传输步骤如下所示,每
进行1次DMA传输,都需要按照下面的步骤进行 1次
设置。下面所述的偏移量都是相对于
BAR2地址[5]。
(1) 设置偏移量为 0x00 和 0x04 的寄存器 ,写入DMA 传输的主机端地址 ;
的PCIE 端点地址 ; (2) 设置偏移量为 0x14 的寄存器 ,写入 DMA 传输
(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 位基地址
表 2 描述符保留 RCLAST
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.H
ighPart;
DmaTableVirtualAddress[2]=DmaTablePhysicalAddress.L owPart;
DmaTableVirtualAddress[3]=0x1;
/*2 个描述符 */
DmaTableVirtualAddress[4]=DMA BLOCK;
DmaTableVirtualAddress[5]=0;
DmaTableVirtualAddress[6]=
DmaBufferPhysicalAddress.HighPart;
DmaTableVirtualAddress[7]=DmaBufferPhysicalAddress.
LowPart;
DmaTableVirtualAddress[8]=DMABLOCK; DmaTableVirtualAddress[9]=0;
DmaTableVirtualAddress[10]=DmaBufferPhysicalAddress.HighPart;;
DmaTableVirtualAddress[11]=DmaBufferPhysicalAddress.LowPart+DMA BLOCK*4;
WRITEREGISTER /*填写寄存器,启动DMA传输*/
ULONG((PULONG)(RegBase+0x0),DmaTableVirtualAddress[0]);
WRITEREGISTER
ULONG((PULONG)(RegBase+0x4),DmaTableVirtualAddress[1]);
WRITEREGISTER
ULONG((PULONG)(RegBase+0x8),DmaTableVirtualAddress[2]);
WRITEREGISTER
ULONG((PULONG)(RegBase+0xc),DmaTableVirtualAddress[3]);
while(dx->DmaTableVirtualAddress[3]!=0x44040001){
}
图1是用SignalTap工具获取的链式DMA读时序图。PCIE核接收txreq0 请求信号,然后给出一个txack0,同时将txdv0 置为有效,该信号套住的 TXData就是需要读取的有效数据[10]。在每次DMA结束之后,PCIE核都会用同样的控制逻辑给主机传送 1个已完成DMA
图1链式DMA传输时序图次数的状态字,如图1中的44040000h。
4性能测试
在做总线性能测试时 ,采用链式DMA传输方式,共
4个描述符表。根据实际使用的PCIE总线通道数和DMA长度的不同,实际测试得到的总线速度也不同,表3给出了参考数据。
表3实测数据
PCIE通道数
48
DMA长度 /B819216 38432 7688 19216 38432
768
总线传输速率5 结 语
/(MB/s)50058065098010501 200
使用 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]AlteraCorporation.PCI Express Compiler User Guide 9.1[EB/OL]. [ 2010-04-03]. http://altera.com.cn.
[6]ChrisCant.Windows WDM设备驱动程序开发指
南[M].北京:机械工业出版社,2001.
[7]ONEYWaher. Programming the Microsoft Windows Driver Model[M]. USA:Micorsoft, 2003.
[8]张惠娟,周利华,翟鸿呜.Windows环境下的设备驱动程序设计[M].西安:西安电子科技大学出版社,2002.
[9]Microsoft.DDK Document[ M] . USA: Microsoft Press, 2000.
北京邮电大学出版社 ,2001. [10]姜立冬.VHDL语言程序设计及应用 [M].北京:
Copyright © 2019- 0527ly.com 版权所有
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务