您的位置 首页 国产IC

运用FPGA 操控VGA 显现

显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备。在 FPGA 的设计中可以使用很少的资源,就产生 VGA 各种控制信号。这个示例在 RHicSP2200B FPGA

显现器由于其输出信息量大,输出形式多样等特色现已成为现在大多数规划的常用输出设备。在 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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/196940.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部