AXI_VDMA ip核

在上一篇文章里,博者简单讲解了视频流的传输,这篇文章,博者将介绍vdma这个IP核。

在上一篇文章中,视频流的传输,我们使用到了vdma,视频的流向是从S_AXIS_S2MM传入,在由M_AXIS_MM2S传出。视频流传入IP时由stream转换为memary map格式,传出时又将格式转换回来,我一度以为这个动作会不会多此一举并且增加了延时。在查找资料后发现并非如此。

先上结论:1、VDMA IP核允许内部子系统独立直接读写内存,而不需要cpu的介入,释放了cpu性能;2、调节了数据传入和传出的频率。

VDMA的作用

 VDMA本质上是一个搬运数据的IP核。其数据接口分为读写通道,写通道将AXI_stream类型数据流写入ddr3,经过cpu的相应处理再由VDMA读通道以AXI_stream格式输出。同DMA一样,VDMA这个IP核主要的功能是对ddr进行读写操作,也许你会觉得我们还要经过ddr的数据传输太耗费时间,但是当我们需要大缓存时,ddr就起到了很大的作用,就比如本文前两篇的ov5640的项目,笔者对图像进行处理就需要较大的缓存。

帧存、双缓存和多缓存

简单介绍一下帧存,它是屏幕所显示画面的一个直接映象,帧缓存的每一存储单元对应屏幕上的一个像素,整个帧缓存对应一帧图像。

双缓存及多缓存:假设你要给泳池装满水,只有桶这个工具,使用一个桶时,要在水龙头下等桶装满,再将桶搬过去倒水;如果是两个桶,那么就可以将一个桶装满,换另一个桶装水的同时,将装满的搬到泳池边倒水,节省了水龙头装满水桶的这个时间段;如果我再雇一个帮手,再加一个水桶,那么又节省了搬运的时间。水桶就是后缓冲区(back buffer),屏幕就是水池。而vdma有32个帧存,大大减小了输出图像的频闪、画面的撕裂感等。

VDMA接口类型

1、AXI-LITE:ps通过核接口来配置VDMA;

2、AXI-Memary Map write:映射到存储器写;

3、AXI-Memary Map read:映射到存储器读;

4、S2MM:AXI stream视频流写入图像;

5、MM2S:AXI stream视频流读出图像;

视频同步信号接口

Genlock

同步锁相,可以使一套或多套系统与同一同步源实现同步,即能够使视频的刷新和外部视频源保持一致。当提供了一个适当的信号后,系统就会把它的显示刷新率和这个信号进行锁定 。

 VDMA的锁相同步特性正是用于阻止读、写通道同时操作同一个帧存。VDMA的每个通道都可以选择自己的操作类型(同步锁相主/从或者动态同步锁相主/从),利用该特性,禁止主从接口同时访问同一缓存,从而保持同步。

genlock相关信号:

VDMA支持四种模式的锁相同步,分别为:

1、Genlock Master(锁相同步主端):

读通道(MM2S):当配置为Genlock Master时,该通道不会跳过或者重复任一帧数据,并把当前帧的编号输出在mm2s_frame_ptr_out端口; 写通道(S2MM):当配置为Genlock Master时,该通道不会跳过或者重复任一帧数据,并把当前帧的编号输出到s2mm_frame_ptr_out端口。

2、Genlock Slave(锁相同步从端):

读通道(MM2S),当配置为Genlock Slave时,该通道会通过跳过或者重复一些帧的方式,尝试与Genlock Master同步。通道会对mm2s_frame_ptr_in端口进行采样,获取Genlock Master的帧编号。指定通道工作在Genlock Slave模式,必须进行如下操作:

(1)将GenlockEn置1(MM2S_VDMACR[3]=1),使能主、从通道之间的Genlock同步。

(2)将GenlockSrc置1(MM2S_VDMACR[7]=1),使能内部Genlock模式。如果在Vivado IDE中同时使能读、写通道,该位默认置位。当GenlockSRC=1时,VDMA默认支持内部同步锁相总线。这样一来就没有必要在外部对帧指针端口(*frame_ptr_out和*_frame_ptr_in)进行连接了。

(3)根据主从通道的帧率,使用mm2s_frmdly_stride[28:24]设定合适的延迟时间。

      写通道(S2MM):当配置为Genlock Slave时,该通道会通过跳过或者重复一些帧的方式,尝试与Genlock Master同步。通道会对s2mm_frame_ptr_in端口进行采样,获取Genlock Master的帧编号。指定通道工作在Genlock Slave模式,必须进行如下操作。

(1)将GenlockEn置1(S2MM_VDMACR[3]=1),使能主、从通道之间的Genlock同步。

(2)将GenlockSrc置1(S2MM_VDMACR[7]=1),使能内部Genlock模式。如果在Vivado IDE中同时使能读、写通道,该位默认置位。当GenlockSRC=1时,VDMA默认支持内部同步锁相总线。这样一来就没有必要在外部对帧指针端口(*frame_ptr_out和*_frame_ptr_in)进行连接了。

(3)根据主从通道的帧率,使用mm2s_frmdly_stride[28:24]设定合适的延迟时间。

3、Dynamic Genlock Master(动态锁相同步主端)

 动态Genlock Master与Genlock Master的区别在于,主通道会跳过从通道正在操作的帧。举例而言,对于三帧存而言,动态Genlock Master会按照0,1,2,0,1,2的顺序循环使用帧存,一旦检测到Master即将操作Slave正在操作的帧,就会跳过该帧继续循环。因此,如果Slave通道一直在操作帧存1,那么Master通道就会在帧0和帧2之间来回切换。

4、Dynamic Genlock Slave(动态锁相同步从端)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值