cordic
vivado ip核 cordic是一个实现通用坐标旋转计算的IP核,在进行数字信号处理时常常会用到。
- rotate 旋转 ——复数旋转
- translate 变换 ——复数转极坐标
- sin/cos
- arctan
- sinh/cosh
- arc tanh
- square root 平方根
rgb2dvi
rgb2dvi直接封装好了HDMI接口协议,支持RGB888或者其他颜色空间的图像信号,到HDMI协议所要求的TMDS差分信号的转换。
OV5640_capture IP核
通过SCCB协议对OV5640进行初始化配置,将采集数据通过OV5640_capture IP核解码转化为RGB数据格式以及行、场同步信号。
VDMA
XILINX公司的VDMA(Video DMA)是一个专门的在ZYNQ内部(FPGA、ARM之间)搬运视频、图像等“大数据”的软核IP,刚好封装了AXI的三种协议,VDMA框图如下:
从VDMA框图可以看出,其内部包括了控制寄存器、状态寄存器、数据搬运和行缓冲等模块
以及顶层的AXI4-Lite、AXI-Stream和AXI4等通信协议。
ARM可以通过顶层的AXI-Lite协议完成VDMA内部的控制寄存器、状态寄存器的配置和访问,通过配置寄存器可以指定,数据搬运模块具体如何工作,数据搬运的过程需要经过行缓冲模块进行缓存;
AXI-Stream流协议,完成VDMA与其他的外部IP(比如FPGA的摄像头、HLS IP等)的数据流通信,换言之,只有在FPGA这个PL端,才有“流”的说法;
AXI4协议负责VDMA读写DDR的操作(ARM),所以VDMA在FPGA和ARM之间搬运视频图像数据,实际上是AXI4这个子协议完成的,而AXI-Stream负责在PL端的VDMA与其他FPGA模块的数据流通信。
VDMA内部的寄存器:
控制寄存器完成读写复位,开始停止,帧缓存,控制使能
偏移地址00h、30h:MM2S、S2MM读写通道的控制寄存器
状寄存器 获取VDMA工作状态,通道是否启动,通道是否响应
偏移地址04h、34h:MM2S、S2MM读写通道的状态寄存器,ARM应用程序通过访问这个寄存器,可以获取VDMA的工作状态,比如通道是否启动、通道是否响应每次传输的中断、帧延时和帧计数等中断;
接下来是设定行数,列数,每一帧缓存的起始地址
偏移地址5Ch至98h、ACh至E8h:分别配置MM2S、S2MM读写通道的每一帧缓存的起始地址,需要根据VIVADO例化VDMA IP的时候,指定的缓存帧数进行软件上的配置(比如,VDMA常用的是1帧或3帧缓存);
偏移地址50h、A0h:分别配置MM2S、S2MM读写通道的垂直方向尺寸,即指定传输的图像实际高度(行数),这个寄存器一般在最后一步进行配置,以便启动整个通道的传输;
偏移地址54h、A4h:分别配置MM2S、S2MM读写通道的水平方向尺寸,但它不是指定传输的图像实际宽度(列数),它指定的是每一行需要传输多少个字节的数据,比如640*3,图像每行的宽度是640列,每个像素占用3个字节的内存;
偏移地址58h、A8h:分别配置MM2S、S2MM读写通道的跨度,即指定每两行的第一个像素之间在内存上间隔多少个数据。比如,当前分辨率下的图像,每一行实际有6403个字节,待传输显示。但考虑程序的通用性,有可能使用宏定义指定了不同的显示分辨率下,都是19203固定大小的跨度;
控制寄存器(00h、30h):
考虑到MM2S、S2MM读写通道是独立的,互不影响,下面选择MM2S通道的控制寄存器进行“详细”的介绍(S2MM通道是同样的道理):
VDMA读通道的控制寄存器,该寄存器用于控制整个VDMA的运行方式,包括复位、时钟使能(锁相/动态锁相)、帧缓存的切换模式、VDMA的读/写通道的启动等等。
低0位,控制VDMA读/写通道的运行和停止,其中,赋值1表示运行,赋值0表示停止;
低1位,控制帧缓存的切换模式,其中,赋值1表示循环的切换显示(比如内存上有3帧的缓存);赋值0表示,一直停留在XSDK的应用程序所指定的当前帧,进行“搬运”和HDMI显示;
低2位,控制读/写通道的复位,其中,赋值1表示高电平复位有效,所以在VDMA正常工作的情况下,低2位要赋值为低电平;
低3位,控制时钟使能是否有效,其中,赋值1表示使能/开启当前模式的时钟,比如锁相同步模式或者动态锁相同步模式。
DMA
DMA的英文拼写是“Direct Memory Access”,直接内存访问。DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术。
VTC
Video Timing Controller
Video Timing Controller,XILINX提供的视频时序控制器,支持AXI-Lite接口协议,即支持ARM对内部寄存器的动态配置。
将视频数据传输到Video-Stream to Video Out IP。视频时钟控制器(Video Timing Controller, VTC)产生显示器所需要的时序信号,在两者配合下,将数据信号利用RGB-2DVI IP转化成HDMI差分信号。
AXI4-Stream to Video Out IP,该IP核与VTC协同工作,生成视频输出格式的时序信号。VTC用于控制AXI4-Stream接口和视频输出的时序参数,可将其视为一个时序发生器,用于对显示器输出所需的时序信号,从而无需考虑图像的行、场消隐区。
VTC: 视频流数据产生符合的行场同步信号
AXI4-Stream to Video Out
PL端调用rgb2dvi这个现成的IP,可以完成RGB888或其他颜色空间/数据格式的图像信号,到HDMI显示器的TMDS差分信号的输出。
VDMA通过AXI4协议,从ARM/PS的DDR搬运的帧图像数据,最终是以“流”的格式与PL端的其他模块进行通信的。
需要一个“中介”,完成VDMA输出的AXI-Stream流格式的图像、视频到rgb2dvi所要求的RGB888图像格式的转换。如下图所示,XILINX直接提供了现成的软核AXI4-Stream to Video Out,完成上述的AXIS到RGB的格式转换。
以保证AXI stream 到RGB输出,再到HDMI显示的同步。
软核的Timing Mode,有Slave、Master模式的选择,一般是“根据”视频时序控制器Video Timing Controller的配置,进行主从模式的选择。
Video Timing Controller配置了AXI-LITE接口,这意味着,可以在应用程序动态的改变视频时序(根据不同的显示分辨率),那么这时候,软核的Timing Mode选择Slave模式。
如果Video Timing Controller没有配置AXI-LITE接口,意味着,图像输出的是固定的分辨率,视频时序也就是固定的了,那么Timing Mode可以选择Master模式,这表示Video Timing Controller的运行,可以完全的脱离AXI4-Stream to Video Out。
VTC: 视频流数据产生符合的行场同步信号
由于RGB2DVI 需要RGB 输入和行场同步信号。 Video Timing Controller提供行场同步信号,RGB输入通过AXI4-Stream to Video Out。
Clocking Wizard
时钟管理模块,或是一个锁相环,可以输出倍频、分频、单端转差分的时钟,等等、
可以由ZYNQ IP输出100Mhz的时钟到clocking wizard的输入端,经过内部的配置转换之后,得到像素时钟以及HDMI编码要用到的串行时钟(40*5=200MHz)的输出。
Video In to AXI4-Stream
将视频输入数据转化为AXI4-Stream格式 |