原创 [博客大赛]零基础学FPGA(十五)先来说说VGA

2014-11-22 12:39 6058 9 20 分类: FPGA/CPLD 文集: FPGA/CPLD

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

     先来了解一下VGA吧

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

 

 
qq图片20140922155421.jpg
记得当初自己也是傻得不得了,把写好的代码,烧到板子里就直接连到笔记本电脑上的VGA接口上,结果什么反应也没有,还调了一下午的程序...结果还是没反应,到群里一问才知道,原来笔记本电脑上的VGA接口只能做输出而不能输入的这跟台式机还是不同的,后来才买的这块液晶显示器。
     标准的VGA接口有15个接口,但是真正用到的只有5个接口,分别是三个色彩信号,R,G,B,场同步信号VSYNC,行同步信号HSYNC,时序部分要通过控制行同步信号和场同步信号,色彩部分要控制RGB,先来看时序部分。
     360桌面截图20140922224942.jpg
对于一个分辨率为800*600的显示器,简单的说像素的刷新是从左到右,从上到下一行一行的刷新的,每一行要刷新的点成为行同步信号的帧长,有多少行称为场同步信号的帧长,从上到下刷新完一遍称为一帧,我们电脑上说的屏幕刷新频率就是说屏幕一秒钟能够刷新多少帧,当达到一定的帧数,我们的肉眼也就分辨不出来了,这样我们就看到我们的电脑屏幕,我们在操作的时候是连续的了。下面是时序表:
360桌面截图20140922225820.jpg
先来解释一下这个表
 
第一行表示行同步信号的时序表,前187个计数点表示的在消影区,即还没开始进入显示区,从188开始进入显示区,到987结束,后面的52个计数点又在消影区
第二行表示场同步信号。同理。前31个计数点和后56个计数点表示在消影区,是不显示的,下面是我画的一个图帮大家理解
360桌面截图20140922231140.jpg
知道了这一点我们就可以开始写时序部分的程序了
360桌面截图20140922232008.jpg
当行计数器计满一行1039个点时清零,场计数器加1,当场计数器计满687行时,一帧结束,场计数器清零
360桌面截图20140922232238.jpg
当计满一行时,行同步信号会拉低一个120个时钟周期的低脉冲,通俗的理解就是计满一行有一个低脉冲出现,这个脉冲的长度是120个时钟周期,同理,计满一个场之后会有6个场周期的低脉冲出现,这个低脉冲就不是时钟周期了,是相当于场计数器计6行的时间
 
时序写好了之后就要确定显示区域,根据上面那个我画的图,即只有在行计数器计到187到987,场计数器计到31到631时才是有效区域
360桌面截图20140922232950.jpg
为了好确定坐标,我们可以将坐标转换一下,换成我们习惯的样子,避免消影区坐标的干扰
360桌面截图20140922233257.jpg
 
这样一切准备工作就做好了,剩下的就是我们自己设计想要显示的画面了,例如,我要在屏幕中间显示一个矩形框,在这个矩形里面显示一个小矩形
360桌面截图20140922233457.jpg
这个地方我刚开始看的时候没看懂,我再画一个图帮大家理解
360桌面截图20140922234117.jpg
下面显示小矩形
360桌面截图20140922234230.jpg
画完图形最后显示颜色
360桌面截图20140923124816.jpg
 
最后按照硬件原理图分配好管脚,下载就可以了
qq图片20140923125201.jpg
 
下面来说说显示字符
 
时序部分是一样的就不多说,直接说字符显示部分
显示字符当然要用到取模软件,相信大家都用过
360桌面截图20140923231933.jpg
然后将字模进行拼接,因为我们刷新是从左向右,从上到下刷新的,所以要把每一个字模的同一行拼接在一起,这样每刷新一行,同时刷新三个字模的一行,从上到下刷新一边,三个字模也就刷新出来了
360桌面截图20140923232447.jpg
 
这里要定义一个减法计数器,当像素点从某个位置从左到右开始刷新时开始计数,知道计数到要显示的字模结束为止。这里我用到了32个像素点表示一个字模的一行,4个字模就需要128个像素点来表示一行,共有32列
 
