码迷,mamicode.com
首页 > 其他好文 > 详细

MiS603开发板 第十六章 图像之VGA接口测试

时间:2015-09-13 14:37:51      阅读:1447      评论:0      收藏:0      [点我收藏+]

标签:

作者:MiS603开发团队

日期:20150911

公司:南京米联电子科技有限公司

论坛:www.osrc.cn

网址:www.milinker.com

网店:http://osrc.taobao.com

EAT博客:http://blog.chinaaet.com/whilebreak

博客园:http://www.cnblogs.com/milinker/

技术分享

MiS603开发板 第十六章 图像之VGA接口测试

第十六章 图像之VGA接口测试

在本章开始介绍视频图像处理开发平台的硬件结构,主要包括VGA显示模块(ADV7123)、HDMI显示模块(SIL9134)、DDR3存储模块、数字摄像头模块、模拟视频输入模块(TW2867)以及STM32配置模块,主要介绍各个模块的功能以及各个模块的基本原理,在此基础之上给出各个模块的测试代码。最后,给出一个基本的视频采集、缓存、显示的例程。

在这里给出MIS603视频图像处理平台,如下图所示。

技术分享

MIS603视频图像处理部分框图

16.1 VGA概述

VGA是Video Graphics Array的简称,也叫D-Sub接口。目前显示器都配备VGA接口,有的显示器还配备DVI(Digital Visual Interface)和HDMI(High Definition Multimedia Interface)接口。VGA 是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。根据不同分辨率,VGA 分为VGA(640x480)、SVGA(800x600)、XGA(1024x768)、SXGA(1280x1024)等。目前VGA已经成为一种标准,广泛应用于显示器、TFT液晶屏中。

VGA接口分为公头和母头,一般显示器都自带一根公头线,MIS603开发平台上是母头,VGA接口一共15根线,分为3排,标号如图6.1-1所示。

技术分享

图6.1-1 VGA接口

VGA接口每个引脚的定义如表6.1-1所示。

表6.1-1 VGA引脚定义

标号

名称

描述

标号

名称

描述

1

RED

红色分量视频

9

KEY

保留,每个厂家都不同

2

GREEN

绿色分量视频

10

SGND

同步信号地

3

BLUE

蓝色分量视频

11

ID0

显示器ID第0位

4

ID2

显示器ID第2位

12

ID1

显示器ID第1位

5

GND

13

HSYNC

行同步信号

6

RGND

红色分量地

14

VSYNC

场同步信号

7

GGND

绿色分量地

15

ID3

显示器ID第3位

8

BGND

蓝色分量地

     

在这里强调一下,VGA接口的RED、GREEN和BLUE传输的是模拟信号,峰峰值为0V~0.714V,0V代表无色,0.714V代表满色;HSYNC和VSYNC传输的是数字信号,为TTL电平。VGA模拟信号传输如图6.1-2所示,源端和终端匹配电阻均为75欧姆。

技术分享

图6.1-2 VGA模拟信号传输示意图

16.2 VGA硬件电路解析

在本次设计中使用了专业的VGA驱动芯片ADV7123,兼容型号CS7123,它是一款最高时钟频率可达330MHz的3通道10位高速视频DAC芯片,输入兼容TTL逻辑电平,内部参考电压1.235V,输出电流范围2mA~26.5mA,单电源3.3V供电,最高支持1600x1200@100Hz视频输入,SYNC控制同步信号,BLANK 控制消隐。

技术分享

VGA模块电路如上图所示,该模块支持RGB888数字输入,支持1080P视频输入,RGB模拟信号输出,终端和源端匹配电阻75欧姆。ADV7123和FPGA连接方式和具体含义如下表所示。

ADV7123(CS7123)和FPGA连接方式

标号

对应的FPGA引脚

描述

Video_clk

N8

驱动时钟,由FPGA输出

Video_blank

R9

数据有效,由FPGA输出

Video_hs

P9

VGA行同步信号,由FPGA输出

Video_vs

N9

VGA场同步信号,由FPGA输出

Video_d[23:16]

H13,J14,K15,L14,M15,N14,P15,R15

VGA数据红色分量,从到位到低位

Video_d[15:8]

J13,L12,M13,R14,J11,K12,T14,

R12

VGA数据绿色分量,从到位到低位

Video_d[7:0]

