VDMA使用

本文介绍了AXIStream协议的关键信号及其在视频流传输中的作用,特别是Xilinx的AXIStram协议。同时详细讲解了VDMA的配置,包括帧缓冲、数据宽度、突发传输、帧同步模式以及数据重新对齐选项,以优化视频数据处理和传输效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考了该博客
https://blog.youkuaiyun.com/weixin_42639919/article/details/81144746

一、AXI Stream协议及视频流格式

AXI Stream关键的只有两根信号线,及tvalid核tready。tvalid是主设备驱动的信号,表示Stream上的数据是有效的,tready由从设备驱动,表示从设备下一个时钟到来时能够接收数据。AXI Stream的特点是这两个信号不存在互相等待的关系,及数据传输只发生再两者均有效的时候,从而效率很高,可以认为是连续传输,避免了死锁的情况。

AXI Stream还有一些附加信号,通常是伴随再数据中传输,主要包括tuser,tlast,tkeep等。tlast在标准流协议中表示一个数据包结束,伴随最后一个数据传出,tuser可以很多位,是用户定义信号,用来表达用户自己需要传输的数据。tkeep是字节修饰符,位数位数据宽度/8,当总线数据某字节有效时,tkeep对应位就为高。

Xilinx 所有与视频有关的IP均遵循一套AXI Stram视频流协议,其中对tlast与tuser赋予了特殊的含义。视频流中除了数据以外,包好start of frame和end of line信号,其中eol用tlast表示,sof用tuser表示。这两个信号均伴随像素数据传输,只保持一次有效传输的时间,sof和一帧第一个像素一起传出,eol和一行最后一个像素一起传输。视频流中有时会加入tkeep信号,无特殊情况时需全部拉高。

二、VDMA的详细讲解和使用

1、 vdma IP核配置界面

在这里插入图片描述

BASIC

Frame Buffers : 选择vdma缓存几帧图像,这里默认是写通道和读通道都设置相同的缓存帧数,具体设置多少帧合适一般根据应用来定,比如读写带宽相同,想用ddr作为一个乒乓buffer,那就可以设置成2帧,写第一个地址,读第二个地址,写第二个地址,读第一个地址。这里面设置几帧,就要在vdma寄存器配置的时候设置几个帧起始地址。
**Memory Map Data Width:**代表数据到达AXI4总线上的位宽,比如这里设置成64,那就代表M_AXI_XX总线上的数据位宽是64bit,这时候如果stream上的数据是32bit,那vdma内部会有一个带宽转换模块,把数据拼成64bit。
Burst Size : AXI总线上突发传输的长度,一般设置为16
Stream Data Width: vdma与pl逻辑部分通过axi stream协议交互数据,这里代表stream数据位宽
Line Buffer Depth: vdma内部会有一个行缓存fifo,stream数据会先写入fifo,然后AXI总线逻辑会读出到总线上,这个深度就代表fifo的深度。设置原则(个人理解):如果AXI总线数据带宽是stream总线数据带宽的1.5倍以上,这个fifo深度可以设置的小一点,如果AXI总线带宽小于1.5倍的stream总线带宽,那fifo的深度至少要是图像一个有效行的一半。

在这里插入图片描述

Advanced :

启用异步模式 此设置允许 m_axi_mm2s_aclk 、 m_axi_s2mm_aclk 、 s_axi_lite_aclk 、 m_axis_mm2s_aclk 和 s_axis_s2mm_aclk 彼此异步。当异步时钟被禁用时,所有时钟必须具有相同的频率并且来自相同的源。

Enable Vertical Flip: 当选中此选项并启用 S2MM 时,图像会垂直翻转。

写通道选项

Fsync Options: 用于设置 AXI VDMA 的各种帧同步模式。

  • None: 选择这个选项会使 AXI VDMA 进入自由运行模式。在自由运行模式下,视频数据会尽快传输,而不等待任何外部触发。
  • s2mm fsync: 当选中时,AXI VDMA 在 s2mm_fsync 输入的下降沿开始处理每一帧。
  • s2mm tuser: 当选中时,AXI VDMA 期望通过 AXI4-Stream 的 s_axis_s2mm_tuser(0) 信号接收帧的开始(SOF)。SOF 脉冲宽度为1个有效传输,并且必须与帧的第一个像素同时出现。

