基于FPGA的PCIE接口设计 初稿office.docx
- 文档编号:4065840
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:44
- 大小:1.19MB
基于FPGA的PCIE接口设计 初稿office.docx
《基于FPGA的PCIE接口设计 初稿office.docx》由会员分享,可在线阅读,更多相关《基于FPGA的PCIE接口设计 初稿office.docx(44页珍藏版)》请在冰豆网上搜索。
基于FPGA的PCIE接口设计初稿office
信息工程大学
毕业设计(论文)任务书
(地方学生)
课题名称基于FPGA的PCI-E接口设计
学生姓名项春雷
所在院、系(队)信息工程学院九系四队
专业电子信息工程
学号20075301177
申请学位级别工学学位
指导教师单位
指导教师姓名刘拥军
技术职务教员
二○一一年五月
课题名称
基于PFGA的PCI-E接口设计
其他指导老师姓名、单位
刘永军
课题主要任务与要求:
备注
系(或教研室)审批意见:
签(章)年月日
学院训练部审批意见:
签(章)年月日
信息工程大学
毕业设计(论文)报告
(地方学生)
课题名称基于FPGA的PCI-E接口设计
学生姓名项春雷
所在院、系(队)信息工程学院九系四队
专业电子信息工程
学号20075301177
申请学位级别工学学位
指导教师单位
指导教师姓名刘拥军
技术职务教员
二○一一年五月
指导教师评语:
签(章)年月日
答辩小组意见:
负责人签(章)年月日
学院答辩委员会意见:
负责人签(章)年月日
学院训练部审核意见:
盖章年月日
基于FPGA的PCI-E接口设计
摘要
随着高速数据采集设备传输带宽的日益提高,开发者需要采用新的计算机总线进行数据传输。
结合EP2AG125型号FPGA的PCIExpress接口高速数据传输,讨论了一般PCIExpress设备驱动程序编写时所面临的主要问题和解决方案,重点从驱动程序、硬件接口以及应用程序等几个方面进行分析阐述,并比较详尽的介绍了使用WinDriver开发具有简单DMA数据传输和链式DMA传输功能的驱动程序的有效方法。
以链式DMA传输方式为例,详细介绍该传输方式下的寄存器设置及在驱动程序中的实现范例。
在此摒弃了采用专用总线接口芯片的传统方法,将开发者的逻辑设计和总线协议转换放到同一个FPGA芯片中,不但节省了硬件成本,利用其可编程特性,大大提高了设计可扩展性,同样的硬件很容易完成由PCIE1.0到PCIE2.0的升级。
关键词:
PCIE总线,FPGA,Windrive,驱动程序,链式DMA传输
DesignofFPGAinPCIExpressbusinterface
Abstract
Alongwithincreaseoftransmissionbandwidthofthehigh_speeddataacquisitionsystems,thedesignershavetousethenewcomputerbustocompletethedatatransmission.SomekeyproblemsandresolutionswerediscussedondevelopmentsofgeneralPCIexpressdevicedriverbasedontheimageboardofPCIExpressbusdeveloped.Emphasisontheanalysisandexplanationsofdevicedriver,hardwareportandapplicationprograms.ItalsointroducedeffectivemethodofdevelopingthedevicedriverwithsimpleDMAtransmissionandchainingDMAfunctionusingWinDriver.Takingthechainedtransmissinmodeasanexample,theregistersetupinthechainedDMAtransmissionmodeandtheimplementationinthedriverareintroducedindetail.Theexperimentindicatesthatitcanbeappliedtomassofdataacquisitiondesigns.OneFPGAchipisadoptedtoaccomplishthelogiccontrolandprotocoltransformofPCI-Expressinsteadofthespecialbusinterfacechip.Itlowersthedesigncostandimprovestheexpandabilityofdesign.ItisforthesamehardwaretoupgradethePCIE1.0toPCIE2.0.
Keywords:
PCI-EBus;FPGA;Windriver;drive;ChainingDMA
摘要……………………………………………………………………………………()
第一章绪论…………………………………………………………………………
1.1PCI-E总线概述……………………………………………………………()
1.2课题研究背景与意义………………………………………………………()
1.3论文研究的主要内容与意义………………………………………………()
第二章基于FPGA的PCI-E高速接口计………………………………………
2.1系统总线设计………………………………………………………………()
2.2FPGA中PCI-E硬核的使用…………………………………………………()
第三章设备驱动程序的计…………………………………………()
3.1开发工具的选择……………………………………………………………()
3.2驱动设计的流程……………………………………………………………()
3.3驱动核心代码………………………………………………………………()
第四章高速DMA传输设计……………………………………………………()
4.1基于IP核的链式DMA控制…………………………………………………()
4.2DMA传输的驱动设计…………………………………………………………()
4.3性能测试……………………………………………………………………()
第五章总结与展望………………………………………………………………()
致谢…………………………………………………………………………………()
参考文献……………………………………………………………………………()
附录………………………………………………………………
第一章绪论
1.1概述
PCI-Express是最新的总线和接口标准,它原来的名称为“3GIO”,是由英特尔提出的,很明显英特尔的意思是它代表着下一代I/O接口标准。
交由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”。
这个新标准将全面取代现行的PCI和AGP,最终实现总线标准的统一。
它的主要优势就是数据传输速率高,目前最高可达到10GB/s以上,而且还有相当大的发展潜力。
PCIExpress也有多种规格,从PCIExpress1X到PCIExpress16X,能满足现在和将来一定时间内出现的低速设备和高速设备的需求。
能支持PCIExpress的主要是英特尔的i915和i925系列芯片组。
PCIExpress(以下简称PCI-E)采用了目前业内流行的点对点串行连接,比起PCI以及更早期的计算机总线的共享并行架构,每个设备都有自己的专用连接,不需要向整个总线请求带宽,而且可以把数据传输率提高到一个很高的频率,达到PCI所不能提供的高带宽。
相对于传统PCI总线在单一时间周期内只能实现单向传输,PCI-E的双单工连接能提供更高的传输速率和质量,它们之间的差异跟半双工和全双工类似。
PCIExpress(简称PCIE)总线技术是取代PCI的第三代I/O技术,也称为3GIO。
PCIExpress总线是为将来的计算机和通讯平台定义的一种高性能、通用I/O互连总线。
与PCI总线相比,PCIExpress总线主要有下面的技术优势:
1)是串行总线,进行点对点传输,每个传输通道独享带宽。
2)支持双向传输模式和数据分通道传输模式,支持x1,x4,x8,x16等模式。
x1单向传输带宽即可达到250MB/s,双向传输带宽更能够达到500MB/s。
3)充分利用先进的点到点互连、基于交换的技术和基于包的协议来实现新的总线性能和特征。
4)对PCI总线具有良好的继承性,可以保持软件的继承和可靠性。
5)充分利用先进的点到点互连,降低了系统硬件平台设计的复杂性和难度,从而大大降低了系统的开发制造设计成本,极大地提高系统的性价比和鲁棒性。
PCIExpress架构如图1所示,即PCIExpress的层次体系结构。
它保持了与PCI寻址模式(加载-存储体系机构且具有单层地址空间)的兼容性,从而保证了所有现有的应用程序和驱动操作无需改变。
PCIExpress配置使用的是PCI即插即用标准中定义的标准机制。
这些层分别是事务层(TransactionLayer)、数据链路层(DataLinkI且yer)和物理层(PhysicalLayer)。
数据的传输是以一种包的形式在各层中传输的,因此,PCIExpress定义了三类数据包,每一类与三个设备层中的一层相关。
与事务层相关的是事务层数据包(TLP),与数据燃相关的是数据链路层包(DLLP),与物理层相关的是物理层数据包(PLP)
OSConfig
NoOSImpact
S/W
Transaction
DataLink
Futurespeedsandencodingtechnologies
Onlyimpactphysicallaye
Physical
图1PCIExpress层次体系机构
1.2课题背景与意义
随着系统性能、功能和带宽的日益增长,总线技术也在迅速的发展。
海量存储,卫星通讯,高速数据采集与记录以及其他数据处理的数据吞吐量现以KMbps为量级,未来计算机系统对带宽和扩展性的要求已经超越了第二代总线技术。
由英特尔提出的第三代高性能I/O总线技术———PCIE总线解决了PCI总线的不足,它的发展将取代PCI成为新型的数据总线,其提供了更加完善的性能,更多的功能,更强的可扩展性和更低的成本。
1.3论文研究的主要内容与意义
本文结合EP2AG125x8型号FPGA芯片的PCIExpress接口高速数据传输卡,讨论了一般PCIExpress设备驱动程序编写时所面临的主要问题和解决方案,重点从驱动程序设计流程、硬件接口以及应用程序等几个方面进行分析阐述,并比较详尽的介绍了使用WinDriver开发具有简单数据传输和DMA传输功能的驱动程序的有效方法。
驱动程序设计的主要目的是了解设计流程以及设计思想,如何完成驱动程序同板卡之间协同工作。
如何实现高速数据传输的设计思想及解决办法。
第二章基于FPGA的PCI-E高速接口设计
2.1系统总线设计概论
PCIExpress作为一种标准协议,尽管具有不少优势,但它也带来了许多需要面对的挑战。
对任何一种新的协议,设计者都必须在没有先前经验的情况下进行设计,必须认识到其复杂性。
同时,面对设计复
杂、成本等因素,还需要以一种快速而简单的方法在系统中实现PCIE
(1)数据速率提高带来的设计困难。
高速链路设计要求设计者具有很强的高速模拟设计技能。
当数据速率达到lGbps以上时,I/O缓冲器的设计需进行重大改变,同时高速率时处理数据所需的数字逻辑也很不一样,编码方案及补偿逻辑使其物理层与采用较低速率协议的物理层也有极大不同。
这些都是没有经验可以借鉴的,需要从头开始。
(2)高数据率产生时钟问题。
高速数据速率必然产生时序裕量的紧张这就需要高度的时钟稳定性来做保障,这样,时钟数据恢复(CDR)电路也显得极为重要。
因为基于数据包的流传输要严格遵循数据流的传输顺序,一旦时钟混乱就会产生错误。
(3)高数据率产生制板问题。
Gbps以上的数据率使得PCB制板难度显著增大,因为要保持时钟的稳定性和避免相互干扰,电路板布局布线技术变得非常关键,这样看来手工制板似乎很难达到要求,必须采用机械制板,这很显然会使研究成本大大增加。
(4)没有现成的接口器件。
由于是一种新的协议且具有很高的数据率,因此没有现成的接口器件来实现它,需要找到理论上可以实现该协议的器件并想办法把它变成现实。
这样的器件还需具有在工作电压以及温度范围的可靠性以及具有连接多种器件的兼容性等多方面特性。
在最近几年中,FPGA供应商开始采用吉比特(Gbps)收发器模块等硬件IP来实现高数据速率的高速串行I/O接口。
例如,Xilinx公司的VirtexII
Pro、Virtex4、Virtex5等芯片,Altera公司的StratixIIGX等芯都集成了比特收发器。
采用吉比特收发器模块,现在可以在一片FPGA中实现高速串行协议,这其中就包括PCIExpress、千兆以太网、串行RapidIO、XAUI和HD.SDI等。
除此之外NXP、TI、Genesys公司等设计了独的吉比特(Gbps)PHY接口芯片,可以把这些PHY接口器件和Xilinx、Ahera公司的低成本FPGA芯片组合在一起来实现PCIExpress总线接口。
本文主要以ArriaIIGXFPGA板卡为例,如图2所示。
图2ArriaIIGXFPGA
第三章设备驱动程序设计
3.1开发工具的选择
为了快速地开发出稳定可靠的驱动程序,选用Jungo公司出版的WinDriver作为开发工具,它可以大大加速PCI和PCIe设备驱动程序的开发。
利用WinDriver开发设备驱动程序,不需要熟悉操作系统的内核,整个驱动程序中的所有函数都是工作在用户态下的,通过与WinDriver的.Vxd或者.Sys文件交互来达到驱动硬件的目的。
WinDriver的易用性并不影响驱动程序的运行效率,经试验表明,用WinDriver开发的驱动程序完全符合高速数据传输的要求。
在使用WinDriver或者VxdTools这类工具时,大家最关心的一个问题可能就是效率问题。
从实践与分析来看,WinDriver生成的驱动代码的效率相当地高。
比如PCI卡的高速数据采集涉及到DMA的应用,WinDriver提供相应的API来将卡上的内存映射到用户态程序所能直接访问的地址空间中,然后直接对这个映射后得到的地址进行DMA操作。
也就是说,与用DDK来直接编写驱动程序的区别就在于地址映射的操作上,在这部分工作上面,用WinDriver的API肯定没有直接用DDK写的专门面向特定硬件优化的代码来得高效。
但是这部分代码实际上属于初始化工作,这部分的效率高低事实上并不会影响总体上的效率。
经过实际应用,发现WinDriver这个软件使用快速,无论是开发效率还是实际达到的性能指标都相当令人满意。
特别对于硬件开发人员来说,可以不必了解繁琐的操作系统的内核知识,就可以快速地开发出驱动程序,对于调试硬件是一个很好的帮助工具。
这主要由于其是一个用户态程序,效率的高低也就成了人们选择WinDriver时关心的一个问题。
大量实践数据表明,WinDriver并没有通过牺牲系统性能来换取驱动程序的快速开发,的确是一个“像开发用户态程序那样简单,像核心态程序那样高效”的开发工具。
3.2驱动设计流程
3.2.1Windriver的使用说明
1、双击桌面上的图标打开WinDriver软件,每次打开软件都可以看到图2.1所示的对话框。
对于一个新的应用单击左面的Newhostdriverproject(新建一个主机驱动项目)就可以了。
如果用户已经建立了一个项目,请单击右面的Openanexistingproject(打开已经存在的项目)。
如果用户想在已经打开的软件中新建一个项目也可以单击工具栏左侧的图标按钮,同样会出现图3.1所示的画面。
图3.1
2、假设我们选择单击上图中左边的图标后,可以看到下面的画面,见图3.2。
在左边的选择要开发的设备驱动类型。
左边的列表中实际上列出了您的电脑上当前安装的所有设备的驱动类型或者是已经连接到电脑但是需要安装驱动程序的设备所需要的驱动类型。
因此在用WinDriver开发设备驱动之前首先要将设备连接到的电脑上。
图3.2
3、把板卡插在pcie插槽上,此时PC机任务栏上会出现发现设备的图标。
4、接着Windows操作系统会弹出图3.3所示的对话框信息,提示您使用新硬件安装向导为设备安装驱动程序。
因为当前PC机上没有合适的驱动,所以请选择取消。
然后系统会弹出如图3.4所示的提示信息。
这是正常的现象,请不要理会。
图3.3
图3.4
5、双击WinDriver的图标打开软件或者回到刚才已经打开的软件界面,选择左面的Newhostdriverproject图标按钮,可以看到图2.6所示的画面了。
注意:
在倒数第三行的位置,我们看到出现了“”一项,单击选中此行,可以看到图3.5的画面。
在DeviceDescription栏中出现了对此设备的描述信息。
图3.5
图3.6
6、选择对话框右上角的Generate.INFFile按钮,会弹出图3.7所示对话框。
用户可以在Devicename一栏中输入自定义的设备名称,其他内容不用更改。
单击Next按钮,会出现提示保存的对话框如图3.8,默认状态下会保存在WinDriver目录下,用户也可以更改保存位置,但是一定要记住这个文件的保存位置,因为在后面安装设备驱动程序时会用到的。
在文件名一栏内输入一个名字,单击保存就可以了。
图3.7
图3.8
7、单击保存以后,用户会看到如图3.9的提示信息。
等待几秒钟,整个软件画面会切换到图3.10所示。
可以看到WinDriver已经与USB设备建立了连接关系。
此时用户可以对设备进行测试。
图3.9
图3.10
3.2.1WinDriver开发PCIe驱动程序的框图
其基本流程如图3.11所示。
读写Memory
或IO
PCIE中断
处理
图3.11Windriver的驱动程序开发流程
简单数据传输是驱动程序和PCIE传输卡的Memory空问或IO空间进行数据传输,在WinDriver中,它主要是通过两个函数来实现:
WD_Transfer()和WD_MultiTransfer()。
在进行数据传输之前,要对硬件作初始化操作。
首先用WD_Open()获得WinDriver内核模式句柄;
然后利用VENDORID和DEVICE__ID枚举相应的设备(WD_PciScanCards());
接着通过WD_PciGetCardlnfo()函数获得设备的资源信息,如Memory空间、I/O范围等;WD_PciConfigDump()可以实现对配置空间特定寄存器的读写;利用WD_CardRegister()锁定卡上资源,向核心态登记。
初始化结束之后,就可以通过WD_Transfer()和WD_MultiTransfer()对传输卡的地址和WD_MuhiTransferMemory地址和IO端口进行数据读写。
通过参数的设置,可以32位4字节,64位8字节或块数据三种模式传输。
数据传送结束后,用WD_CardUnregister()释放所分配的资源,并用WD_Close()关闭句柄。
3.3驱动核心代码
利用Windrive设计驱动的核心代码见附件1所示。
第四章链式DMA设计
4.1基于IP核的链式DMA控制
由于PCIE总线硬件设计简单,吞吐量大,软件向下兼容,只要找到合适的总线接口芯片,很容易将现有的PCI总线设备升级为PCIExpress设备。
Altera公司推出的EP2AGX125系列的芯片,给用户提供了PCIE接口IP核。
本文将结合实际的应用,详细介绍该IP核的使用情况,包括寄存器设置,DMA操作等。
4.1.1功能描述及参数设置
按照PCIE协议的要求,该FPGA的IP核也采用三层体系结构,即传输层、数据链路层和物理层。
这三层功能模块完成了PCIE的协议转换,在传输层上给开发人员提供了非常丰富的接口。
开发人员的所有开发,包括DMA传输等都是在传输层以上进行的。
传输层(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的例子代码,开发者只需要对这些代码进行修改,就能开发出适合自己的DM功能模块。
4.1.2简单DMA
该DMA传输模式相对比较简单,只需要对相应的寄存器进行设置即可完成,DMA传输步骤如下所示,每进行1次DMA传输,都需要按照下面的步骤进行1次设置。
下面所述的偏移量都是相对于BAR2地址。
(1)设置偏移量为0x00和0x04的寄存器,写入DMA传输的主机端地址;
(2)设置偏移量为0x14的寄存器,写入DMA传输的PCIE端点地址;
(3)在偏移量为0x08的寄存器中写入本次DMA传输的长度,字节为单位;
(4)设置偏移量为0x0C的寄存器,设置DMA传输的属性,对该寄存器的写操作将启动本次DMA传输;
(5)读取0x0C的寄存器DMA传输状态位,察看本次DMA是否完成。
其流程如图4.1所示
图表4.1简单DMA流程图
4.1.3链式DMA
链式DMA是一种效率远远高于简单DMA的传输方式,它只需要1次启动操作,就可以完成多次DMA传输。
这里将结合实际使用情况,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于FPGA的PCIE接口设计 初稿office 基于 FPGA PCIE 接口 设计 初稿 office