altera/xlinx pcie dma应用
altera:
1. PCIe DMA应用屏蔽了复杂的PCIE协议,例如A10 pcie DMA控制器可以例化在IP核内部,DMA的寄存器端口被接到BAR0上,pc通过对BAR0地址的读写就可以操作DMA,BAR0-BAR1都是32位,组合起来成为1个64位的空间。BAR2用于寄存器访问,FPGA 端对Avalon MM的读写进行响应。
2.DMA读写都是通过PC主动配置FPGA的dma控制,由fpga的dma发起tlp mem读写请求。pc在内存中写好读或者写描述符,将描述符的物理地址写到BAR0寄存器中,告诉DMA去这个地址取描述符,按照描述符的指示搬移数据,搬移完成后,DMA回来写status =1,PC提前清除status,发送DMA后(最后一步操作写PTR),轮询最后一个status==1即可知道何时DMA结束。
3.dma例化时一般都有2种接口,avalon mm和avalon st。avalon mm可以后端自己写一个dma控制器,tlp包转mm由ip实现。avalon st由用户组tlp包和解tlp包。
xilinx:
1.7系列的FPGA提供了3种IP,封装层级依次复杂,分别是
7 Series Integrated Block for PCI Express:出来的是tlp包,只有三种,mem write/read,cpld。
AXI Memory Mapped To PCI Express,映射成了AXI MM。
DMA/Bridge Subsystem for PCI Express (PCIe),带DMA。
一般用XDMA的比较多,官方有linux下完善的驱动,和app例子,有一点linux c基础的都看得懂。QDMA更高级,是带循环链表的,在更高级器件上用得多。
XDMA也有ST和AXI 2种接口可选,example design中ST是直接回环的,AXI就是写BRAM。所有DMA流程都类似,都是先传block descriptor,让FPGA知道去哪儿取数据,取多长,或写数据,写多少由FPGA或者BD决定。FPGA对数据传输拆片,符合PCIE传输要求。传输结束后,中断或由PC轮询状态报给CPU,结束一次传输。
linux的驱动就更简单了,插入ko后,在dev下能看到多个xdma的节点,对h2c和c2h event就是简单的file读写操作,read是阻塞。中断也是read,区分不同的中断,读哪个中断就read哪个节点。对中断需要注意的是,需要保持req不变,否则驱动能响应中断,但不会传递给app,也就是read中断无返回。这里需要app去控制拉低req。
给一个常规的例子,接收到的数据,从流转为MM,ping pong写到DDR里,写满一定数量,比如8MB,产生中断通知pc,pc读寄存器知道当前是ping还是pong区,启动DMA读相应地址的数据。AXI smart connect或者interconnect相当好用,多主多从,跨时钟域访问每个AXI。
解TLP包和组TLP也不是特别麻烦,地址对齐和对TAG的处理最麻烦,尤其是保序问题,国产CPU有时候就很坑,不保序,读数据回来TAG是乱序的,好在intel的CPU还没有遇到这种问题。如果不是特别要求性能和资源,建议还是用xdma或者qdma,自己写的解包组包代码,要花很多时间扫BUG,很多偶现的问题,再带上业务非常麻烦。
主要接xlinx PCIE外包,win7/win10/linux下驱动和应用程序工业级开发。
altera/xlinx pcie dma应用相关推荐
- windows驱动开发-基于WDF的Altera PCIe DMA驱动
作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 FPGA设计 参考我的博客:A ...
- LabVIEW FPGA PCIe开发讲解-7.2节:目前主流的4大Xilinx FPGA PCIe DMA通信IP核讲解
1.要开发一个带PCIe或者PXIe接口的FPGA板卡出来,除了硬件本身外,最重要的就是FPGA芯片里面的PCIe通信代码编写,俗称下位机FPGA编程:还有中间层的驱动文件编写以及上位机PC端的应用程 ...
- PCIe学习(二):PCIe DMA关键模块分析之一
简介 经过一段时间的学习,这里将PCIe DMA模式的学习结果做一个总结,由于手里没有包含PCIe的板子,因此和学习PIO一样对DMA模式中的关键模块的代码进行逐条分析,希望对和我一样的初学者 ...
- 转载 PCIe学习(二):PCIe DMA关键模块分析之一
版权声明:本文为CSDN博主「CLGo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/cllovexyh/a ...
- 转载 PCIe学习(三):PCIe DMA关键模块分析之二
版权声明:本文为CSDN博主「CLGo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/cllovexyh/a ...
- pcie dma 相关知识整理(xilinx平台)
PCIE的DMA和PIO介绍 DMA数据传输方式 DMA(Direct Memory Access),直接内存访问,在该模式下,数据传送不是由CPU负责处理,而是由一个特殊的处理器DMA控制器来完成, ...
- 基于vivado下pcie dma封装的pcie接口程序
基于vivado下pcie dma封装的pcie接口程序 ID:81450656125284940
- [转]windows驱动开发-基于WDF的Altera PCIe DMA驱动
版权声明:本文为CSDN博主「黑客三遍猪」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/Zhu_Zhu_20 ...
- xilinx官方pcie dma例程 -xapp859仿真环境搭建
软件版本 win 10 系统 ISE 10.1 modelsim 10.1a win32 注:xapp859官方文档说明了xapp859的编译环境为ISE10.1版本, 然后modelsim 必须是3 ...
最新文章
- Git 简介1-常用术语
- python使用imbalanced-learn的KMeansSMOTE方法进行上采样处理数据不平衡问题
- 用脚本实现“修复连接”的功能
- 六十五、SpringBoot配置拦截器拦截静态资源和区域解析器实现登陆功能
- [转]asp.net(c#)生成验证码 点击可刷新
- tomcat使用manager GUI应用和script分别reload应用的注意事项
- 安卓手机反应慢又卡怎么办_手机卡顿反应慢怎么解决?
- Microsoft Teams的Outgoing Webhook开发入门
- ❤ CSDN精心打造一款插件,让你的浏览器:解锁黑科技、个性十足、沉浸式体验 ❤
- 如何判断mysql主从延迟_【转】MySQL主从延迟如何解决
- 推荐一个超级方便的Android 抓包工具 Chuck
- 对DSP的基本了解(一)--DSP是什么?
- 低代码平台对程序员产生的内卷,零代码、低代码系列之一「对于零代、低代码平台的思考」
- oracle查找用户名和密码忘记了,Oracle忘记用户名和密码的解决方案
- urp教务系统简单利用
- Java实现 蓝桥杯 基础练习 特殊的数字
- 2013年9月19日
- SysInfoTools MS SQL Transaction Log Recovery 22.0
- XMind商业思维导图——市场营销!
- 新手小白可做的22个Python迷你项目(附源码),建议收藏练习