vga接口设计原理及实现

接口/总线/驱动

50人已加入

描述

  VGA(Video Graphics Array)视频图形阵列是IBM于1987年提出的一个使用模拟信号的电脑显示标准。VGA接口即电脑采用VGA标准输出数据的专用接口。VGA接口共有15针,分成3排,每排5个孔,显卡上应用最为广泛的接口类型,绝大多数显卡都带有此种接口。它传输红、绿、蓝模拟信号以及同步信号(水平和垂直信号)。

  vga接口原理

  常见接口之色差VGA接口(D-Sub接口)

  说到VGA接口,相信很多朋友都不会陌生,因为这种接口是电脑显示器上最主要的接口,从块头巨大的CRT显示器时代开始,VGA接口就被使用,并且一直沿用至今,另外VGA接口还被称为D-Sub接口。

  很多人觉得只有HDMI接口才能进行高清信号的传输,但这是一个大家很容易进入的误区,因为通过VGA的连接同样可以显示1080P的图像,甚至分辨率可以达到更高,所以用它连接显示设备观看高清视频是没有问题的,而且虽然它是种模拟接口,但是由于VGA将视频信号分解为R、G、B三原色和HV行场信号进行传输,所以在传输中的损耗还是相当小的。

  

  15针VGA接口引脚(4张)

  VGA接口产生原因: 显卡所处理的信息最终都要输出到显示器上,显卡的输出接口就是电脑与显示器之间的桥梁,它负责向显示器输出相应的图像信号。CRT显示器因为设计制造上的原因,只能接受模拟信号输入,这就需要显卡能输出模拟信号。VGA接口就是显卡上输出模拟信号的接口,VGA(Video Graphics Array)接口,也叫D-Sub接口。虽然液晶显示器可以直接接收数字信号,但很多低端产品为了与VGA接口显卡相匹配,因而采用VGA接口。

  vga接口设计原理

  基于CRT的VGA显示使用了幅度调制的方式来移动电子束(阴极射线)在涂有荧光粉层的屏幕上显示信息。彩色CRT显示使用了三个电子束(红、蓝、绿)对阴极射线管顶端显示屏内部的荧光图层施加能量。电子枪产生电子束,其工作原理是由灯丝加热阴极,阴极发射电子,然后在加速极电场的作用下,经聚焦极聚成很细的电子束,在阳极高压作用下,获得巨大的能量,以极高的速度去轰击荧光粉层。

  这些电子束轰击的目标就是荧光屏上的三原色。为此,电子枪发射的电子束不是一束,而是三束,它们分别受电脑显卡R、 G、 B三个基色视频信号电压的控制,去轰击各自的荧光粉单元。受到高速电子束的激发,这些荧光粉单元分别发出强弱不同的红、绿、蓝三种光。根据空间混色法(将三个基色光同时照射同一表面相邻很近的三个点上进行混色的方法)产生丰富的色彩,这种方法利用人们眼睛在超过一定距离后分辨力不高的特性,产生与直接混色法相同的效果。用这种方法可以产生不同色彩的像素,而大量的不同色彩的像素可以组成一张漂亮的画面,而不断变换的画面就成为可动的图像。

  利用了人们眼睛的视觉残留特性和荧光粉的余辉作用,这就是即使只有一支电子枪,只要三支电子束可以足够快地向所有排列整齐的像素进行激发,人们还是可以看到一幅完整的图像的。现在的CRT显示器中的电子枪能发射这三支电子束,然后以非常非常快的速度对所有的像素进行扫描激发。

  要形成非常高速的扫描动作,还需要偏转线圈(Deflection coils)的帮助,通过它可以使显像管内的电子束以一定的顺序,周期性地轰击每个像素,使每个像素都发光,而且只要这个周期足够短,也就是说对某个像素而言电子束的轰击频率足够高,人们就会看到一幅完整的图像。把这种电子束有规律的周期性运动叫扫描运动。

  因为有大量排列整齐的像素需要激发,必然要求有规律的电子枪扫描运动才显得高效,通常实现扫描的方式很多,如直线式扫描,圆形扫描,螺旋扫描等等。其中,直线式扫描又可分为逐行扫描和隔行扫描两种,事实上,在CRT显示系统中两种都有采用。逐行扫描是电子束在屏幕上一行紧接一行从左到右的扫描方式,是比较先进的一种方式。而隔行扫描中,一张图像的扫描不是在一个场周期中完成的,而是由两个场周期完成的。在前一个场周期扫描所有奇数行,称为奇数场扫描,在后一个场周期扫描所有偶数行,称为偶数场扫描。无论是逐行扫描还是隔行扫描,为了完成对整个屏幕的扫描,扫描线并不是完全水平的,而是稍微倾斜的,为此电子束既要作水平方向的运动,又要作垂直方向的运动。前者形成一行的扫描,称为行扫描,后者形成一幅画面的扫描,称为场扫描。

  典型的,视频数据是来源于视频刷新存储器,给每个像素位置分配一个或多个字节(Nexys2板子一个像素使用了3比特)。当电子束穿过显示屏时,控制器必须索引视频存储器,并且恢复和应用视频数据在准确的时间来显示。

  基于像素时钟,VGA控制器必须产生HS和VS时序信号,并配合视频数据的传输。像素时钟定义了用于显示一个像素信息的时间。VS信号定义了显示的刷新频率。刷新频率是显示图层和电子束密度的函数,实际上的刷新频率在50Hz到120Hz范围。在给定的刷新频率下的显示的行定义了水平“折回”频率。对于640像素和480行的显示模式使用了25MHz的像素时钟和60+/-1Hz的刷新频率。图6.1给出了信号的时序图,表6.1给出了VGA相对应的时序参数

  VGA

  VGA显示设计原理

  1.图像存储原理

  该设计将使用核产生器生成的块ROM存储器来存储图片,并在VGA显示器上进行显示。图片的大小为240x160像素,图片的名字为loons240x160.jpg。

  为了显示图片,必须先将JPAG格式的图片转换为相应的loons240x160.coe文件,这个转换过程是使用matlab函数IMG2coe8(imgfile,outfile)实现的。注意这个函数产生的.coe文件为每个图形像素包含8位的字节信息,其格式为:

  [R2,R1,R0,G2,G1,G0,B1,B0]

  读入Matlab函数的原始图像包含8位的红色,8位的绿色,8位的蓝色,存储在.coe文件的图像包含3位的红色,3位绿色和2位的蓝色。这种转换是和Nexys2板子的8位VGA颜色的硬件设计是相对应的,其图像质量必然降低。

  2.设计结构

  图6.2给出了设计的结构图,从图中可以看出该设计由clkdiv模块,vga_640x480模块,loons240x160模块和VGA_bsprite模块构成。

  VGA

  设计的输入信号包含:

  1)btn(3):板上的按键输入信号,系统清除信号; 2)mclk:板上50MHz的输入信号,系统时钟输入信号; 3)sw(7:0):板上的拨码开关输入信号, 设计的输出信号包含:

  1)hsync:行同步信号,提供给VGA显示器接口; 2)vsync:垂直同步信号,提供给VGA显示器接口;

  3)red(2:0):3位红色输出信号,经电阻网络变换后提供给VGA显示器接口; 4)green(2:0):3位绿色输出信号,经电阻网络变换后提供给VGA显示器接口; 5)blue(1:0):2位蓝色输出信号,经电阻网络变换后提供给VGA显示器接口; 3.图像存储和寻址原理

  产生的.coe文件将包含240x160=38,400个字节。ROM地址的计算: rom_addr16=ypix*240+xpix

  其中xpix和ypix是图像本地像素的位置,在实现该乘法时,使用移位相加的算法: ypix*240=ypix*(128+64+32+16);

  红,绿和蓝输出从loon240x160ROM M[7:0]输出,其地址是根据上面的等式计算得到。

  设计实现和验证

  1.打开ISE10.1,新建工程vga,设计参数选择:芯片选择Spartan3E XC3S1200E-4FG320,顶层设计选择HDL,仿真器选项选择Xilinx ISE Simulator。

  2.新建名字为vga_bsprite,类型为VHDL module的设计文件,完成设计代码输入。 3.新建名字为clkdiv,类型为VHDL module的设计文件,完成设计代码输入。 4.新建名字为vga640x480,类型为VHDL module的设计文件,完成设计代码输入。 5.使用IMG2coe8.m(matlab程序),将图片转换为.coe文件(ROM核需要的保存象素信息的XILINX的存储文件格式)。

  6.新建名字为loons240x160,类型为IP(Core Generator & Architecture Wiazrd)的设计文件,在RAM & ROM中选择ROM,宽度为8,深度为38400。

  7.在处理窗口中,选择并点击Synthesis,工程进行语言检查和综合,确认设计正确。 8.新建文件名为vga_bsprite_top,类型为Implementation Constraints File用户约束文件vga_bsprite_top.ucf。使用Nexys2板卡上的50MHz时钟作为mclk输入,拨码开关SW(7:0)作为sw(7:0)的输入,hsync,vsync,red,green,blue分别和VGA接口的行同步、垂直同步、红色、绿色和蓝色信号连接。按照板子设计在vga_bsprite.ucf文件完成引脚位置约束,保存并关闭该文件。

  9.在管理窗口中双击Implement Design选项,完成设计实现;

  10.在管理窗口中右键点击Generate Programming File,选择属性Properities,在Startup Option标签栏中的FPGA Startup Clock选择JTAG。

  11.在管理窗口中双击Generate Programming File,生成比特流文件;

  12.将Nexys2板卡和VGA显示器连接,并上电后,在管理窗口中双击Configure Target Device,出现配置界面,选择配置文件并下载到芯片中,确认下载成功。

  13.对设计进行调试和验证。

  设计代码

  1.vga_bsprite.vhd代码 library IEEE;

  use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;

  entity vga_bsprite is port (

  vidon : in std_logic;

  hc : in std_logic_vector(9 downto 0); vc : in std_logic_vector(9 downto 0); M : in std_logic_vector(7 downto 0); sw : in std_logic_vector(7 downto 0); rom_addr16 : out std_logic_vector(15 downto 0);

  red : out std_logic_vector(2 downto 0); green : out std_logic_vector(2 downto 0); blue : out std_logic_vector(1 downto 0) );

  end vga_bsprite;

  architecture Behavioral of vga_bsprite is

  constant hbp: std_logic_vector(9 downto 0) := “0010010000”; --Horizontal back porch = 144 (128+16) (96+48) constant vbp: std_logic_vector(9 downto 0) := “0000011111”; --Vertical back porch = 31 (2+29) constant w: integer := 240; constant h: integer := 160;

  signal xpix, ypix: std_logic_vector(9 downto 0); signal rom_addr : std_logic_vector(16 downto 0); signal C1, R1: std_logic_vector(9 downto 0); signal spriteon, R, G, B: std_logic; begin

  --set C1 and R1 using switches

  C1 《= ‘0’ & SW(3 downto 0) & “00001”; R1 《= ‘0’ & SW(7 downto 4) & “00001”; ypix 《= vc-R1 when vc》=R1 and vc《R1+h xpix 《= hc-C1 when hc》=C1 and hc《C1+w

  spriteon 《= ‘1’ when (((hc 》= C1 ) and (hc 《 C1 + w)) and ((vc 》= R1 ) and (vc 《 R1 + h))) else ‘0’;

  process(xpix, ypix)

  variable rom_addr1, rom_addr2: STD_LOGIC_VECTOR (16 downto 0); begin

  rom_addr1 := (ypix & “0000000”) + (‘0’ & ypix & “000000”) + (“00” & ypix & “00000”) + (“000” & ypix & “0000”); -- y*(128+64+32+16) = y*240

  rom_addr2 := rom_addr1 + (“00000000” & xpix); -- y*240+x rom_addr16 《= rom_addr2(15 downto 0);

  end process;

  process(spriteon, vidon, M) begin

  if (spriteon = ‘1’ ) then

  red 《= M(7 downto 5); green 《= M(4 downto 2); blue 《= M(1 downto 0); end if; end process; end Behavioral;

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分