关于Xilinx PCIE DMA的问答
关于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的问答的更多相关文章
- PCIE DMA实现
基于Spartan-6, Virtex-5/Virtex-6/Virtex-7/7 Series FPGA PCI Express Block Endpoint模块设计PCI Express Endp ...
- 基于Camera Link和PCIe DMA的多通道视频采集和显示系统
基于Camera Link和PCIe DMA的多通道视频采集和显示系统 在主机端PCIe驱动的控制和调度下,视频采集与显示系统可以同时完成对多个Camera Link接口视频采集以及Camera Li ...
- 基于JESD204B和PCIe DMA的多通道数据采集和回放系统
基于JESD204B和PCIe DMA的多通道数据采集和回放系统 在主机端PCIe驱动的控制和调度下,数据采集与回放系统可以同时完成对多个JESD204B接口AD数据的采集以及JESD204B接口DA ...
- 基于PCIe DMA的多通道数据采集和回放IP
基于PCIe DMA的多通道数据采集和回放IP 在主机端PCIe驱动的控制和调度下,数据采集与回放IP Core可以同时完成对多个通道数据的采集以及回放驱动工作,既可采用行缓存机制(无需帧缓存,无需D ...
- 基于PCIe DMA的8通道视频采集&显示IP,兼容V4L2
基于PCIe DMA的8通道视频采集&显示IP,兼容V4L2 Video Capture&Display IP for V4L2 在主机端视频设备内核驱动V4L2 的控制和调度下,Vi ...
- 如何使用xilinx pcie的源代码
采用xilinx公司的ml555开发板,软件开发环境是ISE13.2 步骤:一,建立一个ISE工程:BMDforPCIE工程的建立方法:bmd_sx50t文件夹包含BMD Desin for the ...
- pcie dma的玩法
There is some issue with the implement script. So I took the manual steps. 1. Created the pcie core ...
- PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡
PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡 一:前言 这一年关于PCIE高速采集卡的业务量激增,究其原因,发现百度"xilinx pcie dma",出 ...
- Xilinx FPGA 的PCIE 设计
写在前面 近两年来和几个单位接触下来,发现PCIe还是一个比较常用的,有些难度的案例,主要是涉及面比较广,需要了解逻辑设计.高速总线.Linux和Windows的驱动设计等相关知识. 这篇文章主要针对 ...
随机推荐
- 漏洞重温之sql注入(五)
漏洞重温之sql注入(五) sqli-labs通关之旅 填坑来了! Less-17 首先,17关,我们先查看一下页面,发现网页正中间是一个登录框. 显然,该关卡的注入应该为post型. 直接查看源码. ...
- JAVA开源软件的技术选型--开源软件诞生2
技术准备--第2篇 用日志记录“开源软件”的诞生 赤龙ERP开源地址,点亮星标,支持一下,万分感谢 码云:https://gitee.com/redragon/redragon-erp github: ...
- SwiftUI - Grid View 的实现方法,逐步剖析助你实现
简介 在当前正式 SwiftUI 版本而言,很多控件都是缺少的.比如在 UIKit 框架里有 UICollectionView 组件,可以很方便地做 Gird 格子类型的视图.但是在 SwiftUI ...
- 【Azure DevOps系列】Azure DevOps生成代码覆盖率
前言 在做单元测试时,代码覆盖率可以作为我们衡量代码质量的一个指标,本章我们将使用Azure DevOps帮助我们生成代码覆盖率的结果.Azure DevOps构建管道还是具有代码覆盖率选项的,在Vi ...
- Python 30道高频面试题及详细解答
开学啦,开学啦!周末坐地铁的时候看到很多同学推着行李箱,拎着大包小包的穿梭在人群中,哎新的一学期又开始啦,同时也意味着很多同学要准备毕业啦,尤其是准大四,准研三的同学. 今年的招聘行情并不乐观,小公司 ...
- The Data Warehouse Toolkit 阅读笔记
前言 这篇笔记的主要内容来至于The Data Warehouse Toolkit,该书可以称为数仓建模的圣经 什么是星型模型 以一个业务实时为主表.比如一笔订单就是一个业务事实.订单有商品的SKU信 ...
- Codeforces 1337C Linova and Kingdom
题意 给你一颗有根树,你要选择\(k\)个点,最大化\(\sum_{i \in S} val_i\),其中\(S\)是被选点的集合,\(val_i\)等于节点\(i\)到根的路径上未被选择点的个数. ...
- MySql数据库规范与原则
1.数据库表名命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确,多个单词用下划线'_'分隔; 例如:user_login, user_pro ...
- python3之print()函数
print语法格式 print()函数具有丰富的功能,详细语法格式如下: print(value, -, sep=' ', end='\n', file=sys.stdout, flush=False ...
- Java 8 Stream API实例
一.开篇 Stream?其实就是处理集合的一种形式,称之为流,在Java8中被引入,可被Collection中的子类调用. 作用?简化代码,提升你的开发效率. 不会?看完这篇你就能自己上手了! 二.实 ...