基于Riffa的PCIE开发

PCIE DMA开发一共有4大类:Xilinx官方XAPP1052和XMDA IP、以色列Xillybus多通道DMA IP、国外RIFFA IP、北大EPEE IP)。

要开发一个带PCIe或者PXIe接口的FPGA板卡出来,除了硬件本身外,最重要的就是FPGA芯片里面的PCIe通信代码编写,俗称下位机FPGA编程;还有中间层的驱动文件编写以及上位机PC端的应用程序开发。

Xilinx官方提供的XDMA IP核方案有一个不足的地方,就是PCIe通信时的通道数量有限制,用户无法灵活配置,只能两上两下,无法实现8上8下这种,除非用户自己通过软件编写实现,这样工作量就会无比巨大。另外,Xilinx官方提供的驱动文件没有经过微软数字签名认证,无法正常安装,只能将windows系统设置到测试模式下才行,这点对于普通用户来说,比较麻烦。 

以色列XILLYBUS公司推出的Xillybus FPGA PCIe DMA驱动IP核。这家公司技术实力非常全面,在很早的时候,就把复杂的FPGA PCIe DMA通信技术通过自己的封装变成傻瓜化,让用户能够轻轻松松集成到自己的项目和产品应用中。与此同时,该公司还把USB 3.0协议进一步封装成非常易用的FPGA IP核,以及将Xilinx ZYNQ平台里面的AXI4总线重新封装了。除此之外,Xillybus不仅仅支持Xilinx公司带PCIe的全系列FPGA芯片,还支持Altera公司带PCIe的全系列FPGA 芯片。

 首先,Xillybus将Xilinx或Altera公司的底层PCIe接口IP core,接入到它自己的Xillybus IP core,然后再通过四线握手的Application FIFO接口将收发TX、RX通道映射出来给到FPGA。结构非常清晰,用户即使完全不懂PCIe通信协议,也可以很简单的在FPGA里面通过调用Xillybus提供的收发FIFO接口,将数据发送到上位机PC或者接收上位机PC下发的数据,因为Xillybus直接将底层的IP核全部屏蔽了,用户只需要按照标准的四线握手协议来操作对应的FIFO缓冲区就可以了。而上位机PC端更加简单,只需要通过打开被系统(Windows和Linux都支持)识别出来的名为xillybus的PCIe设备,然后调用标准的文件读写函数,进行文件读写即可控制底层FPGA芯片里面的FIFO数据的收发。 

RIFFA(用于FPGA加速器的可重用集成框架),它是用于通过PCIe总线从主机CPU到FPGA相互之间进行数据交互的简单框架。该框架要求具有PCIe的上位机PC或者工控机和带有PCIe接口的FPGA硬件。RIFFA中间层驱动支持Windows和Linux,底层驱动FPGA PCIe IP核支持Xilinx和Altera芯片,上位机应用层支持LabVIEW、C / C ++、Python、Matlab和Java。

软件方面,RIFFA有两个主要功能:数据发送和数据接收。上层提供C / C ++、Python、MATLAB、Java下的DLL链接库。中间层驱动程序在每个系统(Linux和Windows操作系统)下支持识别多个FPGA(最多5个)。 

硬件方面,用户访问具有独立发送和接收信号的接口(全双工),无需了解总线地址,缓冲区大小或者PCIe数据包格式。只需在FIFO接口上发送数据并在FIFO接口上接收数据即可。RIFFA不依赖于PCIe桥接器,因此不受桥接器实现的限制。取而代之的是,RIFFA直接与PCIe端点一起使用,RIFFA使用直接内存访问(DMA)传输和中断信号传输数据。这样可以在PCIe链路上实现高带宽。软件和硬件接口都已大大简化。

FPGA底层集成了Xilinx的PCIe core,然后使用TX、RX引擎,经过通道仲裁映射到最多12个TX、RX通道上。结构与PIO、BMD的结构类似,增加了通道扩展的功能,这样用户就不需要自己去写仲裁代码了。

上位机PC端主要就是基本的驱动、应用结构,PCIe的访问空间映射到了PC的内存上;中间层的RIFFA驱动负责内存以及PCIe接口的管理,RIFFA动态链接库可以被用户应用程序调用,从而实现对底层RIFFA驱动的调用,并最终实现PCIe的数据通信。 

最后一个就是昙花一现的北大开源组织做的EPEE,图7-8是其系统框图,感兴趣的用户可以自行分析,因为目前可以找到这个EPEE的资料和应用非常少,这里就不在介绍了。 

选择一个合适的FPGA PCIe驱动IP非常重要,不仅可以节约大量开发时间,关键是稳定性要比我们自己写的更好,毕竟很多商业的FPGA驱动IP核和驱动inf文件都是经过了大量企业实践检验过的,而很多所谓的开源代码,实际上用起来总是有这样那样的bug和坑,需要用户自己花费大量的时间去调试、修改和维护,有时候得不偿失。如果是做产品的话,个人愚见,还是用成熟的企业版软件工具包和FPGA驱动IP核,毕竟稳定胜于一切,社会分工不一样。以上来源于:神电测控 https://www.bilibili.com/read/cv10494381/ 

