关于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. Java面试题(JVM篇)

    JVM 194.说一下 jvm 的主要组成部分?及其作用? 类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 本地库 ...

  2. SpringCloud Alibaba Nacos 服务治理中心

    目录 一.什么是Nacos? 二.Nacos能干吗? 三.Nacos关键特性 四.Nacos中的基本概念 五.如何安装部署Nacos? 六.Nacos数据持久化 一.什么是Nacos? 英文全称Dyn ...

  3. failed to resolve org.junit.platform

    IDEA提示:failed to resolve org.junit.platform,如下图 方法一:修改Maven镜像 D:\Program Files\apache-maven-3.6.3-pc ...

  4. WebApi之DOM的基本介绍

    1.1.1 什么是DOM ​ 文档对象模型(Document Object Model,简称DOM),是 W3C 组织推荐的处理可扩展标记语言(html或者xhtml)的标准编程接口. ​ W3C 已 ...

  5. Android开发之http网络请求返回码问题集合。

    HTTP状态码(HTTP Status Code) 一些常见的状态码为: 200 - 服务器成功返回网页  404 - 请求的网页不存在  503 - 服务不可用  一.1xx(临时响应) 表示临时响 ...

  6. Linux下命令设置别名--alias(同实用于mac)

    最近在搞appium自动化脚本编写,过程中经常会使用 uiautomatorviewer这个工具查看UI布局和元素,但是不得不说这个单词太长了.. 如何快速使用,有三个小技巧,分别是: 1.设置好改工 ...

  7. Web测试经典bug、安全性测试

    典型BUG 表格的排序.翻页.添加.删除的联合测试 输入框的长度检查 数据库表中如果指定utf8长度为150,则可以输入150个中文或英文字母等 (有时候界面判断失误,却只能输入50个汉字) 数据添加 ...

  8. Prometheus监控神器-服务发现篇(二)

    本章节讲解服务发现与Relabelling的机制与范例. 通过服务发现的方式,我们可以在不重启Prometheus服务的情况下动态的发现需要监控的Target实例信息. 如上图所示,对于线上环境我们可 ...

  9. 哈希,hash

    Hash,一般翻译做散列.杂凑,或音译为哈希.----摘自百度百科 先来看个题:给你一坨一些键值集<key,value>,\(key\)的范围是\([1,10^{10}]\),每次询问\( ...

  10. 09_Python语法示例(数据类型)

    1.买苹果,计算金额并保留两位小数 price = int(input("苹果的单价: ")) weight = float(input("苹果的重量: ")) ...