搜索
bottom↓
回复: 10

发一个利用FPGA驱动VGA显示屏的思路,附带伪代码

[复制链接]

出0入0汤圆

发表于 2014-3-19 20:57:32 | 显示全部楼层 |阅读模式
废话少说

首先,我们先来了解一下VGA屏幕的工作原理,我现在手头上有的是640X480的显示屏。显示屏现在的现实原理是利用像素点在三基色的不同搭配而形成现实各种颜色的效果。

详细顶来说就是首先像素点的概念,每一个像素点都有可以接受三个信号即RGB信号。R代表红色,G代表GREEN,B代表BLUE。这三中颜色被称为三基色。利用这三种颜色的不同组合可以拼接成所有的颜色。而我们所需要控制的就是这三种颜色的比例。按照惯例,这三种颜色的信号位宽分别为5,6,5即两位8BIT的数据来描述。一共需要16BIT数据来描述一个像素点。所以,对于一个640X480的显示屏来说,就有640X480X16位数据在一帧里面被现实出来。

对于显示屏来说,显示屏也不过是利用行扫描和场扫描来不断刷新显示屏。具体来说有两种方式。分别是逐行扫描和隔行扫描。逐行扫描就是电子束从左向右逐点扫描。每扫描完一行。电子束会回到下一行的起始位置准备下一行扫描。但是与此同时,CRT会进行消影操作,每行结束后用行信号开始行同步。扫描完所有的行以后就是一帧,这时候用场信号进行场同步。并且电子束回到起始位置,同时进行场消影。

     下面我们开始VGA的时序分析。VGA时序很简单。
对于图1来说首先将行信号拉低a事件段以后再拉高,持续b时间段之后下面就是有效时间c。结束之后还有时间d这些都是可以通过数据手册查到的。



对于图2,我们之前先把VSYNC信号拉低,低电平持续时间为o在o时间段以后再拉高,在保持p时间以后就是数据有效段。时间段为q之后位时间段r。


对于这个我们可以设置一个计数变量,比如v_cnt和h_cnt。对于这两个常量可以让它们从一开始即开始计时,

还有来自内存的数据操作

伪代码:时序代码
if(h_cnt<h_a)
HSYNC = 0
else if
HSYNC = 1

if (v_cnt<v_o)
VSYNC = 0
else if
VSYNC = 1

然后我们利用内部资源虚拟一个RAM然后把RAM初始化数据再从中读出数据,这个RAM的大小为19200X16所以只能存取19200个像素点的信号,大概也就是120X160个数据
然后对于现实时序来说,应该是这样的。
伪代码
if (h_cnt > h_a+h_b+h_c+h_d-1)
  h_cnt = 0;
else if
h_cnt ++;

if(h_cht == 0)
if (v_cnt >h_o+h_p+h_q+h_f-1)
v_cnt =0
else if
v_cnt++


然后就是现实模块。首先,
if (v_cnt >=v_o+v_p && v_cnt <=v_o+v_p+120)
if(h_cnt >= h_a+h_b && h_cnt <= h_a+h_b+160)
    RGB = black
else if
   RGB = black
else
RGB = rdata;

接着是内存读取部分
if (v_cnt >=v_o+v_p && v_cnt <=v_o+v_p+120)
if(h_cnt >= h_a+h_b && h_cnt <= h_a+h_b+160)
if (address > 19200)
     address =0;
else
address ++;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2014-3-19 21:00:07 | 显示全部楼层
自己随手写的。很多地方不严谨,希望各路大神不要喷我

出0入0汤圆

发表于 2014-3-21 11:36:50 来自手机 | 显示全部楼层
先顶一个

出0入0汤圆

发表于 2014-3-28 17:22:03 | 显示全部楼层
数据的来源哪里?

出0入0汤圆

 楼主| 发表于 2014-3-29 18:33:40 | 显示全部楼层
本帖最后由 cxhy 于 2014-3-29 18:35 编辑
MamBa_24 发表于 2014-3-28 17:22
数据的来源哪里?


请问你问的是伪代码还是时序图?
伪代码参考 论坛里面别人的代码自己补上的,时序图和资料来自于网上。

出0入0汤圆

发表于 2014-3-30 00:17:29 | 显示全部楼层
cxhy 发表于 2014-3-29 18:33
请问你问的是伪代码还是时序图?
伪代码参考 论坛里面别人的代码自己补上的,时序图和资料来自于网上。 ...

我是说,你图片的数据从何提取?

出0入0汤圆

发表于 2014-3-30 00:20:46 | 显示全部楼层
图片的时序,是我画的

出0入0汤圆

 楼主| 发表于 2014-3-30 22:34:42 | 显示全部楼层
MamBa_24 发表于 2014-3-30 00:17
我是说,你图片的数据从何提取?

自己生成的,然后放到RAM里面。直接读出来

出0入0汤圆

 楼主| 发表于 2014-3-30 22:37:11 | 显示全部楼层
aureole 发表于 2014-3-30 00:20
图片的时序,是我画的

你是说你09年发的那个帖子吧?那个文档我看了。写的真棒。

出0入0汤圆

发表于 2014-5-17 15:05:47 | 显示全部楼层
前面描述写的还行,再具体点就好了

出0入0汤圆

发表于 2014-5-19 02:58:05 来自手机 | 显示全部楼层
mark!PPT...
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 03:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表