这里考虑到后续将接入多个FPGA进行资源池管理,我们选择使用基于开源的Riffa开发PCIE接口驱动。

这里使用基于Linxu系统作为我们的host进行开发,板卡是Kintex-7.这里为了方便,直接使用Riffa给的FPGA demo里的板卡型号进行开发。在XXX文件夹下,使用vivado2015.4打开工程在setting中可以看到板卡的型号。为了方便我们进行开发,而较少的对底层IP进行修改和调试,直接使用demo case。

这里需要说明一下,在vivado2019.1中对demo进行综合,总是会遇到问题,编译不能通过。有些是对functions.vh文件中的clog2s方法进行修改,还有将functions.vh文件set global  include均不能解决。于是将vivado版本进行降级编译。于是选择了vivado2015.4,编译通过。Riffa这个开源框架也是最近几年没有人在维护了,所以对新版本的vivado编译会有问题。所以有遇到相同问题的小伙伴可以尝试下。

 

 先说一下我们的环境:

linux主机为host,使用c_c++代码进行上位机调试。使用xilinx kintex7芯片为FPGA工程。

接下来,Linux端驱动安装。

#download
$:git clone https://github.com/KastnerRG/riffa
$:cd driver/linux

#install kernel header
$:sudo make setup

#compile and install
$:make
$:sudo make install
$:sudo ldconfig
$:sudo modprobe riffa

#check
$:lsmod | grep riffa

FPGA工程编译综合,bit流下载。

 调试:

done. 

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 为了更好的理解PCIEDMA测试分析,需要先了解Riffa架构。Riffa是一种基于FPGA的PCI Express总线实现框架,可用于支持高带宽、低延迟的数据传输和重新配置。 使用基于RiffaPCIEDMA测试分析,可以对PCIE总线进行全面的测试分析,以确保工作正常且数据传输无误。具体来说,可以通过以下步骤来执行测试: 首先,需要使用FPGA平台开发一个实际的数据传输应用程序。该应用程序可能包括PCIE DMA传输和其他FPGA实现的功能,如数字信号处理等。 之后,需要将该应用程序集成到Riffa框架中,并通过PCIe总线与主机进行连接。在运行应用程序之前,可以使用Riffa提供的一些工具来进行端口扫描、爬行和脉冲示波器捕获等测试和分析。 接下来,可以通过观察Riffa提供的吞吐量和时延数据等指标,来对应用程序的性能进行评估。同时,还可以使用一些诊断工具来检查是否存在数据包丢失或重复等问题。 最后,需要对测试结果进行分析和总结,并根据需要进行优化和修改,以确保应用程序能够高效、稳定地工作。 综上所述,通过使用基于Riffa架构的PCIEDMA测试分析,可以帮助用户对PCIE总线进行全面的测试和分析,从而确保数据传输的稳定性和可靠性。 ### 回答2: Riffa是一种基于FPGA的PCI Express(PCIe)通信架构,用于高速数据传输。PCIEDMA测试分析是对基于Riffa架构的PCIe DMA传输的测试和分析。 在PCIEDMA测试分析中,需要考虑传输性能、延迟、容错性等因素。首先,需要对DMA传输的带宽进行测试,以确保数据传输速度达到预期。其次,需要测试延迟情况,以确保DMA传输的实时性。同时,需要进行容错性测试,以确保数据传输的稳定性和可靠性。 PCIEDMA测试分析可以用于验证基于Riffa架构的PCIe DMA传输的性能和稳定性,同时也可以为使用该架构的应用提供参考。在实际应用中,可以根据测试分析结果对传输参数进行优化,以提高数据传输效率和可靠性。 综上,PCIEDMA测试分析是对基于Riffa架构的PCIe DMA传输进行测试和分析的过程,可以为数据传输的性能和稳定性提供参考和优化方案。 ### 回答3: 基于riffa架构的PCIEDMA测试分析是一项非常重要的技术领域,它可以帮助人们更好地了解数据传输的性能和效率,同时也可以为高速数据传输应用提供强有力的技术支持。 PCIEDMA是一种利用PCIe总线实现高速数据传输的技术,该技术可使计算机的DMA控制器直接传输数据而不需要CPU的干预,从而提高数据传输速度和效率。rifta架构是一种基于FPGA的高性能计算架构,可以通过提供丰富的硬件资源和可编程性来支持PCIE DMA的实现。 在进行基于riffa架构的PCIEDMA测试分析时,可以通过对传输数据的大小、传输速度、错误率以及吞吐量等进行评估和分析,来确定系统的性能和可靠性。通过对这些指标的测量和分析,可以全面了解系统的实际传输性能,并针对不同的应用场景进行优化和改进。 因此,基于riffa架构的PCIEDMA测试分析具有重要的意义,在高速数据传输领域具有广泛的应用前景和重要的研究价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值