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应用相关推荐

  1. windows驱动开发-基于WDF的Altera PCIe DMA驱动

    作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 FPGA设计 参考我的博客:A ...

  2. LabVIEW FPGA PCIe开发讲解-7.2节:目前主流的4大Xilinx FPGA PCIe DMA通信IP核讲解

    1.要开发一个带PCIe或者PXIe接口的FPGA板卡出来,除了硬件本身外,最重要的就是FPGA芯片里面的PCIe通信代码编写,俗称下位机FPGA编程:还有中间层的驱动文件编写以及上位机PC端的应用程 ...

  3. PCIe学习(二):PCIe DMA关键模块分析之一

    简介     经过一段时间的学习,这里将PCIe DMA模式的学习结果做一个总结,由于手里没有包含PCIe的板子,因此和学习PIO一样对DMA模式中的关键模块的代码进行逐条分析,希望对和我一样的初学者 ...

  4. 转载 PCIe学习(二):PCIe DMA关键模块分析之一

    版权声明:本文为CSDN博主「CLGo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/cllovexyh/a ...

  5. 转载 PCIe学习(三):PCIe DMA关键模块分析之二

    版权声明:本文为CSDN博主「CLGo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/cllovexyh/a ...

  6. pcie dma 相关知识整理(xilinx平台)

    PCIE的DMA和PIO介绍 DMA数据传输方式 DMA(Direct Memory Access),直接内存访问,在该模式下,数据传送不是由CPU负责处理,而是由一个特殊的处理器DMA控制器来完成, ...

  7. 基于vivado下pcie dma封装的pcie接口程序

    基于vivado下pcie dma封装的pcie接口程序 ID:81450656125284940

  8. [转]windows驱动开发-基于WDF的Altera PCIe DMA驱动

    版权声明:本文为CSDN博主「黑客三遍猪」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/Zhu_Zhu_20 ...

  9. xilinx官方pcie dma例程 -xapp859仿真环境搭建

    软件版本 win 10 系统 ISE 10.1 modelsim 10.1a win32 注:xapp859官方文档说明了xapp859的编译环境为ISE10.1版本, 然后modelsim 必须是3 ...

最新文章

  1. Git 简介1-常用术语
  2. python使用imbalanced-learn的KMeansSMOTE方法进行上采样处理数据不平衡问题
  3. 用脚本实现“修复连接”的功能
  4. 六十五、SpringBoot配置拦截器拦截静态资源和区域解析器实现登陆功能
  5. [转]asp.net(c#)生成验证码 点击可刷新
  6. tomcat使用manager GUI应用和script分别reload应用的注意事项
  7. 安卓手机反应慢又卡怎么办_手机卡顿反应慢怎么解决?
  8. Microsoft Teams的Outgoing Webhook开发入门
  9. ❤ CSDN精心打造一款插件,让你的浏览器:解锁黑科技、个性十足、沉浸式体验 ❤
  10. 如何判断mysql主从延迟_【转】MySQL主从延迟如何解决
  11. 推荐一个超级方便的Android 抓包工具 Chuck
  12. 对DSP的基本了解(一)--DSP是什么?
  13. 低代码平台对程序员产生的内卷,零代码、低代码系列之一「对于零代、低代码平台的思考」
  14. oracle查找用户名和密码忘记了,Oracle忘记用户名和密码的解决方案
  15. urp教务系统简单利用
  16. Java实现 蓝桥杯 基础练习 特殊的数字
  17. 2013年9月19日
  18. SysInfoTools MS SQL Transaction Log Recovery 22.0
  19. XMind商业思维导图——市场营销!
  20. 新手小白可做的22个Python迷你项目(附源码),建议收藏练习

热门文章

  1. Idea Debug 窗口所有按钮详解
  2. 微信h5页面禁止下拉方法
  3. 万物互联时代到来,锐捷发布场景化无线零漫游方案
  4. 2020年上半年最接地气的Android面经,为你进大厂保驾护航
  5. STM32F407ZGT6最小系统原理图和PCB
  6. [转]在线生成条形码(39码、EAN-13)
  7. 同时使用网线以及无线上网
  8. Windows7安装mysql-压缩包方式
  9. idea html设置字体大小,intellij idea设置(字体大小、背景)
  10. python分词考研英语真题词频(附结果)——读取word、nltk、有道智云API