1. VGA概述

VGA(Video Graphics Array)是IBM在1987年推出的一种视频传输,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。不支持热插拔,不支持音频传输。


2. VGA时序

下面以640*480@60Hz为例说明VGA时序和FPGA设计,其他分辨率和帧率的可参考VESA中查找。

计算像素时钟pclk = 800*525*60 =25200000,注意这里的HSYNC和VSYNC都是低电平有效,且HSYNC在数据行无效区域也要提供。


3. VGA电路图

电路以ADV7123为例:


4. FPGA逻辑代码

//------------VideoTest---------------parameterIMG_HDISP=16'd640;parameterIMG_VDISP=16'd480;wirepclk;assignpclk=clk_25m;//VIDEOinputreg[15:0]vcnt;reg[11:0]hcnt;regvsync;reghsync;reg[7:0]data;regdata_valid;always@(posedgepclk)if(hcnt>=(IMG_HDISP+159))hcnt<=0;elsehcnt<=hcnt+1'b1;always@(posedgepclk)if(hcnt>=(IMG_HDISP+159))if(vcnt>=(IMG_VDISP+44))vcnt<=0;elsevcnt<=vcnt+1'b1;elsevcnt<=vcnt;always@(posedgepclk)if((hcnt>=IMG_HDISP+16)&(hcnt<(IMG_HDISP+96)))//&(vcnt>=0)&(vcnt<(IMG_VDISP)))hsync<=1'b1;elsehsync<=1'b0;always@(posedgepclk)if(vcnt>=(IMG_VDISP+9)&vcnt<(IMG_VDISP+11))vsync<=1'b1;elsevsync<=1'b0;always@(posedgepclk)if((hcnt>=0)&(hcnt<(IMG_HDISP))&(vcnt>=0)&(vcnt<(IMG_VDISP)))data_valid<=1'b1;elsedata_valid<=1'b0;always@(posedgepclk)if(vsync)data<=0;elseif((hcnt>=0)&(hcnt<(IMG_HDISP))&(vcnt>=0)&(vcnt<(IMG_VDISP/4)))//data<=data+1'b1;if(hcnt>=0&hcnt<(IMG_HDISP/4))data<=8'h00;elseif(hcnt>=(IMG_HDISP/4)&hcnt<(2*IMG_HDISP/4))data<=8'hff;elseif(hcnt>=(2*IMG_HDISP/4)&hcnt<(3*IMG_HDISP/4))data<=8'h00;elsedata<=8'hff;elseif((hcnt>=0)&(hcnt<(IMG_HDISP))&(vcnt>=(IMG_VDISP/4))&(vcnt<(2*IMG_VDISP/4)))if(hcnt>=0&hcnt<(IMG_HDISP/4))data<=8'hff;elseif(hcnt>=(IMG_HDISP/4)&hcnt<(2*IMG_HDISP/4))data<=8'h00;elseif(hcnt>=(2*IMG_HDISP/4)&hcnt<(3*IMG_HDISP/4))data<=8'hff;elsedata<=8'h00;//data<=data+1'b1;elseif((hcnt>=0)&(hcnt<(IMG_HDISP))&(vcnt>=(2*IMG_VDISP/4))&(vcnt<(3*IMG_VDISP/4)))if(hcnt>=0&hcnt<(IMG_HDISP/4))data<=8'h00;elseif(hcnt>=(IMG_HDISP/4)&hcnt<(2*IMG_HDISP/4))data<=8'hff;elseif(hcnt>=(2*IMG_HDISP/4)&hcnt<(3*IMG_HDISP/4))data<=8'h00;elsedata<=8'hff;//data<=data+1'b1;elseif((hcnt>=0)&(hcnt<(IMG_HDISP))&(vcnt>=(3*IMG_VDISP/4))&(vcnt<(IMG_VDISP)))//data<=data+1'b1;if(hcnt>=0&hcnt<(IMG_HDISP/4))data<=8'hff;elseif(hcnt>=(IMG_HDISP/4)&hcnt<(2*IMG_HDISP/4))data<=8'h00;elseif(hcnt>=(2*IMG_HDISP/4)&hcnt<(3*IMG_HDISP/4))data<=8'hff;elsedata<=8'h00;elsedata<=0;assignlcd_vs=~vsync;assignlcd_hs=~hsync;assignvga_red=data;assignvga_green=data;assignvga_blue=data;assignlcd_dclk=clk_25m;assignlcd_blank=1'b1;assignlcd_sync=1'b0;wire[7:0]vga_red;wire[7:0]vga_green;wire[7:0]vga_blue;assignlcd_red[9:2]=vga_red;assignlcd_green[9:2]=vga_green;assignlcd_blue[9:2]=vga_blue;


5.演示结果

下图为方格显示效果: