原创 VGA接口实验

2013-10-22 09:55 2953 8 13 分类: FPGA/CPLD 文集: FPGA

 

把这篇文章分享出来给大家,把我这过程中遇到的问题以及解决问题的办法罗列出来,希望做这个实验的看到我的这篇文章能够少走一些弯路,虽然我写的很“通俗”,可能文章中还会有错误,但是这不是一个学习的过程吗?希望有高手能够找出我的错误,希望我们一起进步。我使用的Spantan-3E,xilinx公司的一块入门实验板,包括50万门,XC3S500E-4FG320C的FPGA芯片,下面是开发板中的一些资料,也许一些人会有很少的一段时间就能看明白,但是我却看了很久,才懂得。

入门实验板通过DB15连接器输出一个VGA显示端口。该端口通过标准的监视电缆直接连到PC监视器或平板LCD上。如图6.1所示,VGA连接器在板上的最左端。

 

1.jpg

 

2.jpg

FPGA通过串联电阻直接驱动5个VGA信号。每个颜色信号串一个电阻,每位的颜色信号分别是VGA_RED、VGA_BLUE、VGA_GREEN。每个电阻与终端的75欧电缆电阻相结合,确保颜色信号保持在VGA规定的0V~0.7V之间。VGA_HSYNC和VGA_VSYNC信号使用LVTTL或LVCMOS3I/O标准驱动电平。通过VGA_RED、VGA_BLUE、VGA_GREEN置高或低来产生8中颜色,如表6.1所示。

 

3.jpg

VGA信号的时序由视频电气标准委员会(VESA)规定。以下提供的VGA系统和时序信息作为例子来说明FPGA在640×480模式下是如何驱动VGA监视器的。

Signal Timing for a 60 Hz, 640x480 VGA Display

VGA显示器基于CRT,使用调幅模式,移动电子束(或阴极射线)在荧光屏上显示信息。LCD使用矩阵开关给液晶加压,在每个像素点上通过液晶来改变光的介电常数。尽管下面的描述仅限于CRT,LCD已经发展到可以同CRT使用同样的时序信号了。因此,下面的讨论均适合CRT和LCD。

在CRT显示器中,电流的波形通过蹄形磁铁产生磁场,使得电子束偏转,光栅在显示屏上横向显示,水平方向从左至右,垂直方向从上至下。如图6.2所示,当电子束向正方向移动时,信息才显示,即从左至右、从上至下。如果电子束从后返回左或顶边,显示屏并不显示任何信息。在消隐周期——电子束重新分配和稳定于新的水平或垂直位时,丢失了许多信息。

显示协议定义了电子束的大小以及通过显示屏的频率,该频率是可调的。

现在的VGA显示屏支持多种显示协议,VGA控制器通过协议产生时序信号来控制光栅。控制器产生同步脉冲TTL电平来设置电流通过偏转磁铁的频率,以确保像素或视频数据在适当的时间送给电子*。

视频数据一般来自重复显示存储器中一个或多个字节——它们被分配到每个像素单元。入门实验板使用每个像素中的3位,产生表6.1中可能的一种颜色。控制器指定视频数据缓冲器以备电子束通过显示屏。然后,控制器接收并利用视频数据在适当的时间显示,电子束移动到指定的像素点。

根据图6.2所示,VGA控制器产生水平同步时序信号(HS)和垂直同步时序信号(VS),调节在每个像素时钟视频数据的传送。像素时钟定义了显示像素信息的有效时间段。VS信号定义显示的更新频率,或刷新屏幕信息的频率。最小的刷新频率是取决于显示器的亮度和电子束的强度,实际频率一般在60~120Hz之间。给定的刷新频率的水平线的数量定义了水平折回频率。

 

VGA Signal Timing

 

表6.2的时序信号是640×480,像素时钟25Mhz,刷新频率60Hz±1。图6.3说明了每个时序的联系。同步脉冲的时序宽度(TPW)和前后门拱的间隔TFP和TBP)基于观察多种VGA的显示屏的结果。前后门拱的间隔是前后同步脉冲时间。在这些时段信息不能显示。

 

 

 

 

 

4.jpg

 

 

5.jpg

 

6.jpg

 

一般来说,时钟计数器通过像素时钟来控制水平时序信号。译码计数器的值产生HS信号。在指定的行,计数器产生当前像素显示的位置。

一个独立的计数器产生垂直时序信号。垂直同步计数器在每个HS脉冲信号来临时自动加1,译码值产生VS信号。计数器产生当前显示行。这两个计数器从地址到显示缓冲器连续计数。例如,入门实验板的DDR SDRAM 提供了一个足够的显示缓冲区。

在HS脉冲的开始和VS脉冲的开始没有具体规定相对的时序关系。因此,计数器被分配到简单格式的视频RAM地址,或分配到同步脉冲产生器的最小译码逻辑。

