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和分辨率之间的计算
posted @ 2009-09-30 15:21  gmh  阅读(5413)  评论(0编辑  收藏  举报