零基础学FPGA(十五)先来说说VGA

发布时间:2015-1-20 13:52    发布者:wp1981
关键词: 零基础 , FPGA , VGA , 小墨同学
作者:小墨同学

    这个实验其实已经做好久了,但是一直没有做笔记,今天就把这部分的内容补一下,有兴趣的朋友可以看一下,或许对你有什么帮助,对初学者来说还是一个不错的实验。

     先来了解一下VGA吧

     我们家里用的台式电脑就是一个VGA显示器,小墨同学为做这方面的实验还特意买了一块7寸的VGA液晶显示器

1.jpg

记得当初自己也是傻得不得了,把写好的代码,烧到板子里就直接连到笔记本电脑上的VGA接口上,结果什么反应也没有,还调了一下午的程序...结果还是没反应,到群里一问才知道,原来笔记本电脑上的VGA接口只能做输出而不能输入的这跟台式机还是不同的,后来才买的这块液晶显示器。
     标准的VGA接口有15个接口,但是真正用到的只有5个接口,分别是三个色彩信号,R,G,B,场同步信号VSYNC,行同步信号HSYNC,时序部分要通过控制行同步信号和场同步信号,色彩部分要控制RGB,先来看时序部分。

2.jpg

对于一个分辨率为800*600的显示器,简单的说像素的刷新是从左到右,从上到下一行一行的刷新的,每一行要刷新的点成为行同步信号的帧长,有多少行称为场同步信号的帧长,从上到下刷新完一遍称为一帧,我们电脑上说的屏幕刷新频率就是说屏幕一秒钟能够刷新多少帧,当达到一定的帧数,我们的肉眼也就分辨不出来了,这样我们就看到我们的电脑屏幕,我们在操作的时候是连续的了。下面是时序表:

3.jpg

先来解释一下这个表

第一行表示行同步信号的时序表,前187个计数点表示的在消影区,即还没开始进入显示区,从188开始进入显示区,到987结束,后面的52个计数点又在消影区
第二行表示场同步信号。同理。前31个计数点和后56个计数点表示在消影区,是不显示的,下面是我画的一个图帮大家理解

4.jpg

知道了这一点我们就可以开始写时序部分的程序了

5.jpg

当行计数器计满一行1039个点时清零,场计数器加1,当场计数器计满687行时,一帧结束,场计数器清零

6.jpg

当计满一行时,行同步信号会拉低一个120个时钟周期的低脉冲,通俗的理解就是计满一行有一个低脉冲出现,这个脉冲的长度是120个时钟周期,同理,计满一个场之后会有6个场周期的低脉冲出现,这个低脉冲就不是时钟周期了,是相当于场计数器计6行的时间

时序写好了之后就要确定显示区域,根据上面那个我画的图,即只有在行计数器计到187到987,场计数器计到31到631时才是有效区域

7.jpg

为了好确定坐标,我们可以将坐标转换一下,换成我们习惯的样子,避免消影区坐标的干扰

8.jpg

这样一切准备工作就做好了,剩下的就是我们自己设计想要显示的画面了,例如,我要在屏幕中间显示一个矩形框,在这个矩形里面显示一个小矩形

9.jpg

这个地方我刚开始看的时候没看懂,我再画一个图帮大家理解

10.jpg

下面显示小矩形

11.jpg

画完图形最后显示颜色

12.jpg

最后按照硬件原理图分配好管脚,下载就可以了

13.jpg

下面来说说显示字符

时序部分是一样的就不多说,直接说字符显示部分
显示字符当然要用到取模软件,相信大家都用过

14.jpg

然后将字模进行拼接,因为我们刷新是从左向右,从上到下刷新的,所以要把每一个字模的同一行拼接在一起,这样每刷新一行,同时刷新三个字模的一行,从上到下刷新一边,三个字模也就刷新出来了

15.jpg

这里要定义一个减法计数器,当像素点从某个位置从左到右开始刷新时开始计数,知道计数到要显示的字模结束为止。这里我用到了32个像素点表示一个字模的一行,4个字模就需要128个像素点来表示一行,共有32列

16.jpg

下面是当计数到需要显示的字模时,给字加上颜色,x_dis,y_dis用来确定在哪显示字符

17.jpg

下面是演示结果

18.jpg



本文地址:https://www.eechina.com/thread-144864-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表