1、 概述
首先,我们来看一下Xilinx Application Note中经常出现的一副结构图,图1所示,当然不可能所有图都一样,在结构上大同小异吧。这是一个比较典型的图像、视频处理平台的结构图。
1.1、捕获
视频通过HDMI接口进来,然后经Video Input模块做格式变换,送入VDMA,该VDMA的作用是把数据送入在DDR3中所开辟的帧存中去。
另一种是通过摄像头等设备获取视频源,经PS/PL将数据送入DDR3。就我目前的水平而言,个人感觉从PL部分将视频流送入DDR3最简单的方法是通过VDMA的axi4-stream接口,换句话说,将视频流转换为axi4-stream会降低处理难度,这种转换和Video Input模块的工作是类似的。
1.2、处理
该部分包含两个VDMA和一个视频处理模块,一个VDMA负责从帧存中取数据,然后交给处理模块,处理完毕的结果经另一个VDMA送回帧存
1.3、显示
主要是显示控制模块,负责将数据按照标准时序输出送至显示器。
图1 视频处理、显示平台架构
从图1可以看出,整个架构的核心是VDMA这个IP,所以搭建平台的关键是掌握VDMA的使用。
2、 VDMA的使用
2.1、基本情况
我们来看一下VDMA的结构框图,了解一下VDMA的基本情况。
图2 VDMA框图
如图2所示,VDMA的主要接口有3个,分别为AXI4 Memory Map、AXI4-Lite、AXI4-Stream。
AXI4-Lite:
这个接口详细是最常用的接口了,用于读写VDMA内部寄存器,从而实现对VDMA的控制和状态获取。
AXI4-Stream:
写通道(s2mm):VDMA获取来自axis接口的数据并将之写入帧存
读通道(mm2s):VDMA从帧存读取数据,然后送至axis接口输出
AXI4 Memory Map:
这个接口手册没有讲具体作用,其实这个接口是用于操作DDR的,通过互联模块连接至Zynq的HP接口。
2.2、使用方法:
这部分有点像废话,和其他IP一样用就是了。
i、 新建工程
ii、 新建block design
iii、 打开IP Catalog,输入关键字检索到VDMA,或者按类别找到IP核
iv、 双击VDMA IP,添加IP至block design
v、 如有需要,再对IP进行参数配置。
2.3、VDMA的配置
关于VDMA的详细参数配置,请参考pg020,Product Guide,这里把我认为比较重要的地方说一下。
i、 GenLock mode
genlock模式有4中选择,分别为:Master、Slave、Dynamic Master、Dynamic Slave。选择不同的模式对模块的端口连接有不同的要求,所以这里要注意,改变模式,端口连接也要修改,如图3、图4所示。
图3
图4
ii、 Line Buffer Depth
Line Buffer设置不合理的话,会影响显示效果,甚至会造成无显示。
iii、 关于时钟
刚开始上手时,建议把AXI4-Lite、AXI4、AXI-Stream这三个接口的时钟统一为像素时钟。上手之后,可以尝试三个接口使用不同的时钟。要注意AXI4接口时钟一定要大于等于AXI-Stream接口的时钟,否则会造成数据丢失。
2.4、VDMA初始化流程
1. Write control information to the channel VDMACR register (Offset 0x00 for MM2S and
0x30 for S2MM) to set interrupt enables if desired, and set VDMACR.RS=1 to start the
AXI VDMA channel running.
2. Write valid video frame buffer start address to the channel START_ADDRESS register 1 to
N where N equals Frame Buffers (Offset 0x5Cup to 0x98for MM2S and 0xACup to
0xE8for S2MM). Set the REG_INDEX register if required.
3. Write a valid Frame Delay (valid only for Genlock Slave) and Stride to the channel
FRMDLY_STRIDE register (Offset 0x58for MM2S and 0xA8for S2MM).
4. Write a valid Horizontal Size to the channel HSIZE register (Offset 0x54for MM2S and
0xA4for S2MM).
5. Write a valid Vertical Size to the channel VSIZE register (Offset 0x50for MM2S and
0xA0for S2MM). This starts the channel transferring video data.
上述寄存器的作用在图5中可以找到,某个寄存器每个bit的功能,请参考pg020,VDMA的Product Guide,第2章 Product Specification的Register Space小节。
图5 VDMA寄存器偏移地址及作用
3、 设计举例
3.1、逻辑设计
有了上文所做的铺垫,相信搭建出一个显示平台就不是非常难了,下面,我给出一个具体的框图,如图6所示。(本来想用顶层的block design截图,发现IP布局、连线比较乱,看不清楚)。另外,大家还可以参考xapp792,大同小异,我之前的博客也提过如何搭建HDMI的显示平台,不过最近还是有网友提问如何搭建平台。其实,官网给出的资料往往是很具参考价值的,大家可以多多留意。
图6 逻辑设计举例
这是一个图形绘制和显示平台,不是视频处理平台,视频处理平台稍有不同,一般而言,视频处理用到genlock和我这里不一样。图中所有信号和连接情况都和实际设计一样,能够体现出设计思路。
vdma、axis2vout、vtc这三个IP,Vivado都是提供的,当然也可以自己设计,难度不大,这里就不说了。
3.2、软件设计
软件流程图如下:
图7 软件流程图
从流程图可以看出软件部分是很简单,这是由于显示是PL负责的,两者的交集在帧存,读写不发生冲突就可以了。当前PL读取的显示画面,总是PS绘制的上一帧内容。如想减少PS负担,可以将清帧存的任务交由PL完成。
评论
查看更多