serena

VGA显示

0
阅读(3325)

本系统使用的是VGA为分辨率640×480,刷新率60Hz模式,象素时钟为27MHz模式。由3.3.2节可知,VGA水平时序中,每行包括800像素点,其中640点为有效显示区,160点为行消隐区。行消隐区包括:行同步信号HS每行有一个脉冲,该脉冲的低电平宽度为即96个脉冲,后沿45个脉冲,前沿13个脉冲。另外,有效时间包括的6个列过扫描边界列,在后沿和前沿中各加3个;VGA垂直时序中,每场有525行,其中480行为有效显示行,45行为场消隐区。场消隐区包括:场同步信号每场有一个脉冲,该脉冲的低电平宽度为2行,后沿30行,前沿9行;有效时间包括的4行过扫描边界行,后沿和前沿各加2行。

一、 时序设计部分

关键是产生行同步信号和场同步信号。OSC_27为27MHz的时钟,sync_en为VGA模块复位信号VGA同步信号根据图4.3时序,利用计数器设计产生。

//行同步信号

always@(posedge OSC_27 or negedge sync_en)//<<

begin

if(!sync_en)//<<

begin

Pre_HS<=0;

mACT_HS<=0;

H_Cont<=0;

oVGA_H_SYNC<=0;

oVGA_H_VAL<=0;

end

else

begin

Pre_HS<=mTD_HSx2;

if({Pre_HS,mTD_HSx2}==2'b10)

mACT_HS<=1;

if(mACT_HS)

begin

if( H_Cont < 852)

H_Cont<=H_Cont+1;

else

begin

H_Cont<=0;

mACT_HS<=0;

end

if( H_Cont < H_SYNC_CYC )

oVGA_H_SYNC<=0;

else

oVGA_H_SYNC<=1;

if( (H_Cont >= H_SYNC_CYC+H_SYNC_BACK)&&(H_Cont < H_SYNC_CYC+H_SYNC_BACK+H_SYNC_ACT))

oVGA_H_VAL <=1;

else

oVGA_H_VAL <=0;

end

else

begin

oVGA_H_SYNC<=0;

H_Cont<=0;

end

end

end

always@(posedge OSC_27 or negedge sync_en)//<<

begin

if(!sync_en)//

begin

Pre_VS<=1;

mACT_VS<=0;

V_Cont<=0;

oVGA_V_SYNC<=0;

oVGA_V_VAL<=0;

end

else

begin

Pre_VS<=TD_VS;

if({Pre_VS,TD_VS}==2'b01)

mACT_VS<=1;

if( (H_Cont==1) && mACT_VS)

begin

if( V_Cont < 524 )

V_Cont<=V_Cont+1;

else

V_Cont<=0;

if(V_Cont < V_SYNC_CYC )

oVGA_V_SYNC<=0;

else

oVGA_V_SYNC<=1;

if( (V_Cont>=V_SYNC_CYC+V_SYNC_BACK)&&(V_Cont< V_SYNC_CYC +V_SYNC_BACK+V_SYNC_ACT) )

oVGA_V_VAL <=1;

else

oVGA_V_VAL<=0;

end

end

end

assign VGA_HS=oVGA_H_SYNC;

assign VGA_VS=oVGA_V_SYNC;

assign VGA_SYNC=1'b1;

assign VGA_CLOCK=OSC_27;

二、 仿真结果:

在Quartus II中对VGA时序进行了仿真,仿真结果如图3.17所示。由图中的仿真结果我们可以看出,行同步信号和场同步信号符合时序要求。

vga仿真.png


(转自Altera FPGA小组,作者:youzizhile )

Baidu
map