【ZYNQ】IP核_VDMA的详细介绍

VDMA的特点总结:
1、AXI VDMA核心支持为32位地址空间寻址最多32个帧缓冲区,为32位以上地址空间寻址多达8个帧缓冲;
2、AXI VDMA核心支持可选的数据重新调整引擎(DRE)。DRE允许对内存进行非对齐访问,允许帧缓冲区从内存中的任何地址开始。没有限制的hsize和步幅以及。AXI4流接口宽度高达64位时支持此功能;
3、AXI VDMA支持一种机制,通过Genlock同步来同步帧缓冲区中帧的写入和读取。AXI VDMA的每个通道可设计为作为Genlock主/从或动态Genlock主机/从。通过使用此功能,主设备和从设备不允许同时使用同一缓冲区,从而保持同步,当同时选择读通道和写通道时,AXI VDMA内核默认支持内部Genlock总线。这消除了写入和读取通道之间的外部连接的需要。
图1-1说明了AXI VDMA框图
【ZYNQ】IP核_VDMA的详细介绍_第1张图片
表2-3显示了针对不同数据宽度测量的AXI VDMA吞吐量。使用硬件上的标准高清(HD)帧进行测量。
【ZYNQ】IP核_VDMA的详细介绍_第2张图片
表2-4为接口描述
【ZYNQ】IP核_VDMA的详细介绍_第3张图片
【ZYNQ】IP核_VDMA的详细介绍_第4张图片典型的读通道时序图:
【ZYNQ】IP核_VDMA的详细介绍_第5张图片上图阐述了垂直尺寸为5行,水平尺寸为16字节和步长为32字节的MM2S通道上的示例,在这里简单介绍一下各个信号的含义,m_axi_mm2s_arready(由slave端发送)和m_axi_mm2s_arvalid(由master端发送)为读地址通道信号,m_axi_mm2s_rready(由slave端发送)和m_axi_mm2s_rvalid(由master端发送)为读数据通道信号,这两组信号属于AXI4_full协议所规定的的信号,而m_axi_mm2s_tready(由slave端发送)和m_axi_mm2s_tvalid(由master端发送)和m_axi_mm2s_tlast(由master端发送)属于AXI4_stream协议所规定的信号。
数据流可以如此描述:当接收到mm2s_fsync信号后,AXI VDMA会使能m_axi_mm2s_arvalid信号,起始地址为m_axi_mm2s_araddr。信号m_axi_mm2s_arvalid使能了5次以获取帧的五行,从mm一端读取的数据被存储在Line Buffer里,通过使能m_axis_mm2s_tvalid信号将其传输到streaming一边,在每行的最后m_axis_mm2s_tlast信号会被拉高。
典型的写通道时序图:【ZYNQ】IP核_VDMA的详细介绍_第6张图片
上图阐述了垂直尺寸为5行,水平尺寸为16字节和步长为32字节的S2MM通道上的示例,数据流可以如此描述:当接收到s2mm_fsync信号后,AXI VDMA驱动s2mm_fsync_out和s_axis_s2mm_tready,以指示其已准备好在流接口上接收帧。输入streaming数据到Line Buffer,并通过使能m_axis_s2mm_awvalid以及将m_axis_s2mm_awvalid和m_axi_s2mm_wdata一起发送给mm侧。
下面介绍寄存器的配置:所有的寄存器都采用小段格式,如下图所示:
在这里插入图片描述AXI VDMA寄存器地址映射
【ZYNQ】IP核_VDMA的详细介绍_第7张图片
【ZYNQ】IP核_VDMA的详细介绍_第8张图片
关于(塞琳斯官网VDMA寄存器的配置)有详细介绍,请移步查看。
下面介绍锁相同步机制(Genlock Synchronization),在许多视频应用中,数据产生的速率与数据处理的速率并不匹配,为避免例如速率不匹配所导致的潜在隐患,开发了帧缓冲机制,帧缓冲机制分配多帧内存来存储数据,当产生的数据写入一个缓冲区时,该机制会从另一个缓冲区中读取数据进行处理。**AXI VDMA的锁相机制通过避免读通道和写通道同时访问同一帧缓冲区的方式来
补充这一解决方案。AXI VDMA 支持四种Genlock同步模式,它们是Genlock Master、Genlock Slave、Dynamic Genlock Master、Dynamic Genlock Slave
注意:默认情况下,如果在内核中建立了内部Genlock连接,并且参数C_MM2S_GENLOCK_NUM_MASTERS =1 (C_S2MM_GENLOCK_NUM_MASTERS =1),当以下条件满足时,内部的Genlock connection将会建立:
(1)VDMA的通道都被使能;
(2)一个通道配置为Master,另一个被配置为Slave(或者一个通道配置为Dynamic Master,另一个通道被配置为Dynamic Slave)。同时也意味着你不需要做额外的复杂连接,如果你是一个高级使用者,想要访问mm2s_frame_ptr_in (s2mm_frame_ptr_in)端口来实现特殊需求,你可以用Tcl来设置参数C_MM2S_GENLOCK_NUM_MASTERS > 1 (C_S2MM_GENLOCK_NUM_MASTERS > 1) ;
【ZYNQ】IP核_VDMA的详细介绍_第9张图片
Genlock Master
Read(MM2S)channel:当配置为Genlock Master模式时,该通道不会跳过或者覆盖帧,并且在mm2s_frame_ptr_out端口上输出当前帧编号,它不会监视mm2s_frame_ptr_in端口上的帧指针值。Genlock Slave会以在
frmdly_stride[28:24]上设定的帧延迟值跟随Genlock Master通道。
Write(S2MM)channel:当配置为Genlock Master模式时,该通道不会跳过或者覆盖帧,并且在s2mm_frame_ptr_out端口上输出当前帧编号,它不会监视s2mm_frame_ptr_in端口上的帧指针值。Genlock Slave会以在
frmdly_stride[28:24]上设定的帧延迟值跟随Genlock Master通道。

