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