M12,P12,N12,P11,N11,M10,L10,T9

VGA数据蓝色分量,从到位到低位

注:VGA和HDMI共用FPGA引脚

对于1080P视频时钟为148.5MHz,对硬件要求很高,PCB必须等长布线。

技术分享

16.3 VGA时序分析

技术分享

VGA时序如上图所示,编写程序的依据就在这张图中。首先看到有3个矩形,第1个矩形是VGA驱动的最大部分,里面包括所有的信息,在此基础之上有2个同步信号,即HSYNC和VSYNC(行同步和场同步),HSYNC可以确定一行的开始和结束,VSYNC可以确定一场的开始和结束,但是同步信号也有时间,因此就引出Hor Sync和Ver Sync(行同步时间和场同步时间)。接下来就是H Back Proch和V Back Porch(行消隐和场消隐),消隐存在主要是为了兼容电子管屏幕设计的。然后是第2个矩形,这是Hor”Active”Video和Ver“Active”Video(行视频有效和场视频有效),在这个区域中是显示视频的地方。最后就是H Front Porch和V Front Porch(行前肩和场前肩)。到此,一场完整视频就显示完毕了。在这里说以一下第3个矩形,有4个参数H Left Border、H Right Border、V Top Border和V Bottom Border,在不同分辨率中这4个参数不同,在800x600及其以上的分辨率中这4个参数为0。

说了半天,大家可能晕了?在此给出一个简化的时序图,如下图所示。一行数据包括:Hor Sync(行同步)、Hor Back Porch(行消隐)、Hor Active Video(行视频有效)和Hor Front Porch(行前肩);一场数据包括:Ver Sync(场同步)、Ver Back Porch(场消隐)、Ver Active Video(场视频有效)和Ver Front Porch(场前肩)。

技术分享

VGA时序主要分为行时序和场时序,行时序是以像素为单位的,场时序是以行为单位的。VGA行时序对行同步时间、消隐时间、行视频有效时间和行前肩时间有特定要求,列时序也是如此,如果其中一部分时序出现问题就会造成显示出现问题。常用VGA分辨率时序参数如下表所示。

VGA常用分辨率时序参数

显示模式

时钟

/MHz

行时序参数(单位:像素)

列时序参数(单位:行)

a

b

c

d

e

f

g

h

i

k

640x480@60Hz

25.175

96

48

640

16

800

2

33

480

10

525

800x600@60Hz

40

128

88

800

40

1056

4

23

600

1

623

1024x768@60Hz

65

136

160

1024

24

1344

6

29

768

3

806

1280x720@60Hz

74.25

40

220

1280

110

1650

5

20

720

5

750

1280x1024@60Hz

108

112

248

1280

48

1688

3

38

1024

1

1066

1920x1080@60Hz

148.5

44

148

1920

88

2200

5

36

1080

4

1125

在这里说一下时钟频率计算,就是上文提到的第1个矩形和场频率有关,思考一下,很简单的。时钟频率=行最大值x列最大值x扫描频率。

16.4 VGA时序仿真

以800x600分辨率的进行VGA时序仿真,代码详见工程

水平计数器从0到1055,共1056个像素点。

技术分享

垂直计数器从0到627,总共628行。

技术分享

行同步信号,从1开始,128结束,共128个像素点。

技术分享

技术分享

场同步信号,4行。

技术分享

有效像素从1开始,800结束,共800个像素。

技术分享

技术分享

有效行计数从1开始,600结束,共600行。

技术分享

技术分享

由此可见时序参数符合规范。

16.5 ChipScope数据分析

采样时钟vga_clk_o:

行同步信号,数据有效信号。

技术分享

数据分析:1:绿色;2:蓝色;3:黑色;4:青色;5:红色;6:紫色;7:黄色;8:白色。

技术分享

实际图片效果。

技术分享

16.6 程序分析

技术分享

1:VGA时序参数定义文件,支持不同分辨率,只需要更改宏定义即可实现。

2:VGA测试顶层文件,例化DCM时钟模块和vga_driver模块。

3:由50MHz生成40MHz时钟模块。

4:vga_driver模块,生成相关VGA时序参数。

5:ChipScope模块,在线分析数据。

6:ucf文件,包括引脚分配和时钟约束。

