FPGA在PCI Express总线接口中的应用.docx
《FPGA在PCI Express总线接口中的应用.docx》由会员分享,可在线阅读,更多相关《FPGA在PCI Express总线接口中的应用.docx(8页珍藏版)》请在冰豆网上搜索。
![FPGA在PCI Express总线接口中的应用.docx](https://file1.bdocx.com/fileroot1/2023-4/28/a2d499a8-54ec-457d-a036-9926ac76d512/a2d499a8-54ec-457d-a036-9926ac76d5121.gif)
FPGA在PCIExpress总线接口中的应用
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
ApplicationofFPGAinPCIExpressBusInterface
SHENHui,ZHANGPing
(NanjingInstituteofElectronicTechnology,Nanjing210000,China)
Abstract:
Alongwithincreaseoftransmissionbandwidthofthehigh-speeddataacquisitionsystems,thedesignershavetousethenewcomputerbustocompletethedatatransmission.TheimplementationofPCI-ExpressprotocoltransformwithaplicationofFPGAofEP2SGX90series,thefunctionsofmultipleDMAoperationmodesandtherelativeregisteraredescribed.Takingthechainedtransmissinmodeasanexample,theregistersetupinthechainedDMAtransmissionmodeandtheimplementationinthedriverareintroducedindetail.Bythismeans,thecontinuoustransmissionrateofthebusisupto1.2GB.Theexperimentindicatesthatitcanbeappliedtomassofdataacquisitiondesigns.OneFPGAchipisadoptedtoaccomplishthelogiccontrolandprotocoltransformofPCI-Expressinsteadofthespecialbusinterfacechip.Itlowersthedesigncostandimprovestheexpandabilityofdesign.ItisisforthesamehardwaretoupgradethePCIE1.0toPCIE2.0.
Keywords:
PCIEbus;FPGA;DMAtransfer;high-speeddataacquisitionequipment
0引言
PCIE(PCIexpress)是用来互联诸如计算机和通信平台应用中外围设备的第三代高性能I/O总线。
PCIE体系结构继承了第二代总线体系结构最有用的特点,采用与PCI相同的使用模型和读/写通信模型,支持各种常见的事务。
其存储器、I/O和配置地址空间与PCI的地址空间相同。
由于地址空间模型没有变化,所以现有的OS和驱动软件无需进行修改就可以在PCIE系统上运行[1]。
PCIE是串行协议,与原有的PCI并行总线相比,它没有大量的数据和控制线,对于硬件电路设计者来说,省去了很多硬件设计工作[2]。
PCIE的传输速度远远大于PCI总线,PCIE1.1版本单个链路的单向吞吐量能达到250MB/s。
对于需要与主机进行大容量传输的系统来说,该总线标准的优势是非常明显的[3-4]。
由于PCIE总线硬件设计简单,吞吐量大,软件向下兼容,只要找到合适的总线接口芯片,很容易将现有的PCI总线设备升级为PCIExpress设备。
Altera公司最新推出的EP2SGX90系列的芯片,给用户提供了PCIE接口IP核。
本文将结合实际的应用,详细介绍该IP核的使用情况,包括寄存器设置,DMA操作等。
1功能描述及参数设置
按照PCIE协议的要求,该FPGA的IP核也采用三层体系结构,即传输层、数据链路层和物理层。
这?
┤?
层功能模块完成了PCIE的协议转换,在传输层上给开发人员提供了非常丰富的接口。
开发人员的所有开发,包括DMA传输等都是在传输层以上进行的[5]。
传输层(transactionlayer):
完成TLP(数据传输包)的收发,含有虚拟信道(VC)缓冲区,具有端口仲裁、VC仲裁、流控制、数据重新排序和数据校验等功能。
数据链路层(datalinklayer):
数据链路层的主要功能是保证在各链路上发送和接收数据包时数据的完整性。
在接收端,对数据进行严格的CRC校验,如果有错误,会给发送方返回1个NAK信号。
发送端具有重传缓冲区,如果收到NAK信号,则把数据重新发送1次。
物理层(physicallayer):
对于发送端,接收数据链路层的数据包,把这些数据进行8b/10b编码,送到串行发送器上;对于接收端则刚好相反,收到串行码后,先解码,然后送给数据链路层。
在生成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传输的主机端地址;
(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描述符表表头
3116150
控制区域表大小
描述符表高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]。
#defineDMABLOCK16
/*描述符表头*/
DmaTableVirtualAddress[0]=0x50002;
DmaTableVirtualAddress[1]=DmaTablePhysicalAddress.HighPart;
DmaTableVirtualAddress[2]=DmaTablePhysicalAddress.LowPart;
DmaTableVirtualAddress[3]=0x1;
/*2个描述符*/
DmaTableVirtualAddress[4]=DMABLOCK;
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+DMABLOCK*4;
/*填写寄存器,启动DMA传输*/
WRITEREGISTERULONG((PULONG)(RegBase+0x0),DmaTableVirtualAddress[0]);
WRITEREGISTERULONG((PULONG)(RegBase+0x4),DmaTableVirtualAddress[1]);
WRITEREGISTERULONG((PULONG)(RegBase+0x8),DmaTableVirtualAddress[2]);
WRITEREGISTERULONG((PULONG)(RegBase+0xc),DmaTableVirtualAddress[3]);
while(dx->DmaTableVirtualAddress[3]!
=0x44040001)
{
}
图1是用SignalTap工具获取的链式DMA读时序图。
PCIE核接收txreq0请求信号,然后给出一个txack0,同时将txdv0置为有效,该信号套住的TXData就是需要读取的有效数据[10]。
在每次DMA结束之后,PCIE核都会用同样的控制逻辑给主机传送1个已完成DMA次数的状态字,如图1中的44040000h。
图1链式DMA传输时序图
4性能测试
在做总线性能测试时,采用链式DMA传输方式,共4个描述符表。
根据实际使用的PCIE总线通道数和DMA长度的不同,实际测试得到的总线速度也不同,表3给出了参考数据。
表3实测数据
PCIE通道数
48
DMA长度/B8192163843276881921638432768
总线传输速率/(MB/s)50058065098010501200
5结语
使用FPGA来设计PCIE总线扩展卡,可以省去专用的PCIE接口芯片,降低了硬件设计成本,提高了硬件的集成度。
利用FPGA的可编程特性,大大提高了设计灵活性、适应性和可扩展性。
PCIE总线提供了高速、独享的数据交换通道,确保在大数据量的数据交换时不会出现瓶颈,而且作为新一代总线,它使系统在获得更高性能的同时,具有了良好的升级性。
参考文献
[1]田玉敏,王崧,张波.PCIExpress系统体系结构标准教材[M].北京:
电子工业出版社,2005.
[2]PCISpecialInterestGroup.PCIExpressBaseSpecificationRevision1.0a[EB/OL].[2009-10-16].
[3]PCISpecialInterestGroup.PCILocalBusSpecification2.2[EB/OL].[1998-12-02].http:
//ftp.sandpile.org/docs/intel/PCI.htm.
[4]李贵山,戚得虎.PCI局部总线开发者指南[M].西安:
西安电子科技大学出版社,1997.
[5]AlteraCorporation.PCIExpressCompilerUserGuide9.1[EB/OL].[2010-04-03]..
[6]ChrisCant.WindowsWDM设备驱动程序开发指南[M].北京:
机械工业出版社,2001.
[7]ONEYWaher.ProgrammingtheMicrosoftWindowsDriverModel[M].USA:
Micorsoft,2003.
[8]张惠娟,周利华,翟鸿呜.Windows环境下的设备驱动程序设计[M].西安:
西安电子科技大学出版社,2002.
[9]Microsoft.DDKDocument[M].USA:
MicrosoftPress,2000.
[10]姜立冬.VHDL语言程序设计及应用[M].北京:
北京邮电大学出版社,2001.