360桌面截图20140923232532.jpg
下面是当计数到需要显示的字模时,给字加上颜色,x_dis,y_dis用来确定在哪显示字符
360桌面截图20140923233026.jpg
 
下面是演示结果
qq图片20140923233853.jpg
 
 
 
 

文章评论11条评论)

登录后参与讨论

用户1870125 2016-2-1 16:22

very good! thanks a lot!!

用户1832834 2015-7-7 09:38

慢慢跟着你一步一步的提升!

用户377235 2015-7-1 17:49

请问用VGA和台式机显示屏连接时,用的别人程序,程序正确,但是屏幕没反应提示无信号是怎么回事?

用户425756 2015-2-15 21:36

用户1678679 2015-2-14 00:22

你好,这个不需要考虑扫描频率吗?一帧,一个像素点需要多少时间不考虑吗?

用户465147 2015-2-6 16:33

很能钻研呀,我的学生能像你这样该多好呀。

用户1778669 2014-10-10 13:40

谢谢楼主

用户445097 2014-9-30 22:53

好想学

用户1773503 2014-9-29 09:30

介绍的很详细,要是开始就看了你的博客,估计学习VGA这段就能省下很多时间和精力了。不过我还是有问题,我用的是Quartus II 13.1 芯片是5CSEMA5F31C6N的芯片,用PLL进行扩频时,分析综合时出现“Could not place fractional PLL”好像评论时候不能截图。还有要是控制FPGA读内存里面的数据怎么读和现实的?

用户1228444 2014-9-28 16:13

恭喜你系统的人机界面建立。
相关推荐阅读
小墨同学 2015-09-10 10:28
零基础学FPGA( 三十二) 写在京城,多级FIR半带滤波器的FPGA实现
        每次到京城来总不能忘了出去逛逛吧,偌大的北京城去哪呢?炙热的大太阳烤的哪都不想去了,幸好这次有亲戚来北京旅游,搭个顺风车便出去转了一下。这次的闲逛可没有上次那么感叹,上次主要是去的...
小墨同学 2015-08-29 15:19
零基础学FPGA(三十三)多相结构抽取滤波器笔记
        前两篇文章已经介绍过了,在多速率信号处理中,CIC滤波器和FIR半带滤波器应用的非常广泛,由于CIC滤波器的特殊结构,使得它非常适合采样速率远远大于信号速率的情况时的抽取跟内插滤波...
小墨同学 2015-08-29 15:18
零基础学FPGA(三十一)写在京城,Hogenauer CIC抽取滤波器的FPGA实现笔记
         实习完还没几天,突然接到北京至芯雷总的电话,让我赶往北京来做一些事情,就这样,我的又一趟北京之旅开始了。         上次来北京还是今年1月份,冬天嘛,京城光秃秃的一片,...
小墨同学 2015-08-05 20:50
【博客大赛】零基础学FPGA (二十六)必会! 从静态时序分析到SDRAM时序收敛(上篇)
    好像小墨有这么一个习惯啊,就是每篇文章的开头总喜欢叨叨几句啊~既然这样,那我们今天也聊几句好了,总感觉直接就开始学习专业知识有点让人看不进去~     今天我们就说说生活吧~时间很快啊,...
小墨同学 2015-07-26 21:57
[博客大赛]零基础学FPGA(三十) IIR数字滤波器的FPGA实现笔记
      然而暑假已经过了快一半,想想也是挺快的,前一段时间学校安排实习,在长沙待了一段时间,说是实习,感觉却是像是度假,住着酒店,100多号人,想想都觉的热闹。实习搞得是Java安卓,当然我也...
小墨同学 2015-06-17 09:50
[博客大赛] 零基础学FPGA (二十九)滤波器开篇,线性相位FIR滤波器的FPGA实现
        也是有一段时间不写博客了啊,主要是这学期的实验课太多,每天都是在写预习报告,实验报告中度过,也快到考试月了啊,感觉又要忙起来了,今天就抽点时间来开个头,开什么头呢?对!就如标题所示...
我要评论
11
9
关闭 站长推荐上一条 /2 下一条