zynq视频显示系统设计

来源:互联网 发布:java必读的5本书 编辑:程序博客网 时间:2024/06/16 22:13

1)性能指标

Ø  分辨率:支持1920x1080p 60HZ视频流格式,24位RGB色显示;

Ø  功能:支持至少3个缓存帧、支持水平垂直方向自动滚屏,支持VGA和HDMI;

Ø  接口:支持AXI HP接口DDR3访问、支持AXI Lite接口进行CPU配置。

Ø  资源:(LUT、slice)< 20% ,BlockRAM < 10% ,DSP < 5% ,clock resource < 50%


3.2处理流程与状态说明

图2 VGA视频显示系统结构图

       VGA视频显示系统主要包括始终管理单元MMCM、视频数据传输单元VDMA、视频数据缓存Axi-Stream Data FIFO、视频输出Video out以及视频时序产生单元Video timing generate,如图2所示,VDMA1、VDMA2主要用于图片存储格式转换,方便程序进行水平、垂直方向滚屏,VDMA3将DDR缓存中的帧数据搬运出来进行显示,Video timing generate用于生成相应的水平同步信号Hsync和垂直同步信号Vsync,MMCM产生系统数据处理的运行时钟148.5MHz,同时也是VGA视频输出的点时钟PixlClock。

       在静态显示模式下,VDMA3持续不断的从DDR3中读出帧数据,通过FIFO缓存,然后送到video out模块进行VGA输出;在水平或垂直滚屏模式下,需要对帧格式进行转换,水平存储格式如图3,4所示,两个虚拟帧缓存中存储P1和P2,VDMA1、VDMA2分别读出P1和P2,然后将P1、P2图象行交替存储在输出帧缓存中,由VDMA3读取并输出;垂直滚屏存储格式如图5,6所示,两个虚拟帧缓存中存储P1和P2,VDMA1、VDMA2分别读出P1和P2,然后将P1、P2图象行依次存储在输出帧缓存中,由VDMA3读取并输出。

图3 水平帧滚动示意图

 

图4 水平帧存储格式

 

图5 垂直滚动示意图

 

图6 垂直滚动帧存储格式

 

3.3主要接口时序

1)       VGA显示接口时序

图7 VGA显示接口时序

图8 VGA显示相关参数示意

 

       如图8所示,VGA显示控制主要是由Hsync和Vsync两个信号完成,主要参数有sync start、sync time、blank start、blank time等,这些相关参数都由VESA进行了标准化定义。如图9所示,1920x1080 @60Hz视频格式相关参数的标准化定义。

图9 1920x1080 @60Hz时序定义

 

 

 

 

2)       VDMA读取接口时序

图10 VDMA读取接口时序

VDMA配置:Vertical Size = 5 lines , Horizontal Size = 16bytes, and Stride = 32bytes.

3)       VDMA写入接口时序

图11 VDMA写入接口时序

VDMA配置:Vertical Size = 5 lines , Horizontal Size = 16bytes, and Stride = 32bytes.

 

4主要模块说明

4.1 VDMA数据传输模块

4.1.1功能介绍

Ø  支持axi-lite接口动态配置;

Ø  支持通用的数据传输位宽:32、64、128、256、512、1024数据位宽;

Ø  最大支持32个fream buffers;

Ø  支持帧同步操作;

Ø  支持PL中断;

4.1.2配置说明

1)       Basic Options

图12 VDMA基本配置

       FrameBuffers:配置缓存帧数量;

       LineBuffer Depth:一般配置为一行的像素点数即可;

       其他参数为Axi-Stream接口传输参数,可根据需求配置。

2)       Advanced Options

图13 VDMA高级配置

Fsync options:     S2mm_fsync——外部同步信号,在外部同步信号上升沿传输;

                            S2mm_tuser——在tuser上升沿开始一帧传输;

                            None——数据有效就开始传输;

Genlock Mode:    主要用于多视频系统同步,本文不涉及;写通道配置为master模式,读通道为slave模式,详见《pg020_axi_vdma.pdf》

 

4.2 Video Out视频输出模块

4.2.1功能介绍

Ø  视频时序输出,自动将AXI-stream数据转换成video数据流输出;

Ø  自动进行video时序同步;

Ø  可配置数据传输位宽及缓存;

