关于Xilinx PCIE DMA的问答

很久没上博客园了,但由于之前在博客园写了几篇关于PCIE DMA的文章,很多同学给我发消息询问相关知识点,之前有空的时候都是语音一小时跟人细讲,最近由于工作繁忙,有回复不周的,敬请谅解。综合大家提出的问题,对其中几个有代表性的问题,在这里做一下统一回复。

:PCIE DMA主要用来做什么?

:PCIE DMA主要用来解决数据在FPGA和PC之间高速通信的问题

:学习PCIe,应该从什么地方起步?

:分研究型和应用型,研究型从XAPP1052起步,应用型从XDMA起步

:XILINX提供了三种PCIE IP核,各有什么区别?

:第一种 7 Series Integrated Block for PCI Express,这个是最基础的PCIE硬核,实现的是PCIE的物理层、链路层和事务层,提供给用户的是以AXIS接口定义的TLP包。用户如果要往PC发数据,就要在逻辑端组好MEM_WR事务包送到AXIS接口上,同样要从PC获取数据,就要发送MEM_RD事务包,然后获取到COMPLETE事务包,再从COMPLETE事务包中提取出数据。要用这个IP核,需要对PCIE协议有清楚的理解,如果你只是想用PCIE传输数据,又不想去深究协议,那么建议您使用其余两个IP核。第二种 AXI Memory Mapped To PCI Express,这个是本人最喜欢用的PCIE IP核,它的作用就是一座桥,一座FPGA端直通上位机内存的桥,用户如需读写上位机内存空间,只需要操作这个IP核的S_AXI接口,就可以像读写普通AXI接口的BRAM/DDR一样读写上位机内存,对于采集卡而言,FPGA收到AD数据后,只需要根据上位机配下来的写内存地址寄存器,就可以将数据以 AXI Memory接口标准发往上位机,然后产生中断让CPU从相应内存地址去取数据就好了,这种IP就省却了组事务层包的烦恼,你只要把数据发上去就好了,组包的事IP会解决。第三种 DMA/Bridge Subsystem for PCI Express (PCIe),俗称XDMA,这个IP核更狠,不但把事务层的组包解包做了,还把DMA的事也一块儿做了,俗称傻瓜式PCIe传输,为了彻底解放逻辑工程师,它甚至把PC端的驱动都帮你写好了,一经推出就是受到了广大FPGA工程师的欢迎。

:XDMA那么好用,它有什么局限吗?

:XDMA是好用,但却是把双刃剑,使用过的工程师会发现这个XDMA只有M_AXI接口,没有像上述第二个PCIE IP一样的S_AXI接口,这说明什么问题?说明所有的PCIE读写请求只能由上位机发起!FPGA端无法主动发起读写请求。有人问为啥要做成这样,我认为可能是为了系统稳定,控制权必须牢牢掌握在官方驱动手里。要是任由FPGA主动访问内存,分分钟就死机了。又有同学问,为啥AXI Memory Mapped To PCI Express这个IP核可以由FPGA主动发起读写请求,那是因为用这个IP的人都是自己写驱动的,这些高级玩家不会傻到把不能访问的地址空间分配给FPGA。

:XDMA的效率怎么样?

:XDMA效率其实还可以,实测传输带宽大约在满带宽的70%-80%左右。

:XDMA官方驱动好用吗?

:BUG有一些,但基本可用。本人试用过16 17 18三个版本的驱动,目前相对稳定的是18版本。Linux驱动主要问题在中断处理上,硬件触发了中断,驱动也进了中断服务程序,但进去后却找不到对应的用户中断,所以需要在硬件端增加中断持续时间,本人给出的建议是一直拉着中断直到上位机识别到用户中断后,通过写寄存器来清中断。还有不要听信用户手册上的建议,用AXI_LITE接口来配置用户侧的寄存器,因为驱动上这个接口读写延迟非常不稳定,亲测从几微秒到几毫秒都有!建议使用BYPASS接口来配置寄存器。WIN驱动上bug就更多了,网上随便一搜就能搜到。本人稍微改动了一些代码,目前在MM模式下读写效率还是可以的,也在70%-80%。

:XDMA可以用来做高速数据采集卡吗?

:可以,但有较多限制。首先需要有高速的板载DDR,最好上DDR4,因为数据需要先进到板载DDR做缓存,然后触发中断,让CPU发起DMA读请求,把数据从板载DDR读到上位机内存。如果是连续数据采集,意味着FPGA要不间断得写DDR,同时PC也在不间断得读DDR,试想250M时钟128位宽的采样数据,进DDR的速率是4GB/s,出DDR的速率是4GB/s,同时读写也就是要达到8GB/s的吞吐率,请问你的板载DDR准备好了吗?其次CPU不能太烂,因为是高速采集卡,数据不间断采集的时候中断是很频繁的,CPU要是中断处理不过来会很麻烦,而且CPU要是不行,后端数据来不及处理,那么在FPGA板载DDR的地方就会出现进数据快,出数据慢的问题,丢数据就在所难免。最后FPGA器件等级也很重要,器件等级越高,XDMA支持的PCIe传输带宽就越大,目前最高16x gen3,传输带宽越大,CPU就能更快得把数据从板载DDR中取走,避免数据覆盖。目前本人在KC705开发板上可以做到2.5GB/s连续采集,基本可以满足大部分高速采集卡传输需求。

