使用的是Vivado 2015.4,XC7Z020, AXI Video Direct Memory Acess(6.2)。

在我的系统中,GUI配置图片如下:(其实和默认配置没有太大区别)

下面介绍VDMA IP内各个参数的配置说明。

1.Basic标签页

Address Width:数据线位宽

除非内存地址空间大约32位,一般就配置成32位了,因为所做的板子DDR只有512MB

Frame Buffers:帧缓冲数

用来缓冲输入图像的帧缓存数量,最大可以选择32帧,在这里选择4就可以了。

据我所了解这个值一般最小设置为3,因为VDMA有一个读通道,一个写通道,在实际使用时一般都是写完了一帧数据,然后再去读这一帧的数据(VDMA内有一种机制,保证读出的帧总是上一次写完的帧)。这样能够防止读取到的图像被撕裂或者别的情况发生。

正常情况下的读写速率一般相同或有可能是写入速度略高于读取速率,在图像写入和读出稳定后,为了保证写入的帧不重叠到读取帧上,Frame Buffers设置为3即可解决。

设置为3时,同一时刻的读写帧组合如下:

FRAME0/FRAME2
FRAME1/FRAME0
FRAME2/FRAME1

读写通道:

Memory Map Data Width: 根据图像的像素数据位宽设置即可,我这里用的RGB三色 共24位数据,选32就可以了

Write/Read Burst Size: 存储空间AXI读写的突发读写数量大小

Stream Data Width:数据流AXIS位宽,RGB 24位,

Line Buffer Depth:数据流AXIS的缓存深度,用来缓存图像数据每一行数据的buffer深度。在xapp1205文档中第6页提到read and write side line buffers inside the AXI Video DMA core are
set to accommodate about one fourth of a line.我这里图像是640*480,这里设置的512,总之在读写速率相同的情况下这个值可以设置的稍微小一些,但最小也要超过行长度的1/4为好。

2.Advanced标签页

因为VDMA里面的同步机制有些复杂,pg020文档里也说建议专业的选手再来配置这些东西,所以所有配置都按默认配置。当然我也想专业一点,尝试了许多次,但是感觉还是这个默认配置是最方便可靠的。

Write/Read Channel Options:

Fsyn Options(Write): 选择了s2mm_tuser,这样每一帧写图像的同步操作是根据前一级IP的AXIS输出总线内的tuser来触发的。这是很好的方法,帧同步起来方便快捷,不会出太大问题。

还可以配置成s2mm_fsync,选择这个后IP的GUI会多出一根信号输入线,这样就可以用诸如VTC的模块来进行全局的帧同步功能。选择这个功能后,VDMA写通道将会忽略AXIS总线中的tuser帧同步信号。

总之,我暂时还是用了第一种默认配置,第二种配置尝试过,但同步起来稍微要考虑的多了一些。也正是因为如此,Frame Buffers我选择了4,防止读写不同步时可能带来的问题。

Fsync Options(Read): 选择了None,Free Running,我的理解就是不需要单独外部同步触发信号,VDMA是通过M_AXIS_MM2S中tuser和反馈回来的tready信号握手成功后来开始触发一帧的读写的。

GenLock Mode: 写通道设置为Dynamic-Master,读通道设置为Dynamic-Slave

为了保证视频图像的读写实时性,需要内部有着一定的机制,这个机制就是通过GenLock模块来完成的。

Dynamic的前缀意思是读写GenLock会互相锁定,而另外两种没有前缀的Master和Slave则需要一些额外的软件开销,或者不太符合我的功能要求,我就没有仔细研究了。

我所理解的动态互相锁定:首先读写通道会有一个各自正在操作的帧编号告诉对方,默认写是0,读是2(3 Frame Buffers),由于读写速率不同或者是内存存取上出现延迟等等问题,有可能会导致,读写的帧编号错位(我猜的)。当主(即写通道)写操作完成后,会看一下从通道正在操作的帧编号,假如从的帧编号和主准备下次操作帧编号相同,主会选择跳过这个帧,并去下一帧进行写操作。从(读通道)读操作完成后,会读取主通道上一次操作的帧编号,并直接进行下次的读操作。

