集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1832|回复: 4

vga显示

[复制链接]
zxopenchenxi 发表于 2021-4-8 19:05:13 | 显示全部楼层 |阅读模式
近年来FPGA越来越多的应用于图像处理领域。我们先了解一下图像处理的基础课题,图像的显示。显示器在接收图像信号时有多种接口,例如DVI,HDMI,VGA等。在做图像显示之前,我们先了解一些基础知识。
/ J% g# @% j! X) }; u+ q+ y
VGA
& R4 N( R6 t( R; W6 m& X
VGA(Video Graphics Array 视频图形阵列)是IBM 于1987年提出的一个使用模拟信号的电脑显示标准。VGA是最多制造商所共同支持的一个标准。个人电脑在加载自己的驱动程序之前,一般都支持VGA的标准。VGA接口即电脑采用VGA标准输出数据的专用接口。VGA接口共有3排共15针,其中需要FPGA编程控制的只有5个信号,即R(红)、G(绿)、B(蓝)、HS(水平同步信号)、VS(垂直同步信号)。6 [; t  E9 s' c
- {. C; ?3 C! [
RGB7 M/ s: m/ V* M
  @9 A3 I% F) X5 h
RGB (red、green、blue)即三基色,是色彩系统的一种。色彩系统是一种常用的表示颜色的方式。应用于计算机屏幕,分别有:RGB色彩系统、CMYK色彩系统、YIQ色彩系统、YUV色彩系统、YCbCr色彩系统等。根据人眼的结构,所有颜色都可看成是三个基本颜色——红(R),绿(G),蓝(B)的不同组合。在实际中用的最多的是RGB系统。7 Z1 K" B8 m: `. S

计算机屏幕的显示通常用的是这种系统。使用画图软件或PS软件时,特别是在保持图片时,经常被要求选择图片保存的格式,例如24位色或256色的等,这是什么意思呢?RGB颜色系统使用红绿蓝的不同组合来表示千万种色彩,其中红绿蓝有不同的比例,例如将红色从最淡到最红分成256个等级,如果每一级用一个数字来表示,则256级就需要一个8位位宽的二进制数来表示。同样,绿色,蓝色也可以这么划分。& `3 I" b( |: T& \" K$ n
5 w' s2 p& ~- h( W$ i5 G
这样的话,就需要使用3个8位位宽的二进制数来表示,即RGB888,也就是24(8+8+8)位色。24位色,所能表示的颜色数量为2^24 = 1677,7216种,相近颜色的区别可以很小,已经超过了人眼睛的辨识能力,所以也叫真彩色(人眼大约能辨识100万种颜色)。256色指的是图片只使用256种颜色来表示。可以是rgb233或rgb332。

显示分辨率

显示分辨率。显示分辨率也称为像素分辨率,简称为分辨率,它是指可以使显示器显示的像素个数,通常用每行像素数乘每列像素数,例如:1024×768,表示显示器可以显示768行,1024列,共可显示786432个像素;分辨率为640×480,表示显示器可以显示480行,640列,共可显示307200个像素。

显然,分辨率越高,显示屏可显示的像素就越多,图像就越清晰。每个显示器都有自己的最高分辨率,并且可以兼容其它较低的显示分辨率,所以一个显示器可以用多种不同的分辨率显示。+ T9 O. Q1 y8 Y$ S+ V6 B& [3 {

PPI
; K! B# b. a/ l/ @0 @- e
PPI。(Pixels Per Inch)即像素密度,所表示的是每英寸所拥有的像素数量。因此PPI数值越高,即代表显示屏能够以越高的密度显示图像。当然,显示的密度越高,拟真度就越高。3 `/ Y; I( x* }

多年前买手机的时候能听到一个词,“视网膜屏”,即分辨率超过人眼识别极限的高分辨率屏幕。视网膜(Retina)屏幕是手机公司”发明”的一个营销术语。屏幕的像素密度达到326像素/英寸(ppi),称之为“视网膜屏幕”。! o7 x) Q$ z& O
* P4 Z2 d: i/ \3 }/ K  `/ ]
刷新原理9 [. U( [* b. n" i3 H
/ o) T  k& `# P- x0 x# Y8 r- v6 ?7 y
显示器刷新原理。我们看到的显示屏的区域在刷新操作里叫做“显示区域”,但刷新操作会刷新一个比这显示区域要大的区域,整个被刷新或者扫描的区域叫做“扫描区域”。
( Z, C7 I8 `% C, c/ I/ j
扫描操作将整个行分成多个段,分别为水平同步段、扫描后沿、左边框(多数已经没有)、显示区域、右边框(多数已经没有)、扫描前沿,(垂直方向划分为垂直同步、扫描后沿、顶边框(多数已经没有)、显示区域、底边框(多数已经没有)、扫描前沿),这些段的长度在不同显示格式下不等,具体数值可以通过VESA的标准来查询。
$ R/ B/ d+ S" j" K2 G$ C
扫描操作从扫描区域的最左上角开始,一直向右扫描,遇到HSYNC为高时(也就是一行扫描完毕),扫描点回到最左边,开始新一行的扫描。这样一行一行往下扫描,当遇到VSYNC为高时(也就是一场扫描完毕),扫描点回到最开始位置。显示频率为60Hz时,每秒刷新60场。( s% R1 a# T' r. c/ d  s
& q% x) d5 W) u0 g/ [
文字显示原理( q# D. E* S8 f7 u

文字显示原理。文字的显示,其实也是把文字当做图片,一个像素点一个像素点的来输出。
8 t8 L- Z4 F% U$ [5 d
如果对正方形内字符的每一个像素点进行标记,哪些点应该显示白色,哪些点应该显示黑色,那么就可以在vga输出的时候,输出对应像素点的颜色值,也就能输出这个文字。. a" [" x; q- d2 r* g

如何得到这个字的像素点颜色值呢?这儿我们可以使用一些工具,比如“PCtoLCD2002”这个软件。7 B+ W2 E) R, e1 ]
4 o8 V2 ~# e8 h  N

VGA显示
4 n5 P$ C2 s/ W
VGA显示部分主要要做的是:: V: y# R  H% h9 `
1、取得字模,包括0-9,和“:” 共10个字符
2、将字模按一定格式存入ROM。我在工程里使用的是128X64(高X宽)的字模,ROM中每个地址存字符的一行,也即ROM的位宽是64bit。但为了查询方便,并没有直接将字模依次存放进去,而是采用了如下的存放方法:
$ i3 [! U& M' p8 ~- l" _
工程中我们取字模的时候,首先判断需要取哪个字符的字模,然后先查询到字模的首地址,再根据首地址依次加1来取出其他行的字模。这是因为VGA输出的时候,是一行行扫描的,也就是说字模需要一行行给出。这部分是整个项目的重难点,大家可以参考 《lookup_rom》模块的内容。  p4 u; D5 f6 }5 v1 r: Y

3、改动VGA模块,使得可以输出显示区域的坐标XY值。也就是,当VGA扫描到显示区域的时候,把显示区域,也就是显示屏,的当前坐标输出出来。

4、控制模块。控制模块要根据VGA输出的XY值,以及字符想要显示的初始位置,确定要从rom中取哪个字符哪一行的字模。代码中当扫描到需要显示字符的那一行时,依次取出8个字符的所有该行要显示的字模,(比如,要显示的时间是 23:59:59,vga显示某一行时只需取8个字模里的同一行,其他行在vga扫描其他行的时候再取)。取出的字模拼接在一起,当X坐标到达位置的时候给出颜色值。
fly_zxopen 发表于 2021-4-8 21:02:00 | 显示全部楼层
vga显示vga显示vga显示vga显示vga显示vga显示
zxopenluyutong 发表于 2021-4-9 09:58:57 | 显示全部楼层
vga显示vga显示
zhangyukun 发表于 2021-4-9 10:37:13 | 显示全部楼层
vga显示   
zxopenfq 发表于 2021-4-12 16:09:56 | 显示全部楼层
66666666666666666666
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-16 09:10 , Processed in 0.558136 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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