Ø  支持主从两种工作模式;

4.2.2配置说明

图14 video out配置说明

关于video out的详细配置可以参考文档《pg044_v_axis_vid_out.pdf》

 

 

4.3 Video Timing Generate时序产生模块

4.3.1功能介绍

Ø  最大支持8192x8192分辨率;

Ø  自动进行video时序同步;

Ø  可配置输出video时序及极性;

Ø  可以配置16通道同步信号输出;

Ø  可配置中断信号;

4.3.2配置说明

图15 Video timing controller基本配置

图16 1920x1080 @60Hz时序配置

5 驱动编写及使用

5.1 代码规范与原则

1)       考虑到代码的通用性和健壮性,底层驱动采用面向对象的结构体编程方式,外设配置均采用结构体操作方式;

2)       充分使用宏定义、预编译指令,方便参数更改和程序调试;

3)       对全局参数使用了静态方式进行初始化定义;

4)       中断注册采用回调函数的方式,可灵活配置中断函数。

5.2 初始化配置

5.2.1 硬件初始化

硬件初始化包括VDMA配置、VDMA数据传输同步信号IO初始化、指示信号灯初始化。

VDMA初始化:

1.        定义相关结构体XAxiVdma_Config、XAxiVdma_FrameCounter、XAxiVdma_DmaSetup;

2.        依次调用结构体初始化相关函数:XAxiVdma_LookupConfig、XAxiVdma_CfgInitialize、XAxiVdma_Reset、XAxiVdma_SetFrmStore、SetupIntrSystem、EnableIntrSystem、ReadSetup;

3.        完成初始化;

IO初始化与VDMA初始化类似,详见具体程序《MyVdmaDrivers.c》

5.2.2 显存初始化

显存初始化主要是初始化显存地址、帧存储的开始位置以及帧大小,详见程序文件《ShowPicture.c》 。

5.2.3 画板初始化

画板初始化主要是设置画板地址,对画板内容进行清屏,详见程序文件《BaseDrawingTools.c》

5.3 图片显示与滚屏

所有图片显示与滚屏都在中断中完成,VDMA连续显示4帧产生一次中断,这时允许程序修改帧内容或者VDMA操作地址,VDMA必须重写Veritical Size寄存器,配置参数才会更新。

5.3.1 静态图片显示

完成硬件初始化,配置好VDMA3操作地址,静态图片显示不需要辅助VDMA(VDMA1、VDMA2),设置VDMA3 :

VertSizeInput = SUBFRAME_VERTICAL_SIZE;

HoriSizeInput = SUBFRAME_HORIZONTAL_SIZE;

Stride = FRAME_STRIDE_SIZE;

配置好参数,即可开始静态图片显示。

5.3.2 水平滚屏

       配置辅助VDMA(VDMA1、VDMA2):

VertSizeInput = SUBFRAME_VERTICAL_SIZE;

HoriSizeInput = SUBFRAME_HORIZONTAL_SIZE;

Stride = FRAME_STRIDE_SIZE * 2;

       VDMA1、VDMA2操作地址间隔一行像素,在目标地址中行交替存储。

       VDMA3输出VDMA配置:

VertSizeInput = SUBFRAME_VERTICAL_SIZE;

HoriSizeInput = SUBFRAME_HORIZONTAL_SIZE;

Stride = FRAME_STRIDE_SIZE * 2;

       在终端中依次修改VDMA操作地址即可实现水平滚动效果。

5.3.3 垂直滚屏

配置辅助VDMA(VDMA1、VDMA2):

VertSizeInput = SUBFRAME_VERTICAL_SIZE;

HoriSizeInput = SUBFRAME_HORIZONTAL_SIZE;

Stride = FRAME_STRIDE_SIZE ;

       VDMA1、VDMA2操作地址间隔一帧像素。

       VDMA3输出VDMA配置:

VertSizeInput = SUBFRAME_VERTICAL_SIZE;

HoriSizeInput = SUBFRAME_HORIZONTAL_SIZE;

Stride = FRAME_STRIDE_SIZE ;

       在终端中依次修改VDMA操作地址即可实现垂直滚动效果。

 

5.4 高级画图函数

目前画图函数只提供清屏、画点、划线、矩形、圆等基本几何形状绘制。


原创粉丝点击