VGA_HS,VS,DOTCLOCK和分辨率之间的计算
//假如所要求显示的参数为1280*1024@60hz,则需要HS=64KHZ,VS=60HZ,PCLK=108MHZ
// H_Sync Generator, Ref. 64KHz Clock
always@(posedge iCLK or negedge iRST_N)
begin
//iCLK是由外部vga_pll输出点时钟108M提供
if(!iRST_N)
begin
H_Cont <= 0;
mVGA_H_SYNC <= 0;
end
else
begin
//计算一下:点时钟=108M,则每个时钟的周期为9.25*10(-3)us,所以1688个方波时钟
//=15.6us,换算成频率=64K,该方波脉宽比=112:1566=1:14
// H_Sync Counter
if( H_Cont < H_SYNC_TOTAL )
H_Cont <= H_Cont+1;
else
H_Cont <= 0;
// H_Sync Generator
if( H_Cont < H_SYNC_CYC )
mVGA_H_SYNC <= 0;//一开始为0
else
mVGA_H_SYNC <= 1;//后面一直高,计算时,一定要先转成周期
end
end
// V_Sync Generator, Ref. H_Sync
always@(posedge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
V_Cont <= 0;
mVGA_V_SYNC <= 0;
end
else
begin
// When H_Sync Re-start
if(H_Cont==0)
//每扫描完一行,场才进行计数,相当于基于行频的时钟,即这里的基准时钟为64k
//同样可以计算出V_hync频率=60hz
begin
// V_Sync Counter
if( V_Cont < V_SYNC_TOTAL )
V_Cont <= V_Cont+1;
else
V_Cont <= 0;
// V_Sync Generator
if( V_Cont < V_SYNC_CYC )
mVGA_V_SYNC <= 0;
else
mVGA_V_SYNC <= 1;
end
end
end
//.h文件如下:这里的112,248,48等参数详见VGA时序参数表
// Horizontal Parameter ( Pixel )
parameter H_SYNC_CYC = 112;
parameter H_SYNC_BACK = 248;
parameter H_SYNC_ACT = 1280;
parameter H_SYNC_FRONT= 48;
parameter H_SYNC_TOTAL= 1688;
// Virtical Parameter ( Line )
parameter V_SYNC_CYC = 3;
parameter V_SYNC_BACK = 38;
parameter V_SYNC_ACT = 1024;
parameter V_SYNC_FRONT= 1;
parameter V_SYNC_TOTAL= 1066;
VGA_HS,VS,DOTCLOCK和分辨率之间的计算