本次學習主要向配合basys2實行。學習
上次學習vga的rgb三個output都是1位的,可是我看了basys2的rgb分別是332位,這裏讓我卡頓了好久,原理
以後經過查資料才知道,rgb的不一樣大小表示的只是不一樣的顏色。sed
vga256其實 vga的基本工做原理都是相同的,這裏只是將332通道的rgb表示出來,因此本次代碼中單寫332通道的rgbd3
reg [7:0]vga_rgb;
always@(posedge clk_25)
begin
if(!valid)
vga_rgb <= 8'd0;
else
begin
case(x_dis)
10'd0:
begin
if(y_dis >= 10'd0 && y_dis < 10'd30)
vga_rgb <= 8'd0;
else if(y_dis >= 10'd30 && y_dis < 10'd60)
vga_rgb <= 8'd16;
else if(y_dis >= 10'd60 && y_dis < 10'd90)
vga_rgb <= 8'd32;
else if(y_dis >= 10'd90 && y_dis < 10'd120)
vga_rgb <= 8'd48;
else if(y_dis >= 10'd120 && y_dis < 10'd150)
vga_rgb <= 8'd64;
else if(y_dis >= 10'd150 && y_dis < 10'd180)
vga_rgb <= 8'd80;
else if(y_dis >= 10'd180 && y_dis < 10'd210)
vga_rgb <= 8'd96;
else if(y_dis >= 10'd210 && y_dis < 10'd240)
vga_rgb <= 8'd112;
else if(y_dis >= 10'd240 && y_dis < 10'd270)
vga_rgb <= 8'd128;
else if(y_dis >= 10'd270 && y_dis < 10'd300)
vga_rgb <= 8'd144;
else if(y_dis >= 10'd300 && y_dis < 10'd330)
vga_rgb <= 8'd160;
else if(y_dis >= 10'd330 && y_dis < 10'd360)
vga_rgb <= 8'd176;
else if(y_dis >= 10'd360 && y_dis < 10'd390)
vga_rgb <= 8'd192;
else if(y_dis >= 10'd390 && y_dis < 10'd420)
vga_rgb <= 8'd208;
else if(y_dis >= 10'd420 && y_dis < 10'd450)
vga_rgb <= 8'd224;
else
vga_rgb <= 8'd240;
end
10'd40,10'd80,10'd120,
10'd160,10'd200,10'd240,
10'd280,10'd320,10'd360,
10'd400,10'd440,10'd480,
10'd520,10'd560,10'd600,10'd640:
vga_rgb <= vga_rgb + 1'b1;
default: ;
endcase
end
enddi
assign vga_r = vga_rgb[7:5];
assign vga_g = vga_rgb[4:2];
assign vga_b = vga_rgb[1:0];360
這裏主要寫了將640x480的分辨率,分紅256個小格,分別顯示不一樣的顏色cas
主要代碼:10'd40,10'd80,10'd120,
10'd160,10'd200,10'd240,
10'd280,10'd320,10'd360,
10'd400,10'd440,10'd480,
10'd520,10'd560,10'd600,10'd640:
vga_rgb <= vga_rgb + 1'b1;工作
這裏能夠理解,每當它所顯示的小格的位置發生變化時,rgb+1,則它的顏色就會發生變化。d3