网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> EDA >> HDL >> 文章正文
  [组图]VHDL实现VGA接口设计           ★★★ 【字体:
VHDL实现VGA接口设计
作者:Free    文章来源:Free    点击数:    更新时间:2008-1-1    

1    输入信号

   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 显示器等。实际上显示器的标准主要反映在它们的接口,显示功能和行,场工作频率上。

 

 

 

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 陈姚节 卢建华. 基于FPGAVGA显示接口的研究与设计

 

   源程序

 

 

 

 

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;

 

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    国外VHDL& Verilog IP Resou…
    VHDL易忘语句语法摘要
    VHDL快速参考手册
    在FPGA中实现SPI与总线接口转…
    VHDL信号
    异步通信起始位正确检测的VH…
    FPGA驱动VGA接口的VHDL语言实…
    FPGA设计中对输入信号的处理
    《同步电路设计中clock skew…
    “单比特信号同步” 学习笔记
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号