首页 » 业界动态 » 使用 FPGA 控制 VGA 显示

使用 FPGA 控制 VGA 显示

作者:  时间:2009-06-20 17:01  来源:
显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备。在  FPGA  的设计中可以使用很少的资源,就产生  VGA 各种控制信号。这个示例在 RHicSP2200B  FPGA  开发板/学习板上使用  VGA  接口在显示器上显示了文字以及简单的图形,可以作为VGA 显示设计的参考,如果在使用这个例子的过程中有任何问题都可以通过邮件 
 
说明:有效时间包括  6  列过扫描边界列,有些时序表将这几列加在后沿和前沿中
表 2  垂直时序


说明:有效时间包括  4  行过扫描边界行,有些时序表中将这几行加在后沿和前沿中。

*当有效时间增加时,它超过了 vsync 信号的上升沿,因此前沿为-1


        在实际设计中如何通过不同的系统频率确定适当的显示模式 ? 例如在 RhicSP2200  开发板中FPGA  的系统时钟频率为  50MHz。这个时钟频率可以用来设计 显示  800X600  模式,为了显示器显示效果好,采用场频(刷新频率)75Hz,那么帧长可以确定为  666,而行总长设计为  1000  像素。

       根据以上所述,我们可以设计如Examples1类似HDL代码,使用这段代码在Valid 有效期间对RGB 中 Blue 两位赋值1,得到一个蓝色屏幕显示边界如图1 所示。

      色彩原理

        RGB  色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色 通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB  即是代表红、 绿、蓝三个通道的颜色,通过三种基本颜色亮度值从 0~255 不同产生出其他各种颜色,这种模式叫加色模式。为什么叫加色模式呢,举个例子,通常使用的电视屏幕和电脑 屏幕上的显示就是这样的模式,在没有图象时,屏幕是黑的,若R,G,B 三色亮度都为255  时混合叠加打在屏幕上时则显示成白色。就是加起来是白色的意思,叫加色模式。这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之 一。

       而与我们电脑相关的地方,就是目前的显示器大都是采用了 RGB 颜色标准,这就是为什么它对我们来说这么重要了。

       在显示器上,是通过电子枪打在屏幕的红、绿、蓝三色发光极上来产生色彩的,目前的电脑一般都能显示  32  位颜色,约有一百万种以上的颜色。如果说它所显示的颜色 还不能完全吻合自然界中的某种色彩的话,那已经几乎是我们肉眼所不能分辩出来的了。

       而  RhicSP2200  开发板系统中每一个色 彩都是使 用   2bit   来 表示的,因 此可见 RhicSP2200  系统可以出现64  种不同的颜 色。其他色彩的使用请在实际工作中更多的加以体会。

      显示

        通过以上的讲述,已经可以在计算机显示器上显示一个有颜色的区域了,在这个小节中我们再举一个简单的例子,在显示器中显示两个镶嵌的正方形,字符等显示与其类似,可以参考瑞芯科技其他设计示例。 例如我们可以在 xpos 与 ypos 的某一区间给 RGB 信号赋不同的值将得到如图2 所示的显示效果。

例子  1:使用  50MHz  时钟频率产生的 VGA 同步脉冲以及视频有效信号

module sync_gen_50m(
    rst_n,// synthesis attribute clock_buffer of rst_n is ibufg;
    clk,
    
    hsync,
    vsync,
    valid,
    x_cnt,
    y_cnt
    );
input           rst_n   ;
input           clk     ;
 
output          hsync   ;
output          vsync   ;
output          valid   ;
output  [9:0]   x_cnt   ;
output  [9:0]   y_cnt   ;
 
reg             hsync   ;
reg             vsync   ;
reg             valid   ;
reg     [9:0]   x_cnt   ;
reg     [9:0]   y_cnt   ;
 
always @ ( posedge clk or negedge rst_n )
    if ( !rst_n )
        x_cnt <= 10'd0;
        else if ( x_cnt == 10'd1000 )
        x_cnt <= 10'd0;
    else
        x_cnt <= x_cnt + 1'b1;
        
always @ ( posedge clk or negedge rst_n )
    if ( !rst_n )
        y_cnt <= 10'd0;
        else if ( y_cnt == 10'd665 )
        y_cnt <= 10'd0;    
        else if ( x_cnt == 10'd1000 )
        y_cnt <= y_cnt + 1'b1;    
        
always @ ( posedge clk or negedge rst_n )
    if ( !rst_n )
        begin
            hsync <= 1'b0;
            vsync <= 1'b0;
        end
    else
        begin
            hsync <= x_cnt <= 10'd50;
            vsync <= y_cnt <= 10'd6;
        end    
 
always @ ( posedge clk or negedge rst_n )                     
    if ( !rst_n )
        valid <= 1'b0;
    else
        valid <=    ( ( x_cnt > 10'd180 ) && ( x_cnt < 10'd980) &&
                      ( y_cnt > 10'd35)   && ( y_cnt < 10'd635) ); 
                    
endmodule

相关推荐

没有退路的FPGA与晶圆代工业者

FPGA  晶圆代工  2014-01-03

曲面屏幕或成下一个显示领域前沿产品

曲面屏幕  显示  2013-12-05

技术突破:透明显示渐成气候

透明  显示  2013-11-08

柔性屏幕手机问世:韩企的“面子工程”?

柔性屏幕手机  显示  2013-10-24

采用FPGA的可编程电阻的设计结构分析

FPGA  电阻  2013-09-24

从FPGA的制程竞赛看英特尔与Fabless的后续变化

FPGA  Fabless  2013-07-16
在线研讨会
焦点