机制就是这样了,保证了读写操作不会同时发生在一个帧,导致数据的错误。但是我在想,对于摄像头的读取和显示是否可以不用这样设置,而是直接让读写发生在同一帧上,读取速率相同的前提下,让读取操作比写操作晚上几行,这样系统将会有着更低的延时,但这样也会需要更加精确的数据流控制。

Allow unaligned Transfers:默认不选择,这种高级功能就先不研究了,不选

这样,我的VDMA就配置完成了,读写通道的速率都是1080P要求的148.5M。通过另外的Video Test Pattern Generator、AXI_Interconnect、Video On Screen Display、Video Timing Controller、AXI4-Stream to Video Out来共同实现了VDMA图像读写和1080P视频显示的逻辑架构。

下一次,写一下VDMA和上面提到的这些模块如何工作,让视频图像显示起来。

【Xilinx-VDMA模块学习】-01- VDMA IP的GUI配置介绍的更多相关文章

  1. nodejs的mysql模块学习(十)连接池集群配置选项

    连接池集群选项 canRetry : 如果true ,连接池集群会在连接失败时尝试连接 默认true removeNodeErrorCount : 如果连接失败,节点的errCount增加.当erro ...

  2. SoC中的IP模块学习

    SoC中的IP模块学习 理解IP Spec-->register定义,理解原理+架构框图 查看testcase+model(看已有的测试例程),分析操作/使用模块的流程,寄存器的配置方法 运行仿 ...

  3. Xilinx 常用模块汇总(verilog)【03】

    作者:桂. 时间:2018-05-10  2018-05-10  21:03:44 链接:http://www.cnblogs.com/xingshansi/p/9021919.html 前言 主要记 ...

  4. 【Xilinx-VDMA模块学习】-00-开始

    最近在做XILINX图像相关的逻辑,需要用到VDMA模块,最后算是把这个模块摸得比较透了. 先在这里记一下,之后有空了总结一下.包括VDMA在Vivado中的GUI配置和软件驱动的详细理解.

  5. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  6. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

  7. ThinkPhp学习01

    原文:ThinkPhp学习01 一.ThinkPHP的介绍           MVC  M - Model 模型                工作:负责数据的操作  V - View  视图(模板 ...

  8. Node.js学习之TCP/IP数据通讯

    Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...

  9. python中confIgparser模块学习

    python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...

随机推荐

  1. POJ 1821 单调队列+dp

    题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂 ...

  2. 51nod 区间中第K大的数

    区间中第K大的数 基准时间限制:1 秒 空间限制:131072 KB  一个长度为N的整数序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,第K大的数是多少. 例如: 1 7 6 ...

  3. HDU 2444 The Accomodation of Students(二分图判定+最大匹配)

    这是一个基础的二分图,题意比较好理解,给出n个人,其中有m对互不了解的人,先让我们判断能不能把这n对分成两部分,这就用到的二分图的判断方法了,二分图是没有由奇数条边构成环的图,这里用bfs染色法就可以 ...

  4. 深入浅出Ajax(四)

    function initPage() { btn.onmouseover = buttonOver; btn.onmouseover = buttonOut; } 如上,浏览器只会运行指定的最后一个 ...

  5. JS学习随手笔记

    ===================字符串===================== 字符串中间的空格也是要算长度的. 每一个字符都可以返回对应的Unicode 编码 文字的简单加密都是通过char ...

  6. Android4.0图库Gallery2代码分析(二) 数据管理和数据加载

    Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...

  7. hibernate--多对多单向关联 (重点!!!)

    老师和学生的关系, 一个老师对多个学生, 一个学生也对应多个老师. 数据库会需要3个表, 一个老师表, 一个学生表, 一个老师对应学生表. 单向: 老师知道自己有多少学生, 但是学生不知道自己有多少个 ...

  8. ibatis的动态sql

    1.介绍 <select id="getUsers" parameterClass="user" resultMap="get-user-res ...

  9. NodeJs与ActionScript的GET和POST通讯

    今天项目遇到一个小问题,做了个小功能,向服务端发送GET请求,但是服务端解析数据是时候报语法错误,如下: make Request data error:SyntaxError: Error #113 ...

  10. CodeForces 617A Elephant

    C语言语法入门题 #include<cstdio> #include<cstring> #include<vector> #include<cmath> ...