1、毕 业 设 计 ( 论 文 )题 目: 基于 FPGA 的 PCIE 接口设计 学 院: 信息与通信工程学院 专 业: 电子信息工程 学生姓名: 班级/学号 指导老师/督导老师: 起止时间: 200 年 月 日 至 200 年 月 日 摘要I摘 要在过去的二十几年中,PCI 总线在许多领域中得到了广泛的应用,但是随着微处理器、存储器和互连网络的飞速发展,并行数据传输的 PCI 总线技术逐渐成为系统整体性能提升的瓶颈。从上世纪 90 年代初期,PCI 总线技术至今已经在业内存在了十余年,在这些年中,它的发展是缓慢的,与 PC 总线相比,每三年会提升一倍的性能,从最初的 8 位 PC/XT、16位
2、 ISA 总线、32 位的 EISA 和 MCA、VL 总线到 PCI、64 位 PCI-/66MHZ、PCI-X,但是处理器每 18 个月性能就会提升一倍(一个摩尔周期是 18 个月),正因为 PC 总线和处理器的性能发展不同步,才导致 PC 总线的发展出现了滞后,PCI 总线技术跟不上发展的潮流,出现了瓶颈。PCIExpress(简称 PCIE)总线的出现,颠覆了传统,完全的改变了原本的 PCI 总线的并行技术,PCIE 采用的是新型的串行点对点技术,改善了 PCI 总线传输速度,以及系统带宽方面的本质缺陷,PCIE 总线的提出,解决了 PCI 总线的存在的不足之处,PCIE 总线将发展成
3、为取代 PCI 总线的新型数据总线,而且可以实现更加全面的性能,以更多的功能,更加全面的可扩展性和更加低廉的成本,并且可编程逻辑技术,在当前电子设计领域中已经成为最具有活力和发展前景的技术,通过采用 FPGA 技术,对通信卡的 PCI 接口,外部逻辑电路进行集成,并利用目前通用计算机强大的数字信息处理功能,节省了硬件成本,提高系统可靠性和可扩展性,结合 XLINX LX335 型号 FPGA 的 PCIE Express 接口高速数据传输,研究了在一般情况下编写 PCIE 设备驱动程序时所面临的尖锐问题和解决方法,重点涉及到了驱动程序和硬件接口,以及应用程序等几个方便进行阐述,使用 ISE,W
4、inDriver 开发工具,实现具有简单 DMA 数据传输和链式 DMA 传输功能的驱动程序的有效方法。关键词:PCIE ;ISE;FPGA;AbstractIIAbstractIn the past 20 years, PCI bus has been widely used in many fields, but as the rapid development of microprocessor, memory, and interconnection network, parallel data transmission PCI bus technology has gradually
5、 become the bottleneck of overall system performance improvements. From the early 1990 s, PCI bus technology has existed for more than ten years in the industry, in these years, its development is slow Comparing with PC bus. Every three years doubled the performance, from the original 8-bit PC/XT, 1
6、6-bit ISA bus, 32-bit EISA and MCA and VL bus to PCI and PCI - 64/66 MHZ, PCI - X, but the processor performance would be doubled every 18 months (a mole period is 18 months). The PC bus and processor performance development are not synchronized that contribute to the development of PC bus lag, PCI
7、bus technology cant keep up with the development of the trend, then the bottleneck appeared. The appearance of PCI Express (PCIE) bus subvert the tradition, completely changed the original parallel technology of PCI bus, PCIE used a new type of serial peer-to-peer technology, improved the PCI bus tr
8、ansmission speed, and the natural defects in the system bandwidth. PCIE bus also solved the exist deficiency of the PCI bus. PCIE bus will become a new type of data bus instead of the PCI bus, and can achieve a more comprehensive performance, with more features, more comprehensive scalability and lo
9、w cost, and can programme logic technology, which has become the most dynamic and prospecting development in the current electronic design field. By using FPGA technology, the communication card of PCI interface, external logic circuit integration, and the general computer powerful digital informati
10、on processing functions, PCLe bus saved hardware cost and improved the system reliability and scalability, combining XLINX LX335 type FPGA PCIE Express interface high speed data transmission, studied the problems and solutions when in the general case writing PCIE device driver, mainly involves driv
11、er and hardware interface, and elaborates the application and so on.Using the ISE, WinDriver development tools to implement effective methods of simple DMA data transmission and chain DMA trans.Keywords:PCIE;ISE; FPGA;目录III目录摘要(中文) (英文) 第一章绪论 11.1 PCIE-总线概述 11.2 课题研究北京及意义 .21.3 论文研究的主要内容与意义 .2第二章基于
12、FPGA 的 PCI-E 高速接口设计 .42.1 系统总线设计 .42.2 FPGA 内置 PCIE 硬核 .5第三章设备驱动的程序 .83.1 选择开发工具 .83.2 使用 WinDriver 设计驱动 .83.3 驱动核心代码 11第四章 FPGA 流程 .154.1 PCIE 部分与外围接口定义 .154.2 内部的中断和工作流程图 184.3ChipScope 板上调试时序图 .19第五章基于中断方式的 DMA 传输设计 235.1 界面设计 235.2 性能测试 23第六章总结与发展 26结 束 语 .28参考文献 .29基于 FPGA 的 PCIE 接口设计1第一章 绪论1.1
13、 PCI-E 总线概述PCI-Express 是目前最新一代的接口和总线标准,它原本被命名为“3GIO” 1,是Intel 公司在 2001 年最先提出,并肩负了下一代接口和总线标准的代表。之后便交给 PCI-SIG(PCI 特殊兴趣组织)研究认证并且发布后,从新命名为“PCI-Express” ,全新一代的接口和总线标准取代了现行的 PCI 和 AGP,统一了现行各种总线的标准。PCI-E 是分组的串行链接协议,高速串行点对点双通道高带宽传输,他的优势是数据传输速率高,目前最高可达到 10GB/s,而且发展潜力强大,由于采用高速串行点对点双通道高带宽传输,链接的设备可分配独享通道带宽,不需要
14、向整个总线请求带宽,可以将数据传输速率提升很高的频率,达到 PCI 不能提供的高带宽,PCIE 也有很多种规格,从 PCI Express 1X 到 PCI Express 16X,可以满足不同设备的需求。PCIE 最新的接口是 PCIE 3.0 接口,其比特率为8GB/s,约为上一代产品带宽的两倍,当然也还有 PCIE 2.0 以及 PCIE(即 1.0 版本) ,除了带宽翻倍带来的数据吞吐量大幅提高之外,PCI-E 3.0 的信号速度更快,相应地数据传输的延迟也会更低。与 PCI 并行总线相比,PCIE 总线具有以下特点:1)PCIE 是串行总线,可以进行点对点传输,而且每个传输通道独享带
15、宽。2)PCI Express 总线支持双向传输模式和数据分通道传输模式。PCIE 还有多种不同速度的接口模式,这包括了 1X、2X、4X、8X、16X 以及更高速的 32X。PCIE1.1 版本单个链路的单向吞吐量能达到 250 MB/s。双向传输的速度带宽更能够达到 500MB/s3)PCI Express 总线充分利用先进的点到点互连、基于交换的技术、基于包的协议来实现新的总线性能和特征。电源管理、服务质量(QoS)、热插拔支持、数据完整性、错误处理机制等也是 PCI Express 总线所支持的高级特征。4)与 PCI 总线良好的继承性,可以保持软件的继承和可靠性。PCI Expres
16、s 总线关键的PCI 特征,比如应用模型、存储结构、软件接口等与传统 PCI 总线保持一致,但是并行的PCI 总线被一种具有高度扩展性的、完全串行的总线所替代。5) PCI Express 总线充分利用先进的点到点互连,降低了系统硬件平台设计的复杂性和难度,从而大大降低了系统的开发制造设计成本,极大地提高系统的性价比和稳定性 2。系统总线带宽提高同时,减少了硬件 PIN 的数量,硬件的成本直接下降由于 PCIE 总线硬件设计简单,它没有大量的数据和控制线,对于硬件电路设计者来说,省去了很多硬件设计工作 2。而且 PCIE 吞吐量大,软件向下兼容,只要找到合适的总线接口芯片,很容易将现有的 PC
17、I 总线设备升级为 PCIExpress 设备。PCI Express 架构如图 1 所示,即 PCI Express 的层次体系结构,他保持了与 PCI 寻址模式的兼容性,从而保证了所有现有的应用程序和驱动操作无需改变。它总共分为四层,从下到上分别为:物理层(Physica Layer)、数据链路层(Link Layer)、处理层(Transaction Layer)和软件层(Software Layer)。图中的“S/W”和“Config/OS”均属于软件层。基于 FPGA 的 PCIE 接口设计2OS ConfigNo OS ImpactS/WTransactionData LinkFu
18、ture speeds and Physical encoding TechnologiesOnly impact physicallaye图 1 PCI Express 层 次 体 系 结 构1.2 课题研究的背景及意义随着计算机性能、功能和带宽的日益增长,CPU 的时钟频率以及计算机外围接口的带宽成指数地增长,这导致处理器的数据吞吐量也相应的增加。海量存储,卫星通讯,高速数据采集与记录现以 KMbps 为量级,计算机系统对带宽的要求和扩展性的要求已经超越了第二代总线技术,作为第二代总线标准代表的 PCI 和 PCI-X 总线,其局限性越来越明显,尤其在带宽和扩展性方面,已经不能满足系统日益
19、增长的需求。PCI Express 总线应运而生,其先进的系统架构、灵活的扩展性和超高的带宽,使得 PCI Express 迅速适应高速及实时性要求比较高场合,并且会在未来几年内成为总线领域的佼佼者。1.3 论文研究的主要内容与意义本文结合 Xilinx Virtex6 型号的 FPGA 芯片的 PCI Express 接口高速数据传输卡,实现计算机能够通过软件读写 PCIE 板卡、板卡能够向计算机发送中断、与计算机内存之间数据传输率大于 1GB。选用 Xilinx 公司的 ISE 软件并采用 Verilog 硬件描述语言可对该 IP核进行行为级描述和逻辑综合,同时可将生成的网表文件设计实现,
20、包括逻辑综合及布局布线。具体设计过程中,需要先加载 IPCore,同时要取得 IPCore 的使用授权。配置 IP Core, 需要确定设备的生产厂商 Vendor ID,设备编号 Device ID,类型 Class Code, I/O 方式的地址存储器空间 BAR,有效载荷大小等信息。在 Core Generation 之后,根据 IPCore 提供的文件加载各模块的源文件。利用 Modelsim 进行仿真,Windriver 烧录驱动程序,实现 PCIEPCI PnP Model( int, enum, config)PCI Software/Driver ModelPoint-to-p
21、oint, serial, differentialPacket-based ProtocolData Integnty基于 FPGA 的 PCIE 接口设计3卡能够与计算机之间进行大数据量传输和中断。大数据率的传输,可以通过计算机之间的大数据率的传输,同时给予 FPGA 的 IPCore设计 PCIE 接口,方便灵活,便于修改,基于 WinDriver 编写的上位机程序,使用 MFC 语言进行编程,语法简单,功能多样,便于修改。基于中断方式 DMA 传输,可以实现更快的传输速率,更大的传输带宽,因为使用 FPGA 芯片,可以外挂很多的光纤口,内存等,可以通过该板子实现与数据采集板之间的连接,
22、从而组成一个由数据采集处理,并最终上传到计算机的完整系统。基于 FPGA 的 PCIE 接口设计4第二章基于 FPGA 的 PCI-E 高速接口设计2.1 系统总线的设计概念PCI Express 作为一种标准总线协议,本身具有很多优势,但同样也带来了很多需要面对的挑战 3。对于任何一种新的协议,设计者都是在没有经验的前提下进行设计,所以设计起来很复杂,与此同时,面临着设计复杂,成本等因素的前提下,还需要追求一种快速而且简单的方法在系统中实现 PCIE。(1)提高数据速率带来的设计困难。高速链路设计要求设计者具有很强的高速模拟设计技能,当把设计速率达到 1Gbps 以上时,很多设计都需要进行重
23、大的改变,例如 I/O 缓冲器,同时高速率时处理数据所需要的数字逻辑也是不一样的,编码方案和补偿逻辑使物理层与采用较低速率协议的物理层也有非常大的不同,以上这些都是没有任何研发经验可以参考的,需要设计者从零开始。(2)高数据速率带来的时钟问题。在高数据速率传输中,会产生很多时序裕量的紧张,此时就需要高度的时钟稳定性做保障,这个时候,设计好时钟数据恢复电路就显得十分重要,因为基于数据包的流传输要严格遵循数据流的传输顺序,如果时钟出现混乱,就会产生错误。(3)高数据率带来的制版问题。当数据速率达到 Gbps 时,PCB 的制版难度会增大,PCB板上的时钟信号不仅要保持稳定性,还要避免相互干扰,PC
24、B 板布局及走线技术就显得十分关键,需要避免传统的手工制作板子,使用机械制版。(4)接口器件短缺。在一种新的协议下,还要完成很高的数据率,几乎是没有现成的接口器件来实现的,所以我们需要从理论出发,找到理论中可能实现的器件,并且把器件变成现实,器件不仅要具备在一定的工作电压和温度范围内的可靠性,更需要具有连接多种设备的兼容性等。在近些年的发展中,FPGA 供应厂商开始使用吉比特收发器模块等硬件 IP 来实现高数据率的高速 I/O 接口,例如,Altera 公司的 Stratix IIGX 以及 Xilinx 公司的 Virtex 4、Virtex 5 等芯片。在这些吉比特收发器模块中,可以再 F
25、PGA 中实现高速的串行协议,包括 PCI Express,串行 Rapid IO、千兆以太网等。我是已 xilinx 公司的 virtex6 FPGA 板卡为例,基于 FPGA 的 PCIE 接口设计52.2 FPGA 内置 PCIE 硬核Xilinx FPGA 提供 Virtex-6 端点解决方案 PCI Express,配置 Virtex-6 FPGA 作为PCIE FPGA 集成块,包括额外的逻辑为作为 PCIE 创建一个完整的解决方案。 这对作为 PCIE Xilinx 块包装器简化了设计过程,减少投放市场的时间。许多易用的特性和最佳配置端点和根端口应用程序可以没有额外的成本。此解决
26、方案可用于通信、多媒体、服务器和移动平台,使应用程序如高端医学影像,图形密集的视频游戏,DVD 质量视频流在桌面上和 10 个千兆以太网接口卡。 这个核心结合其他 Xilinx 连接性解决方案帮助客户保护他们的投资在旧技术,允许无缝衔接其他标准和专用接口。PCIE 硬核可以向使用者提供以下几个功能,第一:单字读写,当在 DMA 读写过程中,如果数据长度寄存器定义为 1 个 32bit,此时会变为单字读写操作,所以单字读写是 DMA读写中的一部分。第二:DMA 读写功能。第三:中断功能。如果用这个内核实现 PCIE 的DMA 读写,仅仅这样是不够的,必须在硬核以上 Package 一些应用,在这
27、个应用中要有,TX 逻辑和状态机,中断逻辑,RX 逻辑及状态机也是必不可少的。详细内容见下图。1) EndpointforPCIE :这个模块式FPGA的硬核模块,不仅仅负责与外边的PCIE设备进行通信,还负责与TX、RX模块进行64bit并行与高速串行的转换。2) EP_TX:,执行写操作,状态机以及读操作中存储器请求状态机的实现并将TLP中的包头和数据打包,以64bit并行结构传输给硬核。3) EP_RX: 负责读操作接收完成数据包的状态机的实现以及上位机单字读写FPGA的状态机的实现。基于 FPGA 的 PCIE 接口设计64) EP_MEM:映射为PCIE空间的几个BAR地址空间。5)
28、 PIO_INT:一次读写DMA结束后FPGA向上位机启动一个MSI消息中断或者虚拟INTx中断。Ipcore的生成步骤:如下图,毕业设计中,我选用的Lane Width是X8的,传输速度是2.5GT/S,并设置了两个Bar,Bar0和Bar1,两个Bar的大小都是128Bytes的。基于 FPGA 的 PCIE 接口设计7基于 FPGA 的 PCIE 接口设计8第三章 设备驱动的程序3.1 选择开发工具在毕业设计过程中,如何高效稳定的开发出可靠地驱动程序,在开发工具的选择上尤为重要,经过多方了解,最终我选择了 Jungo 公司的 WinDriver 软件作为这次毕设的开发工具,使用这个软件,
29、可以更加快速的开发 PCI 和 PCIE 驱动程序,而且利用 WinDriver 开发不需要牵涉到很低层的东西即可在很短的时间里编出驱动程序,不需要熟悉操作系统的Kernel 层或 DDK 及任何驱动程式,WinDriver 可以让操作者在用户状态下, 利用使用者模式来开发出所需的驱动程序,而且驱动程序的运行效率也得到了保障。经过多方的试验,已经成功的案例,使用 WinDriver 开发驱动程序,可以满足高数据率的传输。在使用 Windriver 开发的过程中,我觉得效率问题应该是最重要的,从毕设的过程中可以看出,WinDriver 生成驱动的代码效率十分的高,3.2 使用 WinDriver
30、 设计驱动3.2.1 WinDriver 操作步骤(1)双击WinDriver图标,就可以打开软件了,打开软件后可以看到WinDriver的初始界面,如3.1图所示样子的对话框。在使用软件的过程中,如果要新建一个应用,只需要点击左侧的New host driver project按钮,就可以新建一个驱动项目了。如果你已经有了一个项目,只需要点击对话框中右侧的按钮Open anexisting project打开已经建立好的项目。如果用户已经打开了软件,在这个状态下如果新建一个项目,这个时候可以通过单击对话框左侧的按钮同样也会出现如3.1图所示的画面。图3.1(2)如果我们想新建一个主机驱动程序
31、,那需要点击对话框左侧的按钮,接下来就可以看到如 3.2 图所示的对话框,在对话框左边可以选择要开发的设备驱动类型。左侧的列表中会出现当前电脑中安装的所有设备驱动类型,如果将设备连接到电脑上,左侧还会显示已经连接到电脑但是需要安装驱动程序的设备所需要的驱动类型。所以在使用 WinDriver基于 FPGA 的 PCIE 接口设计9软件开发前,需要将设备先连接到电脑上,这样软件才可以识别设备。图 3.2(3)如果把开发板插在 PCIE 插槽上,计算机状态栏中会显示发现新设备的标示。(4)然后计算机会弹出如 3.3 图所示的界面,界面会提示用户使用新硬件安装向导为设备逐步安装驱动程序。因为计算机中
32、没有合适的驱动程序,所以直接选择取消即可。然后计算机会弹出发现新硬件的设备的提示,并提示硬件安装过程中出现一个问题,您的新硬件可能无法正常运行,不需要理会这个弹窗,直接下一步即可。图 3.3(5)双击 WinDriver 的图标打开软件或者回到刚才已经打开的软件界面 选择左面的New host driver project 图标按钮 可以看到如下图所示的画面了。注意 在倒数第三行的位置 我们看到出现了“”一项 单击选中此行 可以看到如 3.4 图的画面。在Device Description 栏中出现了对此设备的描述信息。基于 FPGA 的 PCIE 接口设计10图 3.4(6)选择对话框右上
33、角的 Generate .INF File 按钮 会弹出图 3.5 所示对话框。用户可以在 Device name 一栏中输入自定义的设备名称 其他内容不用更改。单击 Next 按钮 会出现提示保存的对话框如图 3.6 所示,默认状态下会保存在 WinDriver 目录下 用户也可以更改保存位置,但是一定要记住这个文件的保存位置,因为在后面安装设备驱动程序时会用到的。在文件名一栏内输入一个名字 单击保存就可以了。图 3.5基于 FPGA 的 PCIE 接口设计11图 3.6(7)单击保存后,界面出现保存的信息。等待几秒钟整个软件画面会切换到图 3.7 所示。可以看到 WinDriver 已经与
34、 USB 设备建立了连接关系。此时用户可以对设备进行测试。图 3.73.3 驱动核心代码/功能:32 位存储器写操作基于 FPGA 的 PCIE 接口设计12/参数:/ BarNum BAR 空间编号/ OffSet 偏移地址/ Data 32 位数据/返回值:/ (0) 成功/ (1) 失败UINT PCIEDriver:AddWrite32(DWORD BarNum, DWORD OffSet, UINT32 Data)DWORD dwStatus;dwStatus=WDC_WriteAddr32(DHandle, BarNum, OffSet, Data);if (WD_STATUS_S
35、UCCESS != dwStatus)return 1;return 0;/功能:32 位存储器读操作/参数:/ BarNum BAR 空间编号/ OffSet 偏移地址/ Data 32 位数据存储地址指针/返回值:/ (0) 成功/ (1) 失败UINT PCIEDriver:AddRead32(DWORD BarNum, DWORD OffSet, UINT32* Data)DWORD dwStatus;dwStatus=WDC_ReadAddr32(DHandle, BarNum, OffSet, Data);if (WD_STATUS_SUCCESS != dwStatus)retu
36、rn 1;return 0;基于 FPGA 的 PCIE 接口设计13/功能:打开 DMA/参数:/ ppBuf PC 端接收数据缓存地址/ BytesCount 字节数/返回值:/ (0) 成功/ (1) DMA 句柄打开失败/ (2) 锁定 DMA 内存失败/ (3) DMA 已打开UINT16 PCIEDriver:DmaOpen(PVOID *ppBuf,DWORDBytesCount)DWORD dwStatus;if (DmaFlag=TRUE)return 3;dwStatus=WDC_DMAContigBufLock(this-DHandle, ppBuf, DMA_TO_FR
37、OM_DEVICE|DMA_KERNEL_BUFFER_ALLOC, BytesCount,if (WD_STATUS_SUCCESS != dwStatus) return 2;DmaFlag=TRUE;return 0;/功能:关闭 DMA/返回值:/ (0) 成功/ (1) 释放 DMA 失败/ (2) DMA 没有被打开/ (3) DMA 没有被打开UINT16 PCIEDriver:DmaClose(void)DWORD dwStatus;基于 FPGA 的 PCIE 接口设计14if (DmaFlag=FALSE)return 3;if (pDma)dwStatus = WDC_D
38、MABufUnlock(pDma);if (WD_STATUS_SUCCESS != dwStatus)return 1;elsereturn 2;pDma=NULL;DmaFlag=FALSE;return 0;基于 FPGA 的 PCIE 接口设计15第四章 FPGA 的流程4.1 PCIE 部分与外围接口定义4.1.1 概述本设计使用的芯片是 Virtex6 的 LX130T。 PCIE 接口协议基于 x8 模式,使用的Integrated Block for PCI Express。PCIE 模块主要完成信号处理计算机与 FPGA 信号处理板之间的通信,主要包括三种的工作模式:(1)参
39、数下发模式:由信号处理计算机向 FPGA 下发雷达工作所需要的各项参数,包括波控模块参数、频率跟踪模块参数,时序控制模块参数,DDC 模块参数,脉压模块参数等(2)参数上传模式:由 FPGA 板向信号处理计算机上传的参数,主要用于计算机回读雷达此时的工作状态以及安排下一次下发的参数(3)数据传输模式:主要是 FPGA 将处理完成的数据传给信号处理计算机,以完成目标的检测和显示等雷达的功能4.1.2 模块结构p c i e _ d m a _w r a p p e rB A R 1数据寄存器双端口 R A Mp c i e _ r x _ d o u tp c i e _ r x _ r dp
40、c i e _ i n t _ o kp c i e _ i n t _ m o d eB A R 0控制寄存器p c i e _ e n dp o i n tP C机c m dd a tad a t ad a t a _ v l dP c i e4.1.3 接口信号与数据格式基于 FPGA 的 PCIE 接口设计16I n s t _ p c i eP C I E _ R S T _ NP C I E _ E X P _ T X PP C I E _ I N T _ O KP C I E _ R X _ E M PP C I E _ R X _ A E M PP C I E _ R X _
41、D O U TP C I E _ S Y S _ C L K _ NP C I E _ S Y S _ C L K _ PP C I E _ E X P _ T X NP C I E _ E X P _ T X PP C I E _ E X P _ R X NP C I E _ E X P _ R X PP C I E _ E X P _ T X NC O N F I G _ D O N ED A T A _ V L DD A T AC M D _ V L DC M DP C I E _ R X _ D A T A _ O K _ N U MP C I E _ R X _ R DP C I E
42、 _ F I F O _ R S TP C I E _ U S R _ C L KP C I E _ I N T _ M O D ED A T A _ A D D RE N B4.14 接口信号定义与说明(1) 信号名称、方向和数据位宽 PCIE_RST_N 模块输入 1 位 PCIE_EXP_RXP 模块输入 8 位 PCIE_EXP_RXN 模块输入 8 位 PCIE_EXP_TXP 模块输出 8 位 PCIE_EXP_TXN 模块输出 8 位 PCIE_SYS_CLK_P 模块输入 1 位 PCIE_SYS_CLK_N 模块输入 1 位 PCIE_USR_CLK 模块输出 1 位 PCI
43、E_FIFO_RST 模块输出 1 位 PCIE_RX_DOUT 模块输入 64 位 PCIE_RX_RD 模块输出 1 位 DATA 模块输出 36 位 DATA_VLD 模块输出 1 位 DATA_ADDR 模块输出 6 位 ENB 模块输出 4 位 PCIE_INT_OK 模块输入 1 位 PCIE_INT_MODE 模块输入 3 位 DATA_IN 模块输入 36 位 DATA_INVLD 模块输入 1 位基于 FPGA 的 PCIE 接口设计17(2) 主要接口功能说明 PCIE_USR_CLK PCIE 模块的工作时钟 250MHz PCIE_FIFO_RST 由上位机控制的 PC
44、IE 光纤卡的所有缓冲区复位 PCIE_RX_DOUT 上传给 PC 端上位机的处理过的数据 PCIE_RX_RD 数据缓冲区的读使能 DATA 由上位机下发的参数 DATA_VLD 下发参数有效信号 DATA_ADDR 下发参数的地址,供 RAM 的写地址 ENB 双端口 RAM 写使能 PCIE_INT_OK 中断信号 PCIE_INT_MODE 中断信号模式说明 DATA_IN 上传参数 DATA_INVLD 上传参数有效位4.1.5 数据结构协议说明(1)参数数据结构与存储说明参数数据的基本结构:下发参数的数据位数为 36 位,其中的高 4 位为数据校验位,后32 位为真正的参数数据。
45、数据由 PCIE 传到 FPGA 板子上使用双端口 RAM 作为数据的缓存。帧头:4bit 全为 0 或者全为 1总字节数: 32bit(2)下发参数与双端口 RAM 的工作流程使用双口 RAM 的 B 口,下发参数连接 DIB,DATA_ADDR 连接 ADDRB,DATA_VLD 连接ENB,当有参数下发时,ENB 会置高并开始在 RAM 里写入数据此时 DOB 会有数据输出,监测 DOB 的高 4 位,起始状态高 4 位为全 0,当监测到高 4位全变为 1 时说明数据写完可以读取了,此时 ENB 置低,同时 ENA 置高从而从 DOA 读出的数据即为下发的参数数据。(3)上传参数与双端口
46、 RAM 的工作流程使用双口 RAM 的 A 口,上传参数连接 DIA,地址线连接 ADDRA,上传参数有效信号连接 ENA,DATA_IN 连接到 DOB,当有参数上传时,ENA 会置高并开始在 RAM 里写入数据此时 DOA 会有数据输出,监测 DOA 的高 4 位,起始状态高 4 位为全 0,当监测到高 4位全变为 1 时说明数据写完可以读取了,此时 ENA 置低,同时 ENB 置高从而从 DOB 读出的数据即为上传的参数数据。(4)中断控制信号的说明和中断控制流程外部分别需要产生三个中断:(1)下发参数中断(2)上传参数中断(3)数据传输中断中断信号使用 PCIE_INT_OK 和 P
47、CIE_INT_MODE 来达到产生不同中断的目的,PCIE_INT_OK 代表中断,1 表示有中断,当 PCIE_INT_OK 跳变为 1 时 PCIE 模块会对 CPU 产生一个模块,同时会将 PCIE_INT_MODE 中的值传入一个寄存器中,上位机软件收到中断进基于 FPGA 的 PCIE 接口设计18入中断回调程序后,会读取这个寄存器中的值,然后分别对应不同的模式进行不同的操作。4.2 内部的中断和工作流程图4.21 整体工作流程图有中断等待中断P C I E _ I N T _ O K 置 1将 P C I E _ I N T _ M O D E 的值 0 1 传递给 B A R
48、0 中的 4 C 寄存器上位机收到中断信号 , 进入中断程序 , 关闭中断使能中断程序读取 4 C 寄存器中的值进入参数配置模式 , 由 P C 开始下发参数发送完成后 , 向 B A R 0 寄存器 4 8 中写入 1 0 指示参数传输完毕跳出中断程序 , 打开中断使能进入数据传输模式 , 开始向 P C 机传输数据跳出中断程序 , 打开中断使能无中断N检测此寄存器中的值判断是否等于 0 0 1判断是否等于 1 0 0判断是否等于 0 1 0等待下一次中断进入参数上传模式 , 由 P C 开始读取参数跳出中断程序 , 打开中断使能等待下一次中断 等待下一次中断图 1 流程图4.2.2 BAR 寄存器地址映射关系及功能说明BAR0 地址 寄存器功能说明0X1C DMA 开始控制寄存器:写 1 表示开始 DMA 传输写 0 表示结束 DMA 传输0X28 中断总使能寄存器:写 1 表示总使能中断开写 0 表示总使能中断关0X2C 屏