VDMA IP学习

一、参考资料

1、xilinx文档

在docnav中搜索VDMA设置过滤条件为ZYNQ-7000,IP然后就可以看到所有有关VDMA的文档,如下所示:

image

2、博客

《基于AXI VDMA的图像采集系统》

https://blog.csdn.net/qq_36373500/article/details/70230663


二、VDMA简介

1、框图

image

VDMA内部有一个Datamover用于实现DMA功能,有一个LineBuffer用于实现图像处理中的行缓冲,还有一些状态与控制寄存器,提供给用户配置IP核的功能。

2、接口

MM2S通道为读通道,S2MM为写通道

1)AXI-LITE:用来配置VDMA

2)M_AXI-_MM2S:VDMA从DDR读数据

3) M_AXI-S2MM:VDMA往DDR写数据

4) M_AXIS_MM2S:VDMA往PL端的从机写数据

5) S_AXIS_S2MM:PL端的从机往VDMA写数据

6)mm2s_fsync:MM2S通道帧同步输入,当这个信号有效时,VDMA先读数据到LineBuffer里,等PL的从机准备好(ready信号有效),再将LineBuffer的数据写到PL的从机里。

7)s2mm_fsync:S2MM通道帧同步输入,当这个信号有效时,PL的从机先将数据写到    LineBuffer里,然后当VDMA的M_AXI_S2MM接口的ready有效后,VDMA再从这个接口将数据 写到DDR里。这个信号与tuser信号相同,一表明一帧图像的起始。

可以这样理解:这两个sync信号是使VDMA将数据搬运到LineBuffer里的,具体从LineBuffer搬运到具体的目标还是得遵循接口的ready/valid握手机制。

3、接口时序

MM2S接口:

image

S2MM接口:

image

4、参数配置

1)H_SIZE,V_SIZE,H_STRIDE的设置

1

HSTRIDE表示两行图像数据在内存中的间隔。

2)、帧缓存的设置

a、帧缓存的数目

b、帧缓存的起始地址

    如果设置帧缓存的个数为3,则读通道和写通道都需要设置这3个帧缓存的起始地址

3)GEN_LOCK机制和Circular_PARK

image

image

这里不是很明白,是高级设置,以后再研究

5、启动流程

在pg020的第50页有说明:

image

直接配置寄存器时:

1)写VDMACR寄存器,将VDMA.RS设置为1,这样启动VDMA通道

2)设置帧缓存地址

3)设置帧延迟(仅针对GEN_LOCK从模式),注意读写的帧延迟是否要写出一致

4)设置STRIDE寄存器(也就是设置H_STRIDE)

5)设置H_SIZE寄存器

6)设置V_SIZE寄存器,设置这个寄存器会使VDMA开始传输

使用xilinx的库函数时:

1)使用xAxiVdmaLookupConfig函数查看默认配置和修改配置

2)然后调用WriteSetup和ReadSetup函数配置读写通道

3)调用Starttranfer函数启动传输

写寄存器示例:

下图是xapp1250:《Simulating High Performance Video
Systems with Bus Functional Models》

的工程里面使用zynq_verfication IP的api函数通过M_GP接口对

VDMA进行配置的示例,从图中可以看到使VDMA运行需要配置哪些寄存器:

image


三、VDMA示例工程

1、IP核自带的example工程:在vivado中打开VDMA配置好,然后右键单击open example design可以看到工程文件如下:

image

工程框图如下

image

工程使用axi_traffic_generator来配置寄存器

image

2、xapp1250的工程:关于VDMA在视频图像系统的应用

3、其他的示例:

image


四、参考资料

1、PG020-AXI Video Direct Memory Access v6.2

2、https://blog.csdn.net/qq_36373500/article/details/70230663

猜你喜欢

转载自www.cnblogs.com/Ariza123/p/vdma.html
今日推荐