Genlock Mode: 有四种 genlock 选项:

  • Master: 当选中时,在 s2mm_frame_ptr_out 端口输出当前帧号。
  • Slave: 当选中时,从设备通过在“帧延迟”寄存器中设置的帧数跟随主设备,可能会跳过或重复帧。
  • Dynamic Master: 当选中时,AXI VDMA 会跳过 Dynamic Slave 正在操作的帧缓冲区。
  • Dynamic Slave: 当选中时,AXI VDMA 通过跳过或重复帧跟随 Dynamic Master。

在使用从属模式(Slave)、动态主模式(Dynamic Master)和动态从属模式(Dynamic Slave)时,应设置 GenlockEn(S2MM_VDMACR[3]=1)寄存器以启用主从设备间的 genlock 同步。

详细说明

**对于S2MM通道:**之前在讲vdma配置的时候有一个Advanced选项,里面有Fsync Options选项,可选none,s2mm_fsync,s2mm_tuer,三种同步模式。
none就是只要vdma就绪,就立马准备接收数据,不需要同步信号。
s2mm_fsync,当选择此。模式时,vdma 模块会有一个s2mm_fsync引脚,一般情况下是把视频帧同步信号连到这上面,当检测到s2mm_fsync引脚有一个下降沿的时候,vdma正式进入传输状态。
s2mm_tuser,这个信号和s2mm_fsync这个信号类似,但他是在stream协议里面的,vdma检测到s2mm_tuser拉高以后(tuser只在一帧数据的第一个像素位置拉高),正式进入传输状态
**对于MM2S通道:**同样在vdma配置的Advanced选项里面有 none,mm2s_fsync两种选择模式。
none不需要同步信号,只要axis_mm2s通道的tready拉高,就开始从ddr读取数据进行传输,选择这种模式一般主要是把ddr里面的数据读到pl里面进行处理,而不是转成视频
mm2s_fsync,选择此同步模式,一般是把ddr的数据转成视频数据,注意,这里重点讲这个同步模式,当vdma的读通道选择此同步模式的时候,vdma模块会有一个mm2s_fsync信号,这个信号在读操作中非常重要。当vdma寄存器配置完成并开启传输,mm2s通道进入等待过程,一直等到mm2s引脚信号出现一个下降沿,这时候vdma启动读操作,会从ddr预读一些数据到内部linebuffer,等到axis_mm2s通道的tready信号拉高,数据就开始传输,进入axis2video模块的fifo,当axis2video内部fifo满了以后,会拉低tready,这时候就会反馈到vdma,暂停读操作,一直等到axis2video模块的视频时序输入数据有效信号,这时候视频开始输出,axis2video内部fifo数据减少,axis_mm2s通道开始恢复传输,继续从vdma读出数据,vdma再通过axi总线从ddr读取数据,如此反复,完成ddr数据到video数据的转换

这段文本描述了与 S2MM(Stream-to-Memory-Mapped)数据重新对齐引擎有关的选项和设置。

允许非对齐传输
Allow Unaligned Transfers: 启用或禁用 S2MM 数据重新对齐引擎。

  • 启用时:数据重新对齐引擎将被激活,允许在 S2MM 内存映射数据路径上进行到字节(8位)级别的数据重新对齐。
  • 禁用时:起始地址必须与写内存映射数据宽度的字节数对齐。此外,水平尺寸和跨距也必须是写内存映射数据宽度字节数的倍数。

示例
例如,如果读内存映射数据宽度 = 32,数据将在以下字偏移(32位偏移)处对齐:0x0、0x4、0x8、0xC 等。水平尺寸是 0x4、0x8、0xC 等。跨距是 0x4、0x8、0xC 等。

重要说明
如果在“允许非对齐传输”未选中的情况下,有一个非对齐的起始地址、HSize(水平尺寸)和/或跨距,将会导致未定义的行为。

数据重新对齐引擎仅支持 64 位及以下的 AXI4-Stream 数据宽度设置,当传入数据宽度超过64,无法启用非对其传输。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值