Genlock Slave
Read (MM2S) channel:当配置为Genlock Slave模式时,该通道通过跳过或者重复帧来跟随 Genlock Master通道,并对mm2s_frame_ptr_in上的Genlock Master帧编号进行采样,以在frmdly_stride[28:24]上设定的帧延迟值跟随Genlock Master通道,在mm2s_frame_ptr_out端口上输出当前的帧编号。为了建立Genlock Slave模式下的通道,应对寄存器进行如下配置
(1)设置GenlockEn(MM2S_VDMACR[3]=1)来使能Master和Slave端的锁相同步;
(2)设置GenlockSrc(MM2S_VDMACR[7]=1)来使能内部锁相模式。在VIVADO里如果两通道都被开启,则该Bit位默认设置为1,当被设置为1时,无需外部连接
_frame_ptr_out和*_frame_ptr_in信号;
(3)基于主帧速率和从帧速率,在mm2s_frmdly_stride[28:24]中设置合适的值。
Write(S2MM)channel:当配置为Genlock Slave模式时,该通道通过跳过或者重复帧来跟随 Genlock Master通道,并对s2mm_frame_ptr_in上的Genlock Master帧编号进行采样,以在s2mm_frmdly_stride[28:24]上设定的帧延迟值跟随Genlock Master通道,在 s2mm_frame_ptr_out端口上输出当前的帧编号。为了建立Genlock Slave模式下的通道,应对寄存器进行如下配置
(1)设置GenlockEn(S2MM_VDMACR[3]=1)来使能Master和Slave端的锁相同步;
(2)设置GenlockSrc(S2MM_VDMACR[7]=1)来使能内部锁相模式。在VIVADO里如果两通道都被开启,则该Bit位默认设置为1,当被设置为1时,无需外部连接*_frame_ptr_out和*_frame_ptr_in信号;
(3)基于主帧速率和从帧速率,在s2mm_frmdly_stride[28:24]中设置合适的值。

