关于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. CSS 段落/换行/缩进

    CSS 段落/换行/缩进 1.盒模型 box-sizing: content-box|border-box|inherit; content-box(默认) : 实际宽度/高度 = width/hei ...

  2. day03 每日一行

    day03 每日一行 问题描述 用列表解释式 .生成器表达式实现 字典列表为: [{'first': 'john', 'last': 'smith', 'email': 'jsmith@exsampl ...

  3. 《MySQL数据库》MySQL主从复制搭建与原理

    前言 主从复制:两台或者更多的数据库实例,通过二进制日志,实现数据同步.为什么需要主从复制,主从复制的作用是什么,答:为了预防灾难. 搭建 第一步:准备多实例环境.如何创建多实例见: 第二步:确保每一 ...

  4. 火狐Firefox 52.90版是最后一个支持WinXP和Vista的版本

    Firefox 52.90版是最后一个支持 Windows XP 和 Windows Vista 的升级版.(参考:https://support.mozilla.org/zh-CN/kb/firef ...

  5. 发生错误 1069 sqlserver

    ---------------------------SQL Server 服务管理器---------------------------发生错误 1069 - (由于登录失败而无法启动服务.),此 ...

  6. Unity双开

    open -n /Applications/Unity/Unity.app

  7. C004:要求用户输入一个美元数量,然后显示出增加5%税率后的相应金额

    程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float amount; do{ printf(&q ...

  8. Oracle的dbms_random.value(min,max)函数包括边界值吗?数据是如何分布的?

    事先申明下,我的DB环境是Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production,不保证在其它版本下也 ...

  9. Tomcat cluster方案共享session配置成功,yeah....

    后继版本:https://www.cnblogs.com/xiandedanteng/p/12143112.html 参考网文: 1.Tomcat官方文档 2.https://blog.51cto.c ...

  10. LAMP 和 LNMP

    #0x01 组成: LAMP==Linux+Apache+Mysql+PHP LNMP==Linux+Nginx+Mysql+PHP LANMP==linux + nginx + apache + m ...