本文对VDMA模块功能、性能、寄存器和软件编程方法进行简要介绍。
设计概要
实现AXI Stream格式与Memory Map格式数据的互相转换。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qAg2Sgc5-1649474732775)(./pic/1.png)]](https://i-blog.csdnimg.cn/blog_migrate/3cbfa42eab0aef55a70ba03bd7e042a0.png)
**In the Write path **
在AXI4-Stream Slave 接口接收数据,将数据通过AXI4 Master interface 接口写入system memory。
**In the Read path **
使用AXI4 Master interface 从system memory 读取数据,将数据从AXI4-Stream Master 接口输出。
**Genlock Synchronization **
Genlock synchronization支持在frame buffer 中同步读写帧数据。避免master和slave同时使用同一个buffer。
Clocking
memory map侧时钟频率要大于或等于streaming 侧。
**Resets **
AXI VDMA使用低电平复位,复位信号要与 s_axi_lite_aclk同步。每次复位信号出发时间要不小于16个s_axi_lite_aclk时钟周期。
通过MM2S VDMA Control Register Reset bit置1或S2MM VDMA Control Register Reset bit置1可以单独复位读写通道。
stride
Indicates the number of address bytes between the first pixels of each video line.
Note: A stride value less than MM2S_HSIZE causes data to be corrupted.
circle模式与park模式
circle模式,VDMA自动完成帧循环切换
park模式,VDMA不主动控制帧缓存地址,通过PS程序控制,需要使用中断函数
寄存器
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B8Ins7w1-1649474732777)(./pic/3.png)]](https://i-blog.csdnimg.cn/blog_migrate/5a83f7d8b23fa33493be9ad198912c10.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KiqabvIK-1649474732778)(./pic/4.png)]](https://i-blog.csdnimg.cn/blog_migrate/d1684165c410774778ebe2ce43e9f000.png)
寄存器又分为Write path 和Read path两部分,下面主要介绍Write path 相关寄存器,Read path类似。
**S2MM_VDMACR **
bit2->Reset 将bit2置1,复位S2MM通道,复位完成后,bit2由1变0。
bit0->RS bit0控制VDMA运行或停止,VDMA正常运行时,该位必须置1。
bit1->Circular_Park 选择Park Mode或Circular Mode。
bit3->GenlockEn 选择是否使能Genlock 或Dynamic Genlock Synchronization
bit4->FrameCntEn 将该位置1,S2MM通道允许缓存IRQFrameCount帧数据
bit23-16->IRQFrameCount 当FrameCntEn 置1,S2MM通道允许缓存IRQFrameCount帧数据。
bit12->FrmCnt_IrqEn 当该位置1,每缓存一帧数据,IRQFrameCount减1,当IRQFrameCount为0时,发出中断。
**S2MM_REG_INDEX **
当Frame Buffers 小于16时,不使用该寄存器
**S2MM Vertical Size **
该寄存器有两个作用,一、是设置图像垂直方向像元数,二、当设置该寄存器后启动S2MM发送。
**S2MM Horizontal Size **
设置图像水平方向像元数。
**S2MM Frame Delay and Stride **
设置stride。
**S2MM Start Addresses **
设置缓存帧存储地址,最大可设置32帧缓存,当缓存大于16帧时,与S2MM_REG_INDEX寄存器配合使用。
性能
**Maximum Frequencies **
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55NvD3tT-1649474732779)(./pic/2.png)]](https://i-blog.csdnimg.cn/blog_migrate/d483c713dff3a85336e9eb5e120c1655.png)
Zynq®-7000 All Programmable SoCs and UltraScale™ devices are expected to be similar to 7 series devices
软件编程
S2MM编程
- 将VDMACR.RS置1启动VDMA运行。(Offse 0x30 for S2MM )
- 将帧缓存地址写入START_ADDRESS寄存器 ,根据设定写入1 to N 地址。 (Offset 0xAC up to 0xE8 for S2MM)
- 将帧延迟 (valid only for Genlock Slave)和Stride写入FRMDLY_STRIDE寄存器(Offset 0xA8 for S2MM).
- 写 Horizontal Size 到l HSIZE寄存器 (Offset 0xA4 for S2MM)。
- 写 Vertical Size到VSIZE寄存器(Offset 0xA0 for S2MM),启动数据传输。
寄存器控制
写VDMACR为例,写入0x3008
XPAR_AXI_VDMA_0_BASEADDR与vivado设置的地址一致
#define VDMA_WRITE_BASEADDR XPAR_AXI_VDMA_0_BASEADDR
#define VDMACR (VDMA_WRITE_BASEADDR + 0x30)
volatile u32 *VdmaS2MMCrReg = (u32 *)(VDMA_WRITE_BASEADDR + 0x30);
方法1:
Xil_Out32((VDMACR), VDMA_SET);
方法2:
*VdmaMM2SCrReg = 0x3008;
本文详细介绍了AXI VDMA模块的功能,包括数据转换、读写路径、帧同步和时钟要求。在写路径中,模块从AXI4-Stream接口接收数据并写入内存;在读路径中,它从内存读取数据并输出到AXI4-Stream接口。Genlock同步功能确保了帧数据在缓冲区中的正确同步。软件编程涉及设置控制寄存器如S2MM_VDMACR,并配置帧缓存地址、大小及延迟。性能方面,模块在Zynq和UltraScale设备上的表现与7系列设备相似。

1842

被折叠的 条评论
为什么被折叠?



