VDMA从配置到编程

 VDMA从配置到编程

使用Zynq进行视频开发的同学们,基本上会用到VDMA,尤其,HLS自动化IP生成也成为开发的一种方法,最近,通过HLS生成IP,通常AXI-Stream接口,那么就需要VDMA接口进行数据搬移。而这过程中VDMA配置问题将决定调试的效率,下面把分享一下我配置VDMA的经验。

VDMA IP配置

 VDMA从配置到编程

这是基本配置,但也是SDK配置的依据。
Address Width:数据线位宽,一般就配置成32位了,除非数据宽度大于32.

Frame Buffers:帧缓冲数

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

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

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

读写通道:

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

Write/Read Burst Size: 存储空间AXI读写的突发读写数量大小,这里选128。

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

Line Buffer Depth:数据流AXIS的缓存深度,用来缓存图像数据每一行数据的buffer深度。这里设置的1024,总之在读写速率相同的情况下这个值可以设置的稍微小一些,但最小也要超过行长度的1/4为好。

 VDMA从配置到编程

这里面的每一项对数据流都有影响,通常会出现VDMA状态寄存器错误,数据没有更新等问题。

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

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

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

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

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

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

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

最后,导入到SDK,SDK配置VDMA基本上都差不多,这里也上传上我配置的:

// Left VDMA 0x0010c080, 0x002ce080, 0x00490080
Xil_Out32(CMOS_ADDR_0 + 0x30, 0x0001810B); // enable run, circular_park
Xil_Out32(CMOS_ADDR_0 + 0xAC, 0x0010c080); // Start address of the 1st frame(3 frames in all)
Xil_Out32(CMOS_ADDR_0 + 0xB0, 0x002ce080); // Start address of the 2nd frame(3 frames in all)
Xil_Out32(CMOS_ADDR_0 + 0xB4, 0x00490080); // Start address of the 3rd frame(3 frames in all)
Xil_Out32(CMOS_ADDR_0 + 0xA8, 0x0F00); // Stride number
Xil_Out32(CMOS_ADDR_0 + 0xA4, 0x0A00); // number of bytes per line(640 x 3)
Xil_Out32(CMOS_ADDR_0 + 0xA0, 0x01E0); // number of lines per frame(480)

还有一点需要注意,就是 cleanup_platform();必须加。

 VDMA从配置到编程

用户喜欢...

使用全可编程SoC简化您的增强现实系统

研究表明,我们人类与世界的视觉互动,因为我们处理视觉图像比以其他形式呈现的信息快许多倍,例如书面文本。 增强现实(AR)与其虚拟现实(VR)表亲一样,使我们能够体验对周围环境的...


DFRobot的Arduino兼容BLE硬件解决方案,具有无线编程,智能应用程序控制,长通信范围和外围模块

DFRobot的Bluno系列与标准的Arduino引脚兼容,这意味着使用Arduino制作的任何项目都可以直接通过蓝牙轻松进行无线连接。所有Bluno板卡和模块都集成了板载BLE,提供无线编程,蓝牙HID,AT命令配置...


Microchip Technology 的 AT88CKECC-AWS-XSTK-B“零接触”安全配置套件帮

Microchip 的 Amazon 网络服务 (AWS) IoT 套件用于安全物联网应用的快速原型开发 来自Microchip Technology的 AT88CKECC-AWS-XSTK-B零接触安全配置套件帮助设计人员快速、可靠地开发出物联网设备,符合 AWS 安...


蓝牙mesh配置文件如何用于实时定位服务?

低功耗蓝牙(Bluetooth Low Energy) 设备的外形轻巧,可用于资产和人员的实时定位服务(RTLS)。它的一大主要优势就是电池寿命长,可以保证便携式设备能够始终处于开机状态。 蓝牙mesh配置文件提...


Xilinx开发板Si570频率配置方法详解

Xilinx大部分的开发板上都集成了Si570时钟芯片,该时钟的性能指标比较好,可以满足大部分高速串行接口应用对于参考时钟的要求。同时该时钟还可以通过I2C接口配置其输出频率。 该专题详细...


在Digilent Nexys Video板卡上实现HDMI I/O视频处理系统的软件配置介绍

作者:Adam Taylor,编译:kenshin 嵌入式视觉是当今科技最激动人心的领域之一。 关于使用Zynq SoC的嵌入式视觉应用,热心群众们说的太多,我就不赘述了。今天我们换一个新的视角,来看看如...


通信IP:固定功能 vs 软件可编程?

作者:Richard Edgar,Imagination科技,通信技术营销总监 当我们决定使用第三方IP实现系统的无线通信功能时我们需要作出一个选择,是采用固定功能的IP还是软件可编程的IP。可以说这两种方式...


对于机器学习,到底该选择哪种编程语言

开发者到底应该学习哪种编程语言才能获得机器学习或数据科学这类工作呢?这是一个非常重要的问题。我们在许多论坛上都有讨论过。现在,我可以提供我自己的答案并解释原因,但我们先...


Zynq VDMA 自测

首先,建立Zedboard的工程,创建如下Block Design: VDMA设置一下读写通道,AXI-lite和MM2S 的时钟都采用同一个。 Processing 配置按图中所示,包含HP口。 添加ILA进行数据流入和数据流出测试。 运行工...


为IIoT提供高效安全的配置

在2016年的秋天,黑客招募了数十万个嵌入式设备,形成恶意僵尸网络。他们的Mirai恶意软件感染了宽带路由器,让僵尸网络的运营商利用它们进行分布式拒绝服务(DDoS)攻击。对于新兴的物联...


用于数学的 10 个优秀编程语言

作为一个对数学和编程语言充满激情的人,谁也不能阻止我分享我总结的10个超棒的用于数学的编程语言。 总结的目标在于多样化,为大家提供广泛的编程和问题建模方法。 编程语言描述摘...


可编程SoC帮助制造商在可配置性和性能之间找到合适的平衡点

虽然半导体技术是所有电子产品的基础,但它是真正使我们的现代世界成为可能的软件。与硬件相比,软件提供了几乎无限的灵活性,在高性能微处理器上运行时,可以产生惊人的结果。例如,...


详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!

一、stm32的pwm输出引脚是使用的IO口的复用功能。 二、T2~T5这4个通用定时器均可输出4路PWM——CH1~CH4。 三、我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并在最后给出tim3的ch1和ch...


单片机编程应用技巧问答

1. C语言编程和汇编语言在开发单片机编程各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效...


开始使用Xilinx Zynq 一款可全编程系统芯片 (SoC)

什么是FPGA Xilinx以制造可编程门阵列(FPGA)而闻名,它是基于一个通过可编程接点连接的可配置逻辑块(CLBs)矩阵。根据Control Engineering Europe中的 FPGA的优点(Advantages of FPGA)这篇文章,多种控制回...


面向密码逻辑阵列的可编程控制网络设计与实现

作者:刘 露,徐金甫,李 伟,杨宇航;2017年电子技术应用第10期 摘 要: 为解决粗粒度密码逻辑阵列控制开销大、控制效率低的问题,在研究主流阵列处理架构下三层控制模型的基础上,提...