原创 VGA接口的实现

2009-4-8 20:50 2676 9 10 分类: FPGA/CPLD

最近在做一些关于vga接口的显示控制,其中的的主要的器件是基于DE2的Vga的显示控制,参照了一些前辈的程序,自己总算有所心得,特贴出共享之,望大家积极的提出宝贵的意见。其中的输入时钟是50Mhz,而处理的的分辨率是640*480.


module vga( 
      
      VGA_R,
      VGA_G,
      VGA_B,
      VGA_H_SYNC,
      VGA_V_SYNC,
      VGA_SYNC,
      VGA_BLANK,
      CCD_MCLK,
      
      iCLK,
      
      iRST_N );


parameter H_SYNC_CYC = 96;
parameter H_SYNC_BACK = 45+3;
parameter H_SYNC_ACT = 640; // 646
parameter H_SYNC_FRONT= 13+3;
parameter H_SYNC_TOTAL= 800;
// Virtical Parameter  ( Line )
parameter V_SYNC_CYC = 2;
parameter V_SYNC_BACK = 30+2;
parameter V_SYNC_ACT = 480; // 484
parameter V_SYNC_FRONT= 9+2;
parameter V_SYNC_TOTAL= 525;
// Start Offset
parameter X_START  = H_SYNC_CYC+H_SYNC_BACK;
parameter Y_START  = V_SYNC_CYC+V_SYNC_BACK;


 


 


output  [9:0] VGA_R;
output  [9:0] VGA_G;
output  [9:0] VGA_B;
output reg   VGA_H_SYNC;
output reg   VGA_V_SYNC;
output    VGA_SYNC;
output    VGA_BLANK;
output reg CCD_MCLK;


input    iCLK;
input    iRST_N;



reg  [9:0]  H_Cont;
reg  [9:0]  V_Cont;



always @(posedge iCLK)
     begin
         CCD_MCLK <= ~CCD_MCLK; 
      end


assign VGA_BLANK = VGA_H_SYNC & VGA_V_SYNC;
assign VGA_SYNC = 1'b0;


wire [9:0] OVGA_R,OVGA_G,OVGA_B;
assign OVGA_R = 10'b0000011111;
assign OVGA_B = 10'b0000110110;
assign OVGA_G = 10'b0001100001;


      
assign VGA_R = ( H_Cont>=X_START  && H_Cont<X_START+H_SYNC_ACT  &&
            V_Cont>=Y_START  && V_Cont<Y_START+V_SYNC_ACT ) 
      ? OVGA_R : 0;
assign VGA_G = (  H_Cont>=X_START  && H_Cont<X_START+H_SYNC_ACT  &&
            V_Cont>=Y_START  && V_Cont<Y_START+V_SYNC_ACT  )
      ? OVGA_G : 0;
assign VGA_B = (  H_Cont>=X_START  && H_Cont<X_START+H_SYNC_ACT  &&
            V_Cont>=Y_START  && V_Cont<Y_START+V_SYNC_ACT  )


 



always@(posedge iCLK or negedge iRST_N)
begin
 if(!iRST_N)
 begin
  H_Cont  <= 0;
  VGA_H_SYNC <= 0;
 end
 else
 begin
  
  if( H_Cont < H_SYNC_TOTAL )
  H_Cont <= H_Cont+1;
  else
  H_Cont <= 0;
  
  if( H_Cont < H_SYNC_CYC ) 
  VGA_H_SYNC <= 0;
   else
  VGA_H_SYNC <= 1;
 end
end



always@(posedge iCLK or negedge iRST_N)
begin
 if(!iRST_N)
 begin
  V_Cont  <= 0;
  VGA_V_SYNC <= 0;
 end
 else
 begin
  
  if(H_Cont==0)
  begin
   
   if( V_Cont < V_SYNC_TOTAL )
   V_Cont <= V_Cont+1;
   else
    V_Cont <= 0;
   
   if( V_Cont < V_SYNC_CYC )
   VGA_V_SYNC <= 0;
   else
   VGA_V_SYNC <= 1;
  end
 end
end


endmodule

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1532875 2009-4-11 18:38

如果有个图就跟好了。

用户92088 2009-3-5 17:17

有很大的启发!!!!
相关推荐阅读
用户174501 2012-05-17 19:44
视频揭秘
讲述电视视频原理,是学习电视视频的好帮手...
EE直播间
更多
我要评论
1
9
关闭 站长推荐上一条 /3 下一条