serena

VGA显示

0
阅读(515) 评论(0)

本系统使用的是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 )