a

// ********************************************************************* //
// Filename: vga_controller.v                                            //
// Projects: vga generator pattern                                       //
//           without  external clock                                     //
// Function:                                       //
//                                              //           
// Author  : Leo                                            //
// Date    : 2011-12-30                                                  //
// Version : 1.0                                                         //
// Company :                                                             //
// ********************************************************************* //

module vga_controller(
// input
input vga_clk,rst_n,
input i_RGB_EN,iRed,iGreen,iBlue,
// output
output reg vga_hs,vga_vs,vga_blank_n,vga_r,vga_b,vga_g
);

/***************************parameter define****************************/
`define VGA_640_480_60FPS_25MHz
//`define VGA_800_600_60FPS_50MHz
//`define VGA_1024_768_60FPS_65MHz

`ifdef VGA_640_480_60FPS_25MHz
// Horizontal & Vertical parameter
parameter H_SYNC = 96;
parameter H_BACK = 48;
parameter H_ACT  = 640;
parameter H_FRONT = 16;
parameter H_TOTAL = 800;
parameter V_SYNC = 2;
parameter V_BACK =48;
parameter V_ACT = 480;
parameter V_FRONT = 10;
parameter V_TOTAL = 525;
// Start Offset
parameter X_Start = H_SYNC+H_BACK;
parameter Y_Start = V_SYNC+V_BACK;
`endif

`ifdef VGA_800_600_60FPS_25MHz
//Horizontal & Vertical Parameter
parameter H_SYNC = 120;
parameter H_BACK = 64;
parameter H_ACT  = 800;
parameter H_FRONT= 56;
parameter H_TOTAL= 1040;
parameter V_SYNC = 6;
parameter V_BACK = 23;
parameter V_ACT  = 600;
parameter V_FRONT= 37;
parameter V_TOTAL= 666; 
//Start Offset
parameter X_Start=H_SYNC+H_BACK+H_FRONT;
parameter Y_Start= V_SYNC+V_BACK+V_FRONT;
`endif
 
`ifdef VGA_1024_768_60FPS_65MHz
//Horizontal & Vertical Parameter
parameter H_SYNC = 136;
parameter H_BACK = 160;
parameter H_ACT  = 1024;
parameter H_FRONT= 24;
parameter H_TOTAL= 1344;
parameter V_SYNC = 6;
parameter V_BACK = 29;
parameter V_ACT  = 768;
parameter V_FRONT= 3;
parameter V_TOTAL= 806; 
//Start Offset
parameter X_Start=H_SYNC+H_BACK+H_FRONT;
parameter Y_Start= V_SYNC+V_BACK+V_FRONT;
`endif
/*****************************video_sync_generator***************************/
reg[10:0] h_cnt;
reg[10:0] v_cnt;
always@(posedge vga_clk or negedge rst_n)
 begin
  if(!rst_n)
   begin
    h_cnt <= 11'd0;
    v_cnt <= 11'd0;
   end
  else
   begin
    if(h_cnt==H_TOTAL-1)
     begin
      h_cnt <= 11'd0;
      if(v_cnt==V_TOTAL-1)
       v_cnt <= 11'd0;
      else
       v_cnt <= v_cnt+11'd1;
     end
    else
     h_cnt <= h_cnt+11'd1;
   end
 end
 
wire cHD,cVD,hori_valid,vert_valid,cDEN;
assign cHD = (h_cnt<H_SYNC)?1'b0:1'b1;
assign cVD = (v_cnt<V_SYNC)?1'b0:1'b1;
assign hori_valid = (h_cnt<(H_TOTAL-H_FRONT)&& h_cnt>=H_BACK)?1'b1:1'b0;
assign vert_valid = (v_cnt<(V_TOTAL-V_FRONT)&& v_cnt>=V_BACK)?1'b1:1'b0;
assign cDEN = hori_valid && vert_valid;

always@(negedge vga_clk)
 begin
  vga_hs <= cHD;
  vga_vs <= cVD;
  vga_blank_n <= cDEN;
 end
 
/*************************video_disp_generator******************************/
reg[10:0] vga_xpos;
reg[10:0] vga_ypos;
reg valid;
wire[21:0] vga_result = vga_xpos*vga_ypos;
always@(posedge vga_clk or negedge rst_n)
 begin
  if(!rst_n)
   begin
    vga_r <= 0;
    vga_g <= 0;
    vga_b <= 0;
   end
  else if(valid)
   {vga_r,vga_g,vga_b} <= vga_result;
  else
   {vga_r,vga_g,vga_b} <= 24'h000000;
 end

endmodule
 

posted on 2011-12-30 16:28  LiangXuan  阅读(308)  评论(0编辑  收藏  举报

导航