FPGA实现VGA

VGA简介

VGA介绍

VGA(Video Graphics Array)视频图形阵列是IBM与1987年提出的一个使用模拟信号的电脑显示标准。其具有分辨率高、显示速率快、颜色丰富等优点,常用于电脑显示器接口。但随着时代的发展,现在电脑大多采用HDMI和DP接口,取代了VGA接口;因此如果使用VGA显示高分辨率图像,要求晶振达到的频率更高,这对电子电路的时序造成了困难,因此逐渐被取代。

VGA原理

VGA接口将信号分解为R、G、B三原色和行同步信号、场同步信号进行传输,R、G、B三原色决定了每个像素显示的颜色,通过行同步信号,控制一行颜色的显示,通过场同步信号,控制着一帧图像的显示。

VGA接口

VGA接口15根针,其接口见下图:
在这里插入图片描述
VGA接口是一种D型接口,上面共有15针孔,分成三排,每排五个。 其中,除了2根NC(Not Connect)信号、3根显示数据总线和5个GND信号,比较重要的是3根RGB彩色分量信号和2根扫描同步信号HSYNC和VSYNC针。
接口的引脚功能如下图所示:
在这里插入图片描述
我们一般只用到1(RED)、2(GREEN)、3(BLUE)、13(HSYNC)、14(VSYNC)信号,由于VGA时钟模拟接口,因此电压范围在0~0.714V,0V代表无色,0.714V代表满色。

VGA时序

VGA的时序较为简单,其行同步时序图如下:
行同步时序
其场同步时序如下图所示:
场同步时序
通过时序图可看出,行同步信号(HSYNC)和场同步信号(VSYNC)一个周期都分为四个阶段,分别为:同步阶段、显示后沿、数据有效期、显示前沿。其中在同步阶段需要将信号拉低,在其他阶段将信号拉高。上图中的DATA数据线,所传输的就应该是RGB三原色的信息。
行同步信号与场同步信号的区别在于,行同步信号的驱动为VGA时钟,而场同步信号则不同,场同步性的驱动时钟是行同步信号。这其实也不难理解,由于VGA的显示是一行一行的,当显示完一行后,则从下一行的起点继续显示,只有当所有的行都显示完毕后,才是场同步信号的一个周期,其控制显示下一帧图像。其显示顺序如下图所示:
在这里插入图片描述
解释完VGA显示的时序后,我们还需要考虑一个问题。如前文所说VGA的行同步信号是VGA时钟控制的,那么问题来了,我们需要产生多快的时钟呢,这个由于要显示的图像分辨率和刷新率的不同,所需的时钟频率也是不同的,下面简单放了几个VGA时序参数:
在这里插入图片描述
上图中的a、b、c、d、e分别为:同步阶段持续时钟数、显示后沿持续时钟数、数据有效阶段持续时钟数、显示前沿阶段持续时钟数、周期总时钟数。
对于上图中没有的时序,大家可以在下面这个网站查询:VGA时序参数.

FPGA实现

VGA时序实现

介绍完了VGA的时序后,下面来介绍如何用FPGA时序VGA显示。通过上面的介绍可知,行同步信号和场同步信号都是将一个周期分成了四个阶段,而且各个阶段都是顺序跳转的,因此不需要使用状态机,只需要使用计数器即可。
通过计数器计数一个周期,将各个阶段所需要的时钟数定义为参数,我们只需要将计数器的值和各个参数比较,即可知道在什么阶段该做什么事。
场同步信号和行同步信号相同,只不过区别在于行同步信号的驱动时钟为VGA所需的时钟,而场同步信号的时钟为行同步信号,即行同步信号的计数器计满,场同步信号的计数器才加一。

VGA数据产生

为了使设计更加清晰,我将VGA的控制部分和数据产生部分分为了两个模块来实现,对于模块的链接,只需要在控制模块执行到数据有效阶段后,数据产生模块将数据输出出去即可。如果需要显示图片,那么则需要我们将图片事先存到ROM中,在需要显示的时候去读取ROM中的数据即可。我们只需要规定好显示的起始坐标,而坐标则是由VGA控制模块输出的,计数器的数值减去同步阶段和显示后沿即为当前显示坐标。这样我们在需要显示图片的地方去读取ROM的数值,在不需要显示图片的地方将输出设置为0(黑)即可。

RTL视图

在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值