用verilog编写fpga的vga显示(z)
VGA工业标准是640x480x60Hz,主要有5个信号,即三个颜色信号R/G/B、行同步信号HS和场同步信号VS。
它是从左上角开始一行接一行的扫描,扫描完一屏后又回到左上角扫描。
标准要求是场频59.94Hz,行频31469Hz,时钟频率25.175MHz
这是Altera的DE2开发板上自带的演示程序。可以先搜一下VGA工业标准的时序图,再看这个代码就会很简单,
就不注释了。弄清楚行同步、场同步、前肩、后肩,一切都easy
module VGA_Controller( // Host Side
iRed,
iGreen,
iBlue,
oRequest,
// VGA Side
oVGA_R,
oVGA_G,
oVGA_B,
oVGA_H_SYNC,
oVGA_V_SYNC,
oVGA_SYNC,
oVGA_BLANK,
oVGA_CLOCK,
// Control Signal
iCLK,
iRST_N );
`include "VGA_Param.h"
// Host Side
input [9:0] iRed;
input [9:0] iGreen;
input [9:0] iBlue;
output reg oRequest;
// VGA Side
output [9:0] oVGA_R;
output [9:0] oVGA_G;
output [9:0] oVGA_B;
output reg oVGA_H_SYNC;
output reg oVGA_V_SYNC;
徐田龙子output oVGA_SYNC;
output oVGA_BLANK;
output oVGA_CLOCK;
// Control Signal
input iCLK;
input iRST_N;
// Internal Registers and Wires
reg [9:0] H_Cont;
reg [9:0] V_Cont;
reg [9:0] Cur_Color_R;
reg [9:0] Cur_Color_G;
reg [9:0] Cur_Color_B;连衣裙的英语
wire mCursor_EN;
wire mRed_EN;
wire mGreen_EN;
wire mBlue_EN;
assign oVGA_BLANK = oVGA_H_SYNC & oVGA_V_SYNC;
assign oVGA_SYNC = 1'b0;
assign oVGA_CLOCK = iCLK;
assign oVGA_R = ( H_Cont>=X_START && H_Cont<X_START+H_SYNC_ACT &&
fundraising V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT )
? iRed : 0;
assign oVGA_G = ( H_Cont>=X_START && H_Cont<X_START+H_SYNC_ACT &&
V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT )
? iGreen : 0;
assign oVGA_B = ( H_Cont>=X_START && H_Cont<X_START+H_SYNC_ACT &&
V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT )
? iBlue : 0;
// Pixel LUT Address Generator
always@(podge iCLK or negedge iRST_N)
begin
if(!iRST_N)
oRequest <= 0;
el
begin
if( H_Cont>=X_START-2 && H_Cont<X_START+H_SYNC_ACT-2 &&
V_Cont>=Y_START && V_Cont<Y_START+V_SYNC_ACT )
oRequest <= 1;
el
oRequest <= 0;
end
end
// H_Sync Generator, Ref. 25.175 MHz Clock
always@(podge iCLK or negedge iRST_N)
begin关键绩效指标
if(!iRST_N)
begin
H_Cont <= 0;
oVGA_H_SYNC <= 0;
end
el
begin
// H_Sync Counter
学韩语的地方 if( H_Cont < H_SYNC_TOTAL )
H_Cont <= H_Cont+1;
el
H_Cont <= 0;
// H_Sync Generator
if( H_Cont < H_SYNC_CYC )
oVGA_H_SYNC <= 0;
el
oVGA_H_SYNC <= 1;
end
end
// V_Sync Generator, Ref. H_Sync
always@(podge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
V_Cont <= 0;
oVGA_V_SYNC <= 0;
end
el
begin
// When H_Sync Re-start
小站教育 if(H_Cont==0)
begin
// V_Sync Counter
if( V_Cont < V_SYNC_TOTAL )
V_Cont <= V_Cont+1;
el
V_Cont <= 0;
// V_Sync Generator
if( V_Cont < V_SYNC_CYC )
oVGA_V_SYNC <= 0;
el
oVGA_V_SYNC <= 1;
end
end
end
endmodule
显示器因为其输出信息量大,输出形式多样等特点已经成为现在大多数设计的常用输出设备。在 FPGA 的设计中可以使用很少的资源,就产生 VGA 各种控制信号。这个示例在 RHicSP2200B FPGA 开发板/学习板上使用 VGA 接口在显示器上显示了文字以及简单的图形,可以作为VGA 显示设计的参考.
显示器术语
像素与分辨率
显示器的显示方式有两种 : A/N(Alphabet/Number:字符/数字)显示方式 和 APA(All Point Addressable:全点寻址)
显示方式,即文本显示方式和图形显示方 式。A/N 方式已淘汰不用,目前微机都采用 APA 图形方式。
显示器上输出的一切信息,包括数值、文字、表格、图象、动画等等,都是由光点(即像素)构成的。组成屏幕显示画面的最小单位是像素,像素之间的最小距离为点距(Pitch)。点距越小像素密度越大,画面越 清晰。显示器的点距有 0.31mm、0.28mm、0.24mm、0.22mm 等多种。
aeis考试分辨率指整屏显示的像素的多少,是衡量显示器的一个常用指标。这同屏幕尺寸及点距密切相关,可用屏幕实际显示的尺寸与 点距相除来近似求得。点距为 0.28mm 的 15 英寸显示器,分辨率最高为 1024×768。
显示器尺寸
显示器屏幕尺寸以对角线来度量,常用的显示器有 14、15、17、19、21 英寸等。 显示器水平方向长度与垂直方向高度之比 一般为 4:3。
扫描频率
显示器采用光栅扫描方式,即轰击荧光屏的电子束在 CRT 屏幕上从左到右(受水 平同步信号 HSYNC 控制)、从上到下(受垂直同步信号 VSYNC 控制)做有规律的移动。光栅扫描又分逐行扫描和隔行扫描。电子束采用光栅扫描方式,从屏幕左上角一点开始,向右逐点进行扫描,形成一条水平线;到达最右端后,又回到下一条水平线的左端,重复上面的过程;当电子束完成右下角一点的扫描后,形成一帧。此后,电子束又回到左上方起点,开始下一帧的扫描。这种方法也就是常说的逐行扫描显示。rcs
而隔行扫描指电子束在扫描时每隔一 行扫一线,完成一屏后再返回来扫描剩下的 线,
这与电视机的原理一样。隔行扫描的显示器比逐行扫描闪烁得更厉害,也会让使用者的眼睛更疲劳。目前微机所用显示器几乎都是逐行扫描。
n2报名 完成一行扫描所需时间称为水平扫描时间,其倒数称为行频率;完成一帧(整屏)扫描所需的时间称为垂直扫描时间,其倒数为垂直扫描频率,又称刷新频率,即刷新一屏的频率。常见的有 60Hz、75Hz 等,标准 VGA 显示的场频otherwi是什么意思60Hz,行频为31.5kHz。