pcie 链式DMA总结

1.为什么需要链式DMA

XAPP1052我们学过每一次DMA请求开始后,只能传输PC 1个连续的物理内存块,如果要传输下一个内存块,则必须重新初始化内存并配置好DMA寄存器,再次启动DMA才可以完成。我们知道驱动申请一块连续的物理内存是否成功取决于系统内存大小,应用进程的多少等等因素,所以XAPP1052一次DMA的传输的最大值是不确定的。我在测试时,主机为2GB内存、开的应用也不多的情况下申请连续的4MB内存会时常失败。

我们假设我们外部视频的带宽为800MB/s,我们现在需要采集外部视频,并且确保视频不会丢失,如果使用XAPP1052,每次DMA传输2MByte,则每秒至少需要400次DMA请求才能确保视频被安全的传输到主机PC,这对于主机来说太难做到了。

链式的DMA传输可以解决上述问题,我们通过多个描述符把要传输的离散的物理内存块进行一个一个的描述并形成描述符表,我们把第1个描述符的地址装载到XDMA的描述符基址寄存器(后面详解)里面,然后开启DMA请求,XDMA一次便可以完成n个内存块的传输,大大提高了传输效率,具体细节如下。

2.链式DMA传输原理详解

(1)PC通过专门的函数申请多个连续的内存块并初始化为我们要传输的数据(假设为100块);

(2)PC创建100个描述符(描述符组成详细内容下节讲解),并且把100个内存块的地址分别给对应的描述符,并且把100个描述符进行链接形成描述符链表;

(3)PC把描述符表的第1个描述符的地址给XDMA描述符基址寄存器;

(4)PC开启DMA请求;

(5)XDMA根据描述符基地址寄存器的值先获得第1个描述符;

(6)根据描述符内容执行DMA传输,这里是把内存块1搬运到FPGA;

(7)内存块1搬运完毕后,检查第1个描述符后面还有没有描述符(根据描述符对应字段),如果有则继续获取第2个描述符;

(8)根据描述符内容执行DMA传输,这里是把内存块2搬运到FPGA;

(9)一直执行到内存块100搬运完毕,检查第100个描述符后面还有没有描述符,没有了,则请求DMA完成中断,一次DMA请求操作执行完毕。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值