原创 VHDL实现VGA接口设计

2007-12-4 11:51 4973 12 14 分类: FPGA/CPLD
1、    输入信号 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


   clk : 时钟(每个象素点的显示时钟)


   reset : 复位信号


2、    输出信号


    vga_hs_control                   :      行同步  


        vga_vs_control                   :      场同步 ;


        vga_read_dispaly               :     


        vga_green_dispaly              :      绿


        vga_blue_dispaly       :  


3、    技术参数


clk : 24M   hs : 30KHZ   vs : 57.14HZ


 


   设计原理


VGA( 视频图形阵列 ) 作为一种标准的显示接口得到广泛的应用 , 一般有专用芯片,本实验采用 FPGA( 现场可编程门阵列 ) 设计 VGA 接口可以将要显示的数据直接送到显示器,节省了计算机的处理过程,加快了数据的处理速度,节约了硬件成本。


显示适配器有多种形式,它可按照所符合的视频显示标准来分类,业界制定了多种显示标准,从最初的 MDA 经历了 CGA EGA VGA XGA,SVGA 等的发展过程。与相应的显示适配器标准相配的显示器也称之为 EGA VGA XGA 显示器等。实际上显示器的标准主要反映在它们的接口,显示功能和行,场工作频率上。


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />



 

CRT 显示器的扫描方式


(1)    当栅扫描方式 从上向下依次顺序扫描


完一场称逐行扫描。一行用行频控制( hs ,


一场用场频控制( vs )。扫完一行回来叫行消


隐,扫完一场回来叫场消隐


(2)    随机扫描方式


 


VGA 接口标准


时钟频率: 25 175 MHz( 像素输出的频率 ) ;行频: 31. 469 Hz ;场频: 59 94 Hz  


 


设计 VGA


设计 VGA 图像显示控制需要注意两个问题 L2] :一个是时序的驱动,这是完成设计的关键,时序稍有偏差,显示必然不正常,甚至会损坏彩色显示器;另一个是 VGA 信号的电平驱动。显示控制器设计提示:显示器技术规格提供的行频一般在 30 kHz 45 kHz( 保守数据 ) ,场频一般在 50 Hz 75 Hz( 保守数据 ) 。针对以上保守数据,设计分辨率为 640x480 的显示接口(如图 4 所示),以 30 kHz 的行频进行扫描时所需时钟频率为: 30 kHz × 800( 行周期 )=24 MHz ,则场频为: 30 kHz ÷ 525( 场周期 )=5.14 Hz 。本实验实现在显示器上显示彩条的设计,初始时时 GRB= 000 ”,用一记数器过一段时间使 R 取反,即变为红色。这样就有黑、红彩条了。
点击看大图


 


 


 


 




 


             绿                         


R


G


B


 0   0   0     0    1    1   1   1


 0   0   1     1    0    0   1   1


 0   1   0     1    0    1   0   1              


 


实验验证


1、 仿真时序图


点击看大图


 


2、 验证平台及芯片


Xilinx 公司的 Xilinx Project Navigate


下载芯片为: Xilinx Sparan2/xsc200


  小结


1、  技术难点


显示器显示原理、 VGA 接口原理的理解


       2 、设计技巧


3 、不足或改进措施


不足:功能单一(彩条显示)


改进:添加字符显示、图象显示、图形显示模块


   参考资料


1 蒋本珊. 计算机组成原理与系统结构 北京航空航天大学出版社 p192-p198


2 陈姚节 卢建华. 基于FPGA的VGA显示接口的研究与设计


   源程序



 


library ieee;


use ieee.std_logic_1164.all;


USE ieee.std_logic_unsigned.all;


use ieee.std_logic_arith.all;


entity vga is


       port(


              reset                                   :      in     std_logic;


              clk                              :      in  std_logic;


              vga_hs_control                    :      out std_logic;


              vga_vs_control                    :      out std_logic;


              vga_read_dispaly          :      out std_logic;


              vga_green_dispaly         :      out std_logic;


              vga_blue_dispaly           :      out std_logic         


       );


end vga; 


ARCHITECTURE a OF vga IS


       SIGNAL hs: STD_LOGIC;


       SIGNAL vs: STD_LOGIC:='1';


    SIGNAL GRB: STD_LOGIC_VECTOR(2 DOWNTO 0);


BEGIN


PROCESS (clk) --clk = 24MHZ  hs = 30 Khz vs = 57hz


       VARIABLE i    :      integer range 0 to 799:=0;


       VARIABLE j    :      integer range 0 to 79:=0;


BEGIN


 if reset = '1' then


   GRB <= "000"; i:=96; j:=0;  hs <= '1';


       elsif clk'event and clk = '1'  then


         if i < 96 then


            hs <= '0';


         elsif i = 799 then


            i:=0;


         else


            hs <= '1';


         end if;


         if j = 79 then


            GRB(1) <= not GRB(1);


            j:=0;


         end if;


         i:=i+1;


         j:=j+1;              


       end if;


       vga_hs_control <= hs; 


END PROCESS ;


PROCESS (hs)


VARIABLE k   :      integer range 0 to 524:=0;


BEGIN


if reset = '1' then


   k:=2; vs <= '1';


       elsif hs'event and hs = '1' then


           if k < 2 then


              vs <= '0';


           elsif k = 524 then


              k:=0;


           else


              vs <= '1';


           end if;


           k:=k+1;


         end if;


  vga_vs_control <= vs; 


END PROCESS ;


 


PROCESS (clk)


BEGIN


       if clk'event and clk = '1' and vs = '1' and hs ='1' then


              vga_green_dispaly <= GRB(2);


           vga_read_dispaly  <= GRB(1);


              vga_blue_dispaly  <= GRB(0);                
         
end if;


END PROCESS ;


       END a;

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2012-6-8 15:03

时钟信号是20MHz行不?另外,现在宽屏液晶显示器能不能用?

用户23376 2008-4-2 09:23

正在学习中。要是有IDE接口的就好了!
相关推荐阅读
用户472938 2011-09-02 11:31
edn啊,太慢了。决定搬家了
这里继续保留,而且同步更新...
用户472938 2011-02-25 09:54
一年多了,冒个泡
更新一下...
用户472938 2010-09-18 19:39
总要找一些事情做一做
总要找一些事情做一做。转移一下注意力继续收拾家,逐渐的处理闲置的电子产品。东西挺多的,时间会很久。以前一直没时间走走,打算从事户外运动了,一是锻炼身体,而是放松心情。。。 ...
用户472938 2010-02-07 15:23
二手ks0108驱动19264液晶资料
型号:LG192642资料下载地址http://www.ganasys.co.kr/kor/support_board/pds_file/LG192642.pdf...
用户472938 2010-02-07 15:22
12232液晶资料
 edm1836液晶edm1837液晶原理图 ...
用户472938 2010-02-07 15:21
fm收音机模块(tea5767模块)资料。
...
EE直播间
更多
我要评论
2
12
关闭 站长推荐上一条 /3 下一条