整个VGA模块测试框图,vga_driver.v是整个设计的核心,考虑到程序的可移植性专门写了vga_paramter.v文件存放VGA时序参数,通过条件编译选择不同的分辨率,由于不同分辨率需要的时钟也不一样,,VGA_Test.v产生测试所需的数据,本实验产生彩条。

代码解析:

1)、水平计数器和行同步信号产生

//horizontal counter&&hs sysc generate.

/*水平计数器和行同步信号产生*/

always@(posedge clk_i or negedge rst_n_i)

begin

if(!rst_n_i)

begin

x_cnt <= 12‘d0;

end

else if(x_cnt < H_TOTAL-12‘d1)

begin

x_cnt <= x_cnt + 12‘d1;

end

else

begin

x_cnt <= 12‘d0;

end

end

assign w_hs = (x_cnt < H_SYNC)?1‘b1:1‘b0;

2)、垂直计数器和场同步信号产生

//vertical counter&&vs sysc generate.

/*垂直计数器和场同步信号产生*/

always@(posedge clk_i or negedge rst_n_i)

begin

if(!rst_n_i)

begin

y_cnt <= 12‘d0;

end

else

begin

if(x_cnt == H_TOTAL-12‘d1)

begin

if(y_cnt < V_TOTAL-12‘d1)

begin

y_cnt <= y_cnt + 12‘d1;

end

else

begin

y_cnt <= 12‘d0;

end

end

end

end

assign w_vs = (y_cnt < V_SYNC)?1‘b1:1‘b0;

3)、数据请求产生和有效区域坐标输出

//------------------有效区域产生视频请求信号---------------------//

assign w_data_requst = ((x_cnt >= H_SYNC+H_BACK-X_AHEAD)&&

(x_cnt < H_SYNC+H_BACK+H_ACTIVE-X_AHEAD))&&

((y_cnt >= V_SYNC+V_BACK)&&

(y_cnt < V_SYNC+V_BACK+V_ACTIVE));

//----------------在有效区域输出行坐标和列坐标--------------------//

assign w_x_pos = w_data_requst?(x_cnt-H_SYNC-H_BACK+12‘d1):12‘d0;

assign w_y_pos = w_data_requst?(y_cnt-V_SYNC-V_BACK+12‘d1):12‘d0;

4)、为了测试时序是否正常,设计了彩条显示实验

原理:在关键位置改变输出数据的值,之后保持不变,再到关键位置改变输出值,之后保持不变。

/lways@(posedge used_clk)

begin

if(data_requst)//-数据请求-//

begin

case(x_pos)

12‘d1: //-输出绿色RGB值-//

begin

{red_data,green_data,blue_data} <= GREEN_RGB;

end

(H_DISP/8)*1://-输出蓝色RGB值-//

begin

{red_data,green_data,blue_data} <= BLUE_RGB;

end

(H_DISP/8)*2://-输出黑色RGB值-//

begin

{red_data,green_data,blue_data} <= BLACK_RGB;

end

(H_DISP/8)*3://-输出青色RGB值-//

begin

{red_data,green_data,blue_data} <= CYAN_RGB;

end

(H_DISP/8)*4://-输出红色RGB值-//

begin

{red_data,green_data,blue_data} <= RED_RGB;

end

(H_DISP/8)*5://-输出紫色RGB值-//

begin

{red_data,green_data,blue_data} <= PURPLE_RGB;

end

(H_DISP/8)*6://-输出黄色RGB值-//

begin

{red_data,green_data,blue_data} <= YELLOW_RGB;

end

(H_DISP/8)*7://-输出白色RGB值-//

begin

{red_data,green_data,blue_data} <= WHITE_RGB;

end

default://-数据保持不变-//

begin

{red_data,green_data,blue_data} <= {red_data,green_data,blue_data};

end

endcase

end

else

begin

{red_data,green_data,blue_data} <= {8‘d0,8‘d0,8‘d0};

end

end

下载程序,屏幕上会出现8个彩条。通过调整宏定义和时钟实现不同分辨率的VGA驱动。

16.7 程序源码

详细参考:6_02_VGA_TEST

16.8 小结

在本节学习了VGA驱动,主要是VGA时序和代码编写,代码编写的基础是时序,时序理解后代码编写很容易。此外还学习了几个Verilog关键字。

MiS603开发板 第十六章 图像之VGA接口测试

标签:

原文地址:http://www.cnblogs.com/milinker/p/4804908.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!