关于Xilinx PCIE DMA的问答的更多相关文章

  1. PCIE DMA实现

    基于Spartan-6, Virtex-5/Virtex-6/Virtex-7/7 Series FPGA PCI Express Block Endpoint模块设计PCI Express Endp ...

  2. 基于Camera Link和PCIe DMA的多通道视频采集和显示系统

    基于Camera Link和PCIe DMA的多通道视频采集和显示系统 在主机端PCIe驱动的控制和调度下,视频采集与显示系统可以同时完成对多个Camera Link接口视频采集以及Camera Li ...

  3. 基于JESD204B和PCIe DMA的多通道数据采集和回放系统

    基于JESD204B和PCIe DMA的多通道数据采集和回放系统 在主机端PCIe驱动的控制和调度下,数据采集与回放系统可以同时完成对多个JESD204B接口AD数据的采集以及JESD204B接口DA ...

  4. 基于PCIe DMA的多通道数据采集和回放IP

    基于PCIe DMA的多通道数据采集和回放IP 在主机端PCIe驱动的控制和调度下,数据采集与回放IP Core可以同时完成对多个通道数据的采集以及回放驱动工作,既可采用行缓存机制(无需帧缓存,无需D ...

  5. 基于PCIe DMA的8通道视频采集&显示IP,兼容V4L2

    基于PCIe DMA的8通道视频采集&显示IP,兼容V4L2 Video Capture&Display IP for V4L2 在主机端视频设备内核驱动V4L2 的控制和调度下,Vi ...

  6. 如何使用xilinx pcie的源代码

    采用xilinx公司的ml555开发板,软件开发环境是ISE13.2 步骤:一,建立一个ISE工程:BMDforPCIE工程的建立方法:bmd_sx50t文件夹包含BMD Desin for the ...

  7. pcie dma的玩法

    There is some issue with the implement script. So I took the manual steps. 1. Created the pcie core ...

  8. PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡

    PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡 一:前言 这一年关于PCIE高速采集卡的业务量激增,究其原因,发现百度"xilinx pcie dma",出 ...

  9. Xilinx FPGA 的PCIE 设计

    写在前面 近两年来和几个单位接触下来,发现PCIe还是一个比较常用的,有些难度的案例,主要是涉及面比较广,需要了解逻辑设计.高速总线.Linux和Windows的驱动设计等相关知识. 这篇文章主要针对 ...

随机推荐

  1. 【独家】React Native 版本升级指南

    前言 React Native 作为一款跨端框架,有一个最让人头疼的问题,那就是版本更新.尤其是遇到大版本更新,JavaScript.iOS 和 Android 三端的配置构建文件都有非常大的变动,有 ...

  2. java前端知识点整理

    1.jsp内置对象?作用? request :客户端请求,包含来自 GET/POST,提供了几个用于获取 cookie, 和 session 的方法 response :网页传回用户端的回应 page ...

  3. C# 压缩、解压文件夹或文件(带密码)

    今天梳理一下项目中用到的压缩.解压文件夹或文件的方法,发现因为需求不同,已经用了好几个不同组件.今天就好好整理记录下,别下次遇到需求又重头开始了. DotNetZip DotNetZip是一个开源的免 ...

  4. 【Android】Android开发初学者实现拨打电话的功能,拨打电话app小demo实现

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先先给大家看一下最终实现的效果: ...

  5. 如何用CMake构建Android C++库

    https://fireflytech.org/2017/11/04/compiling-cc-libraries-for-android/ https://blog.csdn.net/xhp2014 ...

  6. 小花梨判连通 (bfs+思维+map统计数量)

    如果两个集合存储颜色的情况相同,说明这两个在k个图中都是在一个集合的 学到的点:用map,将vector映射一个整数时,只有vector后面的邻接的数据都一样时,才认为两个vector一样 代码: # ...

  7. SpringBoot搭建环境

    选择文件新建一个项目 选择:Spring Initializr,其他配置不变,点击下一步 这里一般写包名和项目名,这里我就默认,直接点击下一步 这里选择:Web  --> Spring Web ...

  8. numpy函数笔记(持续更新)

    numpy函数笔记 np.isin用法 np.isin(a,b) 用于判定a中的元素在b中是否出现过,如果出现过返回True,否则返回False,最终结果为一个形状和a一模一样的数组.(注意:这里的a ...

  9. 小程序开发-6个优秀的UI组件库

    微信小程序开发,当原生的控件不能满足我们时,可以尝试下面几个比较优秀的组件库. 1. WeUI WXSS WeUI WXSS是腾讯官方UI组件库WeUI的小程序版,提供了跟微信界面风格一致的用户体验. ...

  10. Django 页面之间传递MySql数据表(Django八)

    之前实现了页面传递多个参数,但没有实现页面间传递一整个数据表 session传递几个参数:https://blog.csdn.net/qq_38175040/article/details/10496 ...