VDMA设计

本文对VDMA模块功能、性能、寄存器和软件编程方法进行简要介绍。

设计概要

实现AXI Stream格式与Memory Map格式数据的互相转换。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qAg2Sgc5-1649474732775)(./pic/1.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)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KiqabvIK-1649474732778)(./pic/4.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)]

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬码农二毛哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值