VGA显示
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所示。由图中的仿真结果我们可以看出,行同步信号和场同步信号符合时序要求。
(转自Altera FPGA小组,作者:youzizhile )