您好,欢迎访问三七文档
VGA协议尚丽娜VGA(VideoGraphicsArray)是IBM于1987年提出的一个使用模拟信号的电脑显示标准。VGA一改以前显示卡采用的数字视频信号输出,而用模拟视频信号输出,VGA卡内的D/A转换器将数字信号转换为控制R、G、B三原色的模拟信号,使像素色彩变化非常平滑,更适合人的视觉感受VGA接口,也叫D.Sub接口,上面共有15针空,分成三排,每排五个,其中1、2、3脚为R、G、B,13、14脚为行、场同步,其他为地线根据分辨率不同VGA可分为VGA(640*480)、SVGA(800x600)、XGA(1024x768)等。VGA显示采用逐行扫描方式。扫描是从屏幕的左上方开始,从左到右,从上到下。每扫完一行,电子束回到左边下一行的开始位置。期间对电子束进行行消隐。并在每行结束时,用行同步信号对行进行同步,扫描完所有行后。再用场同步信号对场进行同步,并使电子束回到屏幕的左上方,同时对场进行消隐,并预备下一次扫描。确定VGA显示接口时序主要应考虑行同步信号(HSYNC)、场同步信号(VSYNC)、蓝基色(B)、红基色(R)、绿基色(G)这5个信号,如果能从FPGA中按其时的需要求准确发送这些信号到VGA接口。就可以实现对VGA的控制。产生行同步脉冲信号HSYNC的周期e=a+b+c+d。其中a为同步信号时间,b为行消隐后肩时间,c为数据有效时间,d为行消隐前肩。从图(b)可以看出,场同步时序与行同步时序类似。也是显示一屏数据的时序.这里以行为单位。场同步脉冲信号VSYNC的周期L=h+i+j+k.其中h为同步信号时间,i为场消隐后肩时间,j为数据有效时间,k为场消隐前肩时间。不同的分辨率下行同步和场同步信号的周期是不同的,时序上的时间也不一样以640×480且刷新频率为60Hz为例,显示器每秒扫描60场。VGA在实际工作时并不是每行扫描640个点,每场扫480行。实际是每行800个像素。每场525行。每行800个像素中包括行消隐前肩d(16个点)、行同步信号a(96个点)、行消隐后肩b(48个点)和有效点数c(640个)。每场525行中包括场消隐前肩k(10行)、场同步信号h(2行)、场消隐后肩i(33行)和有效行数j(480行)。所以,点像素的时钟频率为800×525×60=25.2MHz。VGA时序控制信号的产生包括行点计数器h_cnter、场行计数器、v_cnter、行同步状态机和场同步状态机。h_cnter是800进制计数器,v_cnter是525进制计数器。行同步状态机有a(行同步)状态、b(行消隐后肩)状态、c(数据有效)状态和d(行消隐前肩)状态,4种状态可根据h-cnter的值进行状态翻转。场同步状态包括h(场同步)状态、i(场消隐后肩)状态、j(数据有效)状态和k(场消隐前肩)状态,4种状态也可根据v_cnter的值进行状态转换。当状态机上电复位后.行状态机进入a状态,此时HSYNC输出为低。行计数器h-cnter开始对25MHz的点时钟计数,当计数到95时,转移到b状态,而当计数到143时,从b状态转移到c状态,当计数到783时,从c状态转移到d状态。在b、c、d三状态时,HYNC输出为高。当状态机上电复位后。场同步状态机进入h状态,每当行计数器h_cnter=799时场行计数器v_cnter加1,当、v_cnter=l时,状态机从h状态转移到i状态,当v_cnter=34时,状态机转移到i状态,当v_nter=514时,状态机转移到k状态,当v_nter=524时,状态机转移到h状态。此时场同步信号VSYNCS输出为低。其他状态输出为高。只有当行同步状态机在c状态且场同步状态机在i状态时,才能向RGB输入数据。modulevga_time_generator(inputpixel_clk,input[11:0]h_disp,//640input[11:0]h_fporch,//16input[11:0]h_sync,//96input[11:0]h_bporch,//48input[11:0]v_disp,//480input[11:0]v_fporch,//10input[11:0]v_sync,//2input[11:0]v_bporch,//33outputvga_hs,outputvga_vs,outputvga_blank,outputreg[11:0]CounterY,outputreg[11:0]CounterXwire[11:0]h_total;assignh_total=h_disp+h_fporch+h_sync+h_bporch;reg[11:0]h_counter;regVGA_HS_o;regVGA_BLANK_HS_o;always@(posedgepixel_clk)beginif(h_counter(h_total-1))h_counter=h_counter+1;elseh_counter=0;endalways@(posedgepixel_clk)begincase(h_counter)0:{VGA_BLANK_HS_o,VGA_HS_o}=2'b01;h_fporch:{VGA_BLANK_HS_o,VGA_HS_o}=2'b00;h_fporch+h_sync:{VGA_BLANK_HS_o,VGA_HS_o}=2'b01;h_fporch+h_sync+h_bporch:{VGA_BLANK_HS_o,VGA_HS_o}=2'b11;endcaseendwire[11:0]v_total;assignv_total=v_disp+v_fporch+v_sync+v_bporch;//vcountergenreg[11:0]v_counter;regVGA_VS_o;regVGA_BLANK_VS_o;always@(posedgevga_hs)beginif(v_counter(v_total-1))v_counter=v_counter+1;//805elsev_counter=0;endalways@(posedgevga_hs)begincase(v_counter)0:{VGA_BLANK_VS_o,VGA_VS_o}=2'b01;v_fporch:{VGA_BLANK_VS_o,VGA_VS_o}=2'b00;v_fporch+v_sync:{VGA_BLANK_VS_o,VGA_VS_o}=2'b01;v_fporch+v_sync+v_bporch:{VGA_BLANK_VS_o,VGA_VS_o}=2'b11;endcaseendassignvga_hs=VGA_HS_o;assignvga_vs=VGA_VS_o;assignvga_blank=VGA_BLANK_VS_o&VGA_BLANK_HS_o;always@(posedgepixel_clk)beginif(!VGA_BLANK_HS_o)CounterX=0;elseCounterX=CounterX+1;endalways@(posedgevga_hs)beginif(!VGA_BLANK_VS_o)CounterY=0;elseCounterY=CounterY+1;endendmodule
本文标题:VGA时序
链接地址:https://www.777doc.com/doc-5327080 .html