tag 标签: vga256色

相关博文
  • 热度 7
    2013-9-3 09:57
    1215 次阅读|
    0 个评论
      module vga256(      clk_50,rst_n,  //系统控制     hsync,vsync,     vga_r,vga_g,vga_b  // VGA控制    ); input clk_50;  // 50MHz input rst_n;  //低电平复位   // FPGA与VGA接口信号 output hsync;  //行同步信号 output vsync;  //场同步信号 output vga_r; output vga_g; output vga_b; //=========================================================================== // PARAMETER declarations //=========================================================================== //    Horizontal    Parameter parameter    H_FRONT    =    152; parameter    H_SYNC     =    232; parameter    H_BACK     =    80; parameter    H_ACT      =    1440; parameter    H_VALID    =    H_FRONT+H_SYNC; parameter    H_TOTAL    =    H_FRONT+H_SYNC+H_BACK+H_ACT; //    Vertical      Parameter parameter    V_FRONT    =    3; parameter    V_SYNC     =    28; parameter    V_BACK     =    1; parameter    V_ACT      =    900; parameter    V_VALID    =    V_FRONT+V_SYNC; parameter    V_TOTAL    =    V_FRONT+V_SYNC+V_BACK+V_ACT; //=============================================================================== //=============================================================================== wire clk_106; pll_clk pll_clk_inst (    .inclk0 ( clk_50),  .c0 ( clk_106 )    ); assign clk = clk_106; //--------------------------------------------------  // 坐标计数 reg x_cnt;   //行坐标 reg y_cnt;   //列坐标 always @ (posedge clk or negedge rst_n)  if(!rst_n) x_cnt = 11'd0;  else if(x_cnt == H_TOTAL-1) x_cnt = 11'd0;  else cnt = x_cnt+1'b1; always @ (posedge clk or negedge rst_n)  if(!rst_n) y_cnt = 11'd0;  else if(y_cnt == V_TOTAL-1) y_cnt = 11'd0;  else if(x_cnt == H_TOTAL-1) y_cnt = y_cnt+1'b1; //-------------------------------------------------- // VGA场同步,行同步信号 reg hsync_r,vsync_r;  //同步信号   always @ (posedge clk or negedge rst_n)  if(!rst_n) hsync_r = 1'b1;          else if(x_cnt == 11'd0) hsync_r = 1'b0;  //产生hsync信号  else if(x_cnt == H_FRONT-1) hsync_r = 1'b1; always @ (posedge clk or negedge rst_n)  if(!rst_n) vsync_r = 1'b1;          else if(y_cnt == 11'd0) vsync_r = 1'b0;  //产生vsync信号  else if(y_cnt == V_FRONT-1) vsync_r = 1'b1; assign hsync = hsync_r; assign vsync = vsync_r; //-------------------------------------------------- //有效显示标志位产生 wire valid;              //有效显示区标志 assign valid = (x_cnt = H_VALID) (x_cnt = H_VALID+H_ACT)             (y_cnt = V_VALID) (y_cnt = V_VALID+V_ACT); //-------------------------------------------------- wire x_dis,y_dis;    //有效显示区坐标 assign x_dis = x_cnt-H_VALID; assign y_dis = y_cnt-V_VALID; //-------------------------------------------------- // VGA色彩信号产生 /*RGB = 000   黑色 RGB = 100 红色     = 001   蓝色   = 101 紫色     = 010    绿色   = 110 黄色     = 011    青色   = 111 白色  一共1440*900个像素点,需要显示256(2^8)种颜色; 那么每个颜色显示区域为90*56.25,就正好。*/  reg vga_rgb;  // VGA色彩显示寄存器 always @ (posedge clk)  if(!valid) vga_rgb = 8'd0;  else begin   case(x_dis)    10'd0: begin   //当x坐标回到0时,让显示色彩数据根据当前的y坐标值重新复位      if     (y_dis = 10'd0      y_dis 10'd56)    vga_rgb = 8'd0;//0000_0000      else if(y_dis = 10'd56     y_dis 10'd113)   vga_rgb = 8'd16;//0001_0000      else if(y_dis = 10'd113    y_dis 10'd169)   vga_rgb = 8'd32;//0010_0000      else if(y_dis = 10'd169    y_dis 10'd225)   vga_rgb = 8'd48;//0100_0000      else if(y_dis = 10'd225    y_dis 10'd281)   vga_rgb = 8'd64;//1000_0000      else if(y_dis = 10'd281    y_dis 10'd338)   vga_rgb = 8'd80;      else if(y_dis = 10'd338    y_dis 10'd394)   vga_rgb = 8'd96;      else if(y_dis = 10'd394    y_dis 10'd450)   vga_rgb = 8'd112;      else if(y_dis = 10'd450    y_dis 10'd506)   vga_rgb = 8'd128;      else if(y_dis = 10'd506    y_dis 10'd563)   vga_rgb = 8'd144;      else if(y_dis = 10'd563    y_dis 10'd619)   vga_rgb = 8'd160;      else if(y_dis = 10'd619    y_dis 10'd675)   vga_rgb = 8'd176;      else if(y_dis = 10'd675    y_dis 10'd731)   vga_rgb = 8'd192;      else if(y_dis = 10'd731    y_dis 10'd788)   vga_rgb = 8'd208;      else if(y_dis = 10'd788    y_dis 10'd844)   vga_rgb = 8'd224;      else                                              vga_rgb = 8'd240; //剩下的450-480为vga_rgb = 8'd240     end  10'd90,10'd180,10'd270,10'd360,10'd450,10'd540,10'd630,10'd720,10'd810,10'd900,  10'd990,10'd1080,10'd1170,10'd1260,10'd1350,10'd1440: vga_rgb = vga_rgb+1'b1;  //每40个横坐标像素点后显示色彩数据增1变化     default: ;   endcase  end   //r,g,b控制液晶屏颜色显示 assign vga_r = vga_rgb ; assign vga_g = vga_rgb ; assign vga_b = vga_rgb ;                                              endmodule