VGA接口复习笔记(原理,时序)VGA接口FPGA实现

本文详细介绍了VGA显示器的工作原理,包括逐行和隔行扫描方式,以及行扫描时间、场扫描时间和带宽等概念。接着讲解了VGA时序,包括行数据时序和帧时序,以及行同步、场同步信号的产生。在FPGA实现部分,展示了如何通过视频PLL模块生成所需时钟,并利用彩条生成模块产生8种颜色的彩条图像,最后通过VGA显示模块在显示器上显示。程序中预设了多种分辨率的时序参数,以适应不同的显示需求。

VGA接口复习笔记(原理,时序)VGA接口FPGA实现

一、显示器工作原理

显示器扫描方式分为逐行扫描和隔行扫描:逐行扫描是扫描从屏幕左上角一点开始,从左向右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。隔行扫描是指电子束扫描时每隔一行扫一行,完成一屏后再返回来扫描剩下的行,隔行扫描的显示器闪烁的厉害,会让使用者的眼睛疲劳。
完成一行扫描的时间称为水平扫描时间,其倒数称为行频率;完成一帧(整屏)扫描的时间称为垂直扫描时间,其倒数称为场频率,即刷新一屏的频率,常见的有60Hz,75Hz等等。标准的VGA显示的场频60Hz,行频31.5KHz。
行场消隐信号:是针对老式显像管的成像扫描电路而言的。电子枪所发出的电子束从屏幕的左上角开始向右扫描,一行扫完需将电子束从右边移回到左边以便扫描第二行。在移动期间就必须有一个信号加到电路上,使得电子束不能发出。不然这个回扫线会破坏屏幕图像的。这个阻止回扫线产生的信号就叫作消隐信号,场信号的消隐也是一个道理。
显示带宽:带宽指的显示器可以处理的频率范围。显示带宽代表显示器显示能力的一个综合指标,指每秒钟所扫描的图素个数。计算公式:B= r(x) × r(y) × V。如果是60Hz刷新频率的VGA,其带宽达640x480x60=18.4MHz,70Hz的刷新频率1024x768分辨率的SVGA,其带宽达1024x768x70=55.1MHz。

二、VGA时序

行数据时序
VGA行数据时序
显示一行数据需要处理两件事:产生行同步信号HSYNC;产生显示的数据信号。
行同步是周期性脉冲信号,周期就是一行的时间e=a+b+c+d,因分辨率不同而有所差异; 而数据信号为模拟信号,当在显示有效数据(Active video)内,DATA信号为0-0.174Vpp的模拟电压(R、G、B)。
VGA需要的是模拟信号,而FPGA提供的是数字信号,因此还需要专用的DAC芯片进行数模转换。很多开发板为了节省成本,会选择用电阻网络R-2R作为视频DAC(黑金AX516开发板就是如此)。

AX516VGA电路图
在这里插入图片描述
帧时序
在这里插入图片描述
VESA中定义行时序和场时序都需要同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四部分。VGA工业标准显示模式要求:行同步,场同步都为负极性,即同步脉冲要求是负脉冲。

由VGA的行时序可知:每一行都有一个负极性行同步脉冲(Sync a),是数据行的结束标志,同时也是下一行的开始标志。在同步脉冲之后为显示后沿(Back porch b),在显示时序段(Display interval c)显示器为亮的过程,RGB数据驱动一行上的每一个像素点,从而显示一行。在一行的最后为显示前沿(Front porch d)。在显示时间段(Display interval c)之外没有图像投射到屏幕是插入消隐信号。同步脉冲(Sync a)、显示后沿(Back porch b)和显示前沿(Front porch d)都是在行消隐间隔内(Horizontal Blanking Interval),当消隐有效时,RGB信号无效,屏幕不显示数据。
VGA的场时序与行时序基本一样,每一帧的负极性脉冲(Sync a)是一帧的结束标志,同时也是下一帧的开始标志。而显示数据是一帧的所有行数据。

在这里插入图片描述在这里插入图片描述
三.其他显示器时钟分布情况
在这里插入图片描述
四FPGA时序实现
实现 VGA 输出显示,在 VGA 显示器里显示测试的彩条图像。程序由 2 个模块实现, 分别是时钟模块 vidio_pll, 彩条生成模块 color_bar。

逻辑框图
在这里插入图片描述
1. 顶层模块及VGA 时钟模块video_pll
video_pll 模块是倍频产生模块,通过输入的 clk 时钟产生 VGA 显示所需要的时钟信号, 模块中设置为 65MHz,用来满足 VGA 分辨率为 1024x768 的要求。

//////////////////////////////////////////////////////////////////////////////////
//  BISTU                                                 //
//                                                                              //
//  Author: 田彦祖    202.6.4
//                                                         //                                                                            //
//////////////////////////////////////////////////////////////////////////////////

//================================================================================

//================================================================================
//  Revision History:
//  Date          By            Revision    Change Description
//--------------------------------------------------------------------------------
//2017/7/20                    1.0          Original
//*******************************************************************************/
module top
(
	        input                       clk,
	        input                       rst_n,
	        //vga output        
	        output                      vga_out_hs, //vga horizontal synchronization   行同步	      
	        output                      vga_out_vs, //vga vertical synchronization     场同步      
	        output[4:0]                 vga_out_r,  //vga red	红
	        output[5:0]                 vga_out_g,  //vga green	绿
	        output[4:0]                 vga_out_b   //vga blue  蓝
);

wire                            video_clk;
wire                            video_hs;
wire                            video_vs;
wire                            video_de;
wire[7:0]                       video_r;
wire[7:0]                       video_g;
wire[7:0]                       video_b;

wire                            osd_hs;
wire                            osd_vs;
wire                            osd_de;
wire[7:0]                       osd_r;
wire[7:0]                       osd_g;
wire[7:0]                       osd_b;


assign vga_out_hs = osd_hs;
assign vga_out_vs = osd_vs;
assign vga_out_r  = osd_r[7:3]; //discard low bit data读取数据位
assign vga_out_g  = osd_g[7:2]; //discard low bit data读取数据位
assign vga_out_b  = osd_b[7:3]; //discard low bit data读取数据位

//generate video pixel clock
//生成视频像素时钟
IBUFG IBFG_INST
(     .O(clk_bufg),
      .I(clk)
);

video_pll video_pll_m0
(
	.clk_in(clk_bufg),
	.video_clk(video_clk),
	.reset(~rst_n),
	.locked(locked)
);
//	彩条产生模块
color_bar color_bar_m0
(
	.clk(video_clk),
	.rst(~rst_n),
	.hs(video_hs),
	.vs(video_vs),
	.de(video_de),
	.rgb_r(video_r),
	.rgb_g(video_g),
	.rgb_b(video_b)
);
//VGA显示窗口
osd_display  osd_display_m0
(
	.rst_n                 (rst_n                      ),//系统复位
	.pclk                  (video_clk                  ),//时钟输入
	.i_hs                  (video_hs                   ),//行同步
	.i_vs                  (video_vs                   ),//场同步
	.i_de	                 (video_de                   ),//像素数据有效
	.i_data                ({
   
   video_r,video_g,video_b}  ),//rgb像素数据输出
	.o_hs                  (osd_hs                     ),//输出行同步
	.o_vs                  (osd_vs                     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值