那些城市那些花

导航

VGAcolorbar

  1 module VGAcolorbar(clk,rst,hsync,vsync,vga_r,vga_g,vga_b );
  2     input  clk;
  3     input  rst;
  4     output hsync;
  5     output vsync;
  6     output [2:0] vga_r;
  7     output [2:0] vga_g;
  8     output [1:0] vga_b;
  9 
 10     reg clk2;
 11     reg [9:0] x_cnt;//行坐标
 12     reg [9:0] y_cnt;//列坐标
 13 
 14     initial begin
 15         clk2 = 0;
 16     end
 17     
 18     always @(posedge clk) clk2 <= ~clk2; //2分频,输入时钟25M
 19     
 20     always @(posedge clk2 or negedge rst) //列扫描
 21         if(!rst)
 22             x_cnt <= 10'd0;
 23         else if(x_cnt == 10'd799)
 24             x_cnt <= 10'd0;
 25         else
 26             x_cnt <= x_cnt+1'b1;
 27 
 28     always @(posedge clk2 or negedge rst) //行扫描
 29         if(!rst)
 30             y_cnt <= 10'd0;
 31         else if(y_cnt == 10'd524) //扫描到524行
 32             y_cnt <= 10'd0;
 33         else if(x_cnt == 10'd799)
 34             y_cnt <= y_cnt+1'b1;
 35 
 36     reg hsync_r,vsync_r;//行,场同步信号
 37    
 38     always @(posedge clk2 or negedge rst)
 39         if(!rst)
 40             hsync_r <= 1'b1;
 41         else if(x_cnt == 10'd0)
 42             hsync_r <= 1'b0;
 43         else if(x_cnt == 10'd96)
 44             hsync_r <= 1'b1;
 45     
 46     always @(posedge clk2 or negedge rst)
 47         if(!rst)
 48             vsync_r <= 1'b1;
 49         else if(y_cnt == 10'd0)
 50             vsync_r <= 1'b0;
 51         else if(y_cnt == 10'd2)
 52             vsync_r <= 1'b1;
 53     
 54     assign hsync = hsync_r;
 55     assign vsync = vsync_r;
 56     reg valid_yr;//有效标志位
 57     
 58     always @(posedge clk2 or negedge rst)
 59         if(!rst)
 60             valid_yr <=1'b0;
 61         else if(y_cnt == 10'd32)
 62             valid_yr <= 1'b1; //32-512之间显示
 63         else if(y_cnt == 10'd512)
 64             valid_yr <= 1'b0;
 65     
 66     wire valid_y = valid_yr;
 67     reg valid_r;//有效显示标志区
 68     
 69     always @(posedge clk2 or negedge rst)
 70         if(!rst)
 71             valid_r <= 1'b0;
 72         else if((x_cnt == 10'd141) && valid_y)
 73             valid_r <= 1'b1;
 74         else if((x_cnt == 10'd781) && valid_y)
 75             valid_r <= 1'b0;
 76     
 77     wire valid = valid_r;
 78     wire [9:0] x_dis;//横坐标显示有效区域相对坐标0-639
 79     wire [9:0] y_dis;//纵坐标显示有效区域相对坐标0-479
 80     
 81     assign x_dis = x_cnt - 10'd142;
 82     assign y_dis = y_cnt - 10'd33;
 83     //VGA色彩信号
 84     reg [7:0] vga_rgb;
 85     
 86     always @(posedge clk2)
 87         if(!valid) 
 88             vga_rgb<=8'd0;
 89         else begin
 90             case(x_dis)
 91                 10'd0:begin
 92                     if(y_dis >= 10'd0 && y_dis < 10'd30) vga_rgb <=8'd0; 
 93                     else if(y_dis >= 10'd30 && y_dis < 10'd60) vga_rgb <=8'd16;
 94                     else if(y_dis >= 10'd60 && y_dis < 10'd90) vga_rgb <=8'd32;
 95                     else if(y_dis >= 10'd90 && y_dis < 10'd120) vga_rgb <=8'd48;
 96                     else if(y_dis >= 10'd120 && y_dis < 10'd150) vga_rgb <=8'd64;
 97                     else if(y_dis >= 10'd150 && y_dis < 10'd180) vga_rgb <=8'd80;
 98                     else if(y_dis >= 10'd180 && y_dis < 10'd210) vga_rgb <=8'd96;
 99                     else if(y_dis >= 10'd210 && y_dis < 10'd240) vga_rgb <=8'd112;
100                     else if(y_dis >= 10'd240 && y_dis < 10'd270) vga_rgb <=8'd128;
101                     else if(y_dis >= 10'd270 && y_dis < 10'd300) vga_rgb <=8'd144;
102                     else if(y_dis >= 10'd300 && y_dis < 10'd330) vga_rgb <=8'd160;
103                     else if(y_dis >= 10'd330 && y_dis < 10'd360) vga_rgb <=8'd176;
104                     else if(y_dis >= 10'd360 && y_dis < 10'd390) vga_rgb <=8'd192;
105                     else if(y_dis >= 10'd390 && y_dis < 10'd420) vga_rgb <=8'd208;
106                     else if(y_dis >= 10'd420 && y_dis < 10'd450) vga_rgb <=8'd224;
107                     else vga_rgb <= 8'd240; 
108                 end
109                 10'd40,10'd80,10'd120,10'd160,10'd200,10'd240,10'd280,10'd320,10'd360,
110                 10'd400,10'd440,10'd480,10'd520,10'd560,10'd600:vga_rgb <= vga_rgb+1'b1; 
111                 default: ;
112             endcase
113         end
114 
115     assign vga_r = vga_rgb[7:5];
116     assign vga_g = vga_rgb[4:2];
117     assign vga_b = vga_rgb[1:0];
118 endmodule

 

posted on 2016-08-11 12:08  那些城市那些花  阅读(84)  评论(0)    收藏  举报