zynq7020开发记录(持续更新)--PS和PL间的数据交互
Posted Vanau
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zynq7020开发记录(持续更新)--PS和PL间的数据交互相关的知识,希望对你有一定的参考价值。
前两篇文章都是采取相应的方式实现PS和PL端的数据交互,但是从根本上可以看到,两者要实现数据的交互,其实质是共享DDR的连续内存,其中,PS端拿到的是虚拟地址,PL端用到的是物理地址,两者在对应端进行数据传输完成之后,只需要再通过中断的方式给到对方一个中断通知他拿数据就OK了。本文将采取第3种方式。
CMA 连续内存分配
试想,我们arm端在使用的DDR空间上分配了连续的且大容量的内存,这些内存在物理上是连续的,可以供fpga使用,在虚拟地址上也是连续的,供arm端使用,两个地址只是通过一个简单的offset来进行转化,这样就跟内核驱动层使用的 kmalloc 方法一致了,只不过这个申请的内存比较小,最大只有128KB-16,而且通过kmalloc的方法无法拿到物理地址,这样就很纠结了。
CMA(Contiguous Memory Allocator) 提供了这个思路,让我们依然通过在驱动里面使用相应的方式来解决这个问题。我们可以拿到对应的物理地址,把这个物理地址告诉给fpga,然后在通过中断的方式告诉对方已经发送(实际上是写入DDR)对应的数据,对方取就完事了。
下面这个博客里面用到的驱动仅供参考,因为测试发现其在CMA区域中申请的DMA内存不连续,所以直接pass掉
https://blog.csdn.net/liujia2100/article/details/37915645/
最终使用到的驱动为
co_mem.c
#
以上是关于zynq7020开发记录(持续更新)--PS和PL间的数据交互的主要内容,如果未能解决你的问题,请参考以下文章
zynq7020开发记录(持续更新)--PS和PL间的数据交互
zynq7020开发记录(持续更新)--PS和PL间的数据交互
zynq7020开发记录(持续更新)--PS和PL间的数据交互
zynq7020开发记录(持续更新)--PS和PL间的数据交互