软核: 经过RTL级设计优化 和功能验证,但其中不含有任何具体的物理信息。用户可以综合出正确的门电路设计网表,并进行后续的设计。 软核只经过功能仿真,需要经过综合以及布局布线才能使用,可移植性强。
硬核: IP硬核是基于半导体工艺的物理设计,已有固定的拓扑布局和具体工艺,并经过工艺验证,具有可保证的性能。
Xlinx提供软核VDMA: 实现图像数据的搬运,该软核能高效地在内存和数据流之间切换。VDMA自带有帧缓存机制,常用作基于ZYNQ的图像、视频处理系统中。
帧缓存:
帧缓存又称为显存,显存是用来存储要处理的图形信息的部件。视频控制器通过访问帧缓存来刷新屏幕,他们通过不停的向frame buffer中写入数据,显示控制器自动的从frame buffer中读取数据并显示出来。frame buffer中存储的东西是一帧一帧的。
帧缓存分为单缓存和多缓存。
单缓存:
所有的绘图指令在窗口上执行,绘图效率比较慢。
多缓存:
绘图指令在一个缓冲区完成,绘图非常快。 可以一个缓冲区读取数据,一个缓冲区处理数据,两个缓冲区交替工作,改善图像质量。
VDMA 最多提供帧缓存。
VDMA 核功能:
VDMA,在系统内存 和 AXI4_stream类型的目标外设之间 提供高性能直接内存访问。
VDMA 支持以下功能:
1 环形缓冲区访问多达32帧缓冲区。
2 当前帧等待的能力,允许重复传输相同的视频帧数据。
3 独立的帧同步和独立的AXI时钟,允许各个通道以不同的帧速率和不同的像素速率运行。
VDMA结构:
VDMA内部包括了: 控制和状态,数据搬运,行缓冲等模块。以及外部的AXI4_lite、AXI4_Stream、AXI4_Memory Map 接口。
AXI4_lite: 可以对寄存器进行编程,从而实现软件动态配置VDMA功能。
VDMA数据接口分为读、写两个通道,且写入和读取独立运行。用户可以通过写通道将AXI4_Stream类型的数据流写入系统存储器DDR3,在读通道中,VDMA使用AXI4_Memory_Map主接口从系统存储器DDR3读取数据并在AXI4_Stream主接口上输出。
VDMA本质上是一个数据搬运的ip,可以看作是视频图像处理做特殊优化的带有帧缓存的高性能DMA,
AXI4_Stream 协议 负责完成VDMA和其他外部ip,如FPGA的摄像头等 的数据通信。
AXI4_Memory Map 协议 负责VDMA 读写DDR的操作,所以VDMA在FPGA和arm之间搬运图像数据,实际是AXI4_Memory Map这个子协议完成的,而AXI4_Stream负责在PL端的VDMA和其他FPGA模块数据流通信。
Genlock 同步锁相
同步锁相,是一种帧同步奇数,可以使一套或多套系统与同一同步源同步。帧同步锁相能够借助硬件使每个显示屏上的帧实现同步,同时可以在多个显示屏上刷新画面。
vidado中VDMA核配置界面:
Address width: 用来指定地址宽度,32bit- 64bit
frame buffer: 选择VDMA缓存几帧图像,缓存两帧的话,写第一个地址,读第二个地址,交替进行。
Memory map data width:代表数据到达AXI4总线上的位宽64。
Brust size:AXI总线上突发传输的长度,一般设置为16.
Stream data width: VDMA和PL部分通过AXI4_Stream 协议交互数据,这里代表数据位宽。
line buffer depth: VDMA内部行缓存FIFO,Stream数据会先写入fifo。
高级配置:
Fsync option: 告诉VADM什么时候开始运行。
三种模式:
对于写通道:
None: 只要VDMA就绪,立马接收数据,不需要同步。
S2mm_fsysnc: 把视频同步信号连接到该引脚,当检测到该引脚有下降沿时候,VDMA正式进入传输状态。
S2mm_tuer: 与S2mm_fsysnc类似。
对于读通道:
None: 该模式不需要同步信号。
mm2s_fsync: 同步模式,一般是将DDR数据转换为 Stream流数据格式。