Dynamic Genlock Master
Read (MM2S) channel或者Write(S2MM)channel:当配置为Dynamic Genlock Master模式时,该通道会跳过Dynamic Genlock Slave正在操作的帧缓冲区,它通过跳过或者重复帧来实现,并且在mm2s_frame_ptr_in端口上采集Dynamic Genlock Slave的帧编号以及在mm2s_frame_ptr_out上输出访问的前一帧编号。为了建立Dynamic Genlock Master模式下的通道,应对寄存器进行如下配置
(1)设置GenlockEn(MM2S_VDMACR[3]=1)来使能Master和Slave端的锁相同步;
(2)设置GenlockSrc(MM2S_VDMACR[7]=1)来使能内部锁相模式。在VIVADO里如果两通道都被开启,则该Bit位默认设置为1,当被设置为1时,无需外部连接*_frame_ptr_out和*_frame_ptr_in信号;

Dynamic Genlock Slave
Read (MM2S) channel或者Write(S2MM)channel:当配置为Dynamic Genlock Slave模式时,该通道访问Dynamic Genlock Master操作的前一帧。通过mm2s_frame_ptr_in对Dynamic Genlock Master的帧编号进行采样,并且在mm2s_frame_ptr_out上输出当前访问的帧编号。为了建立Dynamic Genlock Slave模式下的通道,应对寄存器进行如下配置
(1)设置GenlockEn(MM2S_VDMACR[3]=1)来使能Master和Slave端的锁相同步;
(2)设置GenlockSrc(MM2S_VDMACR[7]=1)来使能内部锁相模式。在VIVADO里如果两通道都被开启,则该Bit位默认设置为1,当被设置为1时,无需外部连接*_frame_ptr_out和*_frame_ptr_in信号;

时钟:时钟支持同步模式和异步模式,若选择异步模式,只需勾选Enable Asynchronous Mode,并由此创造出5个时钟【ZYNQ】IP核_VDMA的详细介绍_第10张图片
注意:该模式下,s_axi_lite_aclk 必须低于m_axi_mm2s_aclk和m_axi_s2mm_aclk ,以及m_axi_mm2s_aclk和m_axi_s2mm_aclk必须大于或等于s_axis_s2mm_aclk和m_axis_mm2s_aclk 。
若选择同步模式,则所有逻辑在单个时钟域下运行,而s_axi_lite_aclk 可以连接到较慢的时钟。

配置寄存器的常规流程
AXI VDMA操作从设置视频参数、起始地址寄存器和VDMA控制寄存器开始,
(1)写入控制信息到VDMACR寄存器(MM2S的偏移量为0X00,S2MM的偏移量为0X30),以根据需求来设置中断启用,设置VDMACR.RS=1以启用AXI VDMA通道运行;
(2)将有效的视频帧缓冲区起始地址写入通道start_address寄存器1至N,其中N等于帧缓冲区(MM2S的偏移量0x5C至0x98,S2MM的偏移量为0xAC至0xE8),如有必要,配置REG_INDEX寄存器,当AXI VDMA配置为大于32的地址空间时,每个起始地址将被编程为两个寄存器的组合,其中第一个寄存器用于规定LSB 32位地址,而下一个寄存器用于规定MSB 32位
(3)将有效的帧延迟(仅对Genlock Slave有效)和步长写入通道FRMDLY_Stride寄存器(MM2S偏移量0x58,S2MM偏移量0xA8);
(4)将有效的水平尺寸写入信道HSIZE寄存器(MM2S偏移量0x54,S2MM偏移量0xA4);
(5)将有效的垂直大小写入通道VSIZE寄存器(偏移量0x50用于MM2S,0xA0用于S2MM)。这将启动传输视频数据的通道。

你可能感兴趣的:(#,ZYNQ_IP核的使用,fpga开发,动画)