UCF Location Constraints

图6.4提供了VGA显示端口的UCF约束,包括I/O口管脚分配和I/O口使用标准,输出摆率和输出驱动电流。

 

7.jpg

现在回头看看其实资料已经非常详细了,只不过自己的理解能力有限,浪费了许多不需要浪费的时间,可能这是每个人都需要经过的阶段吧,说一下在做这儿实验的过程中自己遇到的一些问题和解决的办法,还有以及自己的理解。

    资料中用的显示屏是CAT类型的,当然LED也兼容CAT的协议,其次就是分辨率的问题资料中是640 X 480,刷新频率是60HZ,(简单的说就是图像更新的时间是1/60s)像素时钟是25MHZ,我们的板子时钟是50MHZ所以要进行一个二分频,下面是我的模块,一个顶层模块,一个分频模块,一个vga显示的模块,我是直接把代码下载到FPGA中所以只有这三个模块,毫无疑问分频模块是为了将板子上50MHZ的时钟信号分频为25MHZ的时钟信号对于VGA显示的模块,我感觉可以划分为这么几个小的模块:计数(包括行和列)、有效区域(包括有效区域的定义和规定有效区域的坐标)、信号的产生、需要显示的内容。

由上面的6-2表可以看到行计数应该记到799,列计数应该记到520,行计数到799之后,也就是说第一行扫描完之后,垂直方向才开始计数。换的说法就是说行记到799,列方向加1。列方向直到记到520的时候才是一帧(也就是1/60S),每一行完成相应就会有一段时间的低电平,6-2表中已经给出,每一帧结束也会有低电平这段低电平的时间是两个行周期,也就是64us在6-2表也已经给出。

有效区域是指640X480的那段区域,开始扫描,最开始的一段时间是无效的这段无效的时间是Tpw和Tbp的和6-2的表中可以得到,然后就是定义一个新的坐标系,这个心的坐标系是针对有效区域来建的,接着就是同步信号的产生,接着就是你要在显示屏中显示的区域。

至于仿真,挺简单的,因为顶层模块中只有clk和rst两个信号,所以会很简单我用的ISE自带的仿真器Isim8.jpg

放大之后

 

9.jpg

在这里分享一篇关VGA显示的文章名字叫《基于FPGA的VGA显示控制设计论文》写的挺好的!
 

文章评论5条评论)

登录后参与讨论

用户452411 2013-10-28 13:22

通俗易懂,但内容太浅了

用户437896 2013-10-23 19:43

有些内容写的太通俗,太简单,共同进步吧

1634090993_696409884 2013-10-23 15:56

简单了解一下!谢谢分享!

用户437896 2013-10-21 15:27

刚刚修改了一下,加上了

用户403664 2013-10-21 09:58

图片不见了?
相关推荐阅读
用户437896 2013-10-29 19:25
如果你到了20岁 ,还没到25岁。
           无意中看到的一篇文章,觉得写的挺好,分享给大家。         如果你已经过了20岁但还不到25岁的话,你必须找到除了爱情之外,能够使你用双脚坚强站在大地上的东西。...
用户437896 2013-10-25 14:45
FPGA学习步骤
       网上看到的这样一篇文章,觉得挺有道理。       FPGA在目前应用领域非常,在目前的单板设计里面,几乎都可以看到它的身影。从简单的逻辑组合,到高端的图像、通信协议处理,从单片...
用户437896 2013-10-24 18:29
RS232实验
        今天挺冷啊,早上听一姐们说“我自己不说冷,谁知道姐姐我冷”,我笑了,冷暖自知不就这样吗?来到实验室,师哥问我“冷不?穿秋裤了吗?”我说“我没秋裤”,师哥看了我一眼就走开了。实验...
用户437896 2013-10-22 10:29
晶体管概述
  这里大体说一下晶体管,不做深究,最近还在看板子的原理图,模电数电的知识有点生疏,所以在这些方面还得看一下,我的原则是用到什么就看什么,这里简单的说一下晶体管。 晶体管是半导体器件,既可...
用户437896 2013-10-22 09:56
chipscope的使用
        好吧,作为已经学了一段时间FPGA的“菜鸟”级同学,我开始写博文了,看过特权同学的书,看过特权同学的文章,看过特权同学的视频,当然也视频中听到过特权同学的声音,可以说特权同学对自己...
用户437896 2013-10-22 09:56
状态机
  状态机 这些天一直跟状态机打交道,所以来说一下状态机,说的不对的地方希望大家多多指正。状态机就是状态转移图。举个最简单的例子。人有三个状态健康,感冒,康复中。触发的条件有淋雨(t1),...
我要评论
5
8
关闭 站长推荐上一条 /2 下一条